Skip to content

Commit 3047850

Browse files
author
Andrin Meier
committed
add entirely new grammar made to reflect the vba spec
1 parent 61e0fb6 commit 3047850

9 files changed

+27230
-0
lines changed

Rubberduck.Parsing/GrammarNext/VBALexerNext.cs

Lines changed: 1243 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,303 @@
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 VBALexerNext;
19+
20+
COMMA : ',';
21+
COLON : ':';
22+
SEMICOLON : ';';
23+
EXCLAMATIONPOINT : '!';
24+
DOT : '.';
25+
HASH : '#';
26+
AT : '@';
27+
PERCENT : '%';
28+
DOLLAR : '$';
29+
AMPERSAND : '&';
30+
ACCESS : A C C E S S;
31+
ADDRESSOF : A D D R E S S O F;
32+
ALIAS : A L I A S;
33+
AND : A N D;
34+
ATTRIBUTE : A T T R I B U T E;
35+
APPACTIVATE : A P P A C T I V A T E;
36+
APPEND : A P P E N D;
37+
AS : A S;
38+
BEGIN : B E G I N;
39+
BEEP : B E E P;
40+
BINARY : B I N A R Y;
41+
BOOLEAN : B O O L E A N;
42+
BYVAL : B Y V A L;
43+
BYREF : B Y R E F;
44+
BYTE : B Y T E;
45+
CALL : C A L L;
46+
CASE : C A S E;
47+
CHDIR : C H D I R;
48+
CHDRIVE : C H D R I V E;
49+
CLASS : C L A S S;
50+
CLOSE : C L O S E;
51+
COLLECTION : C O L L E C T I O N;
52+
CONST : C O N S T;
53+
DATABASE : D A T A B A S E;
54+
DATE : D A T E;
55+
DECLARE : D E C L A R E;
56+
DEFBOOL : D E F B O O L;
57+
DEFBYTE : D E F B Y T E;
58+
DEFDATE : D E F D A T E;
59+
DEFDBL : D E F D B L;
60+
DEFCUR : D E F C U R;
61+
DEFINT : D E F I N T;
62+
DEFLNG : D E F L N G;
63+
DEFLNGLNG : D E F L N G L N G;
64+
DEFLNGPTR : D E F L N G P T R;
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+
LET : L E T;
118+
LIB : L I B;
119+
LIKE : L I K E;
120+
LINE_INPUT : L I N E WS I N P U T;
121+
LOCK_READ : L O C K WS R E A D;
122+
LOCK_WRITE : L O C K WS W R I T E;
123+
LOCK_READ_WRITE : L O C K WS R E A D WS W R I T E;
124+
LSET : L S E T;
125+
ME : M E;
126+
MID : M I D;
127+
MKDIR : M K D I R;
128+
MOD : M O D;
129+
NAME : N A M E;
130+
NEXT : N E X T;
131+
NEW : N E W;
132+
NOT : N O T;
133+
NOTHING : N O T H I N G;
134+
NULL : N U L L;
135+
ON : O N;
136+
ON_ERROR : O N WS E R R O R;
137+
ON_LOCAL_ERROR : O N WS L O C A L WS E R R O R;
138+
OPEN : O P E N;
139+
OPTIONAL : O P T I O N A L;
140+
OPTION_BASE : O P T I O N WS B A S E;
141+
OPTION_EXPLICIT : O P T I O N WS E X P L I C I T;
142+
OPTION_COMPARE : O P T I O N WS C O M P A R E;
143+
OPTION_PRIVATE_MODULE : O P T I O N WS P R I V A T E WS M O D U L E;
144+
OR : O R;
145+
OUTPUT : O U T P U T;
146+
PARAMARRAY : P A R A M A R R A Y;
147+
PRESERVE : P R E S E R V E;
148+
PRINT : P R I N T;
149+
PRIVATE : P R I V A T E;
150+
PROPERTY_GET : P R O P E R T Y WS G E T;
151+
PROPERTY_LET : P R O P E R T Y WS L E T;
152+
PROPERTY_SET : P R O P E R T Y WS S E T;
153+
PTRSAFE : P T R S A F E;
154+
PUBLIC : P U B L I C;
155+
PUT : P U T;
156+
RANDOM : R A N D O M;
157+
RANDOMIZE : R A N D O M I Z E;
158+
RAISEEVENT : R A I S E E V E N T;
159+
READ : R E A D;
160+
READ_WRITE : R E A D WS W R I T E;
161+
REDIM : R E D I M;
162+
REM : R E M;
163+
RESET : R E S E T;
164+
RESUME : R E S U M E;
165+
RETURN : R E T U R N;
166+
RMDIR : R M D I R;
167+
RSET : R S E T;
168+
SAVEPICTURE : S A V E P I C T U R E;
169+
SAVESETTING : S A V E S E T T I N G;
170+
SEEK : S E E K;
171+
SELECT : S E L E C T;
172+
SENDKEYS : S E N D K E Y S;
173+
SET : S E T;
174+
SETATTR : S E T A T T R;
175+
SHARED : S H A R E D;
176+
SINGLE : S I N G L E;
177+
SPC : S P C;
178+
STATIC : S T A T I C;
179+
STEP : S T E P;
180+
STOP : S T O P;
181+
STRING : S T R I N G;
182+
SUB : S U B;
183+
TAB : T A B;
184+
TEXT : T E X T;
185+
THEN : T H E N;
186+
TIME : T I M E;
187+
TO : T O;
188+
TRUE : T R U E;
189+
TYPE : T Y P E;
190+
TYPEOF : T Y P E O F;
191+
UNLOAD : U N L O A D;
192+
UNLOCK : U N L O C K;
193+
UNTIL : U N T I L;
194+
VARIANT : V A R I A N T;
195+
VERSION : V E R S I O N;
196+
WEND : W E N D;
197+
WHILE : W H I L E;
198+
WIDTH : W I D T H;
199+
WITH : W I T H;
200+
WITHEVENTS : W I T H E V E N T S;
201+
WRITE : W R I T E;
202+
XOR : X O R;
203+
ASSIGN : ':=';
204+
DIV : '/';
205+
INTDIV : '\\';
206+
EQ : '=';
207+
GEQ : '>=';
208+
GT : '>';
209+
LEQ : '<=';
210+
LPAREN : '(';
211+
LT : '<';
212+
MINUS : '-';
213+
MULT : '*';
214+
NEQ : '<>';
215+
PLUS : '+';
216+
POW : '^';
217+
RPAREN : ')';
218+
HASHCONST : WS* HASH CONST;
219+
HASHIF : WS* HASH I F;
220+
HASHELSEIF : WS* HASH E L S E I F;
221+
HASHELSE : WS* HASH E L S E;
222+
HASHENDIF : WS* HASH E N D WS* I F;
223+
L_SQUARE_BRACKET : '[';
224+
R_SQUARE_BRACKET : ']';
225+
STRINGLITERAL : '"' (~["\r\n] | '""')* '"';
226+
OCTLITERAL : '&O' [0-8]+ '&'?;
227+
HEXLITERAL : '&H' [0-9A-F]+ '&'?;
228+
SHORTLITERAL : (PLUS|MINUS)? DIGIT+ ('#' | '&' | '@')?;
229+
INTEGERLITERAL : SHORTLITERAL (E SHORTLITERAL)?;
230+
DOUBLELITERAL : (PLUS|MINUS)? DIGIT* '.' DIGIT+ (E SHORTLITERAL)?;
231+
DATELITERAL : '#' DATEORTIME '#';
232+
fragment DATEORTIME : DATEVALUE WS? TIMEVALUE | DATEVALUE | TIMEVALUE;
233+
fragment DATEVALUE : DATEVALUEPART DATESEPARATOR DATEVALUEPART (DATESEPARATOR DATEVALUEPART)?;
234+
fragment DATEVALUEPART : DIGIT+ | MONTHNAME;
235+
fragment DATESEPARATOR : WS? [/,-]? WS?;
236+
fragment MONTHNAME : ENGLISHMONTHNAME | ENGLISHMONTHABBREVIATION;
237+
fragment ENGLISHMONTHNAME : JANUARY | FEBRUARY | MARCH | APRIL | MAY | JUNE | JULY | AUGUST | SEPTEMBER | OCTOBER | NOVEMBER | DECEMBER;
238+
fragment ENGLISHMONTHABBREVIATION : JAN | FEB | MAR | APR | JUN | JUL | AUG | SEP | OCT | NOV | DEC;
239+
fragment TIMEVALUE : DIGIT+ AMPM | DIGIT+ TIMESEPARATOR DIGIT+ (TIMESEPARATOR DIGIT+)? AMPM?;
240+
fragment TIMESEPARATOR : WS? (':' | '.') WS?;
241+
fragment AMPM : WS? (A M | P M | A | P);
242+
fragment JANUARY : J A N U A R Y;
243+
fragment FEBRUARY : F E B R U A R Y;
244+
fragment MARCH : M A R C H;
245+
fragment APRIL : A P R I L;
246+
fragment MAY : M A Y;
247+
fragment JUNE : J U N E;
248+
fragment JULY : J U L Y;
249+
fragment AUGUST : A U G U S T;
250+
fragment SEPTEMBER : S E P T E M B E R;
251+
fragment OCTOBER : O C T O B E R;
252+
fragment NOVEMBER : N O V E M B E R;
253+
fragment DECEMBER : D E C E M B E R;
254+
fragment JAN : J A N;
255+
fragment FEB : F E B;
256+
fragment MAR: M A R;
257+
fragment APR : A P R;
258+
fragment JUN : J U N;
259+
fragment JUL: J U L;
260+
fragment AUG : A U G;
261+
fragment SEP : S E P;
262+
fragment OCT : O C T;
263+
fragment NOV : N O V;
264+
fragment DEC : D E C;
265+
NEWLINE : '\r' '\n' | [\r\n\u2028\u2029];
266+
REMCOMMENT : COLON? REM WS (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
267+
COMMENT : SINGLEQUOTE ~'@' (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*;
268+
SINGLEQUOTE : '\'';
269+
UNDERSCORE : '_';
270+
WS : [ \t];
271+
IDENTIFIER : ~[\[\]\(\)\r\n\t.,'"|!@#$%^&*-+:=; 0-9-/\\] ~[\[\]\(\)\r\n\t.,'"|!@#$%^&*-+:=; ]* | L_SQUARE_BRACKET (~[!\]\r\n])+ R_SQUARE_BRACKET;
272+
LINE_CONTINUATION : [ \t]* UNDERSCORE [ \t]* '\r'? '\n';
273+
GUIDLITERAL : '{' [0-9A-F]+ '-' [0-9A-F]+ '-' [0-9A-F]+ '-' [0-9A-F]+ '-' [0-9A-F]+ '}';
274+
fragment LETTER : [a-zA-Z_äöüÄÖÜ];
275+
fragment DIGIT : [0-9];
276+
fragment LETTERORDIGIT : [a-zA-Z0-9_äöüÄÖÜ];
277+
fragment A:('a'|'A');
278+
fragment B:('b'|'B');
279+
fragment C:('c'|'C');
280+
fragment D:('d'|'D');
281+
fragment E:('e'|'E');
282+
fragment F:('f'|'F');
283+
fragment G:('g'|'G');
284+
fragment H:('h'|'H');
285+
fragment I:('i'|'I');
286+
fragment J:('j'|'J');
287+
fragment K:('k'|'K');
288+
fragment L:('l'|'L');
289+
fragment M:('m'|'M');
290+
fragment N:('n'|'N');
291+
fragment O:('o'|'O');
292+
fragment P:('p'|'P');
293+
fragment Q:('q'|'Q');
294+
fragment R:('r'|'R');
295+
fragment S:('s'|'S');
296+
fragment T:('t'|'T');
297+
fragment U:('u'|'U');
298+
fragment V:('v'|'V');
299+
fragment W:('w'|'W');
300+
fragment X:('x'|'X');
301+
fragment Y:('y'|'Y');
302+
fragment Z:('z'|'Z');
303+
ERRORCHAR : .;

0 commit comments

Comments
 (0)