Skip to content

Commit cf9204b

Browse files
committed
Fixed 'else if' invalid syntax
1 parent 49aada8 commit cf9204b

File tree

1 file changed

+212
-5
lines changed

1 file changed

+212
-5
lines changed

server/src/antlr/vbapre.g4

Lines changed: 212 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,80 @@ startRule
1111
;
1212

1313
document
14-
: (documentLines | compilerIfBlock)*
14+
: (documentLines | compilerIfBlock | constDirectiveStatement)*
1515
;
1616

1717
documentLines
1818
: (anyOtherLine | endOfLine)+
1919
;
2020

21+
constDirectiveName
22+
: ANYCHARS
23+
;
24+
25+
directiveParenthesizedExpression
26+
: '(' WS? directiveExpression WS? ')'
27+
;
28+
29+
directiveUnaryMinusExpression
30+
: '-' WS? directiveExpression
31+
;
32+
33+
directiveLiteralExpression
34+
: DATELITERAL
35+
| FLOATLITERAL
36+
| INTEGERLITERAL
37+
| STRINGLITERAL
38+
| literalIdentifier
39+
;
40+
41+
literalIdentifier
42+
: booleanLiteralIdentifier
43+
| objectLiteralIdentifier
44+
| variantLiteralIdentifier
45+
;
46+
47+
booleanLiteralIdentifier
48+
: TRUE
49+
| FALSE
50+
;
51+
52+
objectLiteralIdentifier
53+
: NOTHING
54+
;
55+
56+
variantLiteralIdentifier
57+
: EMPTY_X
58+
| NULL_
59+
;
60+
61+
directiveExpression
62+
: directiveLiteralExpression
63+
| directiveParenthesizedExpression
64+
| directiveUnaryMinusExpression
65+
// | directiveExpression wsc? (divOperator | multOperator) wsc? directiveExpression
66+
// | directiveExpression wsc? modOperator wsc? directiveExpression
67+
// | directiveExpression wsc? (plusOperator | minusOperator) wsc? directiveExpression
68+
// | directiveExpression wsc? ampOperator wsc? directiveExpression
69+
// | directiveExpression wsc? (
70+
// IS
71+
// | LIKE
72+
// | geqOperator
73+
// | leqOperator
74+
// | gtOperator
75+
// | ltOperator
76+
// | neqOperator
77+
// | eqOperator
78+
// ) wsc? directiveExpression
79+
// | notOperatorExpression
80+
// | directiveExpression wsc? (andOperator | orOperator | xorOperator | eqvOperator | impOperator) wsc? directiveExpression
81+
// | lExpression
82+
;
83+
84+
constDirectiveStatement
85+
: CONST WS constDirectiveName WS? EQ WS? directiveExpression endOfStatement
86+
;
87+
2188
compilerIfBlock
2289
: compilerConditionalBlock+
2390
compilerDefaultBlock?
@@ -76,9 +143,18 @@ compilerConstant
76143
| MAC
77144
;
78145

79-
anyWord
80-
: ANYCHARS+
81-
;
146+
anyWord: (
147+
ANYCHARS
148+
| EQ
149+
| STRINGLITERAL
150+
| FLOATLITERAL
151+
| DATELITERAL
152+
| TRUE
153+
| FALSE
154+
| NOTHING
155+
| EMPTY_X
156+
| NULL_
157+
)+;
82158

83159
anyOtherLine
84160
: (WS* anyWord)+
@@ -112,12 +188,20 @@ NEWLINE
112188
: ([\r\n\u2028\u2029]) (WS* ([\r\n\u2028\u2029]))*
113189
;
114190

191+
AS
192+
: 'AS'
193+
;
194+
195+
CONST
196+
: '#CONST'
197+
;
198+
115199
ELSE
116200
: '#ELSE'
117201
;
118202

119203
ELSEIF
120-
: '#ELSE IF'
204+
: '#ELSEIF'
121205
;
122206

123207
ENDIF
@@ -188,6 +272,10 @@ SINGLEQUOTE
188272
: '\''
189273
;
190274

275+
EQ
276+
: '='
277+
;
278+
191279
REM
192280
: 'REM'
193281
;
@@ -216,6 +304,121 @@ NOT
216304
: 'NOT'
217305
;
218306

307+
NOTHING
308+
: 'NOTHING'
309+
;
310+
311+
NULL_
312+
: 'NULL'
313+
;
314+
315+
TRUE
316+
: 'TRUE'
317+
;
318+
319+
FALSE
320+
: 'FALSE'
321+
;
322+
323+
EMPTY_X
324+
: 'EMPTY'
325+
;
326+
327+
STRINGLITERAL
328+
: '"' (~["\r\n] | '""')* '"'
329+
;
330+
331+
INTEGERLITERAL
332+
: (DIGIT DIGIT* | '&H' [0-9A-F]+ | '&' [O]? [0-7]+) [%&^]?
333+
;
334+
335+
FLOATLITERAL
336+
: FLOATINGPOINTLITERAL [!#@]?
337+
| DECIMALLITERAL [!#@]
338+
;
339+
340+
fragment FLOATINGPOINTLITERAL
341+
: DECIMALLITERAL [DE] [+-]? DECIMALLITERAL
342+
| DECIMALLITERAL '.' DECIMALLITERAL? ([DE] [+-]? DECIMALLITERAL)?
343+
| '.' DECIMALLITERAL ([DE] [+-]? DECIMALLITERAL)?
344+
;
345+
346+
fragment DECIMALLITERAL
347+
: DIGIT DIGIT*
348+
;
349+
350+
DATELITERAL
351+
: '#' DATEORTIME '#'
352+
;
353+
354+
fragment DATEORTIME
355+
: DATEVALUE WS+ TIMEVALUE
356+
| DATEVALUE
357+
| TIMEVALUE
358+
;
359+
360+
fragment DATEVALUE
361+
: DATEVALUEPART DATESEPARATOR DATEVALUEPART (DATESEPARATOR DATEVALUEPART)?
362+
;
363+
364+
fragment DATEVALUEPART
365+
: DIGIT+
366+
| MONTHNAME
367+
;
368+
369+
fragment DATESEPARATOR
370+
: WS+
371+
| WS? [/,-] WS?
372+
;
373+
374+
fragment MONTHNAME
375+
: ENGLISHMONTHNAME
376+
| ENGLISHMONTHABBREVIATION
377+
;
378+
379+
fragment ENGLISHMONTHNAME
380+
: 'JANUARY'
381+
| 'FEBRUARY'
382+
| 'MARCH'
383+
| 'APRIL'
384+
| 'MAY'
385+
| 'JUNE'
386+
| 'JULY'
387+
| 'AUGUST'
388+
| 'SEPTEMBER'
389+
| 'OCTOBER'
390+
| 'NOVEMBER'
391+
| 'DECEMBER'
392+
;
393+
394+
// May has intentionally been left out
395+
fragment ENGLISHMONTHABBREVIATION
396+
: 'JAN'
397+
| 'FEB'
398+
| 'MAR'
399+
| 'APR'
400+
| 'JUN'
401+
| 'JUL'
402+
| 'AUG'
403+
| 'SEP'
404+
| 'OCT'
405+
| 'NOV'
406+
| 'DEC'
407+
;
408+
409+
fragment TIMEVALUE
410+
: DIGIT+ AMPM
411+
| DIGIT+ TIMESEPARATOR DIGIT+ (TIMESEPARATOR DIGIT+)? AMPM?
412+
;
413+
414+
fragment TIMESEPARATOR
415+
: WS? (':' | '.') WS?
416+
;
417+
418+
fragment AMPM
419+
: WS? ('AM' | 'PM' | 'A' | 'P')
420+
;
421+
219422
220423
// Any non-whitespace or new line characters.
221424
ANYCHARS
@@ -224,4 +427,8 @@ ANYCHARS
224427
225428
fragment ANYCHAR
226429
: ~[\r\n\u2028\u2029 \t\u0019\u3000]
430+
;
431+
432+
fragment DIGIT
433+
: [0-9]
227434
;

0 commit comments

Comments
 (0)