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+ 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