Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4cd8396
Merge pull request #1151 from retailcoder/CodeExplorer
retailcoder Feb 28, 2016
6244087
Merge pull request #1154 from retailcoder/CodeExplorer
retailcoder Feb 29, 2016
651dce8
first preprocessor (interpreter approach) (#1132)
Feb 29, 2016
eb1d42b
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck i…
Feb 29, 2016
94af0bc
Merge pull request #1159 from retailcoder/CodeExplorer
retailcoder Mar 1, 2016
67510c1
bug fixes and minor cleanups (#1132)
Mar 1, 2016
90915bd
fix name evaluation bugs (#1132)
Mar 1, 2016
6d75457
fix date literal bugs + add more date literal tests (#1132)
Mar 1, 2016
640644a
Merge pull request #1163 from retailcoder/CodeExplorer
retailcoder Mar 2, 2016
609f8f8
fix like pattern special char bugs
Mar 2, 2016
67f4810
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck i…
Mar 2, 2016
8ed900e
remove macro/compilation directives (removed by preprocessor)
Mar 2, 2016
66033ec
fix failing tests because of missing vbe.Version mock property
Mar 2, 2016
a77bda2
add EMPTY keyword
Mar 2, 2016
e8f6b04
add different locale parsing test
Mar 2, 2016
c06ef2e
Merge pull request #1168 from retailcoder/CodeExplorer
retailcoder Mar 3, 2016
3641b0b
move to expression ast for easier maintenance
Mar 4, 2016
a44c320
consider declared option compare method when comparing strings
Mar 4, 2016
56d8523
add vbaparser tests based on real world code
Mar 4, 2016
5df7a89
add preprocessor validity tests
Mar 4, 2016
e7a055e
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck i…
Mar 4, 2016
9e88a71
Merge pull request #1170 from autoboosh/interpreter
retailcoder Mar 4, 2016
8437dfc
make preprocessor always use "option compare text" mode
Mar 4, 2016
68265a9
Merge pull request #1172 from autoboosh/optioncompare
retailcoder Mar 4, 2016
942b5f7
fix binary plus operator handling of Empty and String
Mar 5, 2016
77f429e
add test to make sure we're always operating in "option compare text"…
Mar 5, 2016
1044b9c
Merge pull request #1175 from autoboosh/emptyfix
retailcoder Mar 8, 2016
bfcaad0
fix .Parse culture dependency (fixes #1178)
Mar 9, 2016
6228d70
Merge pull request #1180 from autoboosh/doubleparsefix
retailcoder Mar 9, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 29 additions & 36 deletions Rubberduck.Parsing/Grammar/VBA.g4
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,16 @@ moduleOption :
;

moduleDeclarationsElement :
comment
| declareStmt
declareStmt
| enumerationStmt
| eventStmt
| constStmt
| implementsStmt
| variableStmt
| moduleOption
| typeStmt
| macroStmt
;

macroStmt :
macroConstStmt
| macroIfThenElseStmt;

moduleBody :
moduleBodyElement (endOfStatement moduleBodyElement)* endOfStatement;

Expand All @@ -83,7 +77,6 @@ moduleBodyElement :
| propertySetStmt
| propertyLetStmt
| subStmt
| macroStmt
;


Expand Down Expand Up @@ -126,7 +119,6 @@ blockStmt :
| loadStmt
| lockStmt
| lsetStmt
| macroStmt
| midStmt
| mkdirStmt
| nameStmt
Expand Down Expand Up @@ -291,25 +283,6 @@ lockStmt : LOCK WS valueStmt (WS? ',' WS? valueStmt (WS TO WS valueStmt)?)?;

lsetStmt : LSET WS implicitCallStmt_InStmt WS? EQ WS? valueStmt;

macroConstStmt : MACRO_CONST WS? ambiguousIdentifier WS? EQ WS? valueStmt;

macroIfThenElseStmt : macroIfBlockStmt macroElseIfBlockStmt* macroElseBlockStmt? MACRO_END_IF;

macroIfBlockStmt :
MACRO_IF WS? ifConditionStmt WS THEN endOfStatement
(moduleDeclarations | moduleBody | block)*
;

macroElseIfBlockStmt :
MACRO_ELSEIF WS? ifConditionStmt WS THEN endOfStatement
(moduleDeclarations | moduleBody | block)*
;

macroElseBlockStmt :
MACRO_ELSE endOfStatement
(moduleDeclarations | moduleBody | block)*
;

midStmt : MID WS? LPAREN WS? argsCall WS? RPAREN;

mkdirStmt : MKDIR WS valueStmt;
Expand Down Expand Up @@ -585,7 +558,7 @@ letterrange : certainIdentifier (WS? MINUS WS? certainIdentifier)?;

lineLabel : ambiguousIdentifier ':';

literal : HEXLITERAL | OCTLITERAL | DATELITERAL | DOUBLELITERAL | INTEGERLITERAL | SHORTLITERAL | STRINGLITERAL | TRUE | FALSE | NOTHING | NULL;
literal : HEXLITERAL | OCTLITERAL | DATELITERAL | DOUBLELITERAL | INTEGERLITERAL | SHORTLITERAL | STRINGLITERAL | TRUE | FALSE | NOTHING | NULL | EMPTY;

type : (baseType | complexType) (WS? LPAREN WS? RPAREN)?;

Expand Down Expand Up @@ -676,6 +649,7 @@ DOUBLE : D O U B L E;
EACH : E A C H;
ELSE : E L S E;
ELSEIF : E L S E I F;
EMPTY : E M P T Y;
END_ENUM : E N D WS E N U M;
END_FUNCTION : E N D WS F U N C T I O N;
END_IF : E N D WS I F;
Expand Down Expand Up @@ -725,11 +699,6 @@ LOCK_READ : L O C K WS R E A D;
LOCK_WRITE : L O C K WS W R I T E;
LOCK_READ_WRITE : L O C K WS R E A D WS W R I T E;
LSET : L S E T;
MACRO_CONST : '#' C O N S T;
MACRO_IF : '#' I F;
MACRO_ELSEIF : '#' E L S E I F;
MACRO_ELSE : '#' E L S E;
MACRO_END_IF : '#' E N D WS? I F;
ME : M E;
MID : M I D;
MKDIR : M K D I R;
Expand Down Expand Up @@ -845,12 +814,36 @@ fragment DATEVALUE : DATEVALUEPART DATESEPARATOR DATEVALUEPART (DATESEPARATOR DA
fragment DATEVALUEPART : DIGIT+ | MONTHNAME;
fragment DATESEPARATOR : WS? [/,-]? WS?;
fragment MONTHNAME : ENGLISHMONTHNAME | ENGLISHMONTHABBREVIATION;
fragment ENGLISHMONTHNAME : J A N U A R Y | F E B R U A R Y | M A R C H | A P R I L | M A Y | J U N E | A U G U S T | S E P T E M B E R | O C T O B E R | N O V E M B E R | D E C E M B E R;
fragment ENGLISHMONTHABBREVIATION : J A N | F E B | M A R | A P R | J U N | J U L | A U G | S E P | O C T | N O V | D E C;
fragment ENGLISHMONTHNAME : JANUARY | FEBRUARY | MARCH | APRIL | MAY | JUNE | JULY | AUGUST | SEPTEMBER | OCTOBER | NOVEMBER | DECEMBER;
fragment ENGLISHMONTHABBREVIATION : JAN | FEB | MAR | APR | JUN | JUL | AUG | SEP | OCT | NOV | DEC;
fragment TIMEVALUE : DIGIT+ AMPM | DIGIT+ TIMESEPARATOR DIGIT+ (TIMESEPARATOR DIGIT+)? AMPM?;
fragment TIMESEPARATOR : WS? (':' | '.') WS?;
fragment AMPM : WS? (A M | P M | A | P);

JANUARY : J A N U A R Y;
FEBRUARY : F E B R U A R Y;
MARCH : M A R C H;
APRIL : A P R I L;
MAY : M A Y;
JUNE : J U N E;
JULY : J U L Y;
AUGUST : A U G U S T;
SEPTEMBER : S E P T E M B E R;
OCTOBER : O C T O B E R;
NOVEMBER : N O V E M B E R;
DECEMBER : D E C E M B E R;
JAN : J A N;
FEB : F E B;
MAR: M A R;
APR : A P R;
JUN : J U N;
JUL: J U L;
AUG : A U G;
SEP : S E P;
OCT : O C T;
NOV : N O V;
DEC : D E C;

// whitespace, line breaks, comments, ...
LINE_CONTINUATION : [ \t]+ UNDERSCORE '\r'? '\n' -> skip;
NEWLINE : [\r\n\u2028\u2029]+;
Expand Down
Loading