13
13
elementTypeClass="co.anbora.labs.firebase.lang.core.psi.FirebaseElementType"
14
14
tokenTypeClass="co.anbora.labs.firebase.lang.core.psi.FirebaseTokenType"
15
15
16
+ extends(".+Expression") = Expression
17
+
16
18
tokens = [
17
19
WHITE_SPACE='WHITE_SPACE'
18
20
LP = '('
19
21
RP = ')'
20
22
LB = '['
21
23
RB = ']'
24
+ LEFT_BRACE = '{'
25
+ RIGHT_BRACE = '}'
22
26
number='regexp:\d+(\.\d*)?'
23
27
string="regexp:('([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")"
28
+ SLASH = '/'
24
29
op = '->'
25
30
COLON = ':'
26
31
COMMA = ','
27
32
EQ = '='
28
33
DOT = '.'
34
+ DOT_COMMA = ';'
29
35
char = 'regexp:[\n\r\u2028\u2029]'
30
36
LINE_COMMENT='LINE_COMMENT'
31
37
BLOCK_COMMENT='BLOCK_COMMENT'
34
40
}
35
41
36
42
root ::= !<<eof>> property
43
+ {pin=1}
37
44
38
- property ::= RuleVersionStatement? (FunctionStatement)* ServiceStatement
45
+ private property ::= RuleVersionDef? (FunctionDef)* ServiceDef {
46
+ pin=1
47
+ }
39
48
40
- RuleVersionStatement ::= RULES_VERSION EQ VERSIONS DOT_COMMA
49
+ // top-level recovery
50
+ private Item_first ::= function | match | service | allow
51
+ private Item_recover ::= !('}' | <<eof>> | Item_first)
41
52
42
- ServiceStatement ::= SERVICE_KEYWORD SERVICE_NAME ServiceBlock
53
+ RuleVersionDef ::= RULES_VERSION EQ VERSIONS DOT_COMMA {
54
+ pin=1
55
+ }
43
56
44
- ServiceBlock ::= LEFT_BRACE (MatchStatement)+ RIGHT_BRACE
57
+ //Service Definition Begin
58
+ ServiceDef ::= SERVICE_KEYWORD SERVICE_NAME ServiceBlock
59
+ {
60
+ pin=1
61
+ recoverWhile=ServiceDef_recover
62
+ }
63
+ private ServiceDef_recover ::= !(SERVICE_KEYWORD SERVICE_NAME)
45
64
46
- MatchStatement ::= MATCH_KEYWORD FullPathStatement MatchBlock
65
+ ServiceBlock ::= LEFT_BRACE ServiceBlockItems RIGHT_BRACE
66
+ {
67
+ pin=1
68
+ }
69
+ private ServiceBlockItems ::= !('}' | <<eof>>) ServiceItems+
70
+ {
71
+ pin=1
72
+ recoverWhile=Item_recover
73
+ }
74
+ private ServiceItems ::= MatchDef | FunctionDef
75
+ //Service Definition End
47
76
48
- MatchBlock ::= LEFT_BRACE (AllowStatement|MatchStatement|FunctionStatement)+ RIGHT_BRACE
77
+ //Match Definition Begin
78
+ MatchDef ::= MATCH_KEYWORD FullPathStatement MatchBlock
79
+ {
80
+ pin=1
81
+ }
49
82
50
- FullPathStatement ::= (SLASH PathStatement)+
83
+ MatchBlock ::= LEFT_BRACE MatchBlockItems RIGHT_BRACE
84
+ {
85
+ pin=1
86
+ }
87
+ private MatchBlockItems ::= !('}' | <<eof>>) MatchItems+ {
88
+ pin=1
89
+ recoverWhile=Item_recover
90
+ }
91
+ private MatchItems ::= AllowStatement | MatchDef | FunctionDef
92
+
93
+ FullPathStatement ::= FullPathStatementItem+
94
+ {
95
+ pin=1
96
+ }
97
+
98
+ private FullPathStatementItem ::= !('{') SLASH PathStatement {
99
+ pin=1
100
+ recoverWhile=FullPathStatementItem_recover
101
+ }
102
+ private FullPathStatementItem_recover ::= !(SLASH | '{' | IDENTIFIER | PATH_VARIABLE)
103
+ //Match Definition End
51
104
52
105
PathStatement ::= (IDENTIFIER|PATH_VARIABLE)
53
106
107
+ //Allow Statement Begin
54
108
AllowStatement ::= ALLOW_KEYWORD PermissionStatement COLON ConditionalStatement DOT_COMMA
109
+ {
110
+ pin=1
111
+ }
55
112
56
- PermissionKeyWord ::= (GET_KEYWORD| READ_KEYWORD| WRITE_KEYWORD| LIST_KEYWORD
57
- |CREATE_KEYWORD| UPDATE_KEYWORD| DELETE_KEYWORD)
113
+ PermissionKeyWord ::= (GET_KEYWORD | READ_KEYWORD | WRITE_KEYWORD | LIST_KEYWORD
114
+ | CREATE_KEYWORD | UPDATE_KEYWORD | DELETE_KEYWORD)
58
115
59
- PermissionStatement ::= PermissionKeyWord (COMMA PermissionKeyWord)*
116
+ PermissionStatement ::= PermissionStatementItem+
117
+ {
118
+ pin=1
119
+ }
120
+ private PermissionStatementItem ::= !(':') PermissionKeyWord (',' | &':') {
121
+ pin=1
122
+ recoverWhile=Permission_recover
123
+ }
124
+ private Permission_recover ::= !(':' | GET_KEYWORD | READ_KEYWORD | WRITE_KEYWORD | LIST_KEYWORD
125
+ | CREATE_KEYWORD | UPDATE_KEYWORD | DELETE_KEYWORD)
60
126
61
- ConditionalStatement ::= IF_KEYWORD ConditionalExpression
127
+ ConditionalStatement ::= IF_KEYWORD ConditionalExpression {
128
+ pin=1
129
+ }
62
130
63
131
ConditionalExpression ::= Expression (BooleanOperator Expression)*
132
+ //Allow Statement End
64
133
65
134
ObjectStatement ::= IDENTIFIER(DOT IDENTIFIER)*
66
135
67
- ObjectMethodCallStatement ::= (BuiltInFunctionStatement|ArrayLiteralStatement (DOT IDENTIFIER)*|ObjectStatement)FunctionParameterStatement?
136
+ ObjectMethodCallStatement ::= (BuiltInFunctionStatement|ArrayLiteralStatement (DOT IDENTIFIER)*|ObjectStatement)FunctionParameterStatement?ArrayLiteralStatement?
68
137
69
138
CallFunctionStatement ::= ObjectMethodCallStatement (DOT ObjectMethodCallStatement)*
70
139
71
- FunctionDeclarationStatement ::= IDENTIFIER FunctionParameterStatement
72
-
73
- FunctionParameterStatement ::= LP ParameterStatement? RP
74
-
75
- ParameterStatement ::= Expression(COMMA Expression)*
76
-
77
140
FullBuiltInParameterStatement ::= (SLASH PathBuiltInParameterStatement)+
78
141
79
142
PathBuiltInParameterStatement ::= (IDENTIFIER|PATH_BUILT_IN)
80
143
81
144
BuiltInFunctionStatement ::= (GET_KEYWORD|EXITS_KEYWORD)
82
145
83
- FunctionStatement ::= FUNCTION_KEYWORD FunctionDeclarationStatement FunctionBlock
146
+ //Function Definition Begin
147
+ FunctionDef ::= FUNCTION_KEYWORD IDENTIFIER FunctionParameterList FunctionBlock
148
+ {
149
+ pin=1
150
+ }
84
151
85
- FunctionBlock ::= LEFT_BRACE (VariableStatement*) ReturnStatement RIGHT_BRACE
152
+ FunctionParameterList ::= '(' FunctionParameter_with_recover* ')'
153
+ {
154
+ pin = 1
155
+ }
156
+
157
+ private FunctionParameter_with_recover ::= !(')' | '{' | ';') FunctionParameter (',' | &')')
158
+ {
159
+ pin = 1
160
+ recoverWhile = FunctionParameter_recover
161
+ }
162
+ private FunctionParameter_recover ::= !(')' | '{' | ';' | IDENTIFIER)
86
163
87
- ReturnStatement ::= RETURN_KEYWORD ConditionalExpression DOT_COMMA
164
+ FunctionParameter ::= IDENTIFIER
165
+ {
166
+ pin = 1
167
+ }
168
+
169
+ FunctionBlock ::= LEFT_BRACE FunctionBlockItems RIGHT_BRACE
170
+ {
171
+ pin = 1
172
+ }
173
+ private FunctionBlockItems ::= !('}' | <<eof>>) VariableStatement* ReturnStatement
174
+ {
175
+ pin = 1
176
+ recoverWhile = Item_recover
177
+ }
178
+ //Function Definition Ends
179
+
180
+ FunctionParameterStatement ::= LP ParameterStatement? RP
181
+
182
+ ParameterStatement ::= Expression(COMMA Expression)*
183
+
184
+ ReturnStatement ::= RETURN_KEYWORD ConditionalExpression DOT_COMMA {
185
+ pin=1
186
+ }
88
187
89
188
Expression ::= BooleanStatement
90
189
| CallFunctionStatement
@@ -95,6 +194,7 @@ Expression ::= BooleanStatement
95
194
| ParenthesizedExpression
96
195
| NegatedExpression
97
196
| FullBuiltInParameterStatement
197
+ { name="expr" }
98
198
99
199
ParenthesizedExpression ::=
100
200
LP ConditionalExpression RP
0 commit comments