Skip to content

Commit 151566f

Browse files
committed
Merge pull request #1746 from Hosch250/Issue1742
Allow leading spaces in a bunch of stmt types. Convert all tabs to spaces in VBAParser.g4.
2 parents 6640a3d + 2e33847 commit 151566f

File tree

8 files changed

+2984
-2920
lines changed

8 files changed

+2984
-2920
lines changed

Rubberduck.Parsing/Grammar/VBAParser.cs

Lines changed: 2811 additions & 2792 deletions
Large diffs are not rendered by default.

Rubberduck.Parsing/Grammar/VBAParser.g4

Lines changed: 123 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ options { tokenVocab = VBALexer; }
2424
startRule : module EOF;
2525

2626
module :
27-
endOfStatement
27+
endOfStatement
2828
moduleAttributes
29-
moduleHeader?
29+
moduleHeader?
3030
moduleAttributes
31-
moduleConfig?
32-
moduleAttributes
33-
moduleDeclarations
31+
moduleConfig?
3432
moduleAttributes
35-
moduleBody
33+
moduleDeclarations
34+
moduleAttributes
35+
moduleBody
3636
moduleAttributes
3737
// A module can consist of WS as well as line continuations only.
3838
whiteSpace?
@@ -41,13 +41,13 @@ module :
4141
moduleHeader : VERSION whiteSpace numberLiteral whiteSpace? CLASS? endOfStatement;
4242

4343
moduleConfig :
44-
BEGIN (whiteSpace GUIDLITERAL whiteSpace unrestrictedIdentifier whiteSpace?)? endOfStatement
45-
moduleConfigElement+
46-
END endOfStatement
44+
BEGIN (whiteSpace GUIDLITERAL whiteSpace unrestrictedIdentifier whiteSpace?)? endOfStatement
45+
moduleConfigElement+
46+
END endOfStatement
4747
;
4848

4949
moduleConfigElement :
50-
unrestrictedIdentifier whiteSpace* EQ whiteSpace* expression (COLON numberLiteral)? endOfStatement
50+
unrestrictedIdentifier whiteSpace* EQ whiteSpace* expression (COLON numberLiteral)? endOfStatement
5151
;
5252

5353
moduleAttributes : (attributeStmt endOfStatement)*;
@@ -58,71 +58,73 @@ attributeValue : expression;
5858
moduleDeclarations : (moduleDeclarationsElement endOfStatement)*;
5959

6060
moduleOption :
61-
OPTION_BASE whiteSpace numberLiteral # optionBaseStmt
62-
| OPTION_COMPARE whiteSpace (BINARY | TEXT | DATABASE) # optionCompareStmt
63-
| OPTION_EXPLICIT # optionExplicitStmt
64-
| OPTION_PRIVATE_MODULE # optionPrivateModuleStmt
61+
OPTION_BASE whiteSpace numberLiteral # optionBaseStmt
62+
| OPTION_COMPARE whiteSpace (BINARY | TEXT | DATABASE) # optionCompareStmt
63+
| OPTION_EXPLICIT # optionExplicitStmt
64+
| OPTION_PRIVATE_MODULE # optionPrivateModuleStmt
6565
;
6666

6767
moduleDeclarationsElement :
68-
attributeStmt
68+
whiteSpace?
69+
(attributeStmt
6970
| declareStmt
7071
| defDirective
71-
| enumerationStmt
72-
| eventStmt
73-
| constStmt
74-
| implementsStmt
75-
| variableStmt
76-
| moduleOption
77-
| typeStmt
72+
| enumerationStmt
73+
| eventStmt
74+
| constStmt
75+
| implementsStmt
76+
| variableStmt
77+
| moduleOption
78+
| typeStmt)
7879
;
7980

8081
moduleBody :
81-
(moduleBodyElement endOfStatement)*;
82+
whiteSpace?
83+
(moduleBodyElement endOfStatement)*;
8284

8385
moduleBodyElement :
84-
functionStmt
85-
| propertyGetStmt
86-
| propertySetStmt
87-
| propertyLetStmt
88-
| subStmt
86+
functionStmt
87+
| propertyGetStmt
88+
| propertySetStmt
89+
| propertyLetStmt
90+
| subStmt
8991
;
9092

9193
block : (blockStmt endOfStatement)*;
9294

9395
blockStmt :
94-
statementLabelDefinition
96+
statementLabelDefinition
9597
| fileStmt
96-
| attributeStmt
97-
| constStmt
98-
| doLoopStmt
98+
| attributeStmt
99+
| constStmt
100+
| doLoopStmt
99101
| endStmt
100-
| eraseStmt
101-
| errorStmt
102+
| eraseStmt
103+
| errorStmt
102104
| exitStmt
103-
| forEachStmt
104-
| forNextStmt
105-
| goSubStmt
106-
| goToStmt
107-
| ifStmt
105+
| forEachStmt
106+
| forNextStmt
107+
| goSubStmt
108+
| goToStmt
109+
| ifStmt
108110
| singleLineIfStmt
109-
| implementsStmt
110-
| letStmt
111-
| lsetStmt
112-
| onErrorStmt
113-
| onGoToStmt
114-
| onGoSubStmt
115-
| raiseEventStmt
116-
| redimStmt
117-
| resumeStmt
118-
| returnStmt
119-
| rsetStmt
120-
| selectCaseStmt
121-
| setStmt
111+
| implementsStmt
112+
| letStmt
113+
| lsetStmt
114+
| onErrorStmt
115+
| onGoToStmt
116+
| onGoSubStmt
117+
| raiseEventStmt
118+
| redimStmt
119+
| resumeStmt
120+
| returnStmt
121+
| rsetStmt
122+
| selectCaseStmt
123+
| setStmt
122124
| stopStmt
123-
| variableStmt
124-
| whileWendStmt
125-
| withStmt
125+
| variableStmt
126+
| whileWendStmt
127+
| withStmt
126128
| circleSpecialForm
127129
| scaleSpecialForm
128130
| callStmt
@@ -264,9 +266,9 @@ argDefaultValue : EQ whiteSpace? expression;
264266
// 5.2.2 Implicit Definition Directives
265267
defDirective : defType whiteSpace letterSpec (whiteSpace? COMMA whiteSpace? letterSpec)*;
266268
defType :
267-
DEFBOOL | DEFBYTE | DEFINT | DEFLNG | DEFLNGLNG | DEFLNGPTR | DEFCUR |
268-
DEFSNG | DEFDBL | DEFDATE |
269-
DEFSTR | DEFOBJ | DEFVAR
269+
DEFBOOL | DEFBYTE | DEFINT | DEFLNG | DEFLNGLNG | DEFLNGPTR | DEFCUR |
270+
DEFSNG | DEFDBL | DEFDATE |
271+
DEFSTR | DEFOBJ | DEFVAR
270272
;
271273
// universalLetterRange must appear before letterRange because they both match the same amount in the case of A-Z but we prefer the universalLetterRange.
272274
letterSpec : singleLetter | universalLetterRange | letterRange;
@@ -284,23 +286,23 @@ firstLetter : unrestrictedIdentifier;
284286
lastLetter : unrestrictedIdentifier;
285287

286288
doLoopStmt :
287-
DO endOfStatement
288-
block
289-
LOOP
290-
|
291-
DO whiteSpace (WHILE | UNTIL) whiteSpace expression endOfStatement
292-
block
293-
LOOP
294-
|
295-
DO endOfStatement
296-
block
297-
LOOP whiteSpace (WHILE | UNTIL) whiteSpace expression
289+
DO endOfStatement
290+
block
291+
LOOP
292+
|
293+
DO whiteSpace (WHILE | UNTIL) whiteSpace expression endOfStatement
294+
block
295+
LOOP
296+
|
297+
DO endOfStatement
298+
block
299+
LOOP whiteSpace (WHILE | UNTIL) whiteSpace expression
298300
;
299301

300302
enumerationStmt:
301-
(visibility whiteSpace)? ENUM whiteSpace identifier endOfStatement
302-
enumerationStmt_Constant*
303-
END_ENUM
303+
(visibility whiteSpace)? ENUM whiteSpace identifier endOfStatement
304+
enumerationStmt_Constant*
305+
END_ENUM
304306
;
305307

306308
enumerationStmt_Constant : identifier (whiteSpace? EQ whiteSpace? expression)? endOfStatement;
@@ -317,22 +319,22 @@ eventStmt : (visibility whiteSpace)? EVENT whiteSpace identifier whiteSpace? arg
317319
exitStmt : EXIT_DO | EXIT_FOR | EXIT_FUNCTION | EXIT_PROPERTY | EXIT_SUB;
318320

319321
forEachStmt :
320-
FOR whiteSpace EACH whiteSpace expression whiteSpace IN whiteSpace expression endOfStatement
321-
block
322-
NEXT (whiteSpace expression)?
322+
FOR whiteSpace EACH whiteSpace expression whiteSpace IN whiteSpace expression endOfStatement
323+
block
324+
NEXT (whiteSpace expression)?
323325
;
324326

325327
// expression EQ expression refactored to expression to allow SLL
326328
forNextStmt :
327-
FOR whiteSpace expression whiteSpace TO whiteSpace expression (whiteSpace STEP whiteSpace expression)? endOfStatement
328-
block
329-
NEXT (whiteSpace expression)?
329+
FOR whiteSpace expression whiteSpace TO whiteSpace expression (whiteSpace STEP whiteSpace expression)? endOfStatement
330+
block
331+
NEXT (whiteSpace expression)?
330332
;
331333

332334
functionStmt :
333-
(visibility whiteSpace)? (STATIC whiteSpace)? FUNCTION whiteSpace? functionName (whiteSpace? argList)? (whiteSpace? asTypeClause)? endOfStatement
334-
block
335-
END_FUNCTION
335+
(visibility whiteSpace)? (STATIC whiteSpace)? FUNCTION whiteSpace? functionName (whiteSpace? argList)? (whiteSpace? asTypeClause)? endOfStatement
336+
block
337+
END_FUNCTION
336338
;
337339
functionName : identifier;
338340

@@ -386,21 +388,21 @@ onGoToStmt : ON whiteSpace expression whiteSpace GOTO whiteSpace expression (whi
386388
onGoSubStmt : ON whiteSpace expression whiteSpace GOSUB whiteSpace expression (whiteSpace? COMMA whiteSpace? expression)*;
387389

388390
propertyGetStmt :
389-
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_GET whiteSpace functionName (whiteSpace? argList)? (whiteSpace asTypeClause)? endOfStatement
390-
block
391-
END_PROPERTY
391+
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_GET whiteSpace functionName (whiteSpace? argList)? (whiteSpace asTypeClause)? endOfStatement
392+
block
393+
END_PROPERTY
392394
;
393395

394396
propertySetStmt :
395-
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_SET whiteSpace subroutineName (whiteSpace? argList)? endOfStatement
396-
block
397-
END_PROPERTY
397+
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_SET whiteSpace subroutineName (whiteSpace? argList)? endOfStatement
398+
block
399+
END_PROPERTY
398400
;
399401

400402
propertyLetStmt :
401-
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_LET whiteSpace subroutineName (whiteSpace? argList)? endOfStatement
402-
block
403-
END_PROPERTY
403+
(visibility whiteSpace)? (STATIC whiteSpace)? PROPERTY_LET whiteSpace subroutineName (whiteSpace? argList)? endOfStatement
404+
block
405+
END_PROPERTY
404406
;
405407

406408
// 5.4.2.20 RaiseEvent Statement
@@ -454,16 +456,16 @@ selectEndValue : expression;
454456
setStmt : SET whiteSpace lExpression whiteSpace? EQ whiteSpace? expression;
455457

456458
subStmt :
457-
(visibility whiteSpace)? (STATIC whiteSpace)? SUB whiteSpace? subroutineName (whiteSpace? argList)? endOfStatement
458-
block
459-
END_SUB
459+
(visibility whiteSpace)? (STATIC whiteSpace)? SUB whiteSpace? subroutineName (whiteSpace? argList)? endOfStatement
460+
block
461+
END_SUB
460462
;
461463
subroutineName : identifier;
462464

463465
typeStmt :
464-
(visibility whiteSpace)? TYPE whiteSpace identifier endOfStatement
465-
typeStmt_Element*
466-
END_TYPE
466+
(visibility whiteSpace)? TYPE whiteSpace identifier endOfStatement
467+
typeStmt_Element*
468+
END_TYPE
467469
;
468470

469471
typeStmt_Element : identifier (whiteSpace? LPAREN (whiteSpace? subscripts)? whiteSpace? RPAREN)? (whiteSpace asTypeClause)? endOfStatement;
@@ -473,15 +475,15 @@ variableListStmt : variableSubStmt (whiteSpace? COMMA whiteSpace? variableSubStm
473475
variableSubStmt : identifier (whiteSpace? LPAREN whiteSpace? (subscripts whiteSpace?)? RPAREN whiteSpace?)? (whiteSpace asTypeClause)?;
474476

475477
whileWendStmt :
476-
WHILE whiteSpace expression endOfStatement
477-
block
478-
WEND
478+
WHILE whiteSpace expression endOfStatement
479+
block
480+
WEND
479481
;
480482

481483
withStmt :
482-
WITH whiteSpace expression endOfStatement
483-
block
484-
END_WITH
484+
WITH whiteSpace expression endOfStatement
485+
block
486+
END_WITH
485487
;
486488

487489
// Special forms with special syntax, only available in a report.
@@ -533,20 +535,20 @@ expression :
533535
| LPAREN whiteSpace? expression whiteSpace? RPAREN # parenthesizedExpr
534536
| TYPEOF whiteSpace expression # typeofexpr // To make the grammar SLL, the type-of-is-expression is actually the child of an IS relational op.
535537
| NEW whiteSpace expression # newExpr
536-
| expression whiteSpace? POW whiteSpace? expression # powOp
537-
| MINUS whiteSpace? expression # unaryMinusOp
538-
| expression whiteSpace? (MULT | DIV) whiteSpace? expression # multOp
539-
| expression whiteSpace? INTDIV whiteSpace? expression # intDivOp
540-
| expression whiteSpace? MOD whiteSpace? expression # modOp
541-
| expression whiteSpace? (PLUS | MINUS) whiteSpace? expression # addOp
542-
| expression whiteSpace? AMPERSAND whiteSpace? expression # concatOp
543-
| expression whiteSpace? (EQ | NEQ | LT | GT | LEQ | GEQ | LIKE | IS) whiteSpace? expression # relationalOp
544-
| NOT whiteSpace? expression # logicalNotOp
545-
| expression whiteSpace? AND whiteSpace? expression # logicalAndOp
546-
| expression whiteSpace? OR whiteSpace? expression # logicalOrOp
547-
| expression whiteSpace? XOR whiteSpace? expression # logicalXorOp
548-
| expression whiteSpace? EQV whiteSpace? expression # logicalEqvOp
549-
| expression whiteSpace? IMP whiteSpace? expression # logicalImpOp
538+
| expression whiteSpace? POW whiteSpace? expression # powOp
539+
| MINUS whiteSpace? expression # unaryMinusOp
540+
| expression whiteSpace? (MULT | DIV) whiteSpace? expression # multOp
541+
| expression whiteSpace? INTDIV whiteSpace? expression # intDivOp
542+
| expression whiteSpace? MOD whiteSpace? expression # modOp
543+
| expression whiteSpace? (PLUS | MINUS) whiteSpace? expression # addOp
544+
| expression whiteSpace? AMPERSAND whiteSpace? expression # concatOp
545+
| expression whiteSpace? (EQ | NEQ | LT | GT | LEQ | GEQ | LIKE | IS) whiteSpace? expression # relationalOp
546+
| NOT whiteSpace? expression # logicalNotOp
547+
| expression whiteSpace? AND whiteSpace? expression # logicalAndOp
548+
| expression whiteSpace? OR whiteSpace? expression # logicalOrOp
549+
| expression whiteSpace? XOR whiteSpace? expression # logicalXorOp
550+
| expression whiteSpace? EQV whiteSpace? expression # logicalEqvOp
551+
| expression whiteSpace? IMP whiteSpace? expression # logicalImpOp
550552
| HASH expression # markedFileNumberExpr // Added to support special forms such as Input(file1, #file1)
551553
;
552554

@@ -815,11 +817,11 @@ annotationList : SINGLEQUOTE (AT annotation whiteSpace?)+;
815817
annotation : annotationName annotationArgList?;
816818
annotationName : unrestrictedIdentifier;
817819
annotationArgList :
818-
whiteSpace annotationArg
819-
| whiteSpace annotationArg (whiteSpace? COMMA whiteSpace? annotationArg)+
820-
| whiteSpace? LPAREN whiteSpace? RPAREN
821-
| whiteSpace? LPAREN whiteSpace? annotationArg whiteSpace? RPAREN
822-
| whiteSpace? LPAREN annotationArg (whiteSpace? COMMA whiteSpace? annotationArg)+ whiteSpace? RPAREN;
820+
whiteSpace annotationArg
821+
| whiteSpace annotationArg (whiteSpace? COMMA whiteSpace? annotationArg)+
822+
| whiteSpace? LPAREN whiteSpace? RPAREN
823+
| whiteSpace? LPAREN whiteSpace? annotationArg whiteSpace? RPAREN
824+
| whiteSpace? LPAREN annotationArg (whiteSpace? COMMA whiteSpace? annotationArg)+ whiteSpace? RPAREN;
823825
annotationArg : expression;
824826

825827
mandatoryLineContinuation : LINE_CONTINUATION WS*;

Rubberduck.Parsing/Grammar/VBAParserBaseListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// </auto-generated>
99
//------------------------------------------------------------------------------
1010

11-
// Generated from C:\Users\Splinter\Documents\Visual Studio 2015\Projects\RubberduckParserTest\RubberduckParserTest\VBAParser.g4 by ANTLR 4.3
11+
// Generated from C:\Users\hosch\Documents\Visual Studio 2015\Projects\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3
1212

1313
// Unreachable code detected
1414
#pragma warning disable 0162

Rubberduck.Parsing/Grammar/VBAParserBaseVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// </auto-generated>
99
//------------------------------------------------------------------------------
1010

11-
// Generated from C:\Users\Splinter\Documents\Visual Studio 2015\Projects\RubberduckParserTest\RubberduckParserTest\VBAParser.g4 by ANTLR 4.3
11+
// Generated from C:\Users\hosch\Documents\Visual Studio 2015\Projects\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3
1212

1313
// Unreachable code detected
1414
#pragma warning disable 0162

Rubberduck.Parsing/Grammar/VBAParserListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
// </auto-generated>
99
//------------------------------------------------------------------------------
1010

11-
// Generated from C:\Users\Splinter\Documents\Visual Studio 2015\Projects\RubberduckParserTest\RubberduckParserTest\VBAParser.g4 by ANTLR 4.3
11+
// Generated from C:\Users\hosch\Documents\Visual Studio 2015\Projects\Rubberduck\Rubberduck.Parsing\Grammar\VBAParser.g4 by ANTLR 4.3
1212

1313
// Unreachable code detected
1414
#pragma warning disable 0162

0 commit comments

Comments
 (0)