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

View differences:

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