lexer grammar TLexer; // These are all supported lexer sections: // Lexer file header. Appears at the top of h + cpp files. Use e.g. for copyrights. @lexer::header {/* lexer header section */} // Appears before any #include in h + cpp files. @lexer::preinclude {/* lexer precinclude section */} // Follows directly after the standard #includes in h + cpp files. @lexer::postinclude { /* lexer postinclude section */ #ifndef _WIN32 #pragma GCC diagnostic ignored "-Wunused-parameter" #endif } // Directly preceds the lexer class declaration in the h file (e.g. for additional types etc.). @lexer::context {/* lexer context section */} // Appears in the public part of the lexer in the h file. @lexer::members {/* public lexer declarations section */ bool canTestFoo() { return true; } bool isItFoo() { return true; } bool isItBar() { return true; } void myFooLexerAction() { /* do something*/ }; void myBarLexerAction() { /* do something*/ }; } // Appears in the private part of the lexer in the h file. @lexer::declarations {/* private lexer declarations/members section */} // Appears in line with the other class member definitions in the cpp file. @lexer::definitions {/* lexer definitions section */} channels { CommentsChannel, DirectiveChannel } tokens { DUMMY } Return: 'return'; Continue: 'continue'; INT: Digit+; Digit: [0-9]; ID: LETTER (LETTER | '0'..'9')*; fragment LETTER : [a-zA-Z\u0080-\u{10FFFF}]; LessThan: '<'; GreaterThan: '>'; Equal: '='; And: 'and'; Colon: ':'; Semicolon: ';'; Plus: '+'; Minus: '-'; Star: '*'; OpenPar: '('; ClosePar: ')'; OpenCurly: '{' -> pushMode(Mode1); CloseCurly: '}' -> popMode; QuestionMark: '?'; Comma: ',' -> skip; Dollar: '$' -> more, mode(Mode1); Ampersand: '&' -> type(DUMMY); String: '"' .*? '"'; Foo: {canTestFoo()}? 'foo' {isItFoo()}? { myFooLexerAction(); }; Bar: 'bar' {isItBar()}? { myBarLexerAction(); }; Any: Foo Dot Bar? DotDot Baz; Comment : '#' ~[\r\n]* '\r'? '\n' -> channel(CommentsChannel); WS: [ \t\r\n]+ -> channel(99); fragment Baz: 'Baz'; mode Mode1; Dot: '.'; mode Mode2; DotDot: '..';