embulk-filter-row 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 ##############################