svn-gvsig-desktop / 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 @ 44750
History | View | Annotate | Download (17.1 KB)
1 | 44139 | jjdelcerro | package org.gvsig.expressionevaluator.impl.grammars; |
---|---|---|---|
2 | |||
3 | 44384 | jjdelcerro | import org.gvsig.expressionevaluator.Code; |
4 | import org.gvsig.expressionevaluator.Code.Caller; |
||
5 | 44198 | jjdelcerro | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_CAST; |
6 | 44750 | jjdelcerro | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_DATE; |
7 | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_EXTRACT; |
||
8 | 44384 | jjdelcerro | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_LIST; |
9 | 44750 | jjdelcerro | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TIME; |
10 | import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_TIMESTAMP; |
||
11 | 44207 | jjdelcerro | import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_REGEXP; |
12 | 44139 | jjdelcerro | import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
13 | import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
||
14 | import org.gvsig.expressionevaluator.Grammar; |
||
15 | import org.gvsig.expressionevaluator.Statement; |
||
16 | 44384 | jjdelcerro | import org.gvsig.expressionevaluator.Statement.StatementContext; |
17 | import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseCodes; |
||
18 | import org.gvsig.expressionevaluator.impl.DefaultStatement.StatementBuilderBase; |
||
19 | import org.gvsig.expressionevaluator.impl.DefaultStatement.ArgsBuilderFromNames; |
||
20 | 44139 | jjdelcerro | import org.gvsig.expressionevaluator.impl.function.programming.IIFFunction; |
21 | import org.gvsig.expressionevaluator.impl.function.programming.LetFunction; |
||
22 | import org.gvsig.expressionevaluator.impl.function.programming.CaseFunction; |
||
23 | import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockFunction; |
||
24 | 44384 | jjdelcerro | import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockWithExceptFunction; |
25 | 44139 | jjdelcerro | import org.gvsig.expressionevaluator.impl.function.programming.CreateFnFunction; |
26 | import org.gvsig.expressionevaluator.impl.function.programming.ForEachFunction; |
||
27 | import org.gvsig.expressionevaluator.impl.function.programming.ReturnFunction; |
||
28 | import org.gvsig.expressionevaluator.impl.function.programming.WhileFunction; |
||
29 | import org.gvsig.expressionevaluator.spi.AbstractGrammarFactory; |
||
30 | |||
31 | /**
|
||
32 | *
|
||
33 | * @author jjdelcerro
|
||
34 | */
|
||
35 | public class BasicGrammarFactory extends AbstractGrammarFactory { |
||
36 | |||
37 | private Grammar grammar;
|
||
38 | |||
39 | 44384 | jjdelcerro | private class BeginStatementBuilder extends StatementBuilderBase { |
40 | |||
41 | private final String blockID; |
||
42 | private final String exceptID; |
||
43 | |||
44 | public BeginStatementBuilder(String blockID, String exceptID) { |
||
45 | super(CodeBlockFunction.NAME, new ArgsBuilderFromNames(blockID)); |
||
46 | this.blockID = blockID;
|
||
47 | this.exceptID = exceptID;
|
||
48 | } |
||
49 | |||
50 | @Override
|
||
51 | public Code build(StatementContext context) {
|
||
52 | Caller code = (Caller) super.build(context);
|
||
53 | Code exceptCode = context.getCode(this.exceptID);
|
||
54 | if( exceptCode==null ) { |
||
55 | return code;
|
||
56 | } |
||
57 | BaseCodes args = (BaseCodes) code.parameters(); |
||
58 | args.add(exceptCode); |
||
59 | code = context.getCodeBuilder().function(CodeBlockWithExceptFunction.NAME, args); |
||
60 | return code;
|
||
61 | } |
||
62 | |||
63 | } |
||
64 | 44139 | jjdelcerro | public BasicGrammarFactory() {
|
65 | super("Basic", true); |
||
66 | } |
||
67 | |||
68 | @Override
|
||
69 | 44389 | jjdelcerro | public Grammar create(Object... parameters) { |
70 | 44139 | jjdelcerro | ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
71 | if( this.grammar==null ) { |
||
72 | Grammar theGrammar = manager.createGrammar(this.getName());
|
||
73 | Statement stmt;
|
||
74 | |||
75 | theGrammar.addReservedWord("BEGIN");
|
||
76 | 44384 | jjdelcerro | theGrammar.addReservedWord("EXCEPT");
|
77 | 44139 | jjdelcerro | theGrammar.addReservedWord("END");
|
78 | theGrammar.addReservedWord("IF");
|
||
79 | theGrammar.addReservedWord("THEN");
|
||
80 | theGrammar.addReservedWord("ELSE");
|
||
81 | theGrammar.addReservedWord("WHILE");
|
||
82 | theGrammar.addReservedWord("CASE");
|
||
83 | theGrammar.addReservedWord("WHEN");
|
||
84 | 44384 | jjdelcerro | theGrammar.addReservedWord("FOR");
|
85 | theGrammar.addReservedWord("CREATE");
|
||
86 | theGrammar.addReservedWord("FUNCTION");
|
||
87 | theGrammar.addReservedWord("PROCEDURE");
|
||
88 | theGrammar.addReservedWord("AS");
|
||
89 | 44139 | jjdelcerro | theGrammar.addReservedWord("MATCH");
|
90 | theGrammar.addReservedWord("CAST");
|
||
91 | 44384 | jjdelcerro | theGrammar.addReservedWord("SET");
|
92 | theGrammar.addReservedWord("TO");
|
||
93 | 44750 | jjdelcerro | theGrammar.addReservedWord("FROM");
|
94 | 44384 | jjdelcerro | theGrammar.addReservedWord("$$"); // ???? Asi van las funciones |
95 | 44139 | jjdelcerro | |
96 | stmt = theGrammar.createStatement("BLOCK");
|
||
97 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("BEGIN"));
|
98 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expressions(";").capture_as("VALUES")); |
99 | 44384 | jjdelcerro | stmt.addRule(stmt.optional_any_token("EXCEPT")
|
100 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expressions(";").capture_as("EXCEPT")) |
101 | 44384 | jjdelcerro | ); |
102 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("END"));
|
103 | 44384 | jjdelcerro | stmt.builder(new BeginStatementBuilder("VALUES","EXCEPT")); |
104 | 44139 | jjdelcerro | theGrammar.addStatement(stmt); |
105 | |||
106 | stmt = theGrammar.createStatement("IF");
|
||
107 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("IF"));
|
108 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
|
109 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("THEN", ":")); |
110 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expressions(";").capture_as("ONTRUE")); |
111 | 44144 | jjdelcerro | stmt.addRule(stmt.optional_any_token("ELSE")
|
112 | .addRuleOnTrue(stmt.optional_any_token(":"))
|
||
113 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expressions(";").capture_as("ONFALSE")) |
114 | 44139 | jjdelcerro | ); |
115 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("END"));
|
116 | stmt.addRule(stmt.optional_any_token("IF"));
|
||
117 | 44139 | jjdelcerro | stmt.code( |
118 | IIFFunction.NAME, |
||
119 | stmt.args_names("CONDITION","ONTRUE","ONFALSE") |
||
120 | ); |
||
121 | theGrammar.addStatement(stmt); |
||
122 | |||
123 | stmt = theGrammar.createStatement("WHILE");
|
||
124 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("WHILE"));
|
125 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expression().capture_as("CONDITION"));
|
126 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("BEGIN", ":")); |
127 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expressions(";").capture_as("BODY")); |
128 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("END"));
|
129 | stmt.addRule(stmt.optional_any_token("WHILE"));
|
||
130 | 44139 | jjdelcerro | stmt.code( |
131 | WhileFunction.NAME, |
||
132 | stmt.args_names("CONDITION","BODY") |
||
133 | ); |
||
134 | theGrammar.addStatement(stmt); |
||
135 | |||
136 | // stmt = theGrammar.createStatement("FOR");
|
||
137 | 44738 | jjdelcerro | // stmt.addRule(stmt.require_any_token("FOR"));
|
138 | 44139 | jjdelcerro | // stmt.addRule(stmt.require_expression("INIT"));
|
139 | 44738 | jjdelcerro | // stmt.addRule(stmt.require_any_token(";"));
|
140 | 44139 | jjdelcerro | // stmt.addRule(stmt.require_expression("CONDITION"));
|
141 | 44738 | jjdelcerro | // stmt.addRule(stmt.require_any_token(";"));
|
142 | 44139 | jjdelcerro | // stmt.addRule(stmt.require_expression("STEP"));
|
143 | 44738 | jjdelcerro | // stmt.addRule(stmt.require_any_token("BEGIN", ":"));
|
144 | 44139 | jjdelcerro | // stmt.addRule(stmt.require_expression("BODY"));
|
145 | 44738 | jjdelcerro | // stmt.addRule(stmt.require_any_token("END"));
|
146 | // stmt.addRule(stmt.optional_any_token("FOR"));
|
||
147 | // stmt.code(
|
||
148 | // ForFunction.NAME,
|
||
149 | // stmt.args_names("INIT","CONDITION","STEP","BODY")
|
||
150 | // );
|
||
151 | 44139 | jjdelcerro | // theGrammar.addStatement(stmt);
|
152 | |||
153 | stmt = theGrammar.createStatement("FOREACH");
|
||
154 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("FOR"));
|
155 | 44750 | jjdelcerro | stmt.addRule(stmt.require_identifier().capture_as("VAR"));
|
156 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("IN"));
|
157 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expression().capture_as("ITERABLE"));
|
158 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("BEGIN", ":")); |
159 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expressions(";").capture_as("BODY")); |
160 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("END"));
|
161 | stmt.addRule(stmt.optional_any_token("FOR"));
|
||
162 | 44139 | jjdelcerro | stmt.code( |
163 | ForEachFunction.NAME, |
||
164 | stmt.args_names("VAR","ITERABLE","BODY") |
||
165 | ); |
||
166 | theGrammar.addStatement(stmt); |
||
167 | |||
168 | stmt = theGrammar.createStatement("CASE");
|
||
169 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("CASE"));
|
170 | 44139 | jjdelcerro | stmt.addRule( |
171 | 44144 | jjdelcerro | stmt.repeat_until_any_tokens("END","ELSE") |
172 | .addRule(stmt.require_any_token("WHEN"))
|
||
173 | 44750 | jjdelcerro | .addRule(stmt.require_expressions(";").capture_as("CONDITION#")) |
174 | 44379 | jjdelcerro | .addRule(stmt.require_any_token("THEN",":")) |
175 | 44750 | jjdelcerro | .addRule(stmt.require_expressions(";").capture_as("ONTRUE#")) |
176 | 44139 | jjdelcerro | ); |
177 | 44144 | jjdelcerro | stmt.addRule(stmt.optional_any_token("ELSE")
|
178 | .addRuleOnTrue(stmt.optional_any_token(":"))
|
||
179 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expressions(";").capture_as("ELSE")) |
180 | 44139 | jjdelcerro | ); |
181 | 44379 | jjdelcerro | stmt.addRule(stmt.require_any_token("END"));
|
182 | stmt.addRule(stmt.optional_any_token("CASE"));
|
||
183 | 44139 | jjdelcerro | stmt.code( |
184 | CaseFunction.NAME, |
||
185 | stmt.args_names("CONDITION#","ONTRUE#","ELSE") |
||
186 | ); |
||
187 | theGrammar.addStatement(stmt); |
||
188 | |||
189 | stmt = theGrammar.createStatement("USERFUNCTION");
|
||
190 | 44384 | jjdelcerro | stmt.addRule(stmt.require_any_token("CREATE"));
|
191 | stmt.addRule(stmt.optional_any_token("FUNCTION", "PROCEDURE")); |
||
192 | 44750 | jjdelcerro | stmt.addRule(stmt.require_identifier().capture_as("FUNCTION_NAME"));
|
193 | 44384 | jjdelcerro | stmt.addRule(stmt.optional_any_token("("));
|
194 | 44750 | jjdelcerro | stmt.addRule(stmt.optional_identifiers(",").capture_as("PARAMETERS")); |
195 | 44384 | jjdelcerro | stmt.addRule(stmt.optional_any_token(")"));
|
196 | stmt.addRule(stmt.require_any_token("AS"));
|
||
197 | 44533 | jjdelcerro | stmt.addRule(stmt.optional_any_token("$$","BEGIN") |
198 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expressions(";").capture_as("BODY")) |
199 | 44533 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token("$$", "END")) |
200 | .addRuleOnTrue(stmt.optional_any_token("FUNCTION", "PROCEDURE")) |
||
201 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.optional_literal_string().capture_as("SCRIPT_PATH")
|
202 | 44533 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token(","))
|
203 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_literal_string().capture_as("SCRIPT_FUNCTION"))
|
204 | 44533 | jjdelcerro | .addRuleOnTrue(stmt.optional_any_token("LANGUAGE")
|
205 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_literal_string().capture_as("LANGUAGE"))
|
206 | 44533 | jjdelcerro | ) |
207 | ) |
||
208 | ); |
||
209 | |||
210 | // stmt.addRule(stmt.require_expressions("BODY", ";"));
|
||
211 | // stmt.addRule(stmt.require_any_token("$$", "END"));
|
||
212 | // stmt.addRule(stmt.optional_any_token("FUNCTION", "PROCEDURE"));
|
||
213 | 44139 | jjdelcerro | stmt.code( |
214 | CreateFnFunction.NAME, |
||
215 | 44750 | jjdelcerro | stmt.fixed_args_names("FUNCTION_NAME","PARAMETERS","BODY", "SCRIPT_PATH", "SCRIPT_FUNCTION", "LANGUAGE") |
216 | 44139 | jjdelcerro | ); |
217 | theGrammar.addStatement(stmt); |
||
218 | |||
219 | stmt = theGrammar.createStatement("RETURN");
|
||
220 | 44144 | jjdelcerro | stmt.addRule(stmt.require_any_token("RETURN"));
|
221 | 44379 | jjdelcerro | stmt.addRule(stmt.optional_any_token(";")
|
222 | .addRuleOnTrue(stmt.set_expression("VALUES", null)) |
||
223 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.require_expression().capture_as("VALUES"))
|
224 | 44379 | jjdelcerro | .addRuleOnFalse(stmt.require_any_token(";"))
|
225 | ); |
||
226 | 44139 | jjdelcerro | stmt.code( |
227 | ReturnFunction.NAME, |
||
228 | stmt.args_expand("VALUES")
|
||
229 | ); |
||
230 | theGrammar.addStatement(stmt); |
||
231 | |||
232 | 44384 | jjdelcerro | // stmt = theGrammar.createStatement("TRY");
|
233 | // stmt.addRule(stmt.require_any_token("TRY"));
|
||
234 | // stmt.addRule(stmt.optional_any_token(":"));
|
||
235 | // stmt.addRule(stmt.require_expressions("VALUE", ";"));
|
||
236 | // stmt.addRule(stmt.optional_any_token(";"));
|
||
237 | // stmt.addRule(stmt.require_any_token("EXCEPT","CATH"));
|
||
238 | // stmt.addRule(stmt.optional_any_token(":"));
|
||
239 | // stmt.addRule(stmt.require_expressions("ONERROR", ";"));
|
||
240 | // stmt.addRule(stmt.optional_any_token(";"));
|
||
241 | // stmt.addRule(stmt.require_any_token("END"));
|
||
242 | // stmt.addRule(stmt.optional_any_token("TRY"));
|
||
243 | // stmt.code(
|
||
244 | // TryFunction.NAME,
|
||
245 | // stmt.args_names("VALUE","ONERROR")
|
||
246 | // );
|
||
247 | // theGrammar.addStatement(stmt);
|
||
248 | 44144 | jjdelcerro | |
249 | 44379 | jjdelcerro | stmt = theGrammar.createStatement("LET");
|
250 | stmt.addRule(stmt.require_any_token("LET", "SET")); |
||
251 | 44750 | jjdelcerro | stmt.addRule(stmt.require_identifier().capture_as("NAME"));
|
252 | 44384 | jjdelcerro | stmt.addRule(stmt.optional_any_token("=","TO")); |
253 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expression().capture_as("VALUE"));
|
254 | 44379 | jjdelcerro | stmt.code( |
255 | LetFunction.NAME, |
||
256 | stmt.args_names("NAME", "VALUE") |
||
257 | ); |
||
258 | theGrammar.addStatement(stmt); |
||
259 | |||
260 | 44384 | jjdelcerro | stmt = theGrammar.createStatement("ARRAY");
|
261 | stmt.addRule(stmt.require_any_token("ARRAY"));
|
||
262 | stmt.addRule(stmt.require_any_token("["));
|
||
263 | 44750 | jjdelcerro | stmt.addRule(stmt.require_expressions(",").capture_as("VALUES")); |
264 | 44384 | jjdelcerro | stmt.addRule(stmt.require_any_token("]"));
|
265 | stmt.code( |
||
266 | FUNCTION_LIST, |
||
267 | stmt.args_expand("VALUES")
|
||
268 | ); |
||
269 | theGrammar.addStatement(stmt); |
||
270 | |||
271 | 44379 | jjdelcerro | stmt = theGrammar.createStatement("CAST");
|
272 | stmt.addRule(stmt.require_any_token("CAST"));
|
||
273 | stmt.addRule(stmt.optional_any_token("(")
|
||
274 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expression().capture_as("VALUE"))
|
275 | 44379 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token("AS"))
|
276 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_identifier().capture_as("TYPE"))
|
277 | 44379 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token(")"))
|
278 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.require_expression().capture_as("VALUE"))
|
279 | 44379 | jjdelcerro | .addRuleOnFalse(stmt.require_any_token("AS"))
|
280 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.require_identifier().capture_as("TYPE"))
|
281 | 44379 | jjdelcerro | ); |
282 | stmt.code( |
||
283 | FUNCTION_CAST, |
||
284 | stmt.args_names("VALUE","TYPE") |
||
285 | ); |
||
286 | theGrammar.addStatement(stmt); |
||
287 | |||
288 | stmt = theGrammar.createStatement("MATCH");
|
||
289 | stmt.addRule(stmt.require_any_token("MATCH"));
|
||
290 | stmt.addRule(stmt.optional_any_token("(")
|
||
291 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expression().capture_as("VALUE"))
|
292 | 44379 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token(","))
|
293 | 44750 | jjdelcerro | .addRuleOnTrue(stmt.require_expression().capture_as("PATTERN"))
|
294 | 44379 | jjdelcerro | .addRuleOnTrue(stmt.require_any_token(")"))
|
295 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.require_expression().capture_as("VALUE"))
|
296 | 44379 | jjdelcerro | .addRuleOnFalse(stmt.optional_any_token(","))
|
297 | 44750 | jjdelcerro | .addRuleOnFalse(stmt.require_expression().capture_as("PATTERN"))
|
298 | 44379 | jjdelcerro | ); |
299 | stmt.code( |
||
300 | OPERATOR_REGEXP, |
||
301 | stmt.args_names("VALUE","PATTERN") |
||
302 | ); |
||
303 | theGrammar.addStatement(stmt); |
||
304 | |||
305 | 44139 | jjdelcerro | // stmt = theGrammar.createStatement("FETCHFIRST");
|
306 | // stmt.addRule(stmt.require_token("FETCH"));
|
||
307 | // stmt.addRule(stmt.require_token("FIRST"));
|
||
308 | // stmt.addRule(stmt.require_expression("VALUE"));
|
||
309 | // stmt.addRule(stmt.optional_token("FROM"));
|
||
310 | // stmt.addRule(stmt.require_expression("FROM"));
|
||
311 | // stmt.addRule(stmt.optional_token("WHERE").addRuleOnTrue(stmt.require_expression("WHERE")));
|
||
312 | // stmt.addRule(stmt.optional_token("ORDER","BY").addRuleOnTrue(stmt.require_expression("ORDER")));
|
||
313 | // stmt.code("FETCH_FIRST","VALUE","FROM","WHERE");
|
||
314 | // theGrammar.addStatement(stmt);
|
||
315 | |||
316 | 44750 | jjdelcerro | |
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 | |||
349 | 44139 | jjdelcerro | this.grammar = theGrammar;
|
350 | 44750 | jjdelcerro | |
351 | |||
352 | 44139 | jjdelcerro | } |
353 | return grammar;
|
||
354 | } |
||
355 | |||
356 | } |