Revision 44750 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/grammars/BasicGrammarFactory.java
BasicGrammarFactory.java | ||
---|---|---|
3 | 3 |
import org.gvsig.expressionevaluator.Code; |
4 | 4 |
import org.gvsig.expressionevaluator.Code.Caller; |
5 | 5 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_CAST; |
6 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DATE; |
|
7 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_EXTRACT; |
|
6 | 8 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LIST; |
9 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TIME; |
|
10 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TIMESTAMP; |
|
7 | 11 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_REGEXP; |
8 | 12 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
9 | 13 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
... | ... | |
20 | 24 |
import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockWithExceptFunction; |
21 | 25 |
import org.gvsig.expressionevaluator.impl.function.programming.CreateFnFunction; |
22 | 26 |
import org.gvsig.expressionevaluator.impl.function.programming.ForEachFunction; |
23 |
import org.gvsig.expressionevaluator.impl.function.programming.ForFunction; |
|
24 | 27 |
import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction; |
25 | 28 |
import org.gvsig.expressionevaluator.impl.function.programming.WhileFunction; |
26 | 29 |
import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory; |
... | ... | |
87 | 90 |
theGrammar.addReservedWord("CAST"); |
88 | 91 |
theGrammar.addReservedWord("SET"); |
89 | 92 |
theGrammar.addReservedWord("TO"); |
93 |
theGrammar.addReservedWord("FROM"); |
|
90 | 94 |
theGrammar.addReservedWord("$$"); // ???? Asi van las funciones |
91 | 95 |
|
92 | 96 |
stmt = theGrammar.createStatement("BLOCK"); |
93 | 97 |
stmt.addRule(stmt.require_any_token("BEGIN")); |
94 |
stmt.addRule(stmt.require_expressions("VALUES", ";"));
|
|
98 |
stmt.addRule(stmt.require_expressions(";").capture_as("VALUES"));
|
|
95 | 99 |
stmt.addRule(stmt.optional_any_token("EXCEPT") |
96 |
.addRuleOnTrue(stmt.require_expressions("EXCEPT", ";"))
|
|
100 |
.addRuleOnTrue(stmt.require_expressions(";").capture_as("EXCEPT"))
|
|
97 | 101 |
); |
98 | 102 |
stmt.addRule(stmt.require_any_token("END")); |
99 | 103 |
stmt.builder(new BeginStatementBuilder("VALUES","EXCEPT")); |
... | ... | |
101 | 105 |
|
102 | 106 |
stmt = theGrammar.createStatement("IF"); |
103 | 107 |
stmt.addRule(stmt.require_any_token("IF")); |
104 |
stmt.addRule(stmt.require_expression("CONDITION")); |
|
108 |
stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
|
|
105 | 109 |
stmt.addRule(stmt.require_any_token("THEN", ":")); |
106 |
stmt.addRule(stmt.require_expressions("ONTRUE", ";"));
|
|
110 |
stmt.addRule(stmt.require_expressions(";").capture_as("ONTRUE"));
|
|
107 | 111 |
stmt.addRule(stmt.optional_any_token("ELSE") |
108 | 112 |
.addRuleOnTrue(stmt.optional_any_token(":")) |
109 |
.addRuleOnTrue(stmt.require_expressions("ONFALSE", ";"))
|
|
113 |
.addRuleOnTrue(stmt.require_expressions(";").capture_as("ONFALSE"))
|
|
110 | 114 |
); |
111 | 115 |
stmt.addRule(stmt.require_any_token("END")); |
112 | 116 |
stmt.addRule(stmt.optional_any_token("IF")); |
... | ... | |
118 | 122 |
|
119 | 123 |
stmt = theGrammar.createStatement("WHILE"); |
120 | 124 |
stmt.addRule(stmt.require_any_token("WHILE")); |
121 |
stmt.addRule(stmt.require_expression("CONDITION")); |
|
125 |
stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
|
|
122 | 126 |
stmt.addRule(stmt.require_any_token("BEGIN", ":")); |
123 |
stmt.addRule(stmt.require_expressions("BODY", ";"));
|
|
127 |
stmt.addRule(stmt.require_expressions(";").capture_as("BODY"));
|
|
124 | 128 |
stmt.addRule(stmt.require_any_token("END")); |
125 | 129 |
stmt.addRule(stmt.optional_any_token("WHILE")); |
126 | 130 |
stmt.code( |
... | ... | |
148 | 152 |
|
149 | 153 |
stmt = theGrammar.createStatement("FOREACH"); |
150 | 154 |
stmt.addRule(stmt.require_any_token("FOR")); |
151 |
stmt.addRule(stmt.require_identifier("VAR")); |
|
155 |
stmt.addRule(stmt.require_identifier().capture_as("VAR"));
|
|
152 | 156 |
stmt.addRule(stmt.require_any_token("IN")); |
153 |
stmt.addRule(stmt.require_expression("ITERABLE")); |
|
157 |
stmt.addRule(stmt.require_expression().capture_as("ITERABLE"));
|
|
154 | 158 |
stmt.addRule(stmt.require_any_token("BEGIN", ":")); |
155 |
stmt.addRule(stmt.require_expressions("BODY", ";"));
|
|
159 |
stmt.addRule(stmt.require_expressions(";").capture_as("BODY"));
|
|
156 | 160 |
stmt.addRule(stmt.require_any_token("END")); |
157 | 161 |
stmt.addRule(stmt.optional_any_token("FOR")); |
158 | 162 |
stmt.code( |
... | ... | |
166 | 170 |
stmt.addRule( |
167 | 171 |
stmt.repeat_until_any_tokens("END","ELSE") |
168 | 172 |
.addRule(stmt.require_any_token("WHEN")) |
169 |
.addRule(stmt.require_expressions("CONDITION#",";"))
|
|
173 |
.addRule(stmt.require_expressions(";").capture_as("CONDITION#"))
|
|
170 | 174 |
.addRule(stmt.require_any_token("THEN",":")) |
171 |
.addRule(stmt.require_expressions("ONTRUE#", ";"))
|
|
175 |
.addRule(stmt.require_expressions(";").capture_as("ONTRUE#"))
|
|
172 | 176 |
); |
173 | 177 |
stmt.addRule(stmt.optional_any_token("ELSE") |
174 | 178 |
.addRuleOnTrue(stmt.optional_any_token(":")) |
175 |
.addRuleOnTrue(stmt.require_expressions("ELSE",";"))
|
|
179 |
.addRuleOnTrue(stmt.require_expressions(";").capture_as("ELSE"))
|
|
176 | 180 |
); |
177 | 181 |
stmt.addRule(stmt.require_any_token("END")); |
178 | 182 |
stmt.addRule(stmt.optional_any_token("CASE")); |
... | ... | |
185 | 189 |
stmt = theGrammar.createStatement("USERFUNCTION"); |
186 | 190 |
stmt.addRule(stmt.require_any_token("CREATE")); |
187 | 191 |
stmt.addRule(stmt.optional_any_token("FUNCTION", "PROCEDURE")); |
188 |
stmt.addRule(stmt.require_identifier("FUNCTION_NAME")); |
|
192 |
stmt.addRule(stmt.require_identifier().capture_as("FUNCTION_NAME"));
|
|
189 | 193 |
stmt.addRule(stmt.optional_any_token("(")); |
190 |
stmt.addRule(stmt.optional_identifiers("PARAMETERS", ","));
|
|
194 |
stmt.addRule(stmt.optional_identifiers(",").capture_as("PARAMETERS"));
|
|
191 | 195 |
stmt.addRule(stmt.optional_any_token(")")); |
192 | 196 |
stmt.addRule(stmt.require_any_token("AS")); |
193 | 197 |
stmt.addRule(stmt.optional_any_token("$$","BEGIN") |
194 |
.addRuleOnTrue(stmt.require_expressions("BODY", ";"))
|
|
198 |
.addRuleOnTrue(stmt.require_expressions(";").capture_as("BODY"))
|
|
195 | 199 |
.addRuleOnTrue(stmt.require_any_token("$$", "END")) |
196 | 200 |
.addRuleOnTrue(stmt.optional_any_token("FUNCTION", "PROCEDURE")) |
197 |
.addRuleOnFalse(stmt.optional_literal_string("SCRIPT_PATH") |
|
201 |
.addRuleOnFalse(stmt.optional_literal_string().capture_as("SCRIPT_PATH")
|
|
198 | 202 |
.addRuleOnTrue(stmt.require_any_token(",")) |
199 |
.addRuleOnTrue(stmt.require_literal_string("SCRIPT_FUNCTION")) |
|
203 |
.addRuleOnTrue(stmt.require_literal_string().capture_as("SCRIPT_FUNCTION"))
|
|
200 | 204 |
.addRuleOnTrue(stmt.optional_any_token("LANGUAGE") |
201 |
.addRuleOnTrue(stmt.require_literal_string("LANGUAGE")) |
|
205 |
.addRuleOnTrue(stmt.require_literal_string().capture_as("LANGUAGE"))
|
|
202 | 206 |
) |
203 | 207 |
) |
204 | 208 |
); |
... | ... | |
208 | 212 |
// stmt.addRule(stmt.optional_any_token("FUNCTION", "PROCEDURE")); |
209 | 213 |
stmt.code( |
210 | 214 |
CreateFnFunction.NAME, |
211 |
stmt.args_names("FUNCTION_NAME","PARAMETERS","BODY", "SCRIPT_PATH", "SCRIPT_FUNCTION", "LANGUAGE") |
|
215 |
stmt.fixed_args_names("FUNCTION_NAME","PARAMETERS","BODY", "SCRIPT_PATH", "SCRIPT_FUNCTION", "LANGUAGE")
|
|
212 | 216 |
); |
213 | 217 |
theGrammar.addStatement(stmt); |
214 | 218 |
|
... | ... | |
216 | 220 |
stmt.addRule(stmt.require_any_token("RETURN")); |
217 | 221 |
stmt.addRule(stmt.optional_any_token(";") |
218 | 222 |
.addRuleOnTrue(stmt.set_expression("VALUES", null)) |
219 |
.addRuleOnFalse(stmt.require_expression("VALUES")) |
|
223 |
.addRuleOnFalse(stmt.require_expression().capture_as("VALUES"))
|
|
220 | 224 |
.addRuleOnFalse(stmt.require_any_token(";")) |
221 | 225 |
); |
222 | 226 |
stmt.code( |
... | ... | |
244 | 248 |
|
245 | 249 |
stmt = theGrammar.createStatement("LET"); |
246 | 250 |
stmt.addRule(stmt.require_any_token("LET", "SET")); |
247 |
stmt.addRule(stmt.require_identifier("NAME")); |
|
251 |
stmt.addRule(stmt.require_identifier().capture_as("NAME"));
|
|
248 | 252 |
stmt.addRule(stmt.optional_any_token("=","TO")); |
249 |
stmt.addRule(stmt.require_expression("VALUE")); |
|
253 |
stmt.addRule(stmt.require_expression().capture_as("VALUE"));
|
|
250 | 254 |
stmt.code( |
251 | 255 |
LetFunction.NAME, |
252 | 256 |
stmt.args_names("NAME", "VALUE") |
... | ... | |
256 | 260 |
stmt = theGrammar.createStatement("ARRAY"); |
257 | 261 |
stmt.addRule(stmt.require_any_token("ARRAY")); |
258 | 262 |
stmt.addRule(stmt.require_any_token("[")); |
259 |
stmt.addRule(stmt.require_expressions("VALUES",","));
|
|
263 |
stmt.addRule(stmt.require_expressions(",").capture_as("VALUES"));
|
|
260 | 264 |
stmt.addRule(stmt.require_any_token("]")); |
261 | 265 |
stmt.code( |
262 | 266 |
FUNCTION_LIST, |
... | ... | |
267 | 271 |
stmt = theGrammar.createStatement("CAST"); |
268 | 272 |
stmt.addRule(stmt.require_any_token("CAST")); |
269 | 273 |
stmt.addRule(stmt.optional_any_token("(") |
270 |
.addRuleOnTrue(stmt.require_expression("VALUE")) |
|
274 |
.addRuleOnTrue(stmt.require_expression().capture_as("VALUE"))
|
|
271 | 275 |
.addRuleOnTrue(stmt.require_any_token("AS")) |
272 |
.addRuleOnTrue(stmt.require_identifier("TYPE")) |
|
276 |
.addRuleOnTrue(stmt.require_identifier().capture_as("TYPE"))
|
|
273 | 277 |
.addRuleOnTrue(stmt.require_any_token(")")) |
274 |
.addRuleOnFalse(stmt.require_expression("VALUE")) |
|
278 |
.addRuleOnFalse(stmt.require_expression().capture_as("VALUE"))
|
|
275 | 279 |
.addRuleOnFalse(stmt.require_any_token("AS")) |
276 |
.addRuleOnFalse(stmt.require_identifier("TYPE")) |
|
280 |
.addRuleOnFalse(stmt.require_identifier().capture_as("TYPE"))
|
|
277 | 281 |
); |
278 | 282 |
stmt.code( |
279 | 283 |
FUNCTION_CAST, |
... | ... | |
284 | 288 |
stmt = theGrammar.createStatement("MATCH"); |
285 | 289 |
stmt.addRule(stmt.require_any_token("MATCH")); |
286 | 290 |
stmt.addRule(stmt.optional_any_token("(") |
287 |
.addRuleOnTrue(stmt.require_expression("VALUE")) |
|
291 |
.addRuleOnTrue(stmt.require_expression().capture_as("VALUE"))
|
|
288 | 292 |
.addRuleOnTrue(stmt.require_any_token(",")) |
289 |
.addRuleOnTrue(stmt.require_expression("PATTERN")) |
|
293 |
.addRuleOnTrue(stmt.require_expression().capture_as("PATTERN"))
|
|
290 | 294 |
.addRuleOnTrue(stmt.require_any_token(")")) |
291 |
.addRuleOnFalse(stmt.require_expression("VALUE")) |
|
295 |
.addRuleOnFalse(stmt.require_expression().capture_as("VALUE"))
|
|
292 | 296 |
.addRuleOnFalse(stmt.optional_any_token(",")) |
293 |
.addRuleOnFalse(stmt.require_expression("PATTERN")) |
|
297 |
.addRuleOnFalse(stmt.require_expression().capture_as("PATTERN"))
|
|
294 | 298 |
); |
295 | 299 |
stmt.code( |
296 | 300 |
OPERATOR_REGEXP, |
... | ... | |
309 | 313 |
// stmt.code("FETCH_FIRST","VALUE","FROM","WHERE"); |
310 | 314 |
// theGrammar.addStatement(stmt); |
311 | 315 |
|
316 |
|
|
317 |
|
|
318 |
stmt = theGrammar.createStatement("DATE"); |
|
319 |
stmt.addRule(stmt.require_any_token("DATE")); |
|
320 |
stmt.addRule(stmt.require_expression().capture_as("EXP")); |
|
321 |
stmt.code(FUNCTION_DATE,stmt.args_names("EXP")); |
|
322 |
theGrammar.addStatement(stmt); |
|
323 |
|
|
324 |
stmt = theGrammar.createStatement("TIME"); |
|
325 |
stmt.addRule(stmt.require_any_token("TIME")); |
|
326 |
stmt.addRule(stmt.require_expression().capture_as("EXP")); |
|
327 |
stmt.code(FUNCTION_TIME,stmt.args_names("EXP")); |
|
328 |
theGrammar.addStatement(stmt); |
|
329 |
|
|
330 |
stmt = theGrammar.createStatement("TIMESTAMP"); |
|
331 |
stmt.addRule(stmt.require_any_token("TIMESTAMP")); |
|
332 |
stmt.addRule(stmt.require_expression().capture_as("EXP")); |
|
333 |
stmt.code(FUNCTION_TIMESTAMP,stmt.args_names("EXP")); |
|
334 |
theGrammar.addStatement(stmt); |
|
335 |
|
|
336 |
stmt = theGrammar.createStatement("EXTRACT"); |
|
337 |
stmt.addRule(stmt.require_any_token("EXTRACT")); |
|
338 |
stmt.addRule(stmt.require_any_token("(")); |
|
339 |
stmt.addRule(stmt.require_any_token("CENTURY","DAY","DECADE", |
|
340 |
"DOW","DOY","HOUR","ISODOW","ISOYEAR","MICROSECONDS", |
|
341 |
"MILLENNIUM","MILLUSECONDS","MINUTE","MONTH","QUARTER", |
|
342 |
"SECOND","WEEK","YEAR").capture_as("FIELD")); |
|
343 |
stmt.addRule(stmt.require_any_token("FROM")); |
|
344 |
stmt.addRule(stmt.require_expression().capture_as("EXP")); |
|
345 |
stmt.addRule(stmt.require_any_token(")")); |
|
346 |
stmt.code(FUNCTION_EXTRACT,stmt.args_names("EXP")); |
|
347 |
theGrammar.addStatement(stmt); |
|
348 |
|
|
312 | 349 |
this.grammar = theGrammar; |
350 |
|
|
351 |
|
|
313 | 352 |
} |
314 | 353 |
return grammar; |
315 | 354 |
} |
Also available in: Unified diff