Rule character() { return FirstOf( CharRange('a', 'z'), CharRange('A', 'Z') ); }
Rule character() { return FirstOf( CharRange('a', 'z'), CharRange('A', 'Z') ); }
Rule letter() { // switch to this "reduced" character space version for a ~10% parser performance speedup return FirstOf(CharRange('a', 'z'), CharRange('A', 'Z'), '_', '$'); }
Rule letter() { // switch to this "reduced" character space version for a ~10% parser performance speedup return FirstOf(CharRange('a', 'z'), CharRange('A', 'Z'), '_', '$'); }
Rule hexDigit() { return FirstOf(CharRange('a', 'f'), CharRange('A', 'F'), CharRange('0', '9')); }
Rule hexDigit() { return FirstOf(CharRange('a', 'f'), CharRange('A', 'F'), CharRange('0', '9')); }
@MemoMismatches Rule letterOrDigit() { return FirstOf(CharRange('a', 'z'), CharRange('A', 'Z'), CharRange('0', '9'), '_', '$'); }
Rule escape() { return Sequence('\\', FirstOf(AnyOf("btnfr\"\'\\"), octalEscape(), unicodeEscape())); }
@MemoMismatches Rule letterOrDigit() { return FirstOf(CharRange('a', 'z'), CharRange('A', 'Z'), CharRange('0', '9'), '_', '$'); }
Rule escape() { return Sequence('\\', FirstOf(AnyOf("btnfr\"\'\\"), octalEscape(), unicodeEscape())); }
@MemoMismatches public Rule anyKeyword() { return Sequence( FirstOf(JtwigKeyword.keywords()), TestNot(letterOrDigit()) ); }
@MemoMismatches public Rule anyKeyword() { return Sequence( FirstOf(JtwigKeyword.keywords()), TestNot(letterOrDigit()) ); }
Rule octalEscape() { return FirstOf( Sequence(CharRange('0', '3'), CharRange('0', '7'), CharRange('0', '7')), Sequence(CharRange('0', '7'), CharRange('0', '7')), CharRange('0', '7') ); }
Rule octalEscape() { return FirstOf( Sequence(CharRange('0', '3'), CharRange('0', '7'), CharRange('0', '7')), Sequence(CharRange('0', '7'), CharRange('0', '7')), CharRange('0', '7') ); }
@SuppressNode public Rule spacing () { return ZeroOrMore(FirstOf( // whitespace OneOrMore(AnyOf(" \t\r\n\f").label("Whitespace")), // traditional comment Sequence("{#", ZeroOrMore(TestNot("#}"), ANY), "#}").label("Comment") )); }
@SuppressNode public Rule spacing () { return ZeroOrMore(FirstOf( // whitespace OneOrMore(AnyOf(" \t\r\n\f").label("Whitespace")), // traditional comment Sequence("{#", ZeroOrMore(TestNot("#}"), ANY), "#}").label("Comment") )); }