grammar t021hoist;
options {
    language=JavaScript;
}

/* With this true, enum is seen as a keyword.  False, it's an identifier */
@members {
this.enableEnum = false;
}

stat returns [enumIs]
    : identifier    {enumIs = "ID"}
    | enumAsKeyword {enumIs = "keyword"}
    ;

identifier
    : ID
    | enumAsID
    ;

enumAsKeyword : {this.enableEnum}? 'enum' ;

enumAsID : {!this.enableEnum}? 'enum' ;

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

INT :	('0'..'9')+
    ;

WS  :   (   ' '
        |   '\t'
        |   '\r'
        |   '\n'
        )+
        {$channel=HIDDEN;}
    ;