grammar t021hoist; options { language=Python3; } /* 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} ;