1 grammar t021hoist; 2 options { 3 language=JavaScript; 4 } 5 6 /* With this true, enum is seen as a keyword. False, it's an identifier */ 7 @members { 8 this.enableEnum = false; 9 } 10 11 stat returns [enumIs] 12 : identifier {enumIs = "ID"} 13 | enumAsKeyword {enumIs = "keyword"} 14 ; 15 16 identifier 17 : ID 18 | enumAsID 19 ; 20 21 enumAsKeyword : {this.enableEnum}? 'enum' ; 22 23 enumAsID : {!this.enableEnum}? 'enum' ; 24 25 ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* 26 ; 27 28 INT : ('0'..'9')+ 29 ; 30 31 WS : ( ' ' 32 | '\t' 33 | '\r' 34 | '\n' 35 )+ 36 {$channel=HIDDEN;} 37 ; 38