xref: /aosp_15_r20/external/antlr/runtime/Python/tests/t021hoist.g (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotgrammar t021hoist;
2*16467b97STreehugger Robotoptions {
3*16467b97STreehugger Robot    language=Python;
4*16467b97STreehugger Robot}
5*16467b97STreehugger Robot
6*16467b97STreehugger Robot/* With this true, enum is seen as a keyword.  False, it's an identifier */
7*16467b97STreehugger Robot@parser::init {
8*16467b97STreehugger Robotself.enableEnum = False
9*16467b97STreehugger Robot}
10*16467b97STreehugger Robot
11*16467b97STreehugger Robotstat returns [enumIs]
12*16467b97STreehugger Robot    : identifier    {enumIs = "ID"}
13*16467b97STreehugger Robot    | enumAsKeyword {enumIs = "keyword"}
14*16467b97STreehugger Robot    ;
15*16467b97STreehugger Robot
16*16467b97STreehugger Robotidentifier
17*16467b97STreehugger Robot    : ID
18*16467b97STreehugger Robot    | enumAsID
19*16467b97STreehugger Robot    ;
20*16467b97STreehugger Robot
21*16467b97STreehugger RobotenumAsKeyword : {self.enableEnum}? 'enum' ;
22*16467b97STreehugger Robot
23*16467b97STreehugger RobotenumAsID : {not self.enableEnum}? 'enum' ;
24*16467b97STreehugger Robot
25*16467b97STreehugger RobotID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
26*16467b97STreehugger Robot    ;
27*16467b97STreehugger Robot
28*16467b97STreehugger RobotINT :	('0'..'9')+
29*16467b97STreehugger Robot    ;
30*16467b97STreehugger Robot
31*16467b97STreehugger RobotWS  :   (   ' '
32*16467b97STreehugger Robot        |   '\t'
33*16467b97STreehugger Robot        |   '\r'
34*16467b97STreehugger Robot        |   '\n'
35*16467b97STreehugger Robot        )+
36*16467b97STreehugger Robot        {$channel=HIDDEN}
37*16467b97STreehugger Robot    ;
38