Skip to content

Commit 84c9654

Browse files
author
Andrin Meier
committed
split combined grammar into parser and lexer grammar for easier maintenance (#1250)
Also, LINE_CONTINUATIONs are now not skipped anymore + are a fragment since they are never used as a standalone token but rather embedded inside other tokens (such as WS)
1 parent c630706 commit 84c9654

12 files changed

+2757
-2876
lines changed

Rubberduck.Parsing/Grammar/VBALexer.cs

Lines changed: 890 additions & 1068 deletions
Large diffs are not rendered by default.
Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
/*
2+
* Copyright (C) 2014 Ulrich Wolffgang <u.wol@wwu.de>
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
*/
17+
18+
lexer grammar VBALexer;
19+
20+
COMMA : ',';
21+
COLON : ':';
22+
SEMICOLON : ';';
23+
EXCLAMATIONPOINT : '!';
24+
DOT : '.';
25+
HASH : '#';
26+
AT : '@';
27+
PERCENT : '%';
28+
DOLLAR : '$';
29+
AMPERSAND : '&';
30+
EXP : '^';
31+
ACCESS : A C C E S S;
32+
ADDRESSOF : A D D R E S S O F;
33+
ALIAS : A L I A S;
34+
AND : A N D;
35+
ATTRIBUTE : A T T R I B U T E;
36+
APPACTIVATE : A P P A C T I V A T E;
37+
APPEND : A P P E N D;
38+
AS : A S;
39+
BEGIN : B E G I N;
40+
BEEP : B E E P;
41+
BINARY : B I N A R Y;
42+
BOOLEAN : B O O L E A N;
43+
BYVAL : B Y V A L;
44+
BYREF : B Y R E F;
45+
BYTE : B Y T E;
46+
CALL : C A L L;
47+
CASE : C A S E;
48+
CHDIR : C H D I R;
49+
CHDRIVE : C H D R I V E;
50+
CLASS : C L A S S;
51+
CLOSE : C L O S E;
52+
COLLECTION : C O L L E C T I O N;
53+
CONST : C O N S T;
54+
DATABASE : D A T A B A S E;
55+
DATE : D A T E;
56+
DECLARE : D E C L A R E;
57+
DEFBOOL : D E F B O O L;
58+
DEFBYTE : D E F B Y T E;
59+
DEFDATE : D E F D A T E;
60+
DEFDBL : D E F D B L;
61+
DEFDEC : D E F D E C;
62+
DEFCUR : D E F C U R;
63+
DEFINT : D E F I N T;
64+
DEFLNG : D E F L N G;
65+
DEFOBJ : D E F O B J;
66+
DEFSNG : D E F S N G;
67+
DEFSTR : D E F S T R;
68+
DEFVAR : D E F V A R;
69+
DELETESETTING : D E L E T E S E T T I N G;
70+
DIM : D I M;
71+
DO : D O;
72+
DOUBLE : D O U B L E;
73+
EACH : E A C H;
74+
ELSE : E L S E;
75+
ELSEIF : E L S E I F;
76+
EMPTY : E M P T Y;
77+
END_ENUM : E N D WS E N U M;
78+
END_FUNCTION : E N D WS F U N C T I O N;
79+
END_IF : E N D WS I F;
80+
END_PROPERTY : E N D WS P R O P E R T Y;
81+
END_SELECT : E N D WS S E L E C T;
82+
END_SUB : E N D WS S U B;
83+
END_TYPE : E N D WS T Y P E;
84+
END_WITH : E N D WS W I T H;
85+
END : E N D;
86+
ENUM : E N U M;
87+
EQV : E Q V;
88+
ERASE : E R A S E;
89+
ERROR : E R R O R;
90+
EVENT : E V E N T;
91+
EXIT_DO : E X I T WS D O;
92+
EXIT_FOR : E X I T WS F O R;
93+
EXIT_FUNCTION : E X I T WS F U N C T I O N;
94+
EXIT_PROPERTY : E X I T WS P R O P E R T Y;
95+
EXIT_SUB : E X I T WS S U B;
96+
FALSE : F A L S E;
97+
FILECOPY : F I L E C O P Y;
98+
FRIEND : F R I E N D;
99+
FOR : F O R;
100+
FUNCTION : F U N C T I O N;
101+
GET : G E T;
102+
GLOBAL : G L O B A L;
103+
GOSUB : G O S U B;
104+
GOTO : G O T O;
105+
IF : I F;
106+
IMP : I M P;
107+
IMPLEMENTS : I M P L E M E N T S;
108+
IN : I N;
109+
INPUT : I N P U T;
110+
IS : I S;
111+
INTEGER : I N T E G E R;
112+
KILL: K I L L;
113+
LOAD : L O A D;
114+
LOCK : L O C K;
115+
LONG : L O N G;
116+
LOOP : L O O P;
117+
LEN : L E N;
118+
LET : L E T;
119+
LIB : L I B;
120+
LIKE : L I K E;
121+
LINE_INPUT : L I N E WS I N P U T;
122+
LOCK_READ : L O C K WS R E A D;
123+
LOCK_WRITE : L O C K WS W R I T E;
124+
LOCK_READ_WRITE : L O C K WS R E A D WS W R I T E;
125+
LSET : L S E T;
126+
ME : M E;
127+
MID : M I D;
128+
MKDIR : M K D I R;
129+
MOD : M O D;
130+
NAME : N A M E;
131+
NEXT : N E X T;
132+
NEW : N E W;
133+
NOT : N O T;
134+
NOTHING : N O T H I N G;
135+
NULL : N U L L;
136+
ON : O N;
137+
ON_ERROR : O N WS E R R O R;
138+
ON_LOCAL_ERROR : O N WS L O C A L WS E R R O R;
139+
OPEN : O P E N;
140+
OPTIONAL : O P T I O N A L;
141+
OPTION_BASE : O P T I O N WS B A S E;
142+
OPTION_EXPLICIT : O P T I O N WS E X P L I C I T;
143+
OPTION_COMPARE : O P T I O N WS C O M P A R E;
144+
OPTION_PRIVATE_MODULE : O P T I O N WS P R I V A T E WS M O D U L E;
145+
OR : O R;
146+
OUTPUT : O U T P U T;
147+
PARAMARRAY : P A R A M A R R A Y;
148+
PRESERVE : P R E S E R V E;
149+
PRINT : P R I N T;
150+
PRIVATE : P R I V A T E;
151+
PROPERTY_GET : P R O P E R T Y WS G E T;
152+
PROPERTY_LET : P R O P E R T Y WS L E T;
153+
PROPERTY_SET : P R O P E R T Y WS S E T;
154+
PTRSAFE : P T R S A F E;
155+
PUBLIC : P U B L I C;
156+
PUT : P U T;
157+
RANDOM : R A N D O M;
158+
RANDOMIZE : R A N D O M I Z E;
159+
RAISEEVENT : R A I S E E V E N T;
160+
READ : R E A D;
161+
READ_WRITE : R E A D WS W R I T E;
162+
REDIM : R E D I M;
163+
REM : R E M;
164+
RESET : R E S E T;
165+
RESUME : R E S U M E;
166+
RETURN : R E T U R N;
167+
RMDIR : R M D I R;
168+
RSET : R S E T;
169+
SAVEPICTURE : S A V E P I C T U R E;
170+
SAVESETTING : S A V E S E T T I N G;
171+
SEEK : S E E K;
172+
SELECT : S E L E C T;
173+
SENDKEYS : S E N D K E Y S;
174+
SET : S E T;
175+
SETATTR : S E T A T T R;
176+
SHARED : S H A R E D;
177+
SINGLE : S I N G L E;
178+
SPC : S P C;
179+
STATIC : S T A T I C;
180+
STEP : S T E P;
181+
STOP : S T O P;
182+
STRING : S T R I N G;
183+
SUB : S U B;
184+
TAB : T A B;
185+
TEXT : T E X T;
186+
THEN : T H E N;
187+
TIME : T I M E;
188+
TO : T O;
189+
TRUE : T R U E;
190+
TYPE : T Y P E;
191+
TYPEOF : T Y P E O F;
192+
UNLOAD : U N L O A D;
193+
UNLOCK : U N L O C K;
194+
UNTIL : U N T I L;
195+
VARIANT : V A R I A N T;
196+
VERSION : V E R S I O N;
197+
WEND : W E N D;
198+
WHILE : W H I L E;
199+
WIDTH : W I D T H;
200+
WITH : W I T H;
201+
WITHEVENTS : W I T H E V E N T S;
202+
WRITE : W R I T E;
203+
XOR : X O R;
204+
ASSIGN : ':=';
205+
DIV : '/';
206+
INTDIV : '\\';
207+
EQ : '=';
208+
GEQ : '>=';
209+
GT : '>';
210+
LEQ : '<=';
211+
LPAREN : '(';
212+
LT : '<';
213+
MINUS : '-';
214+
MULT : '*';
215+
NEQ : '<>';
216+
PLUS : '+';
217+
POW : '^';
218+
RPAREN : ')';
219+
L_SQUARE_BRACKET : '[';
220+
R_SQUARE_BRACKET : ']';
221+
STRINGLITERAL : '"' (~["\r\n] | '""')* '"';
222+
OCTLITERAL : '&O' [0-8]+ '&'?;
223+
HEXLITERAL : '&H' [0-9A-F]+ '&'?;
224+
SHORTLITERAL : (PLUS|MINUS)? DIGIT+ ('#' | '&' | '@')?;
225+
INTEGERLITERAL : SHORTLITERAL (E SHORTLITERAL)?;
226+
DOUBLELITERAL : (PLUS|MINUS)? DIGIT* '.' DIGIT+ (E SHORTLITERAL)?;
227+
DATELITERAL : '#' ~'#'+ '#';
228+
NEWLINE : [\r\n\u2028\u2029]+;
229+
REMCOMMENT : COLON? REM WS (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
230+
COMMENT : SINGLEQUOTE (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
231+
SINGLEQUOTE : '\'';
232+
UNDERSCORE : '_';
233+
WS : ([ \t] | LINE_CONTINUATION)+;
234+
IDENTIFIER : (~[\[\]\(\)\r\n\t.,'"|!@#$%^&*-+:=; ])+ | L_SQUARE_BRACKET (~[!\]\r\n])+ R_SQUARE_BRACKET;
235+
fragment LINE_CONTINUATION : [ \t]+ UNDERSCORE '\r'? '\n';
236+
fragment LETTER : [a-zA-Z_äöüÄÖÜ];
237+
fragment DIGIT : [0-9];
238+
fragment LETTERORDIGIT : [a-zA-Z0-9_äöüÄÖÜ];
239+
fragment A:('a'|'A');
240+
fragment B:('b'|'B');
241+
fragment C:('c'|'C');
242+
fragment D:('d'|'D');
243+
fragment E:('e'|'E');
244+
fragment F:('f'|'F');
245+
fragment G:('g'|'G');
246+
fragment H:('h'|'H');
247+
fragment I:('i'|'I');
248+
fragment J:('j'|'J');
249+
fragment K:('k'|'K');
250+
fragment L:('l'|'L');
251+
fragment M:('m'|'M');
252+
fragment N:('n'|'N');
253+
fragment O:('o'|'O');
254+
fragment P:('p'|'P');
255+
fragment Q:('q'|'Q');
256+
fragment R:('r'|'R');
257+
fragment S:('s'|'S');
258+
fragment T:('t'|'T');
259+
fragment U:('u'|'U');
260+
fragment V:('v'|'V');
261+
fragment W:('w'|'W');
262+
fragment X:('x'|'X');
263+
fragment Y:('y'|'Y');
264+
fragment Z:('z'|'Z');
265+
ERRORCHAR : .;

0 commit comments

Comments
 (0)