@SuppressNode @DontLabel Rule terminal(String string, Rule mustNotFollow) { return Sequence(string, TestNot(mustNotFollow)).label('\'' + string + '\''); }
@SuppressNode @DontLabel Rule terminal(String string, Rule mustNotFollow) { return Sequence(string, TestNot(mustNotFollow)).label('\'' + string + '\''); }
Rule escape() { return Sequence('\\', FirstOf(AnyOf("btnfr\"\'\\"), octalEscape(), unicodeEscape())); }
public Rule onlyOneChar() { return Sequence( symbol(QUOTE), character(), push(match()), symbol(QUOTE) ); }
Rule escape() { return Sequence('\\', FirstOf(AnyOf("btnfr\"\'\\"), octalEscape(), unicodeEscape())); }
public Rule identifier() { return Sequence( TestNot(anyKeyword()), letter(), ZeroOrMore(letterOrDigit()) ); }
@MemoMismatches public Rule anyKeyword() { return Sequence( FirstOf(JtwigKeyword.keywords()), TestNot(letterOrDigit()) ); }
public Rule onlyOneChar() { return Sequence( symbol(QUOTE), character(), push(match()), symbol(QUOTE) ); }
@MemoMismatches public Rule anyKeyword() { return Sequence( FirstOf(JtwigKeyword.keywords()), TestNot(letterOrDigit()) ); }
public Rule identifier() { return Sequence( TestNot(anyKeyword()), letter(), ZeroOrMore(letterOrDigit()) ); }
Rule unicodeEscape() { return Sequence(OneOrMore('u'), hexDigit(), hexDigit(), hexDigit(), hexDigit()); }
Rule unicodeEscape() { return Sequence(OneOrMore('u'), hexDigit(), hexDigit(), hexDigit(), hexDigit()); }
@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") )); }