Skip to content

Commit 5ea438e

Browse files
committed
Add C# version of the lexer
1 parent 45fe747 commit 5ea438e

File tree

1 file changed

+321
-0
lines changed

1 file changed

+321
-0
lines changed

src/csharp/PeopleCodeLexer.g4

Lines changed: 321 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,321 @@
1+
//******************************************************************************
2+
//* ANTLR 4 LEXER GRAMMAR FOR PEOPLECODE PROGRAMS AND APPLICATION CLASSES
3+
//* by Leandro Baca
4+
//******************************************************************************
5+
//* NOTE: This version contains C#-specific semantic predicates.
6+
//******************************************************************************
7+
8+
lexer grammar PeopleCodeLexer;
9+
10+
channels {
11+
API_COMMENTS,
12+
COMMENTS,
13+
DIRECTIVES,
14+
WHITESPACE
15+
}
16+
17+
@header {
18+
using System.Text.RegularExpressions;
19+
}
20+
21+
@members {
22+
private static Regex REGEX_REM = new Regex("^rem(ark)?\\b.*",RegexOptions.IgnoreCase | RegexOptions.Singleline);
23+
private static Regex REGEX_3_STAR = new Regex("^/\\*{3}/.*", RegexOptions.Singleline);
24+
}
25+
26+
27+
//******************************************************************************
28+
//* DEFAULT MODE
29+
//******************************************************************************
30+
31+
BLOCK_COMMENT_SLASH
32+
: (
33+
'/*' ~[*] .*? '*/'
34+
| '/*' '*'* '*/'
35+
) -> channel(COMMENTS)
36+
;
37+
38+
API_COMMENT : '/**' ~[/] .*? '*/' {!REGEX_3_STAR.IsMatch(Text)}? -> channel(API_COMMENTS) ;
39+
WS : [\p{White_Space}]+ -> channel(WHITESPACE) ;
40+
BLOCK_COMMENT_NEST : '<*' (BLOCK_COMMENT_NEST | .)*? '*>' -> channel(COMMENTS) ;
41+
BLOCK_COMMENT_PLUS : '/+' .*? '+/' ';'? -> channel(COMMENTS) ;
42+
LINE_COMMENT : R E M (A R K)? .*? ';' {REGEX_REM.IsMatch(Text)}? -> channel(COMMENTS) ;
43+
DIR_IF : '#' IF -> channel(DIRECTIVES), pushMode(DIRECTIVE) ;
44+
DIR_ELSE : '#' ELSE SEMI* -> channel(DIRECTIVES) ;
45+
DIR_END_IF : '#' END IF SEMI* -> channel(DIRECTIVES) ;
46+
47+
ABSTRACT : A B S T R A C T ;
48+
ADD : '+' ;
49+
ALIAS : A L I A S ;
50+
AND : A N D ;
51+
ARRAY : A R R A Y ;
52+
AS : A S ;
53+
AT : '@' ;
54+
BREAK : B R E A K ;
55+
CATCH : C A T C H ;
56+
CLASS : C L A S S ;
57+
COLON : ':' ;
58+
COMMA : ',' ;
59+
60+
COMPONENT
61+
: C O M P O N E N T L I F E
62+
| C O M P O N E N T
63+
| P A N E L G R O U P
64+
;
65+
66+
CONSTANT : C O N S T A N T ;
67+
CONTINUE : C O N T I N U E ;
68+
CREATE : C R E A T E ;
69+
DECLARE : D E C L A R E ;
70+
DOC : D O C ;
71+
DIV : '/' ;
72+
DOT : '.' ;
73+
ELSE : E L S E ;
74+
END_CLASS : END CLASS ;
75+
END_EVALUATE : END EVALUATE ;
76+
END_FOR : END FOR ;
77+
END_GET : END GET ;
78+
END_IF : END IF ;
79+
END_INTERFACE : END INTERFACE ;
80+
END_METHOD : END METHOD ;
81+
END_SET : END SET ;
82+
END_TRY : END TRY ;
83+
END_WHILE : END WHILE ;
84+
EQ : '=' ;
85+
ERROR : E R R O R ;
86+
EVALUATE : E V A L U A T E ;
87+
EXCEPTION : E X C E P T I O N ;
88+
EXIT : E X I T ;
89+
EXP : '**' ;
90+
EXTENDS : E X T E N D S ;
91+
FOR : F O R ;
92+
FUNCTION : F U N C T I O N ;
93+
END_FUNCTION : END FUNCTION ;
94+
GE : '>=' ;
95+
GET : G E T ;
96+
GLOBAL : G L O B A L ;
97+
GT : '>' ;
98+
IF : I F ;
99+
IMPLEMENTS : I M P L E M E N T S ;
100+
IMPORT : I M P O R T ;
101+
INSTANCE : I N S T A N C E ;
102+
INTERFACE : I N T E R F A C E ;
103+
INTEGER : I N T E G E R ;
104+
LBRACKET : '[' ;
105+
LE : '<=' ;
106+
LIBRARY : L I B R A R Y ;
107+
LOCAL : L O C A L ;
108+
LPAREN : '(' ;
109+
LT : '<' ;
110+
METHOD : M E T H O D ;
111+
112+
NEQ
113+
: '<>'
114+
| '!='
115+
;
116+
117+
NOT : N O T ;
118+
NULL : N U L L ;
119+
OF : O F ;
120+
OR : O R ;
121+
OUT : O U T ;
122+
PEOPLECODE : P E O P L E C O D E ;
123+
PRIVATE : P R I V A T E ;
124+
PROPERTY : P R O P E R T Y ;
125+
PROTECTED : P R O T E C T E D ;
126+
RBRACKET : ']' ;
127+
READONLY : R E A D O N L Y ;
128+
REF : R E F ;
129+
REPEAT : R E P E A T ;
130+
RETURN : R E T U R N ;
131+
RETURNS : R E T U R N S ;
132+
RPAREN : ')' ;
133+
SEMI : ';' ;
134+
SET : S E T ;
135+
STAR : '*' ;
136+
STEP : S T E P ;
137+
SUBTR : '-' ;
138+
SUPER : '%' S U P E R ;
139+
THEN : T H E N ;
140+
THROW : T H R O W ;
141+
TO : T O ;
142+
TRY : T R Y ;
143+
UNTIL : U N T I L ;
144+
VALUE : V A L U E ;
145+
WARNING : W A R N I N G ;
146+
WHEN : W H E N ;
147+
WHEN_OTHER : W H E N '-' O T H E R ;
148+
WHILE : W H I L E ;
149+
ANY : A N Y ;
150+
BOOLEAN : B O O L E A N ;
151+
DATE : D A T E ;
152+
DATETIME : D A T E T I M E ;
153+
FLOAT : F L O A T ;
154+
NUMBER : N U M B E R ;
155+
STRING : S T R I N G ;
156+
TIME : T I M E ;
157+
PIPE : '|' ;
158+
METADATA : '%' M E T A D A T A ;
159+
160+
DecimalLiteral : IntegerLiteral? '.' [0-9]+ ;
161+
IntegerLiteral : '-'? [0-9]+ ;
162+
163+
StringLiteral
164+
: '"' (~'"'|'""')* '"'
165+
| '\'' (~'\''|'\'\'')* '\''
166+
;
167+
168+
BooleanLiteral
169+
: T R U E
170+
| F A L S E
171+
;
172+
173+
RecordEvent
174+
: F I E L D D E F A U L T
175+
| F I E L D E D I T
176+
| F I E L D C H A N G E
177+
| F I E L D F O R M U L A
178+
| R O W I N I T
179+
| R O W I N S E R T
180+
| R O W D E L E T E
181+
| R O W S E L E C T
182+
| S A V E E D I T
183+
| S A V E P R E C H A N G E
184+
| S A V E P O S T C H A N G E
185+
| S E A R C H I N I T
186+
| S E A R C H S A V E
187+
| W O R K F L O W
188+
| P R E P O P U P
189+
;
190+
191+
SYSTEM_VARIABLE : '%' A L L O W N O T I F I C A T I O N
192+
| '%' A L L O W R E C I P I E N T L O O K U P
193+
| '%' A P P L I C A T I O N L O G F E N C E
194+
| '%' A S O F D A T E
195+
| '%' A U T H E N T I C A T I O N T O K E N
196+
| '%' B P N A M E
197+
| '%' C L I E N T D A T E
198+
| '%' C L I E N T T I M E Z O N E
199+
| '%' C O M P I N T F C N A M E
200+
| '%' C O M P O N E N T
201+
| '%' C O N T E N T I D
202+
| '%' C O N T E N T T Y P E
203+
| '%' C O P Y R I G H T
204+
| '%' C U R R E N C Y
205+
| '%' D A T E
206+
| '%' D A T E T I M E
207+
| '%' D B N A M E
208+
| '%' D B S E R V E R N A M E
209+
| '%' D B T Y P E
210+
| '%' E M A I L A D D R E S S
211+
| '%' E M P L O Y E E I D
212+
| '%' E X T E R N A L A U T H I N F O
213+
| '%' F I L E P A T H
214+
| '%' H P T A B N A M E
215+
| '%' I M P O R T
216+
| '%' I N T B R O K E R
217+
| '%' I S M U L T I L A N G U A G E E N A B L E D
218+
| '%' L A N G U A G E
219+
| '%' L A N G U A G E '_' B A S E
220+
| '%' L A N G U A G E '_' D A T A
221+
| '%' L A N G U A G E '_' U S E R
222+
| '%' L O C A L N O D E
223+
| '%' M A P '_' M A R K E T
224+
| '%' M A R K E T
225+
| '%' M A X M E S S A G E S I Z E
226+
| '%' M A X N B R S E G M E N T S
227+
| '%' M E N U
228+
| '%' M O D E
229+
| '%' N A V I G A T O R H O M E P E R M I S S I O N L I S T
230+
| '%' N O D E
231+
| '%' O P E R A T O R C L A S S
232+
| '%' O P E R A T O R I D
233+
| '%' O P E R A T O R R O W L E V E L S E C U R I T Y C L A S S
234+
| '%' O U T D E S T F O R M A T
235+
| '%' O U T D E S T T Y P E
236+
| '%' P A G E
237+
| '%' P A N E L
238+
| '%' P A N E L G R O U P
239+
| '%' P A S S W O R D E X P I R E D
240+
| '%' P E R F T I M E
241+
| '%' P E R M I S S I O N L I S T S
242+
| '%' P I D
243+
| '%' P O R T A L
244+
| '%' P R I M A R Y P E R M I S S I O N L I S T
245+
| '%' P R O C E S S P R O F I L E P E R M I S S I O N L I S T
246+
| '%' P S A U T H R E S U L T
247+
| '%' R E Q U E S T
248+
| '%' R E S P O N S E
249+
| '%' R E S U L T D O C U M E N T
250+
| '%' R O L E S
251+
| '%' R O W S E C U R I T Y P E R M I S S I O N L I S T
252+
| '%' R U N N I N G I N P O R T A L
253+
| '%' S E R V E R T I M E Z O N E
254+
| '%' S E S S I O N
255+
| '%' S I G N O N U S E R I D
256+
| '%' S I G N O N U S E R P S W D
257+
| '%' S M T P B L A C K B E R R Y R E P L Y T O
258+
| '%' S M T P G U A R A N T E E D
259+
| '%' S M T P S E N D E R
260+
| '%' S Q L R O W S
261+
| '%' T H I S
262+
| '%' T I M E
263+
| '%' T R A N S F O R M D A T A
264+
| '%' U S E R D E S C R I P T I O N
265+
| '%' U S E R I D
266+
| '%' W L I N S T A N C E I D
267+
| '%' W L N A M E
268+
;
269+
270+
SYSTEM_CONSTANT : '%' GENERIC_ID_LIMITED ; // also catches any system variables that may be defined in future versions of PeopleTools
271+
GENERIC_ID_LIMITED : [a-zA-Z_\p{Alpha}\p{General_Category=Other_Letter}] ID_CHAR* ;
272+
GENERIC_ID : ID_1ST_CHAR ID_CHAR* ;
273+
USER_VARIABLE : '&' ID_CHAR+ ;
274+
275+
fragment END : E N D '-' ;
276+
fragment ID_1ST_CHAR : [0-9a-zA-Z_#$\p{Alnum}\p{General_Category=Other_Letter}] ;
277+
fragment ID_CHAR : ID_1ST_CHAR | '@' ;
278+
fragment CRLF : '\r'? '\n' ; // all line feed characters would be [\r\n\u000B\f\u0085\u2028\u2029]
279+
//fragment HWS : [ \t\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000] ; // horizontal whitespace characters
280+
281+
/* case insensitive lexer matching */
282+
fragment A : 'a' | 'A' ;
283+
fragment B : 'b' | 'B' ;
284+
fragment C : 'c' | 'C' ;
285+
fragment D : 'd' | 'D' ;
286+
fragment E : 'e' | 'E' ;
287+
fragment F : 'f' | 'F' ;
288+
fragment G : 'g' | 'G' ;
289+
fragment H : 'h' | 'H' ;
290+
fragment I : 'i' | 'I' ;
291+
fragment J : 'j' | 'J' ;
292+
fragment K : 'k' | 'K' ;
293+
fragment L : 'l' | 'L' ;
294+
fragment M : 'm' | 'M' ;
295+
fragment N : 'n' | 'N' ;
296+
fragment O : 'o' | 'O' ;
297+
fragment P : 'p' | 'P' ;
298+
fragment Q : 'q' | 'Q' ;
299+
fragment R : 'r' | 'R' ;
300+
fragment S : 's' | 'S' ;
301+
fragment T : 't' | 'T' ;
302+
fragment U : 'u' | 'U' ;
303+
fragment V : 'v' | 'V' ;
304+
fragment W : 'w' | 'W' ;
305+
fragment X : 'x' | 'X' ;
306+
fragment Y : 'y' | 'Y' ;
307+
fragment Z : 'z' | 'Z' ;
308+
309+
310+
//******************************************************************************
311+
//* DIRECTIVE PEOPLECODE MODE
312+
//******************************************************************************
313+
314+
mode DIRECTIVE;
315+
316+
DIR_WS : [\p{White_Space}]+ -> channel(WHITESPACE) ;
317+
DIR_THEN : '#' THEN SEMI* -> channel(DIRECTIVES), popMode ;
318+
//DIR_TOOLSREL : '#' T O O L S R E L -> channel(DIRECTIVES) ;
319+
//DIR_AND : '&&' -> channel(DIRECTIVES) ;
320+
//DIR_OR : '||' -> channel(DIRECTIVES) ;
321+
DIR_ATOM : ~[\p{White_Space}]+ -> channel(DIRECTIVES) ;

0 commit comments

Comments
 (0)