embulk-filter-row 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +124 -4
  5. data/build.gradle +15 -4
  6. data/classpath/embulk-filter-row-0.3.0.jar +0 -0
  7. data/example/and.yml +0 -7
  8. data/example/example.yml +0 -7
  9. data/example/where.yml +28 -0
  10. data/script/byaccj.sh +29 -0
  11. data/src/main/java/org/embulk/filter/row/{AbstractColumnVisitor.java → AbstractGuardColumnVisitor.java} +9 -17
  12. data/src/main/java/org/embulk/filter/row/BuildColumnVisitorImpl.java +98 -0
  13. data/src/main/java/org/embulk/filter/row/{ColumnVisitorAndImpl.java → GuardColumnVisitorAndImpl.java} +11 -45
  14. data/src/main/java/org/embulk/filter/row/{ColumnVisitorOrImpl.java → GuardColumnVisitorOrImpl.java} +11 -45
  15. data/src/main/java/org/embulk/filter/row/GuardColumnVisitorWhereImpl.java +28 -0
  16. data/src/main/java/org/embulk/filter/row/RowFilterPlugin.java +49 -16
  17. data/src/main/java/org/embulk/filter/row/where/Parser.java +831 -0
  18. data/src/main/java/org/embulk/filter/row/where/ParserExp.java +290 -0
  19. data/src/main/java/org/embulk/filter/row/where/ParserLiteral.java +277 -0
  20. data/src/main/java/org/embulk/filter/row/where/ParserNode.java +6 -0
  21. data/src/main/java/org/embulk/filter/row/where/ParserVal.java +78 -0
  22. data/src/main/java/org/embulk/filter/row/where/Yylex.java +833 -0
  23. data/src/main/java/org/embulk/filter/row/where/_lexer.l +108 -0
  24. data/src/main/java/org/embulk/filter/row/where/_parser.y +137 -0
  25. data/src/test/java/org/embulk/filter/row/where/TestParser.java +383 -0
  26. data/src/test/java/org/embulk/filter/row/where/TestYylex.java +256 -0
  27. metadata +19 -5
  28. data/classpath/embulk-filter-row-0.2.2.jar +0 -0
@@ -0,0 +1,831 @@
1
+ //### This file created by BYACC 1.8(/Java extension 1.15)
2
+ //### Java capabilities added 7 Jan 97, Bob Jamison
3
+ //### Updated : 27 Nov 97 -- Bob Jamison, Joe Nieten
4
+ //### 01 Jan 98 -- Bob Jamison -- fixed generic semantic constructor
5
+ //### 01 Jun 99 -- Bob Jamison -- added Runnable support
6
+ //### 06 Aug 00 -- Bob Jamison -- made state variables class-global
7
+ //### 03 Jan 01 -- Bob Jamison -- improved flags, tracing
8
+ //### 16 May 01 -- Bob Jamison -- added custom stack sizing
9
+ //### 04 Mar 02 -- Yuval Oren -- improved java performance, added options
10
+ //### 14 Mar 02 -- Tomas Hurka -- -d support, static initializer workaround
11
+ //### Please send bug reports to tom@hukatronic.cz
12
+ //### static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90";
13
+
14
+
15
+
16
+ package org.embulk.filter.row.where;
17
+
18
+
19
+
20
+ //#line 2 "src/main/java/org/embulk/filter/row/where/_parser.y"
21
+ import org.embulk.spi.Column;
22
+ import org.embulk.spi.Schema;
23
+ //#line 20 "Parser.java"
24
+
25
+
26
+
27
+
28
+ public class Parser
29
+ {
30
+
31
+ boolean yydebug; //do I want debug output?
32
+ int yynerrs; //number of errors so far
33
+ int yyerrflag; //was there an error?
34
+ int yychar; //the current working character
35
+
36
+ //########## MESSAGES ##########
37
+ //###############################################################
38
+ // method: debug
39
+ //###############################################################
40
+ void debug(String msg)
41
+ {
42
+ if (yydebug)
43
+ System.out.println(msg);
44
+ }
45
+
46
+ //########## STATE STACK ##########
47
+ final static int YYSTACKSIZE = 500; //maximum stack size
48
+ int statestk[] = new int[YYSTACKSIZE]; //state stack
49
+ int stateptr;
50
+ int stateptrmax; //highest index of stackptr
51
+ int statemax; //state when highest index reached
52
+ //###############################################################
53
+ // methods: state stack push,pop,drop,peek
54
+ //###############################################################
55
+ final void state_push(int state)
56
+ {
57
+ try {
58
+ stateptr++;
59
+ statestk[stateptr]=state;
60
+ }
61
+ catch (ArrayIndexOutOfBoundsException e) {
62
+ int oldsize = statestk.length;
63
+ int newsize = oldsize * 2;
64
+ int[] newstack = new int[newsize];
65
+ System.arraycopy(statestk,0,newstack,0,oldsize);
66
+ statestk = newstack;
67
+ statestk[stateptr]=state;
68
+ }
69
+ }
70
+ final int state_pop()
71
+ {
72
+ return statestk[stateptr--];
73
+ }
74
+ final void state_drop(int cnt)
75
+ {
76
+ stateptr -= cnt;
77
+ }
78
+ final int state_peek(int relative)
79
+ {
80
+ return statestk[stateptr-relative];
81
+ }
82
+ //###############################################################
83
+ // method: init_stacks : allocate and prepare stacks
84
+ //###############################################################
85
+ final boolean init_stacks()
86
+ {
87
+ stateptr = -1;
88
+ val_init();
89
+ return true;
90
+ }
91
+ //###############################################################
92
+ // method: dump_stacks : show n levels of the stacks
93
+ //###############################################################
94
+ void dump_stacks(int count)
95
+ {
96
+ int i;
97
+ System.out.println("=index==state====value= s:"+stateptr+" v:"+valptr);
98
+ for (i=0;i<count;i++)
99
+ System.out.println(" "+i+" "+statestk[i]+" "+valstk[i]);
100
+ System.out.println("======================");
101
+ }
102
+
103
+
104
+ //########## SEMANTIC VALUES ##########
105
+ //public class ParserVal is defined in ParserVal.java
106
+
107
+
108
+ String yytext;//user variable to return contextual strings
109
+ ParserVal yyval; //used to return semantic vals from action routines
110
+ ParserVal yylval;//the 'lval' (result) I got from yylex()
111
+ ParserVal valstk[];
112
+ int valptr;
113
+ //###############################################################
114
+ // methods: value stack push,pop,drop,peek.
115
+ //###############################################################
116
+ void val_init()
117
+ {
118
+ valstk=new ParserVal[YYSTACKSIZE];
119
+ yyval=new ParserVal();
120
+ yylval=new ParserVal();
121
+ valptr=-1;
122
+ }
123
+ void val_push(ParserVal val)
124
+ {
125
+ if (valptr>=YYSTACKSIZE)
126
+ return;
127
+ valstk[++valptr]=val;
128
+ }
129
+ ParserVal val_pop()
130
+ {
131
+ if (valptr<0)
132
+ return new ParserVal();
133
+ return valstk[valptr--];
134
+ }
135
+ void val_drop(int cnt)
136
+ {
137
+ int ptr;
138
+ ptr=valptr-cnt;
139
+ if (ptr<0)
140
+ return;
141
+ valptr = ptr;
142
+ }
143
+ ParserVal val_peek(int relative)
144
+ {
145
+ int ptr;
146
+ ptr=valptr-relative;
147
+ if (ptr<0)
148
+ return new ParserVal();
149
+ return valstk[ptr];
150
+ }
151
+ final ParserVal dup_yyval(ParserVal val)
152
+ {
153
+ ParserVal dup = new ParserVal();
154
+ dup.ival = val.ival;
155
+ dup.dval = val.dval;
156
+ dup.sval = val.sval;
157
+ dup.obj = val.obj;
158
+ return dup;
159
+ }
160
+ //#### end semantic value section ####
161
+ public final static short EQ=257;
162
+ public final static short NEQ=258;
163
+ public final static short GT=259;
164
+ public final static short GE=260;
165
+ public final static short LT=261;
166
+ public final static short LE=262;
167
+ public final static short START_WITH=263;
168
+ public final static short END_WITH=264;
169
+ public final static short INCLUDE=265;
170
+ public final static short IS=266;
171
+ public final static short NOT=267;
172
+ public final static short AND=268;
173
+ public final static short OR=269;
174
+ public final static short NULL=270;
175
+ public final static short BOOLEAN=271;
176
+ public final static short STRING=272;
177
+ public final static short NUMBER=273;
178
+ public final static short IDENTIFIER=274;
179
+ public final static short TIMESTAMP=275;
180
+ public final static short YYERRCODE=256;
181
+ final static short yylhs[] = { -1,
182
+ 0, 0, 2, 2, 1, 1, 1, 1, 1, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
185
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
186
+ 1, 1, 1, 1, 1, 1, 1, 1,
187
+ };
188
+ final static short yylen[] = { 2,
189
+ 0, 1, 2, 2, 3, 3, 3, 3, 3, 3,
190
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
191
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
192
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
193
+ 3, 3, 3, 4, 3, 3, 2, 3,
194
+ };
195
+ final static short yydefred[] = { 0,
196
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
197
+ 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
198
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
199
+ 0, 0, 0, 0, 3, 4, 0, 0, 0, 0,
200
+ 0, 0, 0, 0, 0, 7, 8, 26, 27, 28,
201
+ 29, 30, 15, 16, 17, 18, 19, 20, 5, 21,
202
+ 9, 31, 6, 22, 10, 32, 11, 33, 12, 34,
203
+ 13, 35, 14, 36, 23, 24, 25, 0, 43, 48,
204
+ 46, 0, 37, 38, 39, 40, 41, 42, 44,
205
+ };
206
+ final static short yydgoto[] = { 8,
207
+ 9, 10,
208
+ };
209
+ final static short yysindex[] = { -40,
210
+ -40, -234, -237, -228, -247, -208, -40, 0, -202, -214,
211
+ 0, -215, -206, -205, -204, -203, -201, -200, -199, -198,
212
+ -197, -196, -195, -194, -267, -236, -218, -217, -213, -212,
213
+ -265, -191, -190, -245, 0, 0, -39, -40, -40, -189,
214
+ -188, -187, -186, -185, -184, 0, 0, 0, 0, 0,
215
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
216
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
217
+ 0, 0, 0, 0, 0, 0, 0, -232, 0, 0,
218
+ 0, -177, 0, 0, 0, 0, 0, 0, 0,
219
+ };
220
+ final static short yyrindex[] = { 72,
221
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
222
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
226
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
227
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
228
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
229
+ 0, 1, 0, 0, 0, 0, 0, 0, 0,
230
+ };
231
+ final static short yygindex[] = { 0,
232
+ 2, 24,
233
+ };
234
+ final static int YYTABLESIZE=270;
235
+ static short yytable[];
236
+ static { yytable();}
237
+ static void yytable(){
238
+ yytable = new short[]{ 7,
239
+ 45, 80, 11, 59, 60, 61, 75, 6, 37, 25,
240
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 14,
241
+ 15, 78, 12, 13, 79, 16, 17, 18, 19, 20,
242
+ 21, 22, 23, 24, 63, 64, 65, 89, 6, 81,
243
+ 82, 45, 40, 41, 42, 43, 44, 45, 62, 66,
244
+ 68, 70, 72, 74, 67, 69, 6, 6, 46, 71,
245
+ 73, 6, 6, 35, 36, 38, 39, 47, 48, 49,
246
+ 50, 1, 51, 52, 53, 54, 55, 56, 57, 58,
247
+ 76, 77, 2, 0, 83, 84, 85, 86, 87, 88,
248
+ 38, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
250
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
251
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
252
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
254
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261
+ 0, 0, 0, 0, 0, 0, 1, 0, 38, 39,
262
+ 2, 3, 4, 5, 6, 0, 0, 0, 0, 0,
263
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
264
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,
266
+ };
267
+ }
268
+ static short yycheck[];
269
+ static { yycheck(); }
270
+ static void yycheck() {
271
+ yycheck = new short[] { 40,
272
+ 0, 41, 1, 271, 272, 273, 272, 275, 7, 257,
273
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 257,
274
+ 258, 267, 257, 258, 270, 263, 264, 265, 257, 258,
275
+ 259, 260, 261, 262, 271, 272, 273, 270, 275, 38,
276
+ 39, 41, 257, 258, 259, 260, 261, 262, 25, 26,
277
+ 27, 28, 29, 30, 273, 273, 275, 275, 274, 273,
278
+ 273, 275, 275, 272, 273, 268, 269, 274, 274, 274,
279
+ 274, 0, 274, 274, 274, 274, 274, 274, 274, 274,
280
+ 272, 272, 0, -1, 274, 274, 274, 274, 274, 274,
281
+ 268, -1, -1, -1, -1, -1, -1, -1, -1, -1,
282
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
283
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
284
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
285
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
286
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
287
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
288
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
289
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
290
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
291
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
292
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
293
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294
+ -1, -1, -1, -1, -1, -1, 267, -1, 268, 269,
295
+ 271, 272, 273, 274, 275, -1, -1, -1, -1, -1,
296
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
297
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
298
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 269,
299
+ };
300
+ }
301
+ final static short YYFINAL=8;
302
+ final static short YYMAXTOKEN=275;
303
+ final static String yyname[] = {
304
+ "end-of-file",null,null,null,null,null,null,null,null,null,null,null,null,null,
305
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
306
+ null,null,null,null,null,null,null,null,null,null,"'('","')'",null,null,null,
307
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
308
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
309
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
310
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
311
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
312
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
313
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
314
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
315
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
316
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
317
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
318
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
319
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
320
+ null,null,null,null,"EQ","NEQ","GT","GE","LT","LE","START_WITH","END_WITH",
321
+ "INCLUDE","IS","NOT","AND","OR","NULL","BOOLEAN","STRING","NUMBER","IDENTIFIER",
322
+ "TIMESTAMP",
323
+ };
324
+ final static String yyrule[] = {
325
+ "$accept : input",
326
+ "input :",
327
+ "input : exp",
328
+ "timestamp : TIMESTAMP STRING",
329
+ "timestamp : TIMESTAMP NUMBER",
330
+ "exp : IDENTIFIER EQ BOOLEAN",
331
+ "exp : IDENTIFIER NEQ BOOLEAN",
332
+ "exp : BOOLEAN EQ IDENTIFIER",
333
+ "exp : BOOLEAN NEQ IDENTIFIER",
334
+ "exp : IDENTIFIER EQ NUMBER",
335
+ "exp : IDENTIFIER NEQ NUMBER",
336
+ "exp : IDENTIFIER GT NUMBER",
337
+ "exp : IDENTIFIER GE NUMBER",
338
+ "exp : IDENTIFIER LT NUMBER",
339
+ "exp : IDENTIFIER LE NUMBER",
340
+ "exp : NUMBER EQ IDENTIFIER",
341
+ "exp : NUMBER NEQ IDENTIFIER",
342
+ "exp : NUMBER GT IDENTIFIER",
343
+ "exp : NUMBER GE IDENTIFIER",
344
+ "exp : NUMBER LT IDENTIFIER",
345
+ "exp : NUMBER LE IDENTIFIER",
346
+ "exp : IDENTIFIER EQ STRING",
347
+ "exp : IDENTIFIER NEQ STRING",
348
+ "exp : IDENTIFIER START_WITH STRING",
349
+ "exp : IDENTIFIER END_WITH STRING",
350
+ "exp : IDENTIFIER INCLUDE STRING",
351
+ "exp : STRING EQ IDENTIFIER",
352
+ "exp : STRING NEQ IDENTIFIER",
353
+ "exp : STRING START_WITH IDENTIFIER",
354
+ "exp : STRING END_WITH IDENTIFIER",
355
+ "exp : STRING INCLUDE IDENTIFIER",
356
+ "exp : IDENTIFIER EQ timestamp",
357
+ "exp : IDENTIFIER NEQ timestamp",
358
+ "exp : IDENTIFIER GT timestamp",
359
+ "exp : IDENTIFIER GE timestamp",
360
+ "exp : IDENTIFIER LT timestamp",
361
+ "exp : IDENTIFIER LE timestamp",
362
+ "exp : timestamp EQ IDENTIFIER",
363
+ "exp : timestamp NEQ IDENTIFIER",
364
+ "exp : timestamp GT IDENTIFIER",
365
+ "exp : timestamp GE IDENTIFIER",
366
+ "exp : timestamp LT IDENTIFIER",
367
+ "exp : timestamp LE IDENTIFIER",
368
+ "exp : IDENTIFIER IS NULL",
369
+ "exp : IDENTIFIER IS NOT NULL",
370
+ "exp : exp OR exp",
371
+ "exp : exp AND exp",
372
+ "exp : NOT exp",
373
+ "exp : '(' exp ')'",
374
+ };
375
+
376
+ //#line 91 "src/main/java/org/embulk/filter/row/where/_parser.y"
377
+
378
+ protected Schema schema;
379
+ protected Yylex lexer;
380
+ protected ParserVal root;
381
+
382
+ public Parser(final Schema schema)
383
+ {
384
+ this.schema = schema;
385
+ }
386
+
387
+ public Parser(final Schema schema, boolean yydebug)
388
+ {
389
+ this.schema = schema;
390
+ this.yydebug = yydebug;
391
+ }
392
+
393
+ public ParserExp parse(String str)
394
+ {
395
+ lexer = new Yylex(str, this);
396
+ yyparse();
397
+ return ((ParserExp)(root.obj));
398
+ }
399
+
400
+ private int yylex () {
401
+ int token = -1;
402
+ try {
403
+ token = lexer.yylex(); // next token
404
+ }
405
+ catch (java.io.IOException e) {
406
+ e.printStackTrace(); // should not happen
407
+ }
408
+ return token;
409
+ }
410
+
411
+ void yyerror(String s)
412
+ {
413
+ throw new RuntimeException("yyerror: " + s);
414
+ }
415
+
416
+ /*public static void main(String args[])
417
+ {
418
+ Parser yyparser = new Parser();
419
+ ParserExp exp = yyparser.parse("boolean = true");
420
+ HashMap<String, Object> variables = new HashMap<>();
421
+ variables.put("boolean", Boolean.TRUE);
422
+ System.out.println("ans: " + exp.eval(variables));
423
+ }*/
424
+ //#line 352 "Parser.java"
425
+ //###############################################################
426
+ // method: yylexdebug : check lexer state
427
+ //###############################################################
428
+ void yylexdebug(int state,int ch)
429
+ {
430
+ String s=null;
431
+ if (ch < 0) ch=0;
432
+ if (ch <= YYMAXTOKEN) //check index bounds
433
+ s = yyname[ch]; //now get it
434
+ if (s==null)
435
+ s = "illegal-symbol";
436
+ debug("state "+state+", reading "+ch+" ("+s+")");
437
+ }
438
+
439
+
440
+
441
+
442
+
443
+ //The following are now global, to aid in error reporting
444
+ int yyn; //next next thing to do
445
+ int yym; //
446
+ int yystate; //current parsing state from state table
447
+ String yys; //current token string
448
+
449
+
450
+ //###############################################################
451
+ // method: yyparse : parse input and execute indicated items
452
+ //###############################################################
453
+ int yyparse()
454
+ {
455
+ boolean doaction;
456
+ init_stacks();
457
+ yynerrs = 0;
458
+ yyerrflag = 0;
459
+ yychar = -1; //impossible char forces a read
460
+ yystate=0; //initial state
461
+ state_push(yystate); //save it
462
+ val_push(yylval); //save empty value
463
+ while (true) //until parsing is done, either correctly, or w/error
464
+ {
465
+ doaction=true;
466
+ if (yydebug) debug("loop");
467
+ //#### NEXT ACTION (from reduction table)
468
+ for (yyn=yydefred[yystate];yyn==0;yyn=yydefred[yystate])
469
+ {
470
+ if (yydebug) debug("yyn:"+yyn+" state:"+yystate+" yychar:"+yychar);
471
+ if (yychar < 0) //we want a char?
472
+ {
473
+ yychar = yylex(); //get next token
474
+ if (yydebug) debug(" next yychar:"+yychar);
475
+ //#### ERROR CHECK ####
476
+ if (yychar < 0) //it it didn't work/error
477
+ {
478
+ yychar = 0; //change it to default string (no -1!)
479
+ if (yydebug)
480
+ yylexdebug(yystate,yychar);
481
+ }
482
+ }//yychar<0
483
+ yyn = yysindex[yystate]; //get amount to shift by (shift index)
484
+ if ((yyn != 0) && (yyn += yychar) >= 0 &&
485
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
486
+ {
487
+ if (yydebug)
488
+ debug("state "+yystate+", shifting to state "+yytable[yyn]);
489
+ //#### NEXT STATE ####
490
+ yystate = yytable[yyn];//we are in a new state
491
+ state_push(yystate); //save it
492
+ val_push(yylval); //push our lval as the input for next rule
493
+ yychar = -1; //since we have 'eaten' a token, say we need another
494
+ if (yyerrflag > 0) //have we recovered an error?
495
+ --yyerrflag; //give ourselves credit
496
+ doaction=false; //but don't process yet
497
+ break; //quit the yyn=0 loop
498
+ }
499
+
500
+ yyn = yyrindex[yystate]; //reduce
501
+ if ((yyn !=0 ) && (yyn += yychar) >= 0 &&
502
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
503
+ { //we reduced!
504
+ if (yydebug) debug("reduce");
505
+ yyn = yytable[yyn];
506
+ doaction=true; //get ready to execute
507
+ break; //drop down to actions
508
+ }
509
+ else //ERROR RECOVERY
510
+ {
511
+ if (yyerrflag==0)
512
+ {
513
+ yyerror("syntax error");
514
+ yynerrs++;
515
+ }
516
+ if (yyerrflag < 3) //low error count?
517
+ {
518
+ yyerrflag = 3;
519
+ while (true) //do until break
520
+ {
521
+ if (stateptr<0) //check for under & overflow here
522
+ {
523
+ yyerror("stack underflow. aborting..."); //note lower case 's'
524
+ return 1;
525
+ }
526
+ yyn = yysindex[state_peek(0)];
527
+ if ((yyn != 0) && (yyn += YYERRCODE) >= 0 &&
528
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
529
+ {
530
+ if (yydebug)
531
+ debug("state "+state_peek(0)+", error recovery shifting to state "+yytable[yyn]+" ");
532
+ yystate = yytable[yyn];
533
+ state_push(yystate);
534
+ val_push(yylval);
535
+ doaction=false;
536
+ break;
537
+ }
538
+ else
539
+ {
540
+ if (yydebug)
541
+ debug("error recovery discarding state "+state_peek(0)+" ");
542
+ if (stateptr<0) //check for under & overflow here
543
+ {
544
+ yyerror("Stack underflow. aborting..."); //capital 'S'
545
+ return 1;
546
+ }
547
+ state_pop();
548
+ val_pop();
549
+ }
550
+ }
551
+ }
552
+ else //discard this token
553
+ {
554
+ if (yychar == 0)
555
+ return 1; //yyabort
556
+ if (yydebug)
557
+ {
558
+ yys = null;
559
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
560
+ if (yys == null) yys = "illegal-symbol";
561
+ debug("state "+yystate+", error recovery discards token "+yychar+" ("+yys+")");
562
+ }
563
+ yychar = -1; //read another
564
+ }
565
+ }//end error recovery
566
+ }//yyn=0 loop
567
+ if (!doaction) //any reason not to proceed?
568
+ continue; //skip action
569
+ yym = yylen[yyn]; //get count of terminals on rhs
570
+ if (yydebug)
571
+ debug("state "+yystate+", reducing "+yym+" by rule "+yyn+" ("+yyrule[yyn]+")");
572
+ if (yym>0) //if count of rhs not 'nil'
573
+ yyval = val_peek(yym-1); //get current semantic value
574
+ yyval = dup_yyval(yyval); //duplicate yyval if ParserVal is used as semantic value
575
+ switch(yyn)
576
+ {
577
+ //########## USER-SUPPLIED ACTIONS ##########
578
+ case 2:
579
+ //#line 39 "src/main/java/org/embulk/filter/row/where/_parser.y"
580
+ { root = val_peek(0); }
581
+ break;
582
+ case 3:
583
+ //#line 42 "src/main/java/org/embulk/filter/row/where/_parser.y"
584
+ { yyval = new ParserVal(new TimestampLiteral(val_peek(0))); }
585
+ break;
586
+ case 4:
587
+ //#line 43 "src/main/java/org/embulk/filter/row/where/_parser.y"
588
+ { yyval = new ParserVal(new TimestampLiteral(val_peek(0))); }
589
+ break;
590
+ case 5:
591
+ //#line 45 "src/main/java/org/embulk/filter/row/where/_parser.y"
592
+ { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), EQ)); }
593
+ break;
594
+ case 6:
595
+ //#line 46 "src/main/java/org/embulk/filter/row/where/_parser.y"
596
+ { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), NEQ)); }
597
+ break;
598
+ case 7:
599
+ //#line 47 "src/main/java/org/embulk/filter/row/where/_parser.y"
600
+ { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), EQ)); }
601
+ break;
602
+ case 8:
603
+ //#line 48 "src/main/java/org/embulk/filter/row/where/_parser.y"
604
+ { yyval = new ParserVal(new BooleanOpExp(val_peek(2), val_peek(0), NEQ)); }
605
+ break;
606
+ case 9:
607
+ //#line 49 "src/main/java/org/embulk/filter/row/where/_parser.y"
608
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), EQ)); }
609
+ break;
610
+ case 10:
611
+ //#line 50 "src/main/java/org/embulk/filter/row/where/_parser.y"
612
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), NEQ)); }
613
+ break;
614
+ case 11:
615
+ //#line 51 "src/main/java/org/embulk/filter/row/where/_parser.y"
616
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GT)); }
617
+ break;
618
+ case 12:
619
+ //#line 52 "src/main/java/org/embulk/filter/row/where/_parser.y"
620
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GE)); }
621
+ break;
622
+ case 13:
623
+ //#line 53 "src/main/java/org/embulk/filter/row/where/_parser.y"
624
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LT)); }
625
+ break;
626
+ case 14:
627
+ //#line 54 "src/main/java/org/embulk/filter/row/where/_parser.y"
628
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LE)); }
629
+ break;
630
+ case 15:
631
+ //#line 55 "src/main/java/org/embulk/filter/row/where/_parser.y"
632
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), EQ)); }
633
+ break;
634
+ case 16:
635
+ //#line 56 "src/main/java/org/embulk/filter/row/where/_parser.y"
636
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), NEQ)); }
637
+ break;
638
+ case 17:
639
+ //#line 57 "src/main/java/org/embulk/filter/row/where/_parser.y"
640
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GT)); }
641
+ break;
642
+ case 18:
643
+ //#line 58 "src/main/java/org/embulk/filter/row/where/_parser.y"
644
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), GE)); }
645
+ break;
646
+ case 19:
647
+ //#line 59 "src/main/java/org/embulk/filter/row/where/_parser.y"
648
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LT)); }
649
+ break;
650
+ case 20:
651
+ //#line 60 "src/main/java/org/embulk/filter/row/where/_parser.y"
652
+ { yyval = new ParserVal(new NumberOpExp(val_peek(2), val_peek(0), LE)); }
653
+ break;
654
+ case 21:
655
+ //#line 61 "src/main/java/org/embulk/filter/row/where/_parser.y"
656
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), EQ)); }
657
+ break;
658
+ case 22:
659
+ //#line 62 "src/main/java/org/embulk/filter/row/where/_parser.y"
660
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), NEQ)); }
661
+ break;
662
+ case 23:
663
+ //#line 63 "src/main/java/org/embulk/filter/row/where/_parser.y"
664
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), START_WITH)); }
665
+ break;
666
+ case 24:
667
+ //#line 64 "src/main/java/org/embulk/filter/row/where/_parser.y"
668
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), END_WITH)); }
669
+ break;
670
+ case 25:
671
+ //#line 65 "src/main/java/org/embulk/filter/row/where/_parser.y"
672
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), INCLUDE)); }
673
+ break;
674
+ case 26:
675
+ //#line 66 "src/main/java/org/embulk/filter/row/where/_parser.y"
676
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), EQ)); }
677
+ break;
678
+ case 27:
679
+ //#line 67 "src/main/java/org/embulk/filter/row/where/_parser.y"
680
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), NEQ)); }
681
+ break;
682
+ case 28:
683
+ //#line 68 "src/main/java/org/embulk/filter/row/where/_parser.y"
684
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), START_WITH)); }
685
+ break;
686
+ case 29:
687
+ //#line 69 "src/main/java/org/embulk/filter/row/where/_parser.y"
688
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), END_WITH)); }
689
+ break;
690
+ case 30:
691
+ //#line 70 "src/main/java/org/embulk/filter/row/where/_parser.y"
692
+ { yyval = new ParserVal(new StringOpExp(val_peek(2), val_peek(0), INCLUDE)); }
693
+ break;
694
+ case 31:
695
+ //#line 71 "src/main/java/org/embulk/filter/row/where/_parser.y"
696
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), EQ)); }
697
+ break;
698
+ case 32:
699
+ //#line 72 "src/main/java/org/embulk/filter/row/where/_parser.y"
700
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), NEQ)); }
701
+ break;
702
+ case 33:
703
+ //#line 73 "src/main/java/org/embulk/filter/row/where/_parser.y"
704
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GT)); }
705
+ break;
706
+ case 34:
707
+ //#line 74 "src/main/java/org/embulk/filter/row/where/_parser.y"
708
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GE)); }
709
+ break;
710
+ case 35:
711
+ //#line 75 "src/main/java/org/embulk/filter/row/where/_parser.y"
712
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LT)); }
713
+ break;
714
+ case 36:
715
+ //#line 76 "src/main/java/org/embulk/filter/row/where/_parser.y"
716
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LE)); }
717
+ break;
718
+ case 37:
719
+ //#line 77 "src/main/java/org/embulk/filter/row/where/_parser.y"
720
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), EQ)); }
721
+ break;
722
+ case 38:
723
+ //#line 78 "src/main/java/org/embulk/filter/row/where/_parser.y"
724
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), NEQ)); }
725
+ break;
726
+ case 39:
727
+ //#line 79 "src/main/java/org/embulk/filter/row/where/_parser.y"
728
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GT)); }
729
+ break;
730
+ case 40:
731
+ //#line 80 "src/main/java/org/embulk/filter/row/where/_parser.y"
732
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), GE)); }
733
+ break;
734
+ case 41:
735
+ //#line 81 "src/main/java/org/embulk/filter/row/where/_parser.y"
736
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LT)); }
737
+ break;
738
+ case 42:
739
+ //#line 82 "src/main/java/org/embulk/filter/row/where/_parser.y"
740
+ { yyval = new ParserVal(new TimestampOpExp(val_peek(2), val_peek(0), LE)); }
741
+ break;
742
+ case 43:
743
+ //#line 83 "src/main/java/org/embulk/filter/row/where/_parser.y"
744
+ { yyval = new ParserVal(new NullOpExp(val_peek(2), EQ)); }
745
+ break;
746
+ case 44:
747
+ //#line 84 "src/main/java/org/embulk/filter/row/where/_parser.y"
748
+ { yyval = new ParserVal(new NullOpExp(val_peek(3), NEQ)); }
749
+ break;
750
+ case 45:
751
+ //#line 85 "src/main/java/org/embulk/filter/row/where/_parser.y"
752
+ { yyval = new ParserVal(new LogicalOpExp(val_peek(2), val_peek(0), OR)); }
753
+ break;
754
+ case 46:
755
+ //#line 86 "src/main/java/org/embulk/filter/row/where/_parser.y"
756
+ { yyval = new ParserVal(new LogicalOpExp(val_peek(2), val_peek(0), AND)); }
757
+ break;
758
+ case 47:
759
+ //#line 87 "src/main/java/org/embulk/filter/row/where/_parser.y"
760
+ { yyval = new ParserVal(new NegateOpExp(val_peek(0))); }
761
+ break;
762
+ case 48:
763
+ //#line 88 "src/main/java/org/embulk/filter/row/where/_parser.y"
764
+ { yyval = val_peek(1); }
765
+ break;
766
+ //#line 689 "Parser.java"
767
+ //########## END OF USER-SUPPLIED ACTIONS ##########
768
+ }//switch
769
+ //#### Now let's reduce... ####
770
+ if (yydebug) debug("reduce");
771
+ state_drop(yym); //we just reduced yylen states
772
+ yystate = state_peek(0); //get new state
773
+ val_drop(yym); //corresponding value drop
774
+ yym = yylhs[yyn]; //select next TERMINAL(on lhs)
775
+ if (yystate == 0 && yym == 0)//done? 'rest' state and at first TERMINAL
776
+ {
777
+ if (yydebug) debug("After reduction, shifting from state 0 to state "+YYFINAL+"");
778
+ yystate = YYFINAL; //explicitly say we're done
779
+ state_push(YYFINAL); //and save it
780
+ val_push(yyval); //also save the semantic value of parsing
781
+ if (yychar < 0) //we want another character?
782
+ {
783
+ yychar = yylex(); //get next character
784
+ if (yychar<0) yychar=0; //clean, if necessary
785
+ if (yydebug)
786
+ yylexdebug(yystate,yychar);
787
+ }
788
+ if (yychar == 0) //Good exit (if lex returns 0 ;-)
789
+ break; //quit the loop--all DONE
790
+ }//if yystate
791
+ else //else not done yet
792
+ { //get next state and push, for next yydefred[]
793
+ yyn = yygindex[yym]; //find out where to go
794
+ if ((yyn != 0) && (yyn += yystate) >= 0 &&
795
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
796
+ yystate = yytable[yyn]; //get new state
797
+ else
798
+ yystate = yydgoto[yym]; //else go to new defred
799
+ if (yydebug) debug("after reduction, shifting from state "+state_peek(0)+" to state "+yystate+"");
800
+ state_push(yystate); //going again, so push state & val...
801
+ val_push(yyval); //for next action
802
+ }
803
+ }//main loop
804
+ return 0;//yyaccept!!
805
+ }
806
+ //## end of method parse() ######################################
807
+
808
+
809
+
810
+ //## run() --- for Thread #######################################
811
+ /**
812
+ * A default run method, used for operating this parser
813
+ * object in the background. It is intended for extending Thread
814
+ * or implementing Runnable. Turn off with -Jnorun .
815
+ */
816
+ public void run()
817
+ {
818
+ yyparse();
819
+ }
820
+ //## end of method run() ########################################
821
+
822
+
823
+
824
+ //## Constructors ###############################################
825
+ //## The -Jnoconstruct option was used ##
826
+ //###############################################################
827
+
828
+
829
+
830
+ }
831
+ //################### END OF CLASS ##############################