| grammar t021hoist; |
| options { |
| language=Cpp; |
| } |
| |
| @lexer::includes |
| { |
| #include "UserTestTraits.hpp" |
| } |
| @lexer::namespace |
| { Antlr3Test } |
| |
| @parser::includes { |
| #include "UserTestTraits.hpp" |
| } |
| @parser::namespace |
| { Antlr3Test } |
| |
| /* With this true, enum is seen as a keyword. False, it's an identifier */ |
| @parser::init { |
| self.enableEnum = False |
| } |
| |
| stat returns [enumIs] |
| : identifier {enumIs = "ID"} |
| | enumAsKeyword {enumIs = "keyword"} |
| ; |
| |
| identifier |
| : ID |
| | enumAsID |
| ; |
| |
| enumAsKeyword : {self.enableEnum}? 'enum' ; |
| |
| enumAsID : {not self.enableEnum}? 'enum' ; |
| |
| ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* |
| ; |
| |
| INT : ('0'..'9')+ |
| ; |
| |
| WS : ( ' ' |
| | '\t' |
| | '\r' |
| | '\n' |
| )+ |
| {$channel=HIDDEN} |
| ; |