-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMATLABParser.g4
136 lines (112 loc) · 2.3 KB
/
MATLABParser.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
parser grammar MATLABParser;
options { tokenVocab=MATLABLexer;}
fileDecl
: (functionDecl | classDecl)? (functionDecl* | partialFunctionDecl*)
| partialFunctionDecl+
| statBlock+ // Script
| EOF
;
endStat
: (NL|COMMA|SEMI) NL*
;
endStatNL
: NL+
;
// Function declaration without the closing end
partialFunctionDecl
: FUNCTION outArgs? ID inArgs? endStat statBlock*
;
// Normal function declaration including closing end
functionDecl
: partialFunctionDecl END endStatNL NL*
;
// Functions inside method blocks can be comma or semi separated
methodDecl
: partialFunctionDecl END endStat
;
classDecl
: CLASSDEF ID endStat
(propBlockDecl|methodBlockDecl)*
END (EOF|endStat) NL*
;
propBlockDecl
: PROPERTIES endStat prop* END endStat
;
methodBlockDecl
: METHODS endStat methodDecl* END endStat
;
outArgs
: ID EQUALS
| LBRACK ID (COMMA ID)* RBRACK EQUALS
;
inArgs
: LPAREN ID (COMMA ID)* RPAREN
| LPAREN RPAREN
;
prop
: ID (EQUALS expr)? endStat
;
dotRef
: ID (DOT ID)*
;
statBlock
: (stat endStat)
;
ifStat
: IF expr endStat statBlock*
(ELSEIF expr endStat statBlock*)*
(ELSE endStat? statBlock*)?
END
;
whileStat
: WHILE expr endStat statBlock* END
;
caseStat
: SWITCH expr endStat
(CASE expr endStat statBlock*)*
(OTHERWISE endStat statBlock*)?
END
;
stat
: dotRef EQUALS expr
| ifStat
| whileStat
| caseStat
| expr
| NL
;
arrayExpr
: LBRACK exprArrayList RBRACK
| LBRACK RBRACK
;
cellExpr
: LBRACE exprArrayList RBRACE
| LBRACE RBRACE
;
expr
: expr LPAREN exprList RPAREN
| expr (TRANS|CTRANS)
| expr (MPOW|POW) expr
| (PLUS|MINUS|NOT) expr
| expr (MTIMES|TIMES|MLDIVIDE|LDIVIDE|MRDIVIDE|RDIVIDE) expr
| expr (PLUS|MINUS) expr
| expr COLON expr
| expr (NOT|EQUALTO|GT|LT|GE|LE) expr
| expr VECAND expr
| expr VECOR expr
| expr SCALAND expr
| expr SCALOR expr
| dotRef
| INT | FLOAT | SCI
| STRING
| arrayExpr
| cellExpr
| LPAREN expr RPAREN
;
exprList
: expr (',' expr)*
;
exprArrayList
: expr (COMMA? exprArrayList)* #hcat
| expr ((SEMI|NL) exprArrayList)* #vcat
;