--- /dev/null
+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: '..';