File Coverage

blib/lib/OPTIMADE/Filter/Parser.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             ####################################################################
2             #
3             # This file was generated using Parse::Yapp version 1.21.
4             #
5             # Don't edit this file, use source file instead.
6             #
7             # ANY CHANGE MADE HERE WILL BE LOST !
8             #
9             ####################################################################
10             package OPTIMADE::Filter::Parser;
11 5     5   226530 use vars qw ( @ISA );
  5         9  
  5         281  
12 5     5   23 use strict;
  5         14  
  5         233  
13              
14             @ISA= qw ( Parse::Yapp::Driver );
15 5     5   2848 use Parse::Yapp::Driver;
  5         19331  
  5         1779  
16              
17             #line 3 "lib/OPTIMADE/Filter/Parser.yp"
18              
19              
20             use warnings;
21              
22             use Scalar::Util qw(blessed);
23              
24             use OPTIMADE::Filter::AndOr;
25             use OPTIMADE::Filter::Boolean;
26             use OPTIMADE::Filter::Comparison;
27             use OPTIMADE::Filter::Known;
28             use OPTIMADE::Filter::ListComparison;
29             use OPTIMADE::Filter::Negation;
30             use OPTIMADE::Filter::Property;
31             use OPTIMADE::Filter::Zip;
32              
33             our $allow_LIKE_operator = 0;
34              
35              
36              
37             sub new {
38             my($class)=shift;
39             ref($class)
40             and $class=ref($class);
41              
42             my($self)=$class->SUPER::new( yyversion => '1.21',
43             yystates =>
44             [
45             {#State 0
46             ACTIONS => {
47             "(" => 11,
48             'identifier' => 12,
49             'NOT' => 6,
50             'TRUE' => 3,
51             'number' => 9,
52             'FALSE' => 10,
53             'string' => 16
54             },
55             GOTOS => {
56             'expression_clause' => 17,
57             'expression_phrase' => 18,
58             'property' => 7,
59             'comparison' => 8,
60             'unordered_constant' => 14,
61             'property_first_comparison' => 13,
62             'filter' => 15,
63             'constant_first_comparison' => 4,
64             'openingbrace' => 5,
65             'expression' => 2,
66             'ordered_constant' => 1
67             }
68             },
69             {#State 1
70             ACTIONS => {
71             "<" => 19,
72             "=" => 23,
73             ">" => 24,
74             "!" => 21
75             },
76             GOTOS => {
77             'value_op_rhs' => 25,
78             'value_rel_comp_rhs' => 22,
79             'value_eq_rhs' => 27,
80             'relative_comparison_operator' => 26,
81             'equality_operator' => 20
82             }
83             },
84             {#State 2
85             DEFAULT => -1
86             },
87             {#State 3
88             DEFAULT => -4
89             },
90             {#State 4
91             DEFAULT => -28
92             },
93             {#State 5
94             ACTIONS => {
95             'TRUE' => 3,
96             "(" => 11,
97             'identifier' => 12,
98             'NOT' => 6,
99             'number' => 9,
100             'string' => 16,
101             'FALSE' => 10
102             },
103             GOTOS => {
104             'openingbrace' => 5,
105             'constant_first_comparison' => 4,
106             'ordered_constant' => 1,
107             'expression' => 28,
108             'expression_clause' => 17,
109             'expression_phrase' => 18,
110             'property_first_comparison' => 13,
111             'unordered_constant' => 14,
112             'comparison' => 8,
113             'property' => 7
114             }
115             },
116             {#State 6
117             ACTIONS => {
118             'identifier' => 12,
119             "(" => 11,
120             'string' => 16,
121             'FALSE' => 10,
122             'TRUE' => 3,
123             'number' => 9
124             },
125             GOTOS => {
126             'openingbrace' => 30,
127             'constant_first_comparison' => 4,
128             'ordered_constant' => 1,
129             'unordered_constant' => 14,
130             'property_first_comparison' => 13,
131             'property' => 7,
132             'comparison' => 29
133             }
134             },
135             {#State 7
136             ACTIONS => {
137             'CONTAINS' => 34,
138             ">" => 24,
139             'HAS' => 35,
140             'IS' => 36,
141             'LIKE' => 48,
142             "." => 45,
143             "=" => 23,
144             "!" => 21,
145             ":" => 40,
146             "<" => 19,
147             'STARTS' => 38,
148             'LENGTH' => 37,
149             'ENDS' => 39
150             },
151             DEFAULT => -32,
152             GOTOS => {
153             'set_op_rhs' => 42,
154             'property_zip_addon' => 33,
155             'colon' => 32,
156             'dot' => 43,
157             'value_eq_rhs' => 27,
158             'relative_comparison_operator' => 26,
159             'set_zip_op_rhs' => 31,
160             'value_op_rhs' => 41,
161             'known_op_rhs' => 47,
162             'fuzzy_string_op_rhs' => 46,
163             'value_rel_comp_rhs' => 22,
164             'length_op_rhs' => 44,
165             'equality_operator' => 20
166             }
167             },
168             {#State 8
169             DEFAULT => -24
170             },
171             {#State 9
172             DEFAULT => -3
173             },
174             {#State 10
175             DEFAULT => -5
176             },
177             {#State 11
178             DEFAULT => -68
179             },
180             {#State 12
181             DEFAULT => -66
182             },
183             {#State 13
184             DEFAULT => -29
185             },
186             {#State 14
187             ACTIONS => {
188             "=" => 23,
189             "!" => 21
190             },
191             GOTOS => {
192             'value_eq_rhs' => 49,
193             'equality_operator' => 20
194             }
195             },
196             {#State 15
197             ACTIONS => {
198             '' => 50
199             }
200             },
201             {#State 16
202             DEFAULT => -2
203             },
204             {#State 17
205             ACTIONS => {
206             'OR' => 51
207             },
208             DEFAULT => -20
209             },
210             {#State 18
211             ACTIONS => {
212             'AND' => 52
213             },
214             DEFAULT => -22
215             },
216             {#State 19
217             ACTIONS => {
218             "=" => 53
219             },
220             DEFAULT => -77
221             },
222             {#State 20
223             ACTIONS => {
224             'number' => 9,
225             'TRUE' => 3,
226             'string' => 16,
227             'FALSE' => 10,
228             'identifier' => 12
229             },
230             GOTOS => {
231             'value' => 54,
232             'property' => 57,
233             'ordered_constant' => 58,
234             'unordered_constant' => 56,
235             'ordered_value' => 55
236             }
237             },
238             {#State 21
239             ACTIONS => {
240             "=" => 59
241             }
242             },
243             {#State 22
244             DEFAULT => -40
245             },
246             {#State 23
247             DEFAULT => -75
248             },
249             {#State 24
250             ACTIONS => {
251             "=" => 60
252             },
253             DEFAULT => -79
254             },
255             {#State 25
256             DEFAULT => -30
257             },
258             {#State 26
259             ACTIONS => {
260             'string' => 16,
261             'number' => 9,
262             'identifier' => 12
263             },
264             GOTOS => {
265             'ordered_value' => 61,
266             'property' => 57,
267             'ordered_constant' => 58
268             }
269             },
270             {#State 27
271             DEFAULT => -39
272             },
273             {#State 28
274             ACTIONS => {
275             ")" => 62
276             },
277             GOTOS => {
278             'closingbrace' => 63
279             }
280             },
281             {#State 29
282             DEFAULT => -26
283             },
284             {#State 30
285             ACTIONS => {
286             'string' => 16,
287             'TRUE' => 3,
288             'FALSE' => 10,
289             'number' => 9,
290             'NOT' => 6,
291             'identifier' => 12,
292             "(" => 11
293             },
294             GOTOS => {
295             'expression_phrase' => 18,
296             'expression_clause' => 17,
297             'unordered_constant' => 14,
298             'property_first_comparison' => 13,
299             'comparison' => 8,
300             'property' => 7,
301             'openingbrace' => 5,
302             'constant_first_comparison' => 4,
303             'ordered_constant' => 1,
304             'expression' => 64
305             }
306             },
307             {#State 31
308             DEFAULT => -37
309             },
310             {#State 32
311             ACTIONS => {
312             'identifier' => 12
313             },
314             GOTOS => {
315             'property' => 65
316             }
317             },
318             {#State 33
319             ACTIONS => {
320             'HAS' => 67,
321             ":" => 40
322             },
323             GOTOS => {
324             'colon' => 66
325             }
326             },
327             {#State 34
328             ACTIONS => {
329             'string' => 16,
330             'TRUE' => 3,
331             'FALSE' => 10,
332             'number' => 9,
333             'identifier' => 12
334             },
335             GOTOS => {
336             'value' => 68,
337             'ordered_value' => 55,
338             'ordered_constant' => 58,
339             'unordered_constant' => 56,
340             'property' => 57
341             }
342             },
343             {#State 35
344             ACTIONS => {
345             'TRUE' => 3,
346             ">" => 24,
347             'number' => 9,
348             'ANY' => 70,
349             'CONTAINS' => 34,
350             'ALL' => 69,
351             'FALSE' => 10,
352             "=" => 23,
353             "!" => 21,
354             'identifier' => 12,
355             'ONLY' => 71,
356             'LIKE' => 48,
357             'ENDS' => 39,
358             'STARTS' => 38,
359             "<" => 19,
360             'string' => 16
361             },
362             GOTOS => {
363             'ordered_constant' => 58,
364             'ordered_value' => 55,
365             'fuzzy_string_op_rhs' => 74,
366             'equality_operator' => 73,
367             'relative_comparison_operator' => 72,
368             'unordered_constant' => 56,
369             'property' => 57,
370             'value' => 75
371             }
372             },
373             {#State 36
374             ACTIONS => {
375             'UNKNOWN' => 77,
376             'KNOWN' => 76
377             }
378             },
379             {#State 37
380             ACTIONS => {
381             'TRUE' => 3,
382             "!" => 21,
383             "=" => 23,
384             'identifier' => 12,
385             "<" => 19,
386             'number' => 9,
387             'FALSE' => 10,
388             'string' => 16,
389             ">" => 24
390             },
391             GOTOS => {
392             'operator' => 78,
393             'ordered_value' => 55,
394             'ordered_constant' => 58,
395             'relative_comparison_operator' => 81,
396             'equality_operator' => 80,
397             'unordered_constant' => 56,
398             'property' => 57,
399             'value' => 79
400             }
401             },
402             {#State 38
403             ACTIONS => {
404             'string' => 16,
405             'FALSE' => 10,
406             'TRUE' => 3,
407             'number' => 9,
408             'WITH' => 82,
409             'identifier' => 12
410             },
411             GOTOS => {
412             'value' => 83,
413             'ordered_constant' => 58,
414             'unordered_constant' => 56,
415             'property' => 57,
416             'ordered_value' => 55
417             }
418             },
419             {#State 39
420             ACTIONS => {
421             'identifier' => 12,
422             'WITH' => 84,
423             'number' => 9,
424             'TRUE' => 3,
425             'string' => 16,
426             'FALSE' => 10
427             },
428             GOTOS => {
429             'value' => 85,
430             'unordered_constant' => 56,
431             'ordered_constant' => 58,
432             'property' => 57,
433             'ordered_value' => 55
434             }
435             },
436             {#State 40
437             DEFAULT => -72
438             },
439             {#State 41
440             DEFAULT => -33
441             },
442             {#State 42
443             DEFAULT => -36
444             },
445             {#State 43
446             ACTIONS => {
447             'identifier' => 86
448             }
449             },
450             {#State 44
451             DEFAULT => -38
452             },
453             {#State 45
454             DEFAULT => -70
455             },
456             {#State 46
457             DEFAULT => -35
458             },
459             {#State 47
460             DEFAULT => -34
461             },
462             {#State 48
463             ACTIONS => {
464             'identifier' => 12,
465             'number' => 9,
466             'TRUE' => 3,
467             'FALSE' => 10,
468             'string' => 16
469             },
470             GOTOS => {
471             'ordered_constant' => 58,
472             'unordered_constant' => 56,
473             'property' => 57,
474             'ordered_value' => 55,
475             'value' => 87
476             }
477             },
478             {#State 49
479             DEFAULT => -31
480             },
481             {#State 50
482             DEFAULT => 0
483             },
484             {#State 51
485             ACTIONS => {
486             'number' => 9,
487             'string' => 16,
488             'FALSE' => 10,
489             "(" => 11,
490             'NOT' => 6,
491             'identifier' => 12,
492             'TRUE' => 3
493             },
494             GOTOS => {
495             'ordered_constant' => 1,
496             'expression' => 88,
497             'openingbrace' => 5,
498             'constant_first_comparison' => 4,
499             'unordered_constant' => 14,
500             'property_first_comparison' => 13,
501             'property' => 7,
502             'comparison' => 8,
503             'expression_clause' => 17,
504             'expression_phrase' => 18
505             }
506             },
507             {#State 52
508             ACTIONS => {
509             'identifier' => 12,
510             'NOT' => 6,
511             "(" => 11,
512             'TRUE' => 3,
513             'FALSE' => 10,
514             'string' => 16,
515             'number' => 9
516             },
517             GOTOS => {
518             'ordered_constant' => 1,
519             'constant_first_comparison' => 4,
520             'openingbrace' => 5,
521             'unordered_constant' => 14,
522             'property_first_comparison' => 13,
523             'comparison' => 8,
524             'property' => 7,
525             'expression_phrase' => 18,
526             'expression_clause' => 89
527             }
528             },
529             {#State 53
530             DEFAULT => -78
531             },
532             {#State 54
533             DEFAULT => -41
534             },
535             {#State 55
536             DEFAULT => -7
537             },
538             {#State 56
539             DEFAULT => -6
540             },
541             {#State 57
542             ACTIONS => {
543             "." => 45
544             },
545             DEFAULT => -9,
546             GOTOS => {
547             'dot' => 43
548             }
549             },
550             {#State 58
551             DEFAULT => -8
552             },
553             {#State 59
554             DEFAULT => -76
555             },
556             {#State 60
557             DEFAULT => -80
558             },
559             {#State 61
560             DEFAULT => -42
561             },
562             {#State 62
563             DEFAULT => -69
564             },
565             {#State 63
566             DEFAULT => -25
567             },
568             {#State 64
569             ACTIONS => {
570             ")" => 62
571             },
572             GOTOS => {
573             'closingbrace' => 90
574             }
575             },
576             {#State 65
577             ACTIONS => {
578             "." => 45
579             },
580             DEFAULT => -62,
581             GOTOS => {
582             'dot' => 43
583             }
584             },
585             {#State 66
586             ACTIONS => {
587             'identifier' => 12
588             },
589             GOTOS => {
590             'property' => 91
591             }
592             },
593             {#State 67
594             ACTIONS => {
595             'TRUE' => 3,
596             ">" => 24,
597             'ALL' => 96,
598             'FALSE' => 10,
599             'CONTAINS' => 34,
600             'number' => 9,
601             'ANY' => 95,
602             'identifier' => 12,
603             "=" => 23,
604             "!" => 21,
605             'LIKE' => 48,
606             'ONLY' => 92,
607             'STARTS' => 38,
608             'ENDS' => 39,
609             'string' => 16,
610             "<" => 19
611             },
612             GOTOS => {
613             'value' => 100,
614             'value_list_entry' => 99,
615             'unordered_constant' => 56,
616             'equality_operator' => 20,
617             'fuzzy_string_op_rhs' => 98,
618             'value_rel_comp_rhs' => 97,
619             'ordered_value' => 55,
620             'value_zip' => 93,
621             'property' => 57,
622             'relative_comparison_operator' => 26,
623             'value_eq_rhs' => 94,
624             'ordered_constant' => 58
625             }
626             },
627             {#State 68
628             DEFAULT => -45
629             },
630             {#State 69
631             ACTIONS => {
632             'string' => 16,
633             "<" => 19,
634             'STARTS' => 38,
635             'ENDS' => 39,
636             'LIKE' => 48,
637             'identifier' => 12,
638             "!" => 21,
639             "=" => 23,
640             'FALSE' => 10,
641             'CONTAINS' => 34,
642             'number' => 9,
643             ">" => 24,
644             'TRUE' => 3
645             },
646             GOTOS => {
647             'property' => 57,
648             'value_eq_rhs' => 94,
649             'relative_comparison_operator' => 26,
650             'ordered_constant' => 58,
651             'value' => 100,
652             'value_list_entry' => 101,
653             'unordered_constant' => 56,
654             'value_rel_comp_rhs' => 97,
655             'fuzzy_string_op_rhs' => 98,
656             'value_list' => 102,
657             'equality_operator' => 20,
658             'ordered_value' => 55
659             }
660             },
661             {#State 70
662             ACTIONS => {
663             'TRUE' => 3,
664             'LIKE' => 48,
665             'identifier' => 12,
666             "!" => 21,
667             "=" => 23,
668             'string' => 16,
669             'FALSE' => 10,
670             "<" => 19,
671             'number' => 9,
672             'CONTAINS' => 34,
673             'STARTS' => 38,
674             ">" => 24,
675             'ENDS' => 39
676             },
677             GOTOS => {
678             'equality_operator' => 20,
679             'value_rel_comp_rhs' => 97,
680             'value_list' => 103,
681             'fuzzy_string_op_rhs' => 98,
682             'ordered_value' => 55,
683             'value' => 100,
684             'unordered_constant' => 56,
685             'value_list_entry' => 101,
686             'relative_comparison_operator' => 26,
687             'value_eq_rhs' => 94,
688             'ordered_constant' => 58,
689             'property' => 57
690             }
691             },
692             {#State 71
693             ACTIONS => {
694             'TRUE' => 3,
695             'FALSE' => 10,
696             'number' => 9,
697             'CONTAINS' => 34,
698             ">" => 24,
699             'LIKE' => 48,
700             'identifier' => 12,
701             "=" => 23,
702             "!" => 21,
703             'string' => 16,
704             "<" => 19,
705             'STARTS' => 38,
706             'ENDS' => 39
707             },
708             GOTOS => {
709             'ordered_value' => 55,
710             'value_rel_comp_rhs' => 97,
711             'fuzzy_string_op_rhs' => 98,
712             'value_list' => 104,
713             'equality_operator' => 20,
714             'value_list_entry' => 101,
715             'unordered_constant' => 56,
716             'value' => 100,
717             'ordered_constant' => 58,
718             'value_eq_rhs' => 94,
719             'relative_comparison_operator' => 26,
720             'property' => 57
721             }
722             },
723             {#State 72
724             ACTIONS => {
725             'number' => 9,
726             'string' => 16,
727             'identifier' => 12
728             },
729             GOTOS => {
730             'ordered_value' => 105,
731             'property' => 57,
732             'ordered_constant' => 58
733             }
734             },
735             {#State 73
736             ACTIONS => {
737             'number' => 9,
738             'FALSE' => 10,
739             'string' => 16,
740             'TRUE' => 3,
741             'identifier' => 12
742             },
743             GOTOS => {
744             'value' => 106,
745             'ordered_value' => 55,
746             'property' => 57,
747             'ordered_constant' => 58,
748             'unordered_constant' => 56
749             }
750             },
751             {#State 74
752             DEFAULT => -54
753             },
754             {#State 75
755             DEFAULT => -51
756             },
757             {#State 76
758             DEFAULT => -43
759             },
760             {#State 77
761             DEFAULT => -44
762             },
763             {#State 78
764             ACTIONS => {
765             'identifier' => 12,
766             'number' => 9,
767             'string' => 16,
768             'FALSE' => 10,
769             'TRUE' => 3
770             },
771             GOTOS => {
772             'ordered_value' => 55,
773             'ordered_constant' => 58,
774             'unordered_constant' => 56,
775             'property' => 57,
776             'value' => 107
777             }
778             },
779             {#State 79
780             DEFAULT => -64
781             },
782             {#State 80
783             DEFAULT => -73
784             },
785             {#State 81
786             DEFAULT => -74
787             },
788             {#State 82
789             ACTIONS => {
790             'identifier' => 12,
791             'number' => 9,
792             'FALSE' => 10,
793             'string' => 16,
794             'TRUE' => 3
795             },
796             GOTOS => {
797             'ordered_value' => 55,
798             'unordered_constant' => 56,
799             'ordered_constant' => 58,
800             'property' => 57,
801             'value' => 108
802             }
803             },
804             {#State 83
805             DEFAULT => -46
806             },
807             {#State 84
808             ACTIONS => {
809             'identifier' => 12,
810             'FALSE' => 10,
811             'string' => 16,
812             'TRUE' => 3,
813             'number' => 9
814             },
815             GOTOS => {
816             'ordered_value' => 55,
817             'ordered_constant' => 58,
818             'unordered_constant' => 56,
819             'property' => 57,
820             'value' => 109
821             }
822             },
823             {#State 85
824             DEFAULT => -48
825             },
826             {#State 86
827             DEFAULT => -67
828             },
829             {#State 87
830             DEFAULT => -50
831             },
832             {#State 88
833             DEFAULT => -21
834             },
835             {#State 89
836             DEFAULT => -23
837             },
838             {#State 90
839             DEFAULT => -27
840             },
841             {#State 91
842             ACTIONS => {
843             "." => 45
844             },
845             DEFAULT => -63,
846             GOTOS => {
847             'dot' => 43
848             }
849             },
850             {#State 92
851             ACTIONS => {
852             "<" => 19,
853             'string' => 16,
854             'ENDS' => 39,
855             'STARTS' => 38,
856             'LIKE' => 48,
857             "!" => 21,
858             "=" => 23,
859             'identifier' => 12,
860             'number' => 9,
861             'CONTAINS' => 34,
862             'FALSE' => 10,
863             ">" => 24,
864             'TRUE' => 3
865             },
866             GOTOS => {
867             'unordered_constant' => 56,
868             'value_list_entry' => 99,
869             'value' => 100,
870             'ordered_value' => 55,
871             'value_zip_list' => 110,
872             'value_zip' => 111,
873             'equality_operator' => 20,
874             'value_rel_comp_rhs' => 97,
875             'fuzzy_string_op_rhs' => 98,
876             'property' => 57,
877             'ordered_constant' => 58,
878             'relative_comparison_operator' => 26,
879             'value_eq_rhs' => 94
880             }
881             },
882             {#State 93
883             ACTIONS => {
884             ":" => 40
885             },
886             DEFAULT => -58,
887             GOTOS => {
888             'colon' => 112
889             }
890             },
891             {#State 94
892             DEFAULT => -11
893             },
894             {#State 95
895             ACTIONS => {
896             'STARTS' => 38,
897             'ENDS' => 39,
898             'string' => 16,
899             "<" => 19,
900             'identifier' => 12,
901             "=" => 23,
902             "!" => 21,
903             'LIKE' => 48,
904             ">" => 24,
905             'FALSE' => 10,
906             'CONTAINS' => 34,
907             'number' => 9,
908             'TRUE' => 3
909             },
910             GOTOS => {
911             'value' => 100,
912             'unordered_constant' => 56,
913             'value_list_entry' => 99,
914             'fuzzy_string_op_rhs' => 98,
915             'value_rel_comp_rhs' => 97,
916             'equality_operator' => 20,
917             'value_zip' => 111,
918             'value_zip_list' => 113,
919             'ordered_value' => 55,
920             'property' => 57,
921             'value_eq_rhs' => 94,
922             'relative_comparison_operator' => 26,
923             'ordered_constant' => 58
924             }
925             },
926             {#State 96
927             ACTIONS => {
928             'TRUE' => 3,
929             'LIKE' => 48,
930             'identifier' => 12,
931             "!" => 21,
932             "=" => 23,
933             'string' => 16,
934             'FALSE' => 10,
935             "<" => 19,
936             'number' => 9,
937             'CONTAINS' => 34,
938             'STARTS' => 38,
939             ">" => 24,
940             'ENDS' => 39
941             },
942             GOTOS => {
943             'property' => 57,
944             'ordered_constant' => 58,
945             'relative_comparison_operator' => 26,
946             'value_eq_rhs' => 94,
947             'unordered_constant' => 56,
948             'value_list_entry' => 99,
949             'value' => 100,
950             'ordered_value' => 55,
951             'value_zip_list' => 114,
952             'value_zip' => 111,
953             'equality_operator' => 20,
954             'value_rel_comp_rhs' => 97,
955             'fuzzy_string_op_rhs' => 98
956             }
957             },
958             {#State 97
959             DEFAULT => -12
960             },
961             {#State 98
962             DEFAULT => -13
963             },
964             {#State 99
965             ACTIONS => {
966             ":" => 40
967             },
968             GOTOS => {
969             'colon' => 115
970             }
971             },
972             {#State 100
973             DEFAULT => -10
974             },
975             {#State 101
976             DEFAULT => -14
977             },
978             {#State 102
979             ACTIONS => {
980             "," => 116
981             },
982             DEFAULT => -55,
983             GOTOS => {
984             'comma' => 117
985             }
986             },
987             {#State 103
988             ACTIONS => {
989             "," => 116
990             },
991             DEFAULT => -56,
992             GOTOS => {
993             'comma' => 117
994             }
995             },
996             {#State 104
997             ACTIONS => {
998             "," => 116
999             },
1000             DEFAULT => -57,
1001             GOTOS => {
1002             'comma' => 117
1003             }
1004             },
1005             {#State 105
1006             DEFAULT => -53
1007             },
1008             {#State 106
1009             DEFAULT => -52
1010             },
1011             {#State 107
1012             DEFAULT => -65
1013             },
1014             {#State 108
1015             DEFAULT => -47
1016             },
1017             {#State 109
1018             DEFAULT => -49
1019             },
1020             {#State 110
1021             ACTIONS => {
1022             "," => 116
1023             },
1024             DEFAULT => -59,
1025             GOTOS => {
1026             'comma' => 118
1027             }
1028             },
1029             {#State 111
1030             ACTIONS => {
1031             ":" => 40
1032             },
1033             DEFAULT => -18,
1034             GOTOS => {
1035             'colon' => 112
1036             }
1037             },
1038             {#State 112
1039             ACTIONS => {
1040             'number' => 9,
1041             'CONTAINS' => 34,
1042             'FALSE' => 10,
1043             ">" => 24,
1044             'TRUE' => 3,
1045             "<" => 19,
1046             'string' => 16,
1047             'ENDS' => 39,
1048             'STARTS' => 38,
1049             'LIKE' => 48,
1050             "=" => 23,
1051             "!" => 21,
1052             'identifier' => 12
1053             },
1054             GOTOS => {
1055             'property' => 57,
1056             'unordered_constant' => 56,
1057             'value_list_entry' => 119,
1058             'value' => 100,
1059             'ordered_constant' => 58,
1060             'ordered_value' => 55,
1061             'fuzzy_string_op_rhs' => 98,
1062             'value_rel_comp_rhs' => 97,
1063             'value_eq_rhs' => 94,
1064             'relative_comparison_operator' => 26,
1065             'equality_operator' => 20
1066             }
1067             },
1068             {#State 113
1069             ACTIONS => {
1070             "," => 116
1071             },
1072             DEFAULT => -61,
1073             GOTOS => {
1074             'comma' => 118
1075             }
1076             },
1077             {#State 114
1078             ACTIONS => {
1079             "," => 116
1080             },
1081             DEFAULT => -60,
1082             GOTOS => {
1083             'comma' => 118
1084             }
1085             },
1086             {#State 115
1087             ACTIONS => {
1088             'number' => 9,
1089             'CONTAINS' => 34,
1090             'FALSE' => 10,
1091             ">" => 24,
1092             'TRUE' => 3,
1093             "<" => 19,
1094             'string' => 16,
1095             'ENDS' => 39,
1096             'STARTS' => 38,
1097             'LIKE' => 48,
1098             "!" => 21,
1099             "=" => 23,
1100             'identifier' => 12
1101             },
1102             GOTOS => {
1103             'equality_operator' => 20,
1104             'fuzzy_string_op_rhs' => 98,
1105             'value_rel_comp_rhs' => 97,
1106             'ordered_value' => 55,
1107             'value' => 100,
1108             'value_list_entry' => 120,
1109             'unordered_constant' => 56,
1110             'relative_comparison_operator' => 26,
1111             'value_eq_rhs' => 94,
1112             'ordered_constant' => 58,
1113             'property' => 57
1114             }
1115             },
1116             {#State 116
1117             DEFAULT => -71
1118             },
1119             {#State 117
1120             ACTIONS => {
1121             ">" => 24,
1122             'FALSE' => 10,
1123             'CONTAINS' => 34,
1124             'number' => 9,
1125             'TRUE' => 3,
1126             'STARTS' => 38,
1127             'ENDS' => 39,
1128             'string' => 16,
1129             "<" => 19,
1130             'identifier' => 12,
1131             "=" => 23,
1132             "!" => 21,
1133             'LIKE' => 48
1134             },
1135             GOTOS => {
1136             'ordered_constant' => 58,
1137             'value_eq_rhs' => 94,
1138             'relative_comparison_operator' => 26,
1139             'property' => 57,
1140             'ordered_value' => 55,
1141             'value_rel_comp_rhs' => 97,
1142             'fuzzy_string_op_rhs' => 98,
1143             'equality_operator' => 20,
1144             'unordered_constant' => 56,
1145             'value_list_entry' => 121,
1146             'value' => 100
1147             }
1148             },
1149             {#State 118
1150             ACTIONS => {
1151             'LIKE' => 48,
1152             'identifier' => 12,
1153             "!" => 21,
1154             "=" => 23,
1155             'string' => 16,
1156             "<" => 19,
1157             'STARTS' => 38,
1158             'ENDS' => 39,
1159             'TRUE' => 3,
1160             'FALSE' => 10,
1161             'number' => 9,
1162             'CONTAINS' => 34,
1163             ">" => 24
1164             },
1165             GOTOS => {
1166             'unordered_constant' => 56,
1167             'value_list_entry' => 99,
1168             'value' => 100,
1169             'value_zip' => 122,
1170             'ordered_value' => 55,
1171             'value_rel_comp_rhs' => 97,
1172             'fuzzy_string_op_rhs' => 98,
1173             'equality_operator' => 20,
1174             'property' => 57,
1175             'ordered_constant' => 58,
1176             'value_eq_rhs' => 94,
1177             'relative_comparison_operator' => 26
1178             }
1179             },
1180             {#State 119
1181             DEFAULT => -17
1182             },
1183             {#State 120
1184             DEFAULT => -16
1185             },
1186             {#State 121
1187             DEFAULT => -15
1188             },
1189             {#State 122
1190             ACTIONS => {
1191             ":" => 40
1192             },
1193             DEFAULT => -19,
1194             GOTOS => {
1195             'colon' => 112
1196             }
1197             }
1198             ],
1199             yyrules =>
1200             [
1201             [#Rule 0
1202             '$start', 2, undef
1203             ],
1204             [#Rule 1
1205             'filter', 1, undef
1206             ],
1207             [#Rule 2
1208             'ordered_constant', 1, undef
1209             ],
1210             [#Rule 3
1211             'ordered_constant', 1, undef
1212             ],
1213             [#Rule 4
1214             'unordered_constant', 1,
1215             sub
1216             #line 35 "lib/OPTIMADE/Filter/Parser.yp"
1217             {
1218             return OPTIMADE::Filter::Boolean->new( 1 );
1219             }
1220             ],
1221             [#Rule 5
1222             'unordered_constant', 1,
1223             sub
1224             #line 39 "lib/OPTIMADE/Filter/Parser.yp"
1225             {
1226             return OPTIMADE::Filter::Boolean->new( '' );
1227             }
1228             ],
1229             [#Rule 6
1230             'value', 1, undef
1231             ],
1232             [#Rule 7
1233             'value', 1, undef
1234             ],
1235             [#Rule 8
1236             'ordered_value', 1, undef
1237             ],
1238             [#Rule 9
1239             'ordered_value', 1, undef
1240             ],
1241             [#Rule 10
1242             'value_list_entry', 1,
1243             sub
1244             #line 49 "lib/OPTIMADE/Filter/Parser.yp"
1245             {
1246             return [ '=', $_[1] ];
1247             }
1248             ],
1249             [#Rule 11
1250             'value_list_entry', 1,
1251             sub
1252             #line 53 "lib/OPTIMADE/Filter/Parser.yp"
1253             {
1254             return [ $_[1]->operator, $_[1]->left ];
1255             }
1256             ],
1257             [#Rule 12
1258             'value_list_entry', 1,
1259             sub
1260             #line 57 "lib/OPTIMADE/Filter/Parser.yp"
1261             {
1262             return [ $_[1]->operator, $_[1]->left ];
1263             }
1264             ],
1265             [#Rule 13
1266             'value_list_entry', 1,
1267             sub
1268             #line 61 "lib/OPTIMADE/Filter/Parser.yp"
1269             {
1270             return [ $_[1]->operator, $_[1]->left ];
1271             }
1272             ],
1273             [#Rule 14
1274             'value_list', 1,
1275             sub
1276             #line 67 "lib/OPTIMADE/Filter/Parser.yp"
1277             {
1278             return [ $_[1] ];
1279             }
1280             ],
1281             [#Rule 15
1282             'value_list', 3,
1283             sub
1284             #line 71 "lib/OPTIMADE/Filter/Parser.yp"
1285             {
1286             push @{$_[1]}, $_[3];
1287             return $_[1];
1288             }
1289             ],
1290             [#Rule 16
1291             'value_zip', 3,
1292             sub
1293             #line 78 "lib/OPTIMADE/Filter/Parser.yp"
1294             {
1295             return [ $_[1], $_[3] ];
1296             }
1297             ],
1298             [#Rule 17
1299             'value_zip', 3,
1300             sub
1301             #line 82 "lib/OPTIMADE/Filter/Parser.yp"
1302             {
1303             push @{$_[1]}, $_[3];
1304             return $_[1];
1305             }
1306             ],
1307             [#Rule 18
1308             'value_zip_list', 1,
1309             sub
1310             #line 89 "lib/OPTIMADE/Filter/Parser.yp"
1311             {
1312             return [ $_[1] ];
1313             }
1314             ],
1315             [#Rule 19
1316             'value_zip_list', 3,
1317             sub
1318             #line 93 "lib/OPTIMADE/Filter/Parser.yp"
1319             {
1320             push @{$_[1]}, $_[3];
1321             return $_[1];
1322             }
1323             ],
1324             [#Rule 20
1325             'expression', 1, undef
1326             ],
1327             [#Rule 21
1328             'expression', 3,
1329             sub
1330             #line 103 "lib/OPTIMADE/Filter/Parser.yp"
1331             {
1332             return OPTIMADE::Filter::AndOr->new( @_[1..$#_] );
1333             }
1334             ],
1335             [#Rule 22
1336             'expression_clause', 1, undef
1337             ],
1338             [#Rule 23
1339             'expression_clause', 3,
1340             sub
1341             #line 110 "lib/OPTIMADE/Filter/Parser.yp"
1342             {
1343             return OPTIMADE::Filter::AndOr->new( @_[1..$#_] );
1344             }
1345             ],
1346             [#Rule 24
1347             'expression_phrase', 1, undef
1348             ],
1349             [#Rule 25
1350             'expression_phrase', 3,
1351             sub
1352             #line 117 "lib/OPTIMADE/Filter/Parser.yp"
1353             {
1354             return $_[2];
1355             }
1356             ],
1357             [#Rule 26
1358             'expression_phrase', 2,
1359             sub
1360             #line 121 "lib/OPTIMADE/Filter/Parser.yp"
1361             {
1362             return OPTIMADE::Filter::Negation->new( $_[2] );
1363             }
1364             ],
1365             [#Rule 27
1366             'expression_phrase', 4,
1367             sub
1368             #line 125 "lib/OPTIMADE/Filter/Parser.yp"
1369             {
1370             return OPTIMADE::Filter::Negation->new( $_[3] );
1371             }
1372             ],
1373             [#Rule 28
1374             'comparison', 1, undef
1375             ],
1376             [#Rule 29
1377             'comparison', 1, undef
1378             ],
1379             [#Rule 30
1380             'constant_first_comparison', 2,
1381             sub
1382             #line 133 "lib/OPTIMADE/Filter/Parser.yp"
1383             {
1384             $_[2]->unshift_operand( $_[1] );
1385             return $_[2];
1386             }
1387             ],
1388             [#Rule 31
1389             'constant_first_comparison', 2,
1390             sub
1391             #line 138 "lib/OPTIMADE/Filter/Parser.yp"
1392             {
1393             $_[2]->unshift_operand( $_[1] );
1394             return $_[2];
1395             }
1396             ],
1397             [#Rule 32
1398             'property_first_comparison', 1,
1399             sub
1400             #line 145 "lib/OPTIMADE/Filter/Parser.yp"
1401             {
1402             my $cmp = OPTIMADE::Filter::Comparison->new( '=' );
1403             $cmp->left( $_[1] );
1404             $cmp->right( OPTIMADE::Filter::Boolean->new( 1 ) );
1405             return $cmp;
1406             }
1407             ],
1408             [#Rule 33
1409             'property_first_comparison', 2,
1410             sub
1411             #line 152 "lib/OPTIMADE/Filter/Parser.yp"
1412             {
1413             $_[2]->unshift_operand( $_[1] );
1414             return $_[2];
1415             }
1416             ],
1417             [#Rule 34
1418             'property_first_comparison', 2,
1419             sub
1420             #line 157 "lib/OPTIMADE/Filter/Parser.yp"
1421             {
1422             $_[2]->property( $_[1] );
1423             return $_[2];
1424             }
1425             ],
1426             [#Rule 35
1427             'property_first_comparison', 2,
1428             sub
1429             #line 162 "lib/OPTIMADE/Filter/Parser.yp"
1430             {
1431             $_[2]->unshift_operand( $_[1] );
1432             return $_[2];
1433             }
1434             ],
1435             [#Rule 36
1436             'property_first_comparison', 2,
1437             sub
1438             #line 167 "lib/OPTIMADE/Filter/Parser.yp"
1439             {
1440             $_[2]->property( $_[1] );
1441             return $_[2];
1442             }
1443             ],
1444             [#Rule 37
1445             'property_first_comparison', 2,
1446             sub
1447             #line 172 "lib/OPTIMADE/Filter/Parser.yp"
1448             {
1449             $_[2]->unshift_property( $_[1] );
1450             return $_[2];
1451             }
1452             ],
1453             [#Rule 38
1454             'property_first_comparison', 2,
1455             sub
1456             #line 177 "lib/OPTIMADE/Filter/Parser.yp"
1457             {
1458             $_[2]->property( $_[1] );
1459             return $_[2];
1460             }
1461             ],
1462             [#Rule 39
1463             'value_op_rhs', 1, undef
1464             ],
1465             [#Rule 40
1466             'value_op_rhs', 1, undef
1467             ],
1468             [#Rule 41
1469             'value_eq_rhs', 2,
1470             sub
1471             #line 186 "lib/OPTIMADE/Filter/Parser.yp"
1472             {
1473             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1474             $cmp->push_operand( $_[2] );
1475             return $cmp;
1476             }
1477             ],
1478             [#Rule 42
1479             'value_rel_comp_rhs', 2,
1480             sub
1481             #line 194 "lib/OPTIMADE/Filter/Parser.yp"
1482             {
1483             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1484             $cmp->push_operand( $_[2] );
1485             return $cmp;
1486             }
1487             ],
1488             [#Rule 43
1489             'known_op_rhs', 2,
1490             sub
1491             #line 202 "lib/OPTIMADE/Filter/Parser.yp"
1492             {
1493             return OPTIMADE::Filter::Known->new( 1 );
1494             }
1495             ],
1496             [#Rule 44
1497             'known_op_rhs', 2,
1498             sub
1499             #line 206 "lib/OPTIMADE/Filter/Parser.yp"
1500             {
1501             return OPTIMADE::Filter::Known->new( 0 );
1502             }
1503             ],
1504             [#Rule 45
1505             'fuzzy_string_op_rhs', 2,
1506             sub
1507             #line 212 "lib/OPTIMADE/Filter/Parser.yp"
1508             {
1509             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1510             $cmp->push_operand( $_[2] );
1511             return $cmp;
1512             }
1513             ],
1514             [#Rule 46
1515             'fuzzy_string_op_rhs', 2,
1516             sub
1517             #line 218 "lib/OPTIMADE/Filter/Parser.yp"
1518             {
1519             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1520             $cmp->push_operand( $_[2] );
1521             return $cmp;
1522             }
1523             ],
1524             [#Rule 47
1525             'fuzzy_string_op_rhs', 3,
1526             sub
1527             #line 224 "lib/OPTIMADE/Filter/Parser.yp"
1528             {
1529             my $cmp = OPTIMADE::Filter::Comparison->new( "$_[1] $_[2]" );
1530             $cmp->push_operand( $_[3] );
1531             return $cmp;
1532             }
1533             ],
1534             [#Rule 48
1535             'fuzzy_string_op_rhs', 2,
1536             sub
1537             #line 230 "lib/OPTIMADE/Filter/Parser.yp"
1538             {
1539             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1540             $cmp->push_operand( $_[2] );
1541             return $cmp;
1542             }
1543             ],
1544             [#Rule 49
1545             'fuzzy_string_op_rhs', 3,
1546             sub
1547             #line 236 "lib/OPTIMADE/Filter/Parser.yp"
1548             {
1549             my $cmp = OPTIMADE::Filter::Comparison->new( "$_[1] $_[2]" );
1550             $cmp->push_operand( $_[3] );
1551             return $cmp;
1552             }
1553             ],
1554             [#Rule 50
1555             'fuzzy_string_op_rhs', 2,
1556             sub
1557             #line 242 "lib/OPTIMADE/Filter/Parser.yp"
1558             {
1559             my $cmp = OPTIMADE::Filter::Comparison->new( $_[1] );
1560             $cmp->push_operand( $_[2] );
1561             return $cmp;
1562             }
1563             ],
1564             [#Rule 51
1565             'set_op_rhs', 2,
1566             sub
1567             #line 250 "lib/OPTIMADE/Filter/Parser.yp"
1568             {
1569             my $lc = OPTIMADE::Filter::ListComparison->new( $_[1] );
1570             $lc->values( [ [ '=', $_[2] ] ] );
1571             return $lc;
1572             }
1573             ],
1574             [#Rule 52
1575             'set_op_rhs', 3,
1576             sub
1577             #line 256 "lib/OPTIMADE/Filter/Parser.yp"
1578             {
1579             my $lc = OPTIMADE::Filter::ListComparison->new( $_[1] );
1580             $lc->values( [ [ $_[2], $_[3] ] ] );
1581             return $lc;
1582             }
1583             ],
1584             [#Rule 53
1585             'set_op_rhs', 3,
1586             sub
1587             #line 262 "lib/OPTIMADE/Filter/Parser.yp"
1588             {
1589             my $lc = OPTIMADE::Filter::ListComparison->new( $_[1] );
1590             $lc->values( [ [ $_[2], $_[3] ] ] );
1591             return $lc;
1592             }
1593             ],
1594             [#Rule 54
1595             'set_op_rhs', 2,
1596             sub
1597             #line 268 "lib/OPTIMADE/Filter/Parser.yp"
1598             {
1599             my $lc = OPTIMADE::Filter::ListComparison->new( $_[1] );
1600             $lc->values( [ [ $_[2]->operator, $_[2]->left ] ] );
1601             return $lc;
1602             }
1603             ],
1604             [#Rule 55
1605             'set_op_rhs', 3,
1606             sub
1607             #line 274 "lib/OPTIMADE/Filter/Parser.yp"
1608             {
1609             my $lc = OPTIMADE::Filter::ListComparison->new( "$_[1] $_[2]" );
1610             $lc->values( $_[3] );
1611             return $lc;
1612             }
1613             ],
1614             [#Rule 56
1615             'set_op_rhs', 3,
1616             sub
1617             #line 280 "lib/OPTIMADE/Filter/Parser.yp"
1618             {
1619             my $lc = OPTIMADE::Filter::ListComparison->new( "$_[1] $_[2]" );
1620             $lc->values( $_[3] );
1621             return $lc;
1622             }
1623             ],
1624             [#Rule 57
1625             'set_op_rhs', 3,
1626             sub
1627             #line 286 "lib/OPTIMADE/Filter/Parser.yp"
1628             {
1629             my $lc = OPTIMADE::Filter::ListComparison->new( "$_[1] $_[2]" );
1630             $lc->values( $_[3] );
1631             return $lc;
1632             }
1633             ],
1634             [#Rule 58
1635             'set_zip_op_rhs', 3,
1636             sub
1637             #line 294 "lib/OPTIMADE/Filter/Parser.yp"
1638             {
1639             $_[1]->operator( $_[2] );
1640             $_[1]->values( [ $_[3] ] );
1641             return $_[1];
1642             }
1643             ],
1644             [#Rule 59
1645             'set_zip_op_rhs', 4,
1646             sub
1647             #line 300 "lib/OPTIMADE/Filter/Parser.yp"
1648             {
1649             $_[1]->operator( "$_[2] $_[3]" );
1650             $_[1]->values( $_[4] );
1651             return $_[1];
1652             }
1653             ],
1654             [#Rule 60
1655             'set_zip_op_rhs', 4,
1656             sub
1657             #line 306 "lib/OPTIMADE/Filter/Parser.yp"
1658             {
1659             $_[1]->operator( "$_[2] $_[3]" );
1660             $_[1]->values( $_[4] );
1661             return $_[1];
1662             }
1663             ],
1664             [#Rule 61
1665             'set_zip_op_rhs', 4,
1666             sub
1667             #line 312 "lib/OPTIMADE/Filter/Parser.yp"
1668             {
1669             $_[1]->operator( "$_[2] $_[3]" );
1670             $_[1]->values( $_[4] );
1671             return $_[1];
1672             }
1673             ],
1674             [#Rule 62
1675             'property_zip_addon', 2,
1676             sub
1677             #line 320 "lib/OPTIMADE/Filter/Parser.yp"
1678             {
1679             my $zip = OPTIMADE::Filter::Zip->new;
1680             $zip->push_property( $_[2] );
1681             return $zip;
1682             }
1683             ],
1684             [#Rule 63
1685             'property_zip_addon', 3,
1686             sub
1687             #line 326 "lib/OPTIMADE/Filter/Parser.yp"
1688             {
1689             $_[1]->push_property( $_[3] );
1690             return $_[1];
1691             }
1692             ],
1693             [#Rule 64
1694             'length_op_rhs', 2,
1695             sub
1696             #line 333 "lib/OPTIMADE/Filter/Parser.yp"
1697             {
1698             my $cmp = OPTIMADE::Filter::ListComparison->new( $_[1] );
1699             $cmp->values( [ [ '=', $_[2] ] ] );
1700             return $cmp;
1701             }
1702             ],
1703             [#Rule 65
1704             'length_op_rhs', 3,
1705             sub
1706             #line 339 "lib/OPTIMADE/Filter/Parser.yp"
1707             {
1708             my $cmp = OPTIMADE::Filter::ListComparison->new( $_[1] );
1709             $cmp->values( [ [ $_[2], $_[3] ] ] );
1710             return $cmp;
1711             }
1712             ],
1713             [#Rule 66
1714             'property', 1,
1715             sub
1716             #line 349 "lib/OPTIMADE/Filter/Parser.yp"
1717             {
1718             return OPTIMADE::Filter::Property->new( $_[1] );
1719             }
1720             ],
1721             [#Rule 67
1722             'property', 3,
1723             sub
1724             #line 353 "lib/OPTIMADE/Filter/Parser.yp"
1725             {
1726             push @{$_[1]}, $_[3];
1727             return $_[1];
1728             }
1729             ],
1730             [#Rule 68
1731             'openingbrace', 1, undef
1732             ],
1733             [#Rule 69
1734             'closingbrace', 1, undef
1735             ],
1736             [#Rule 70
1737             'dot', 1, undef
1738             ],
1739             [#Rule 71
1740             'comma', 1, undef
1741             ],
1742             [#Rule 72
1743             'colon', 1, undef
1744             ],
1745             [#Rule 73
1746             'operator', 1, undef
1747             ],
1748             [#Rule 74
1749             'operator', 1, undef
1750             ],
1751             [#Rule 75
1752             'equality_operator', 1, undef
1753             ],
1754             [#Rule 76
1755             'equality_operator', 2,
1756             sub
1757             #line 377 "lib/OPTIMADE/Filter/Parser.yp"
1758             {
1759             return join( '', @_[1..$#_] );
1760             }
1761             ],
1762             [#Rule 77
1763             'relative_comparison_operator', 1, undef
1764             ],
1765             [#Rule 78
1766             'relative_comparison_operator', 2,
1767             sub
1768             #line 384 "lib/OPTIMADE/Filter/Parser.yp"
1769             {
1770             return join( '', @_[1..$#_] );
1771             }
1772             ],
1773             [#Rule 79
1774             'relative_comparison_operator', 1, undef
1775             ],
1776             [#Rule 80
1777             'relative_comparison_operator', 2,
1778             sub
1779             #line 389 "lib/OPTIMADE/Filter/Parser.yp"
1780             {
1781             return join( '', @_[1..$#_] );
1782             }
1783             ]
1784             ],
1785             @_);
1786             bless($self,$class);
1787             }
1788              
1789             #line 394 "lib/OPTIMADE/Filter/Parser.yp"
1790              
1791              
1792             # Footer section
1793              
1794             sub _Error
1795             {
1796             my( $self ) = @_;
1797             close $self->{USER}{FILEIN} if $self->{USER}{FILEIN};
1798             my $msg = "$0: syntax error at line $self->{USER}{LINENO}, " .
1799             "position $self->{USER}{CHARNO}";
1800             if( $self->YYData->{INPUT} ) {
1801             $self->YYData->{INPUT} =~ s/\n$//;
1802             die "$msg: '" . $self->YYData->{INPUT} . "'.\n";
1803             } else {
1804             die "$msg.\n";
1805             }
1806             }
1807              
1808             sub _Lexer
1809             {
1810             my( $self ) = @_;
1811              
1812             # If the line is empty and the input is originating from the file,
1813             # another line is read.
1814             if( !$self->YYData->{INPUT} && $self->{USER}{FILEIN} ) {
1815             my $filein = $self->{USER}{FILEIN};
1816             $self->YYData->{INPUT} = <$filein>;
1817             $self->{USER}{LINENO} = -1 unless exists $self->{USER}{LINENO};
1818             $self->{USER}{LINENO}++;
1819             $self->{USER}{CHARNO} = 0;
1820             }
1821              
1822             $self->YYData->{INPUT} =~ s/^(\s+)//;
1823             $self->{USER}{CHARNO} += length( $1 ) if defined $1;
1824              
1825             # Escaped double quote or backslash are detected here and returned
1826             # as is to the caller in order to be detected as syntax errors.
1827             if( $self->YYData->{INPUT} =~ s/^(\\"|\\\\)// ) {
1828             $self->{USER}{CHARNO} += length( $1 );
1829             return( $1, $1 );
1830             }
1831              
1832             # Handling strings
1833             if( $self->YYData->{INPUT} =~ s/^"// ) {
1834             $self->{USER}{CHARNO} ++;
1835             my $string = '';
1836             while( 1 ) {
1837             if( $self->YYData->{INPUT} =~
1838             s/^([A-Za-z_0-9 \t!#\$\%&\'\(\)\*\+,\-\.\/\:;<=>\?@\[\]\^`\{\|\}\~\P{ASCII}]+)// ) {
1839             $self->{USER}{CHARNO} += length( $1 );
1840             $string .= $1;
1841             } elsif( $self->YYData->{INPUT} =~ s/^\\([\\"])// ) {
1842             $self->{USER}{CHARNO} ++;
1843             $string .= $1;
1844             next;
1845             } elsif( $self->YYData->{INPUT} =~ s/^"// ) {
1846             $self->{USER}{CHARNO} ++;
1847             return( 'string', $string );
1848             } else {
1849             return( undef, undef );
1850             }
1851             }
1852             }
1853              
1854             # Handling identifiers
1855             if( $self->YYData->{INPUT} =~ s/^([a-z_][a-z0-9_]*)// ) {
1856             $self->{USER}{CHARNO} += length( $1 );
1857             return( 'identifier', $1 );
1858             }
1859              
1860             # Handling textual operators and other literals
1861             if( $self->YYData->{INPUT} =~ s/^(AND|NOT|OR|
1862             IS|UNKNOWN|KNOWN|
1863             CONTAINS|STARTS|ENDS|WITH|
1864             LENGTH|HAS|ALL|ONLY|ANY|
1865             TRUE|FALSE)//x ) {
1866             $self->{USER}{CHARNO} += length( $1 );
1867             return( $1, $1 );
1868             }
1869              
1870             # Handling LIKE operator if allowed
1871             if( $allow_LIKE_operator && $self->YYData->{INPUT} =~ s/^(LIKE)// ) {
1872             $self->{USER}{CHARNO} += length( $1 );
1873             return( $1, $1 );
1874             }
1875              
1876             # Handling numbers
1877             if( $self->YYData->{INPUT} =~ s/^([+-]?
1878             (\d+\.?\d*|\.\d+)
1879             ([eE][+-]?\d+)?)//x ) {
1880             $self->{USER}{CHARNO} += length( $1 );
1881             return( 'number', $1 );
1882             }
1883              
1884             my $char = substr( $self->YYData->{INPUT}, 0, 1 );
1885             if( $char ne '' ) {
1886             $self->YYData->{INPUT} = substr( $self->YYData->{INPUT}, 1 );
1887             }
1888             $self->{USER}{CHARNO}++;
1889             return( $char, $char );
1890             }
1891              
1892             sub Run
1893             {
1894             my( $self, $filename ) = @_;
1895             open $self->{USER}{FILEIN}, $filename;
1896             my $result = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
1897             close $self->{USER}{FILEIN};
1898             return $result;
1899             }
1900              
1901             sub parse_string
1902             {
1903             my( $self, $string ) = @_;
1904             $self->YYData->{INPUT} = $string;
1905             $self->{USER}{LINENO} = 0;
1906             $self->{USER}{CHARNO} = 0;
1907             return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
1908             }
1909              
1910             sub modify
1911             {
1912             my $node = shift;
1913             my $code = shift;
1914              
1915             if( blessed $node && $node->can( 'modify' ) ) {
1916             return $node->modify( $code, @_ );
1917             } elsif( ref $node eq 'ARRAY' ) {
1918             return [ map { modify( $_, $code, @_ ) } @$node ];
1919             } else {
1920             return $code->( $node, @_ );
1921             }
1922             }
1923              
1924             1;
1925              
1926             1;