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