1+ lexer grammar SchemaLexer;
2+
3+ // Sections
4+ TITLE : ' %title' ;
5+ VERSION : ' %version' ;
6+ IMPORT : ' %import' ;
7+ PRAGMA : ' %pragma' ;
8+ DEFINE : ' %define' ;
9+ SCHEMA : ' %schema' ;
10+ SCRIPT : ' %script' -> pushMode(DIRECTIVE_SCRIPT1 );
11+
12+ // Keywords
13+ TRUE : ' true' ;
14+ FALSE : ' false' ;
15+ NULL : ' null' ;
16+
17+ // Symbols
18+ COLON : ' :' ;
19+ COMMA : ' ,' ;
20+ STAR : ' *' ;
21+ LBRACE : ' {' ;
22+ RBRACE : ' }' ;
23+ LBRACKET : ' [' ;
24+ RBRACKET : ' ]' ;
25+ LPAREN : ' (' ;
26+ RPAREN : ' )' ;
27+ OPTIONAL : ' ?' ;
28+ UNDEFINED : ' !' ;
29+
30+ // Identifiers
31+ FULL_IDENTIFIER : IDENTIFIER ( ' .' IDENTIFIER )*;
32+ ALIAS : ' $' IDENTIFIER ;
33+ DATATYPE : ' #' ALPHA +;
34+ FUNCTION : ' @' IDENTIFIER ;
35+ RECEIVER : ' &' IDENTIFIER ;
36+
37+ fragment IDENTIFIER : ALPHA ALPHANUMERIC *;
38+ fragment ALPHA : [A -Za-z_];
39+ fragment ALPHANUMERIC : [A -Za-z0-9_];
40+
41+ // String
42+ STRING : ' "' ( ESCAPE | SAFE_CODEPOINT )* ' "' ;
43+ fragment ESCAPE : ' \\ ' ( [" \\ /bfnrt] | UNICODE );
44+ fragment UNICODE : 'u' HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT;
45+ fragment HEXDIGIT : [0-9a-fA-F];
46+ fragment SAFE_CODEPOINT : ~[" \\\u0000-\u001F];
47+
48+ // Numbers
49+ INTEGER : ' -' ? INTDIGIT ;
50+ FLOAT : INTEGER FRACTION ;
51+ DOUBLE : INTEGER FRACTION ? EXPONENT ;
52+
53+ fragment FRACTION : ' .' DIGIT +;
54+ fragment INTDIGIT : ' 0' | [1-9] DIGIT *;
55+ fragment EXPONENT : [eE] [+\-]? DIGIT +;
56+ fragment DIGIT : [0-9];
57+
58+ // Hidden Tokens
59+ WHITE_SPACE : [\n\r\t ]+ -> channel(HIDDEN );
60+ BLOCK_COMMENT : ' /*' .*? ' */' -> channel(HIDDEN );
61+ LINE_COMMENT : ' //' ~(' \r ' | ' \n ' )* -> channel(HIDDEN );
62+
63+ // ---------------DIRECTIVE_SCRIPT1---------------
64+ mode DIRECTIVE_SCRIPT1 ;
65+
66+ // Keywords
67+ G_VAR : ' var' ;
68+ G_IF : ' if' ;
69+ G_ELSE : ' else' ;
70+ G_WHILE : ' while' ;
71+ G_FOR : ' for' ;
72+ G_FOREACH : ' foreach' ;
73+ G_IN : ' in' ;
74+ G_BREAK : ' break' ;
75+ G_CONSTRAINT : ' constraint' ;
76+ G_TARGET : ' target' ;
77+ G_CALLER : ' caller' ;
78+ G_SUBROUTINE : ' subroutine' ;
79+ G_TRYOF : ' tryof' ;
80+ G_THROW : ' throw' ;
81+ G_FUNCTION : ' function' ;
82+ G_RETURN : ' return' ;
83+ G_FUTURE : ' future' ;
84+ G_TRUE : ' true' ;
85+ G_FALSE : ' false' ;
86+ G_NULL : ' null' ;
87+ G_UNDEFINED : ' undefined' ;
88+
89+ // Reserved Keywords
90+ G_THIS : ' this' ;
91+ G_NEW : ' new' ;
92+ G_CONTINUE : ' continue' ;
93+ G_DO : ' do' ;
94+ G_CONST : ' const' ;
95+ G_SWITCH : ' switch' ;
96+ G_CASE : ' case' ;
97+ G_IMPORT : ' import' ;
98+ G_CLASS : ' class' ;
99+ G_SUPER : ' super' ;
100+ G_DEFAULT : ' default' ;
101+
102+ // Literals
103+ G_INTEGER : INTEGER ;
104+ G_DOUBLE : INTEGER FRACTION ? EXPONENT ?;
105+ G_STRING : STRING ;
106+ G_IDENTIFIER : IDENTIFIER ;
107+
108+ // Separator Symbols
109+ G_LBRACE : ' {' ;
110+ G_RBRACE : ' }' ;
111+ G_LBRACKET : ' [' ;
112+ G_RBRACKET : ' ]' ;
113+ G_LPAREN : ' (' ;
114+ G_RPAREN : ' )' ;
115+ G_SEMI : ' ;' ;
116+ G_COMMA : ' ,' ;
117+ G_DOT : ' .' ;
118+ G_COLON : ' :' ;
119+ G_RANGE : ' ..' ;
120+ G_ELLIPSIS : ' ...' ;
121+
122+ // Operator Symbols
123+ G_ASSIGN : ' =' ;
124+ G_INC : ' ++' ;
125+ G_DEC : ' --' ;
126+ G_PLUS : ' +' ;
127+ G_MINUS : ' -' ;
128+ G_MUL : ' *' ;
129+ G_DIV : ' /' ;
130+ G_GT : ' >' ;
131+ G_LT : ' <' ;
132+ G_LE : ' <=' ;
133+ G_GE : ' >=' ;
134+ G_EQ : ' ==' ;
135+ G_NE : ' !=' ;
136+ G_NOT : ' !' ;
137+ G_AND : ' &&' ;
138+ G_OR : ' ||' ;
139+
140+ // Next Sections
141+ DEFINE1 : ' %define' -> type(DEFINE ), popMode;
142+ SCHEMA1 : ' %schema' -> type(SCHEMA ), popMode;
143+ SCRIPT1 : ' %script' -> type(SCRIPT ), popMode;
144+
145+ // Hidden Tokens
146+ WHITE_SPACE1 : WHITE_SPACE -> channel(HIDDEN );
147+ BLOCK_COMMENT1 : BLOCK_COMMENT -> channel(HIDDEN );
148+ LINE_COMMENT1 : LINE_COMMENT -> channel(HIDDEN );
0 commit comments