File Coverage

lib/CGI/OptimalQuery/OQFilterParser.pm
Criterion Covered Total %
statement 138 2272 6.0
branch 0 1440 0.0
condition 0 520 0.0
subroutine 46 90 51.1
pod 0 1 0.0
total 184 4323 4.2


line stmt bran cond sub pod time code
1             package CGI::OptimalQuery::OQFilterParser;
2 1     1   1654 use Parse::RecDescent;
  1         1  
  1         8  
3              
4             { my $ERRORS;
5              
6              
7             package Parse::RecDescent::CGI::OptimalQuery::OQFilterParser;
8 1     1   46 use strict;
  1         1  
  1         18  
9 1     1   3 use vars qw($skip $AUTOLOAD );
  1         1  
  1         67  
10             $skip = '\s*';
11              
12              
13             {
14             local $SIG{__WARN__} = sub {0};
15             # PRETEND TO BE IN Parse::RecDescent NAMESPACE
16             *Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::AUTOLOAD = sub
17             {
18 1     1   4 no strict 'refs';
  1         1  
  1         87  
19 0     0     $AUTOLOAD =~ s/^Parse::RecDescent::CGI::OptimalQuery::OQFilterParser/Parse::RecDescent/;
20 0           goto &{$AUTOLOAD};
  0            
21             }
22             }
23              
24             push @Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::ISA, 'Parse::RecDescent';
25             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
26             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::function
27             {
28 0     0     my $thisparser = $_[0];
29 1     1   4 use vars q{$tracelevel};
  1         1  
  1         241  
30 0   0       local $tracelevel = ($tracelevel||0)+1;
31 0           $ERRORS = 0;
32 0           my $thisrule = $thisparser->{"rules"}{"function"};
33            
34 0 0         Parse::RecDescent::_trace(q{Trying rule: [function]},
35             Parse::RecDescent::_tracefirst($_[1]),
36             q{function},
37             $tracelevel)
38             if defined $::RD_TRACE;
39              
40            
41 0           my $err_at = @{$thisparser->{errors}};
  0            
42              
43 0           my $score;
44             my $score_return;
45 0           my $_tok;
46 0           my $return = undef;
47 0           my $_matched=0;
48 0           my $commit=0;
49 0           my @item = ();
50 0           my %item = ();
51 0   0       my $repeating = defined($_[2]) && $_[2];
52 0   0       my $_noactions = defined($_[3]) && $_[3];
53 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
54 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
55 0           my $text;
56 0           my $lastsep="";
57 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
58 0           $expectation->at($_[1]);
59            
60 0           my $thisline;
61 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
62              
63            
64              
65 0   0       while (!$_matched && !$commit)
66             {
67            
68 0 0         Parse::RecDescent::_trace(q{Trying production: [vname '(' ')']},
69             Parse::RecDescent::_tracefirst($_[1]),
70             q{function},
71             $tracelevel)
72             if defined $::RD_TRACE;
73 0           my $thisprod = $thisrule->{"prods"}[0];
74 0           $text = $_[1];
75 0           my $_savetext;
76 0           @item = (q{function});
77 0           %item = (__RULE__ => q{function});
78 0           my $repcount = 0;
79              
80              
81 0 0         Parse::RecDescent::_trace(q{Trying subrule: [vname]},
82             Parse::RecDescent::_tracefirst($text),
83             q{function},
84             $tracelevel)
85             if defined $::RD_TRACE;
86 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         435  
  0            
87 0           $expectation->is(q{})->at($text);
88 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::vname($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
89             {
90            
91 0 0         Parse::RecDescent::_trace(q{<>},
92             Parse::RecDescent::_tracefirst($text),
93             q{function},
94             $tracelevel)
95             if defined $::RD_TRACE;
96 0           $expectation->failed();
97 0           last;
98             }
99 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [vname]<< (return value: [}
100             . $_tok . q{]},
101            
102             Parse::RecDescent::_tracefirst($text),
103             q{function},
104             $tracelevel)
105             if defined $::RD_TRACE;
106 0           $item{q{vname}} = $_tok;
107 0           push @item, $_tok;
108            
109             }
110              
111 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
112             Parse::RecDescent::_tracefirst($text),
113             q{function},
114             $tracelevel)
115             if defined $::RD_TRACE;
116 0           $lastsep = "";
117 0           $expectation->is(q{'('})->at($text);
118            
119              
120 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
121             {
122            
123 0           $expectation->failed();
124 0 0         Parse::RecDescent::_trace(qq{<>},
125             Parse::RecDescent::_tracefirst($text))
126             if defined $::RD_TRACE;
127 0           last;
128             }
129 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
130             . $& . q{])},
131             Parse::RecDescent::_tracefirst($text))
132             if defined $::RD_TRACE;
133 0           push @item, $item{__STRING1__}=$&;
134            
135              
136 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
137             Parse::RecDescent::_tracefirst($text),
138             q{function},
139             $tracelevel)
140             if defined $::RD_TRACE;
141 0           $lastsep = "";
142 0           $expectation->is(q{')'})->at($text);
143            
144              
145 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
146             {
147            
148 0           $expectation->failed();
149 0 0         Parse::RecDescent::_trace(qq{<>},
150             Parse::RecDescent::_tracefirst($text))
151             if defined $::RD_TRACE;
152 0           last;
153             }
154 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
155             . $& . q{])},
156             Parse::RecDescent::_tracefirst($text))
157             if defined $::RD_TRACE;
158 0           push @item, $item{__STRING2__}=$&;
159            
160              
161 0 0         Parse::RecDescent::_trace(q{Trying action},
162             Parse::RecDescent::_tracefirst($text),
163             q{function},
164             $tracelevel)
165             if defined $::RD_TRACE;
166            
167              
168 0 0         $_tok = ($_noactions) ? 0 : do { ['FUNCT', $item[1], {} ] };
  0            
169 0 0         unless (defined $_tok)
170             {
171 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
172             if defined $::RD_TRACE;
173 0           last;
174             }
175 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
176             . $_tok . q{])},
177             Parse::RecDescent::_tracefirst($text))
178             if defined $::RD_TRACE;
179 0           push @item, $_tok;
180 0           $item{__ACTION1__}=$_tok;
181            
182              
183              
184 0 0         Parse::RecDescent::_trace(q{>>Matched production: [vname '(' ')']<<},
185             Parse::RecDescent::_tracefirst($text),
186             q{function},
187             $tracelevel)
188             if defined $::RD_TRACE;
189 0           $_matched = 1;
190 0           last;
191             }
192              
193              
194 0   0       while (!$_matched && !$commit)
195             {
196            
197 0 0         Parse::RecDescent::_trace(q{Trying production: [vname '(' ')']},
198             Parse::RecDescent::_tracefirst($_[1]),
199             q{function},
200             $tracelevel)
201             if defined $::RD_TRACE;
202 0           my $thisprod = $thisrule->{"prods"}[1];
203 0           $text = $_[1];
204 0           my $_savetext;
205 0           @item = (q{function});
206 0           %item = (__RULE__ => q{function});
207 0           my $repcount = 0;
208              
209              
210 0 0         Parse::RecDescent::_trace(q{Trying subrule: [vname]},
211             Parse::RecDescent::_tracefirst($text),
212             q{function},
213             $tracelevel)
214             if defined $::RD_TRACE;
215 1     1   6 if (1) { no strict qw{refs};
  1         2  
  1         320  
  0            
216 0           $expectation->is(q{})->at($text);
217 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::vname($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
218             {
219            
220 0 0         Parse::RecDescent::_trace(q{<>},
221             Parse::RecDescent::_tracefirst($text),
222             q{function},
223             $tracelevel)
224             if defined $::RD_TRACE;
225 0           $expectation->failed();
226 0           last;
227             }
228 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [vname]<< (return value: [}
229             . $_tok . q{]},
230            
231             Parse::RecDescent::_tracefirst($text),
232             q{function},
233             $tracelevel)
234             if defined $::RD_TRACE;
235 0           $item{q{vname}} = $_tok;
236 0           push @item, $_tok;
237            
238             }
239              
240 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
241             Parse::RecDescent::_tracefirst($text),
242             q{function},
243             $tracelevel)
244             if defined $::RD_TRACE;
245 0           $lastsep = "";
246 0           $expectation->is(q{'('})->at($text);
247            
248              
249 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
250             {
251            
252 0           $expectation->failed();
253 0 0         Parse::RecDescent::_trace(qq{<>},
254             Parse::RecDescent::_tracefirst($text))
255             if defined $::RD_TRACE;
256 0           last;
257             }
258 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
259             . $& . q{])},
260             Parse::RecDescent::_tracefirst($text))
261             if defined $::RD_TRACE;
262 0           push @item, $item{__STRING1__}=$&;
263            
264              
265 0 0         Parse::RecDescent::_trace(q{Trying operator: []},
266             Parse::RecDescent::_tracefirst($text),
267             q{function},
268             $tracelevel)
269             if defined $::RD_TRACE;
270 0           $expectation->is(q{})->at($text);
271              
272 0           $_tok = undef;
273 0           OPLOOP: while (1)
274             {
275 0           $repcount = 0;
276 0           my @item;
277            
278             # MATCH LEFTARG
279            
280 0 0         Parse::RecDescent::_trace(q{Trying subrule: [farg]},
281             Parse::RecDescent::_tracefirst($text),
282             q{function},
283             $tracelevel)
284             if defined $::RD_TRACE;
285 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         249  
  0            
286 0           $expectation->is(q{farg})->at($text);
287 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::farg($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
288             {
289            
290 0 0         Parse::RecDescent::_trace(q{<>},
291             Parse::RecDescent::_tracefirst($text),
292             q{function},
293             $tracelevel)
294             if defined $::RD_TRACE;
295 0           $expectation->failed();
296 0           last;
297             }
298 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [farg]<< (return value: [}
299             . $_tok . q{]},
300            
301             Parse::RecDescent::_tracefirst($text),
302             q{function},
303             $tracelevel)
304             if defined $::RD_TRACE;
305 0           $item{q{farg}} = $_tok;
306 0           push @item, $_tok;
307            
308             }
309              
310              
311 0           $repcount++;
312              
313 0           my $savetext = $text;
314 0           my $backtrack;
315              
316             # MATCH (OP RIGHTARG)(s)
317 0           while ($repcount < 100000000)
318             {
319 0           $backtrack = 0;
320            
321 0 0         Parse::RecDescent::_trace(q{Trying terminal: [',']},
322             Parse::RecDescent::_tracefirst($text),
323             q{function},
324             $tracelevel)
325             if defined $::RD_TRACE;
326 0           $lastsep = "";
327 0           $expectation->is(q{','})->at($text);
328            
329              
330 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\,//)
  0 0          
331             {
332            
333 0           $expectation->failed();
334 0 0         Parse::RecDescent::_trace(qq{<>},
335             Parse::RecDescent::_tracefirst($text))
336             if defined $::RD_TRACE;
337 0           last;
338             }
339 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
340             . $& . q{])},
341             Parse::RecDescent::_tracefirst($text))
342             if defined $::RD_TRACE;
343 0           push @item, $item{__STRING2__}=$&;
344            
345              
346 0           pop @item;
347            
348            
349 0 0         Parse::RecDescent::_trace(q{Trying subrule: [farg]},
350             Parse::RecDescent::_tracefirst($text),
351             q{function},
352             $tracelevel)
353             if defined $::RD_TRACE;
354 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         629  
  0            
355 0           $expectation->is(q{farg})->at($text);
356 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::farg($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
357             {
358            
359 0 0         Parse::RecDescent::_trace(q{<>},
360             Parse::RecDescent::_tracefirst($text),
361             q{function},
362             $tracelevel)
363             if defined $::RD_TRACE;
364 0           $expectation->failed();
365 0           last;
366             }
367 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [farg]<< (return value: [}
368             . $_tok . q{]},
369            
370             Parse::RecDescent::_tracefirst($text),
371             q{function},
372             $tracelevel)
373             if defined $::RD_TRACE;
374 0           $item{q{farg}} = $_tok;
375 0           push @item, $_tok;
376            
377             }
378              
379 0           $savetext = $text;
380 0           $repcount++;
381             }
382 0           $text = $savetext;
383 0 0         pop @item if $backtrack;
384              
385 0 0         unless (@item) { undef $_tok; last }
  0            
  0            
386 0           $_tok = [ @item ];
387 0           last;
388             }
389              
390 0 0         unless ($repcount>=1)
391             {
392 0 0         Parse::RecDescent::_trace(q{<]>>},
393             Parse::RecDescent::_tracefirst($text),
394             q{function},
395             $tracelevel)
396             if defined $::RD_TRACE;
397 0           $expectation->failed();
398 0           last;
399             }
400 0 0         Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
401 0 0         . qq{@{$_tok||[]}} . q{]},
402             Parse::RecDescent::_tracefirst($text),
403             q{function},
404             $tracelevel)
405             if defined $::RD_TRACE;
406              
407 0   0       push @item, $item{__DIRECTIVE1__}=$_tok||[];
408              
409              
410 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
411             Parse::RecDescent::_tracefirst($text),
412             q{function},
413             $tracelevel)
414             if defined $::RD_TRACE;
415 0           $lastsep = "";
416 0           $expectation->is(q{')'})->at($text);
417            
418              
419 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
420             {
421            
422 0           $expectation->failed();
423 0 0         Parse::RecDescent::_trace(qq{<>},
424             Parse::RecDescent::_tracefirst($text))
425             if defined $::RD_TRACE;
426 0           last;
427             }
428 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
429             . $& . q{])},
430             Parse::RecDescent::_tracefirst($text))
431             if defined $::RD_TRACE;
432 0           push @item, $item{__STRING3__}=$&;
433            
434              
435 0 0         Parse::RecDescent::_trace(q{Trying action},
436             Parse::RecDescent::_tracefirst($text),
437             q{function},
438             $tracelevel)
439             if defined $::RD_TRACE;
440            
441              
442 0 0         $_tok = ($_noactions) ? 0 : do { my %h = map {@$_} @{$item[3]};
  0            
  0            
  0            
443 0           ['FUNCT', $item[1], \ %h ]; };
444 0 0         unless (defined $_tok)
445             {
446 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
447             if defined $::RD_TRACE;
448 0           last;
449             }
450 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
451             . $_tok . q{])},
452             Parse::RecDescent::_tracefirst($text))
453             if defined $::RD_TRACE;
454 0           push @item, $_tok;
455 0           $item{__ACTION1__}=$_tok;
456            
457              
458              
459 0 0         Parse::RecDescent::_trace(q{>>Matched production: [vname '(' ')']<<},
460             Parse::RecDescent::_tracefirst($text),
461             q{function},
462             $tracelevel)
463             if defined $::RD_TRACE;
464 0           $_matched = 1;
465 0           last;
466             }
467              
468              
469 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
470             {
471            
472              
473 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
474 0 0         Parse::RecDescent::_trace(q{<>},
475             Parse::RecDescent::_tracefirst($_[1]),
476             q{function},
477             $tracelevel)
478             if defined $::RD_TRACE;
479 0           return undef;
480             }
481 0 0 0       if (!defined($return) && defined($score))
482             {
483 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
484             q{function},
485             $tracelevel)
486             if defined $::RD_TRACE;
487 0           $return = $score_return;
488             }
489 0           splice @{$thisparser->{errors}}, $err_at;
  0            
490 0 0         $return = $item[$#item] unless defined $return;
491 0 0         if (defined $::RD_TRACE)
492             {
493 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
494             $return . q{])}, "",
495             q{function},
496             $tracelevel);
497 0           Parse::RecDescent::_trace(q{(consumed: [} .
498             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
499             Parse::RecDescent::_tracefirst($text),
500             , q{function},
501             $tracelevel)
502             }
503 0           $_[1] = $text;
504 0           return $return;
505             }
506              
507             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
508             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::and_expr
509             {
510 0     0     my $thisparser = $_[0];
511 1     1   4 use vars q{$tracelevel};
  1         1  
  1         247  
512 0   0       local $tracelevel = ($tracelevel||0)+1;
513 0           $ERRORS = 0;
514 0           my $thisrule = $thisparser->{"rules"}{"and_expr"};
515            
516 0 0         Parse::RecDescent::_trace(q{Trying rule: [and_expr]},
517             Parse::RecDescent::_tracefirst($_[1]),
518             q{and_expr},
519             $tracelevel)
520             if defined $::RD_TRACE;
521              
522            
523 0           my $err_at = @{$thisparser->{errors}};
  0            
524              
525 0           my $score;
526             my $score_return;
527 0           my $_tok;
528 0           my $return = undef;
529 0           my $_matched=0;
530 0           my $commit=0;
531 0           my @item = ();
532 0           my %item = ();
533 0   0       my $repeating = defined($_[2]) && $_[2];
534 0   0       my $_noactions = defined($_[3]) && $_[3];
535 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
536 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
537 0           my $text;
538 0           my $lastsep="";
539 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
540 0           $expectation->at($_[1]);
541            
542 0           my $thisline;
543 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
544              
545            
546              
547 0   0       while (!$_matched && !$commit)
548             {
549            
550 0 0         Parse::RecDescent::_trace(q{Trying production: []},
551             Parse::RecDescent::_tracefirst($_[1]),
552             q{and_expr},
553             $tracelevel)
554             if defined $::RD_TRACE;
555 0           my $thisprod = $thisrule->{"prods"}[0];
556 0           $text = $_[1];
557 0           my $_savetext;
558 0           @item = (q{and_expr});
559 0           %item = (__RULE__ => q{and_expr});
560 0           my $repcount = 0;
561              
562              
563 0 0         Parse::RecDescent::_trace(q{Trying operator: []},
564             Parse::RecDescent::_tracefirst($text),
565             q{and_expr},
566             $tracelevel)
567             if defined $::RD_TRACE;
568 0           $expectation->is(q{})->at($text);
569              
570 0           $_tok = undef;
571 0           OPLOOP: while (1)
572             {
573 0           $repcount = 0;
574 0           my @item;
575            
576             # MATCH LEFTARG
577            
578 0 0         Parse::RecDescent::_trace(q{Trying subrule: [expr]},
579             Parse::RecDescent::_tracefirst($text),
580             q{and_expr},
581             $tracelevel)
582             if defined $::RD_TRACE;
583 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         247  
  0            
584 0           $expectation->is(q{expr})->at($text);
585 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
586             {
587            
588 0 0         Parse::RecDescent::_trace(q{<>},
589             Parse::RecDescent::_tracefirst($text),
590             q{and_expr},
591             $tracelevel)
592             if defined $::RD_TRACE;
593 0           $expectation->failed();
594 0           last;
595             }
596 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [expr]<< (return value: [}
597             . $_tok . q{]},
598            
599             Parse::RecDescent::_tracefirst($text),
600             q{and_expr},
601             $tracelevel)
602             if defined $::RD_TRACE;
603 0           $item{q{expr}} = $_tok;
604 0           push @item, $_tok;
605            
606             }
607              
608              
609 0           $repcount++;
610              
611 0           my $savetext = $text;
612 0           my $backtrack;
613              
614             # MATCH (OP RIGHTARG)(s)
615 0           while ($repcount < 100000000)
616             {
617 0           $backtrack = 0;
618            
619 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/and/i]}, Parse::RecDescent::_tracefirst($text),
620             q{and_expr},
621             $tracelevel)
622             if defined $::RD_TRACE;
623 0           $lastsep = "";
624 0           $expectation->is(q{/and/i})->at($text);
625            
626              
627 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:and)//i)
  0 0          
628             {
629            
630 0           $expectation->failed();
631 0 0         Parse::RecDescent::_trace(q{<>},
632             Parse::RecDescent::_tracefirst($text))
633             if defined $::RD_TRACE;
634              
635 0           last;
636             }
637 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
638             . $& . q{])},
639             Parse::RecDescent::_tracefirst($text))
640             if defined $::RD_TRACE;
641 0           push @item, $item{__PATTERN1__}=$&;
642            
643              
644 0           pop @item;
645 0 0         if (defined $1) {push @item, $item{__DIRECTIVE1__}=$1; $backtrack=1;}
  0            
  0            
646            
647 0 0         Parse::RecDescent::_trace(q{Trying subrule: [expr]},
648             Parse::RecDescent::_tracefirst($text),
649             q{and_expr},
650             $tracelevel)
651             if defined $::RD_TRACE;
652 1     1   4 if (1) { no strict qw{refs};
  1         0  
  1         484  
  0            
653 0           $expectation->is(q{expr})->at($text);
654 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
655             {
656            
657 0 0         Parse::RecDescent::_trace(q{<>},
658             Parse::RecDescent::_tracefirst($text),
659             q{and_expr},
660             $tracelevel)
661             if defined $::RD_TRACE;
662 0           $expectation->failed();
663 0           last;
664             }
665 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [expr]<< (return value: [}
666             . $_tok . q{]},
667            
668             Parse::RecDescent::_tracefirst($text),
669             q{and_expr},
670             $tracelevel)
671             if defined $::RD_TRACE;
672 0           $item{q{expr}} = $_tok;
673 0           push @item, $_tok;
674            
675             }
676              
677 0           $savetext = $text;
678 0           $repcount++;
679             }
680 0           $text = $savetext;
681 0 0         pop @item if $backtrack;
682              
683 0 0         unless (@item) { undef $_tok; last }
  0            
  0            
684 0           $_tok = [ @item ];
685 0           last;
686             }
687              
688 0 0         unless ($repcount>=1)
689             {
690 0 0         Parse::RecDescent::_trace(q{<]>>},
691             Parse::RecDescent::_tracefirst($text),
692             q{and_expr},
693             $tracelevel)
694             if defined $::RD_TRACE;
695 0           $expectation->failed();
696 0           last;
697             }
698 0 0         Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
699 0 0         . qq{@{$_tok||[]}} . q{]},
700             Parse::RecDescent::_tracefirst($text),
701             q{and_expr},
702             $tracelevel)
703             if defined $::RD_TRACE;
704              
705 0   0       push @item, $item{__DIRECTIVE1__}=$_tok||[];
706              
707              
708 0 0         Parse::RecDescent::_trace(q{Trying action},
709             Parse::RecDescent::_tracefirst($text),
710             q{and_expr},
711             $tracelevel)
712             if defined $::RD_TRACE;
713            
714              
715 0 0         $_tok = ($_noactions) ? 0 : do { @{$item[1]} < 2 ? $item[1][0] : [ 'AND', @{$item[1]} ] };
  0 0          
  0            
  0            
716 0 0         unless (defined $_tok)
717             {
718 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
719             if defined $::RD_TRACE;
720 0           last;
721             }
722 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
723             . $_tok . q{])},
724             Parse::RecDescent::_tracefirst($text))
725             if defined $::RD_TRACE;
726 0           push @item, $_tok;
727 0           $item{__ACTION1__}=$_tok;
728            
729              
730              
731 0 0         Parse::RecDescent::_trace(q{>>Matched production: []<<},
732             Parse::RecDescent::_tracefirst($text),
733             q{and_expr},
734             $tracelevel)
735             if defined $::RD_TRACE;
736 0           $_matched = 1;
737 0           last;
738             }
739              
740              
741 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
742             {
743            
744              
745 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
746 0 0         Parse::RecDescent::_trace(q{<>},
747             Parse::RecDescent::_tracefirst($_[1]),
748             q{and_expr},
749             $tracelevel)
750             if defined $::RD_TRACE;
751 0           return undef;
752             }
753 0 0 0       if (!defined($return) && defined($score))
754             {
755 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
756             q{and_expr},
757             $tracelevel)
758             if defined $::RD_TRACE;
759 0           $return = $score_return;
760             }
761 0           splice @{$thisparser->{errors}}, $err_at;
  0            
762 0 0         $return = $item[$#item] unless defined $return;
763 0 0         if (defined $::RD_TRACE)
764             {
765 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
766             $return . q{])}, "",
767             q{and_expr},
768             $tracelevel);
769 0           Parse::RecDescent::_trace(q{(consumed: [} .
770             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
771             Parse::RecDescent::_tracefirst($text),
772             , q{and_expr},
773             $tracelevel)
774             }
775 0           $_[1] = $text;
776 0           return $return;
777             }
778              
779             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
780             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::or_expr
781             {
782 0     0     my $thisparser = $_[0];
783 1     1   3 use vars q{$tracelevel};
  1         1  
  1         246  
784 0   0       local $tracelevel = ($tracelevel||0)+1;
785 0           $ERRORS = 0;
786 0           my $thisrule = $thisparser->{"rules"}{"or_expr"};
787            
788 0 0         Parse::RecDescent::_trace(q{Trying rule: [or_expr]},
789             Parse::RecDescent::_tracefirst($_[1]),
790             q{or_expr},
791             $tracelevel)
792             if defined $::RD_TRACE;
793              
794            
795 0           my $err_at = @{$thisparser->{errors}};
  0            
796              
797 0           my $score;
798             my $score_return;
799 0           my $_tok;
800 0           my $return = undef;
801 0           my $_matched=0;
802 0           my $commit=0;
803 0           my @item = ();
804 0           my %item = ();
805 0   0       my $repeating = defined($_[2]) && $_[2];
806 0   0       my $_noactions = defined($_[3]) && $_[3];
807 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
808 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
809 0           my $text;
810 0           my $lastsep="";
811 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
812 0           $expectation->at($_[1]);
813            
814 0           my $thisline;
815 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
816              
817            
818              
819 0   0       while (!$_matched && !$commit)
820             {
821            
822 0 0         Parse::RecDescent::_trace(q{Trying production: []},
823             Parse::RecDescent::_tracefirst($_[1]),
824             q{or_expr},
825             $tracelevel)
826             if defined $::RD_TRACE;
827 0           my $thisprod = $thisrule->{"prods"}[0];
828 0           $text = $_[1];
829 0           my $_savetext;
830 0           @item = (q{or_expr});
831 0           %item = (__RULE__ => q{or_expr});
832 0           my $repcount = 0;
833              
834              
835 0 0         Parse::RecDescent::_trace(q{Trying operator: []},
836             Parse::RecDescent::_tracefirst($text),
837             q{or_expr},
838             $tracelevel)
839             if defined $::RD_TRACE;
840 0           $expectation->is(q{})->at($text);
841              
842 0           $_tok = undef;
843 0           OPLOOP: while (1)
844             {
845 0           $repcount = 0;
846 0           my @item;
847            
848             # MATCH LEFTARG
849            
850 0 0         Parse::RecDescent::_trace(q{Trying subrule: [and_expr]},
851             Parse::RecDescent::_tracefirst($text),
852             q{or_expr},
853             $tracelevel)
854             if defined $::RD_TRACE;
855 1     1   3 if (1) { no strict qw{refs};
  1         1  
  1         235  
  0            
856 0           $expectation->is(q{and_expr})->at($text);
857 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::and_expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
858             {
859            
860 0 0         Parse::RecDescent::_trace(q{<>},
861             Parse::RecDescent::_tracefirst($text),
862             q{or_expr},
863             $tracelevel)
864             if defined $::RD_TRACE;
865 0           $expectation->failed();
866 0           last;
867             }
868 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [and_expr]<< (return value: [}
869             . $_tok . q{]},
870            
871             Parse::RecDescent::_tracefirst($text),
872             q{or_expr},
873             $tracelevel)
874             if defined $::RD_TRACE;
875 0           $item{q{and_expr}} = $_tok;
876 0           push @item, $_tok;
877            
878             }
879              
880              
881 0           $repcount++;
882              
883 0           my $savetext = $text;
884 0           my $backtrack;
885              
886             # MATCH (OP RIGHTARG)(s)
887 0           while ($repcount < 100000000)
888             {
889 0           $backtrack = 0;
890            
891 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/or/i]}, Parse::RecDescent::_tracefirst($text),
892             q{or_expr},
893             $tracelevel)
894             if defined $::RD_TRACE;
895 0           $lastsep = "";
896 0           $expectation->is(q{/or/i})->at($text);
897            
898              
899 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:or)//i)
  0 0          
900             {
901            
902 0           $expectation->failed();
903 0 0         Parse::RecDescent::_trace(q{<>},
904             Parse::RecDescent::_tracefirst($text))
905             if defined $::RD_TRACE;
906              
907 0           last;
908             }
909 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
910             . $& . q{])},
911             Parse::RecDescent::_tracefirst($text))
912             if defined $::RD_TRACE;
913 0           push @item, $item{__PATTERN1__}=$&;
914            
915              
916 0           pop @item;
917 0 0         if (defined $1) {push @item, $item{__DIRECTIVE1__}=$1; $backtrack=1;}
  0            
  0            
918            
919 0 0         Parse::RecDescent::_trace(q{Trying subrule: [and_expr]},
920             Parse::RecDescent::_tracefirst($text),
921             q{or_expr},
922             $tracelevel)
923             if defined $::RD_TRACE;
924 1     1   3 if (1) { no strict qw{refs};
  1         1  
  1         459  
  0            
925 0           $expectation->is(q{and_expr})->at($text);
926 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::and_expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
927             {
928            
929 0 0         Parse::RecDescent::_trace(q{<>},
930             Parse::RecDescent::_tracefirst($text),
931             q{or_expr},
932             $tracelevel)
933             if defined $::RD_TRACE;
934 0           $expectation->failed();
935 0           last;
936             }
937 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [and_expr]<< (return value: [}
938             . $_tok . q{]},
939            
940             Parse::RecDescent::_tracefirst($text),
941             q{or_expr},
942             $tracelevel)
943             if defined $::RD_TRACE;
944 0           $item{q{and_expr}} = $_tok;
945 0           push @item, $_tok;
946            
947             }
948              
949 0           $savetext = $text;
950 0           $repcount++;
951             }
952 0           $text = $savetext;
953 0 0         pop @item if $backtrack;
954              
955 0 0         unless (@item) { undef $_tok; last }
  0            
  0            
956 0           $_tok = [ @item ];
957 0           last;
958             }
959              
960 0 0         unless ($repcount>=1)
961             {
962 0 0         Parse::RecDescent::_trace(q{<]>>},
963             Parse::RecDescent::_tracefirst($text),
964             q{or_expr},
965             $tracelevel)
966             if defined $::RD_TRACE;
967 0           $expectation->failed();
968 0           last;
969             }
970 0 0         Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
971 0 0         . qq{@{$_tok||[]}} . q{]},
972             Parse::RecDescent::_tracefirst($text),
973             q{or_expr},
974             $tracelevel)
975             if defined $::RD_TRACE;
976              
977 0   0       push @item, $item{__DIRECTIVE1__}=$_tok||[];
978              
979              
980 0 0         Parse::RecDescent::_trace(q{Trying action},
981             Parse::RecDescent::_tracefirst($text),
982             q{or_expr},
983             $tracelevel)
984             if defined $::RD_TRACE;
985            
986              
987 0 0         $_tok = ($_noactions) ? 0 : do { @{$item[1]} < 2 ? $item[1][0] : [ 'OR', @{$item[1]} ] };
  0 0          
  0            
  0            
988 0 0         unless (defined $_tok)
989             {
990 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
991             if defined $::RD_TRACE;
992 0           last;
993             }
994 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
995             . $_tok . q{])},
996             Parse::RecDescent::_tracefirst($text))
997             if defined $::RD_TRACE;
998 0           push @item, $_tok;
999 0           $item{__ACTION1__}=$_tok;
1000            
1001              
1002              
1003 0 0         Parse::RecDescent::_trace(q{>>Matched production: []<<},
1004             Parse::RecDescent::_tracefirst($text),
1005             q{or_expr},
1006             $tracelevel)
1007             if defined $::RD_TRACE;
1008 0           $_matched = 1;
1009 0           last;
1010             }
1011              
1012              
1013 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
1014             {
1015            
1016              
1017 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
1018 0 0         Parse::RecDescent::_trace(q{<>},
1019             Parse::RecDescent::_tracefirst($_[1]),
1020             q{or_expr},
1021             $tracelevel)
1022             if defined $::RD_TRACE;
1023 0           return undef;
1024             }
1025 0 0 0       if (!defined($return) && defined($score))
1026             {
1027 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1028             q{or_expr},
1029             $tracelevel)
1030             if defined $::RD_TRACE;
1031 0           $return = $score_return;
1032             }
1033 0           splice @{$thisparser->{errors}}, $err_at;
  0            
1034 0 0         $return = $item[$#item] unless defined $return;
1035 0 0         if (defined $::RD_TRACE)
1036             {
1037 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1038             $return . q{])}, "",
1039             q{or_expr},
1040             $tracelevel);
1041 0           Parse::RecDescent::_trace(q{(consumed: [} .
1042             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1043             Parse::RecDescent::_tracefirst($text),
1044             , q{or_expr},
1045             $tracelevel)
1046             }
1047 0           $_[1] = $text;
1048 0           return $return;
1049             }
1050              
1051             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
1052             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_name
1053             {
1054 0     0     my $thisparser = $_[0];
1055 1     1   4 use vars q{$tracelevel};
  1         1  
  1         373  
1056 0   0       local $tracelevel = ($tracelevel||0)+1;
1057 0           $ERRORS = 0;
1058 0           my $thisrule = $thisparser->{"rules"}{"arg_name"};
1059            
1060 0 0         Parse::RecDescent::_trace(q{Trying rule: [arg_name]},
1061             Parse::RecDescent::_tracefirst($_[1]),
1062             q{arg_name},
1063             $tracelevel)
1064             if defined $::RD_TRACE;
1065              
1066            
1067 0           my $err_at = @{$thisparser->{errors}};
  0            
1068              
1069 0           my $score;
1070             my $score_return;
1071 0           my $_tok;
1072 0           my $return = undef;
1073 0           my $_matched=0;
1074 0           my $commit=0;
1075 0           my @item = ();
1076 0           my %item = ();
1077 0   0       my $repeating = defined($_[2]) && $_[2];
1078 0   0       my $_noactions = defined($_[3]) && $_[3];
1079 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
1080 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1081 0           my $text;
1082 0           my $lastsep="";
1083 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
1084 0           $expectation->at($_[1]);
1085            
1086 0           my $thisline;
1087 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1088              
1089            
1090              
1091 0   0       while (!$_matched && !$commit)
1092             {
1093            
1094 0 0         Parse::RecDescent::_trace(q{Trying production: ['\\'' vname '\\'']},
1095             Parse::RecDescent::_tracefirst($_[1]),
1096             q{arg_name},
1097             $tracelevel)
1098             if defined $::RD_TRACE;
1099 0           my $thisprod = $thisrule->{"prods"}[0];
1100 0           $text = $_[1];
1101 0           my $_savetext;
1102 0           @item = (q{arg_name});
1103 0           %item = (__RULE__ => q{arg_name});
1104 0           my $repcount = 0;
1105              
1106              
1107 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
1108             Parse::RecDescent::_tracefirst($text),
1109             q{arg_name},
1110             $tracelevel)
1111             if defined $::RD_TRACE;
1112 0           $lastsep = "";
1113 0           $expectation->is(q{})->at($text);
1114            
1115              
1116 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
1117             substr($text,0,length($_tok)) eq $_tok and
1118 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
1119             )
1120             {
1121            
1122 0           $expectation->failed();
1123 0 0         Parse::RecDescent::_trace(q{<>},
1124             Parse::RecDescent::_tracefirst($text))
1125             if defined $::RD_TRACE;
1126 0           last;
1127             }
1128 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1129             . $_tok . q{])},
1130             Parse::RecDescent::_tracefirst($text))
1131             if defined $::RD_TRACE;
1132 0           push @item, $item{__STRING1__}=$_tok;
1133            
1134              
1135 0 0         Parse::RecDescent::_trace(q{Trying subrule: [vname]},
1136             Parse::RecDescent::_tracefirst($text),
1137             q{arg_name},
1138             $tracelevel)
1139             if defined $::RD_TRACE;
1140 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         325  
  0            
1141 0           $expectation->is(q{vname})->at($text);
1142 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::vname($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1143             {
1144            
1145 0 0         Parse::RecDescent::_trace(q{<>},
1146             Parse::RecDescent::_tracefirst($text),
1147             q{arg_name},
1148             $tracelevel)
1149             if defined $::RD_TRACE;
1150 0           $expectation->failed();
1151 0           last;
1152             }
1153 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [vname]<< (return value: [}
1154             . $_tok . q{]},
1155            
1156             Parse::RecDescent::_tracefirst($text),
1157             q{arg_name},
1158             $tracelevel)
1159             if defined $::RD_TRACE;
1160 0           $item{q{vname}} = $_tok;
1161 0           push @item, $_tok;
1162            
1163             }
1164              
1165 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
1166             Parse::RecDescent::_tracefirst($text),
1167             q{arg_name},
1168             $tracelevel)
1169             if defined $::RD_TRACE;
1170 0           $lastsep = "";
1171 0           $expectation->is(q{'\\''})->at($text);
1172            
1173              
1174 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
1175             substr($text,0,length($_tok)) eq $_tok and
1176 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
1177             )
1178             {
1179            
1180 0           $expectation->failed();
1181 0 0         Parse::RecDescent::_trace(q{<>},
1182             Parse::RecDescent::_tracefirst($text))
1183             if defined $::RD_TRACE;
1184 0           last;
1185             }
1186 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1187             . $_tok . q{])},
1188             Parse::RecDescent::_tracefirst($text))
1189             if defined $::RD_TRACE;
1190 0           push @item, $item{__STRING2__}=$_tok;
1191            
1192              
1193 0 0         Parse::RecDescent::_trace(q{Trying action},
1194             Parse::RecDescent::_tracefirst($text),
1195             q{arg_name},
1196             $tracelevel)
1197             if defined $::RD_TRACE;
1198            
1199              
1200 0 0         $_tok = ($_noactions) ? 0 : do { $item[2] };
  0            
1201 0 0         unless (defined $_tok)
1202             {
1203 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
1204             if defined $::RD_TRACE;
1205 0           last;
1206             }
1207 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1208             . $_tok . q{])},
1209             Parse::RecDescent::_tracefirst($text))
1210             if defined $::RD_TRACE;
1211 0           push @item, $_tok;
1212 0           $item{__ACTION1__}=$_tok;
1213            
1214              
1215              
1216 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['\\'' vname '\\'']<<},
1217             Parse::RecDescent::_tracefirst($text),
1218             q{arg_name},
1219             $tracelevel)
1220             if defined $::RD_TRACE;
1221 0           $_matched = 1;
1222 0           last;
1223             }
1224              
1225              
1226 0   0       while (!$_matched && !$commit)
1227             {
1228            
1229 0 0         Parse::RecDescent::_trace(q{Trying production: [vname]},
1230             Parse::RecDescent::_tracefirst($_[1]),
1231             q{arg_name},
1232             $tracelevel)
1233             if defined $::RD_TRACE;
1234 0           my $thisprod = $thisrule->{"prods"}[1];
1235 0           $text = $_[1];
1236 0           my $_savetext;
1237 0           @item = (q{arg_name});
1238 0           %item = (__RULE__ => q{arg_name});
1239 0           my $repcount = 0;
1240              
1241              
1242 0 0         Parse::RecDescent::_trace(q{Trying subrule: [vname]},
1243             Parse::RecDescent::_tracefirst($text),
1244             q{arg_name},
1245             $tracelevel)
1246             if defined $::RD_TRACE;
1247 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         403  
  0            
1248 0           $expectation->is(q{})->at($text);
1249 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::vname($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1250             {
1251            
1252 0 0         Parse::RecDescent::_trace(q{<>},
1253             Parse::RecDescent::_tracefirst($text),
1254             q{arg_name},
1255             $tracelevel)
1256             if defined $::RD_TRACE;
1257 0           $expectation->failed();
1258 0           last;
1259             }
1260 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [vname]<< (return value: [}
1261             . $_tok . q{]},
1262            
1263             Parse::RecDescent::_tracefirst($text),
1264             q{arg_name},
1265             $tracelevel)
1266             if defined $::RD_TRACE;
1267 0           $item{q{vname}} = $_tok;
1268 0           push @item, $_tok;
1269            
1270             }
1271              
1272 0 0         Parse::RecDescent::_trace(q{Trying action},
1273             Parse::RecDescent::_tracefirst($text),
1274             q{arg_name},
1275             $tracelevel)
1276             if defined $::RD_TRACE;
1277            
1278              
1279 0 0         $_tok = ($_noactions) ? 0 : do { $item[1] };
  0            
1280 0 0         unless (defined $_tok)
1281             {
1282 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
1283             if defined $::RD_TRACE;
1284 0           last;
1285             }
1286 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1287             . $_tok . q{])},
1288             Parse::RecDescent::_tracefirst($text))
1289             if defined $::RD_TRACE;
1290 0           push @item, $_tok;
1291 0           $item{__ACTION1__}=$_tok;
1292            
1293              
1294              
1295 0 0         Parse::RecDescent::_trace(q{>>Matched production: [vname]<<},
1296             Parse::RecDescent::_tracefirst($text),
1297             q{arg_name},
1298             $tracelevel)
1299             if defined $::RD_TRACE;
1300 0           $_matched = 1;
1301 0           last;
1302             }
1303              
1304              
1305 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
1306             {
1307            
1308              
1309 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
1310 0 0         Parse::RecDescent::_trace(q{<>},
1311             Parse::RecDescent::_tracefirst($_[1]),
1312             q{arg_name},
1313             $tracelevel)
1314             if defined $::RD_TRACE;
1315 0           return undef;
1316             }
1317 0 0 0       if (!defined($return) && defined($score))
1318             {
1319 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
1320             q{arg_name},
1321             $tracelevel)
1322             if defined $::RD_TRACE;
1323 0           $return = $score_return;
1324             }
1325 0           splice @{$thisparser->{errors}}, $err_at;
  0            
1326 0 0         $return = $item[$#item] unless defined $return;
1327 0 0         if (defined $::RD_TRACE)
1328             {
1329 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
1330             $return . q{])}, "",
1331             q{arg_name},
1332             $tracelevel);
1333 0           Parse::RecDescent::_trace(q{(consumed: [} .
1334             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
1335             Parse::RecDescent::_tracefirst($text),
1336             , q{arg_name},
1337             $tracelevel)
1338             }
1339 0           $_[1] = $text;
1340 0           return $return;
1341             }
1342              
1343             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
1344             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_expr
1345             {
1346 0     0     my $thisparser = $_[0];
1347 1     1   5 use vars q{$tracelevel};
  1         0  
  1         229  
1348 0   0       local $tracelevel = ($tracelevel||0)+1;
1349 0           $ERRORS = 0;
1350 0           my $thisrule = $thisparser->{"rules"}{"comp_expr"};
1351            
1352 0 0         Parse::RecDescent::_trace(q{Trying rule: [comp_expr]},
1353             Parse::RecDescent::_tracefirst($_[1]),
1354             q{comp_expr},
1355             $tracelevel)
1356             if defined $::RD_TRACE;
1357              
1358            
1359 0           my $err_at = @{$thisparser->{errors}};
  0            
1360              
1361 0           my $score;
1362             my $score_return;
1363 0           my $_tok;
1364 0           my $return = undef;
1365 0           my $_matched=0;
1366 0           my $commit=0;
1367 0           my @item = ();
1368 0           my %item = ();
1369 0   0       my $repeating = defined($_[2]) && $_[2];
1370 0   0       my $_noactions = defined($_[3]) && $_[3];
1371 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
1372 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
1373 0           my $text;
1374 0           my $lastsep="";
1375 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
1376 0           $expectation->at($_[1]);
1377            
1378 0           my $thisline;
1379 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
1380              
1381            
1382              
1383 0   0       while (!$_matched && !$commit)
1384             {
1385            
1386 0 0         Parse::RecDescent::_trace(q{Trying production: [identifier comp_op identifier]},
1387             Parse::RecDescent::_tracefirst($_[1]),
1388             q{comp_expr},
1389             $tracelevel)
1390             if defined $::RD_TRACE;
1391 0           my $thisprod = $thisrule->{"prods"}[0];
1392 0           $text = $_[1];
1393 0           my $_savetext;
1394 0           @item = (q{comp_expr});
1395 0           %item = (__RULE__ => q{comp_expr});
1396 0           my $repcount = 0;
1397              
1398              
1399 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
1400             Parse::RecDescent::_tracefirst($text),
1401             q{comp_expr},
1402             $tracelevel)
1403             if defined $::RD_TRACE;
1404 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         113  
  0            
1405 0           $expectation->is(q{})->at($text);
1406 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1407             {
1408            
1409 0 0         Parse::RecDescent::_trace(q{<>},
1410             Parse::RecDescent::_tracefirst($text),
1411             q{comp_expr},
1412             $tracelevel)
1413             if defined $::RD_TRACE;
1414 0           $expectation->failed();
1415 0           last;
1416             }
1417 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
1418             . $_tok . q{]},
1419            
1420             Parse::RecDescent::_tracefirst($text),
1421             q{comp_expr},
1422             $tracelevel)
1423             if defined $::RD_TRACE;
1424 0           $item{q{identifier}} = $_tok;
1425 0           push @item, $_tok;
1426            
1427             }
1428              
1429 0 0         Parse::RecDescent::_trace(q{Trying subrule: [comp_op]},
1430             Parse::RecDescent::_tracefirst($text),
1431             q{comp_expr},
1432             $tracelevel)
1433             if defined $::RD_TRACE;
1434 1     1   3 if (1) { no strict qw{refs};
  1         1  
  1         115  
  0            
1435 0           $expectation->is(q{comp_op})->at($text);
1436 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_op($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1437             {
1438            
1439 0 0         Parse::RecDescent::_trace(q{<>},
1440             Parse::RecDescent::_tracefirst($text),
1441             q{comp_expr},
1442             $tracelevel)
1443             if defined $::RD_TRACE;
1444 0           $expectation->failed();
1445 0           last;
1446             }
1447 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [comp_op]<< (return value: [}
1448             . $_tok . q{]},
1449            
1450             Parse::RecDescent::_tracefirst($text),
1451             q{comp_expr},
1452             $tracelevel)
1453             if defined $::RD_TRACE;
1454 0           $item{q{comp_op}} = $_tok;
1455 0           push @item, $_tok;
1456            
1457             }
1458              
1459 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
1460             Parse::RecDescent::_tracefirst($text),
1461             q{comp_expr},
1462             $tracelevel)
1463             if defined $::RD_TRACE;
1464 1     1   3 if (1) { no strict qw{refs};
  1         1  
  1         420  
  0            
1465 0           $expectation->is(q{identifier})->at($text);
1466 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1467             {
1468            
1469 0 0         Parse::RecDescent::_trace(q{<>},
1470             Parse::RecDescent::_tracefirst($text),
1471             q{comp_expr},
1472             $tracelevel)
1473             if defined $::RD_TRACE;
1474 0           $expectation->failed();
1475 0           last;
1476             }
1477 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
1478             . $_tok . q{]},
1479            
1480             Parse::RecDescent::_tracefirst($text),
1481             q{comp_expr},
1482             $tracelevel)
1483             if defined $::RD_TRACE;
1484 0           $item{q{identifier}} = $_tok;
1485 0           push @item, $_tok;
1486            
1487             }
1488              
1489 0 0         Parse::RecDescent::_trace(q{Trying action},
1490             Parse::RecDescent::_tracefirst($text),
1491             q{comp_expr},
1492             $tracelevel)
1493             if defined $::RD_TRACE;
1494            
1495              
1496 0 0         $_tok = ($_noactions) ? 0 : do { [ 'COMP', $item[1], $item[2], $item[3] ] };
  0            
1497 0 0         unless (defined $_tok)
1498             {
1499 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
1500             if defined $::RD_TRACE;
1501 0           last;
1502             }
1503 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1504             . $_tok . q{])},
1505             Parse::RecDescent::_tracefirst($text))
1506             if defined $::RD_TRACE;
1507 0           push @item, $_tok;
1508 0           $item{__ACTION1__}=$_tok;
1509            
1510              
1511              
1512 0 0         Parse::RecDescent::_trace(q{>>Matched production: [identifier comp_op identifier]<<},
1513             Parse::RecDescent::_tracefirst($text),
1514             q{comp_expr},
1515             $tracelevel)
1516             if defined $::RD_TRACE;
1517 0           $_matched = 1;
1518 0           last;
1519             }
1520              
1521              
1522 0   0       while (!$_matched && !$commit)
1523             {
1524            
1525 0 0         Parse::RecDescent::_trace(q{Trying production: [/upper/i '(' identifier ')' comp_op /upper/i '(' identifier ')']},
1526             Parse::RecDescent::_tracefirst($_[1]),
1527             q{comp_expr},
1528             $tracelevel)
1529             if defined $::RD_TRACE;
1530 0           my $thisprod = $thisrule->{"prods"}[1];
1531 0           $text = $_[1];
1532 0           my $_savetext;
1533 0           @item = (q{comp_expr});
1534 0           %item = (__RULE__ => q{comp_expr});
1535 0           my $repcount = 0;
1536              
1537              
1538 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/upper/i]}, Parse::RecDescent::_tracefirst($text),
1539             q{comp_expr},
1540             $tracelevel)
1541             if defined $::RD_TRACE;
1542 0           $lastsep = "";
1543 0           $expectation->is(q{})->at($text);
1544            
1545              
1546 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:upper)//i)
  0 0          
1547             {
1548            
1549 0           $expectation->failed();
1550 0 0         Parse::RecDescent::_trace(q{<>},
1551             Parse::RecDescent::_tracefirst($text))
1552             if defined $::RD_TRACE;
1553              
1554 0           last;
1555             }
1556 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1557             . $& . q{])},
1558             Parse::RecDescent::_tracefirst($text))
1559             if defined $::RD_TRACE;
1560 0           push @item, $item{__PATTERN1__}=$&;
1561            
1562              
1563 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
1564             Parse::RecDescent::_tracefirst($text),
1565             q{comp_expr},
1566             $tracelevel)
1567             if defined $::RD_TRACE;
1568 0           $lastsep = "";
1569 0           $expectation->is(q{'('})->at($text);
1570            
1571              
1572 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
1573             {
1574            
1575 0           $expectation->failed();
1576 0 0         Parse::RecDescent::_trace(qq{<>},
1577             Parse::RecDescent::_tracefirst($text))
1578             if defined $::RD_TRACE;
1579 0           last;
1580             }
1581 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1582             . $& . q{])},
1583             Parse::RecDescent::_tracefirst($text))
1584             if defined $::RD_TRACE;
1585 0           push @item, $item{__STRING1__}=$&;
1586            
1587              
1588 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
1589             Parse::RecDescent::_tracefirst($text),
1590             q{comp_expr},
1591             $tracelevel)
1592             if defined $::RD_TRACE;
1593 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         219  
  0            
1594 0           $expectation->is(q{identifier})->at($text);
1595 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1596             {
1597            
1598 0 0         Parse::RecDescent::_trace(q{<>},
1599             Parse::RecDescent::_tracefirst($text),
1600             q{comp_expr},
1601             $tracelevel)
1602             if defined $::RD_TRACE;
1603 0           $expectation->failed();
1604 0           last;
1605             }
1606 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
1607             . $_tok . q{]},
1608            
1609             Parse::RecDescent::_tracefirst($text),
1610             q{comp_expr},
1611             $tracelevel)
1612             if defined $::RD_TRACE;
1613 0           $item{q{identifier}} = $_tok;
1614 0           push @item, $_tok;
1615            
1616             }
1617              
1618 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
1619             Parse::RecDescent::_tracefirst($text),
1620             q{comp_expr},
1621             $tracelevel)
1622             if defined $::RD_TRACE;
1623 0           $lastsep = "";
1624 0           $expectation->is(q{')'})->at($text);
1625            
1626              
1627 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
1628             {
1629            
1630 0           $expectation->failed();
1631 0 0         Parse::RecDescent::_trace(qq{<>},
1632             Parse::RecDescent::_tracefirst($text))
1633             if defined $::RD_TRACE;
1634 0           last;
1635             }
1636 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1637             . $& . q{])},
1638             Parse::RecDescent::_tracefirst($text))
1639             if defined $::RD_TRACE;
1640 0           push @item, $item{__STRING2__}=$&;
1641            
1642              
1643 0 0         Parse::RecDescent::_trace(q{Trying subrule: [comp_op]},
1644             Parse::RecDescent::_tracefirst($text),
1645             q{comp_expr},
1646             $tracelevel)
1647             if defined $::RD_TRACE;
1648 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         295  
  0            
1649 0           $expectation->is(q{comp_op})->at($text);
1650 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_op($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1651             {
1652            
1653 0 0         Parse::RecDescent::_trace(q{<>},
1654             Parse::RecDescent::_tracefirst($text),
1655             q{comp_expr},
1656             $tracelevel)
1657             if defined $::RD_TRACE;
1658 0           $expectation->failed();
1659 0           last;
1660             }
1661 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [comp_op]<< (return value: [}
1662             . $_tok . q{]},
1663            
1664             Parse::RecDescent::_tracefirst($text),
1665             q{comp_expr},
1666             $tracelevel)
1667             if defined $::RD_TRACE;
1668 0           $item{q{comp_op}} = $_tok;
1669 0           push @item, $_tok;
1670            
1671             }
1672              
1673 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/upper/i]}, Parse::RecDescent::_tracefirst($text),
1674             q{comp_expr},
1675             $tracelevel)
1676             if defined $::RD_TRACE;
1677 0           $lastsep = "";
1678 0           $expectation->is(q{/upper/i})->at($text);
1679            
1680              
1681 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:upper)//i)
  0 0          
1682             {
1683            
1684 0           $expectation->failed();
1685 0 0         Parse::RecDescent::_trace(q{<>},
1686             Parse::RecDescent::_tracefirst($text))
1687             if defined $::RD_TRACE;
1688              
1689 0           last;
1690             }
1691 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1692             . $& . q{])},
1693             Parse::RecDescent::_tracefirst($text))
1694             if defined $::RD_TRACE;
1695 0           push @item, $item{__PATTERN2__}=$&;
1696            
1697              
1698 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
1699             Parse::RecDescent::_tracefirst($text),
1700             q{comp_expr},
1701             $tracelevel)
1702             if defined $::RD_TRACE;
1703 0           $lastsep = "";
1704 0           $expectation->is(q{'('})->at($text);
1705            
1706              
1707 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
1708             {
1709            
1710 0           $expectation->failed();
1711 0 0         Parse::RecDescent::_trace(qq{<>},
1712             Parse::RecDescent::_tracefirst($text))
1713             if defined $::RD_TRACE;
1714 0           last;
1715             }
1716 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1717             . $& . q{])},
1718             Parse::RecDescent::_tracefirst($text))
1719             if defined $::RD_TRACE;
1720 0           push @item, $item{__STRING3__}=$&;
1721            
1722              
1723 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
1724             Parse::RecDescent::_tracefirst($text),
1725             q{comp_expr},
1726             $tracelevel)
1727             if defined $::RD_TRACE;
1728 1     1   3 if (1) { no strict qw{refs};
  1         2  
  1         533  
  0            
1729 0           $expectation->is(q{identifier})->at($text);
1730 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1731             {
1732            
1733 0 0         Parse::RecDescent::_trace(q{<>},
1734             Parse::RecDescent::_tracefirst($text),
1735             q{comp_expr},
1736             $tracelevel)
1737             if defined $::RD_TRACE;
1738 0           $expectation->failed();
1739 0           last;
1740             }
1741 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
1742             . $_tok . q{]},
1743            
1744             Parse::RecDescent::_tracefirst($text),
1745             q{comp_expr},
1746             $tracelevel)
1747             if defined $::RD_TRACE;
1748 0           $item{q{identifier}} = $_tok;
1749 0           push @item, $_tok;
1750            
1751             }
1752              
1753 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
1754             Parse::RecDescent::_tracefirst($text),
1755             q{comp_expr},
1756             $tracelevel)
1757             if defined $::RD_TRACE;
1758 0           $lastsep = "";
1759 0           $expectation->is(q{')'})->at($text);
1760            
1761              
1762 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
1763             {
1764            
1765 0           $expectation->failed();
1766 0 0         Parse::RecDescent::_trace(qq{<>},
1767             Parse::RecDescent::_tracefirst($text))
1768             if defined $::RD_TRACE;
1769 0           last;
1770             }
1771 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1772             . $& . q{])},
1773             Parse::RecDescent::_tracefirst($text))
1774             if defined $::RD_TRACE;
1775 0           push @item, $item{__STRING4__}=$&;
1776            
1777              
1778 0 0         Parse::RecDescent::_trace(q{Trying action},
1779             Parse::RecDescent::_tracefirst($text),
1780             q{comp_expr},
1781             $tracelevel)
1782             if defined $::RD_TRACE;
1783            
1784              
1785 0 0         $_tok = ($_noactions) ? 0 : do { [ 'COMP', $item[3], 'CONTAINS', $item[8] ] };
  0            
1786 0 0         unless (defined $_tok)
1787             {
1788 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
1789             if defined $::RD_TRACE;
1790 0           last;
1791             }
1792 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
1793             . $_tok . q{])},
1794             Parse::RecDescent::_tracefirst($text))
1795             if defined $::RD_TRACE;
1796 0           push @item, $_tok;
1797 0           $item{__ACTION1__}=$_tok;
1798            
1799              
1800              
1801 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/upper/i '(' identifier ')' comp_op /upper/i '(' identifier ')']<<},
1802             Parse::RecDescent::_tracefirst($text),
1803             q{comp_expr},
1804             $tracelevel)
1805             if defined $::RD_TRACE;
1806 0           $_matched = 1;
1807 0           last;
1808             }
1809              
1810              
1811 0   0       while (!$_matched && !$commit)
1812             {
1813            
1814 0 0         Parse::RecDescent::_trace(q{Trying production: [/lower/i '(' identifier ')' comp_op /lower/i '(' identifier ')']},
1815             Parse::RecDescent::_tracefirst($_[1]),
1816             q{comp_expr},
1817             $tracelevel)
1818             if defined $::RD_TRACE;
1819 0           my $thisprod = $thisrule->{"prods"}[2];
1820 0           $text = $_[1];
1821 0           my $_savetext;
1822 0           @item = (q{comp_expr});
1823 0           %item = (__RULE__ => q{comp_expr});
1824 0           my $repcount = 0;
1825              
1826              
1827 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/lower/i]}, Parse::RecDescent::_tracefirst($text),
1828             q{comp_expr},
1829             $tracelevel)
1830             if defined $::RD_TRACE;
1831 0           $lastsep = "";
1832 0           $expectation->is(q{})->at($text);
1833            
1834              
1835 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:lower)//i)
  0 0          
1836             {
1837            
1838 0           $expectation->failed();
1839 0 0         Parse::RecDescent::_trace(q{<>},
1840             Parse::RecDescent::_tracefirst($text))
1841             if defined $::RD_TRACE;
1842              
1843 0           last;
1844             }
1845 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1846             . $& . q{])},
1847             Parse::RecDescent::_tracefirst($text))
1848             if defined $::RD_TRACE;
1849 0           push @item, $item{__PATTERN1__}=$&;
1850            
1851              
1852 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
1853             Parse::RecDescent::_tracefirst($text),
1854             q{comp_expr},
1855             $tracelevel)
1856             if defined $::RD_TRACE;
1857 0           $lastsep = "";
1858 0           $expectation->is(q{'('})->at($text);
1859            
1860              
1861 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
1862             {
1863            
1864 0           $expectation->failed();
1865 0 0         Parse::RecDescent::_trace(qq{<>},
1866             Parse::RecDescent::_tracefirst($text))
1867             if defined $::RD_TRACE;
1868 0           last;
1869             }
1870 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1871             . $& . q{])},
1872             Parse::RecDescent::_tracefirst($text))
1873             if defined $::RD_TRACE;
1874 0           push @item, $item{__STRING1__}=$&;
1875            
1876              
1877 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
1878             Parse::RecDescent::_tracefirst($text),
1879             q{comp_expr},
1880             $tracelevel)
1881             if defined $::RD_TRACE;
1882 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         226  
  0            
1883 0           $expectation->is(q{identifier})->at($text);
1884 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1885             {
1886            
1887 0 0         Parse::RecDescent::_trace(q{<>},
1888             Parse::RecDescent::_tracefirst($text),
1889             q{comp_expr},
1890             $tracelevel)
1891             if defined $::RD_TRACE;
1892 0           $expectation->failed();
1893 0           last;
1894             }
1895 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
1896             . $_tok . q{]},
1897            
1898             Parse::RecDescent::_tracefirst($text),
1899             q{comp_expr},
1900             $tracelevel)
1901             if defined $::RD_TRACE;
1902 0           $item{q{identifier}} = $_tok;
1903 0           push @item, $_tok;
1904            
1905             }
1906              
1907 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
1908             Parse::RecDescent::_tracefirst($text),
1909             q{comp_expr},
1910             $tracelevel)
1911             if defined $::RD_TRACE;
1912 0           $lastsep = "";
1913 0           $expectation->is(q{')'})->at($text);
1914            
1915              
1916 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
1917             {
1918            
1919 0           $expectation->failed();
1920 0 0         Parse::RecDescent::_trace(qq{<>},
1921             Parse::RecDescent::_tracefirst($text))
1922             if defined $::RD_TRACE;
1923 0           last;
1924             }
1925 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1926             . $& . q{])},
1927             Parse::RecDescent::_tracefirst($text))
1928             if defined $::RD_TRACE;
1929 0           push @item, $item{__STRING2__}=$&;
1930            
1931              
1932 0 0         Parse::RecDescent::_trace(q{Trying subrule: [comp_op]},
1933             Parse::RecDescent::_tracefirst($text),
1934             q{comp_expr},
1935             $tracelevel)
1936             if defined $::RD_TRACE;
1937 1     1   3 if (1) { no strict qw{refs};
  1         1  
  1         294  
  0            
1938 0           $expectation->is(q{comp_op})->at($text);
1939 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_op($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
1940             {
1941            
1942 0 0         Parse::RecDescent::_trace(q{<>},
1943             Parse::RecDescent::_tracefirst($text),
1944             q{comp_expr},
1945             $tracelevel)
1946             if defined $::RD_TRACE;
1947 0           $expectation->failed();
1948 0           last;
1949             }
1950 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [comp_op]<< (return value: [}
1951             . $_tok . q{]},
1952            
1953             Parse::RecDescent::_tracefirst($text),
1954             q{comp_expr},
1955             $tracelevel)
1956             if defined $::RD_TRACE;
1957 0           $item{q{comp_op}} = $_tok;
1958 0           push @item, $_tok;
1959            
1960             }
1961              
1962 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/lower/i]}, Parse::RecDescent::_tracefirst($text),
1963             q{comp_expr},
1964             $tracelevel)
1965             if defined $::RD_TRACE;
1966 0           $lastsep = "";
1967 0           $expectation->is(q{/lower/i})->at($text);
1968            
1969              
1970 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:lower)//i)
  0 0          
1971             {
1972            
1973 0           $expectation->failed();
1974 0 0         Parse::RecDescent::_trace(q{<>},
1975             Parse::RecDescent::_tracefirst($text))
1976             if defined $::RD_TRACE;
1977              
1978 0           last;
1979             }
1980 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
1981             . $& . q{])},
1982             Parse::RecDescent::_tracefirst($text))
1983             if defined $::RD_TRACE;
1984 0           push @item, $item{__PATTERN2__}=$&;
1985            
1986              
1987 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
1988             Parse::RecDescent::_tracefirst($text),
1989             q{comp_expr},
1990             $tracelevel)
1991             if defined $::RD_TRACE;
1992 0           $lastsep = "";
1993 0           $expectation->is(q{'('})->at($text);
1994            
1995              
1996 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
1997             {
1998            
1999 0           $expectation->failed();
2000 0 0         Parse::RecDescent::_trace(qq{<>},
2001             Parse::RecDescent::_tracefirst($text))
2002             if defined $::RD_TRACE;
2003 0           last;
2004             }
2005 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2006             . $& . q{])},
2007             Parse::RecDescent::_tracefirst($text))
2008             if defined $::RD_TRACE;
2009 0           push @item, $item{__STRING3__}=$&;
2010            
2011              
2012 0 0         Parse::RecDescent::_trace(q{Trying subrule: [identifier]},
2013             Parse::RecDescent::_tracefirst($text),
2014             q{comp_expr},
2015             $tracelevel)
2016             if defined $::RD_TRACE;
2017 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         584  
  0            
2018 0           $expectation->is(q{identifier})->at($text);
2019 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2020             {
2021            
2022 0 0         Parse::RecDescent::_trace(q{<>},
2023             Parse::RecDescent::_tracefirst($text),
2024             q{comp_expr},
2025             $tracelevel)
2026             if defined $::RD_TRACE;
2027 0           $expectation->failed();
2028 0           last;
2029             }
2030 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [}
2031             . $_tok . q{]},
2032            
2033             Parse::RecDescent::_tracefirst($text),
2034             q{comp_expr},
2035             $tracelevel)
2036             if defined $::RD_TRACE;
2037 0           $item{q{identifier}} = $_tok;
2038 0           push @item, $_tok;
2039            
2040             }
2041              
2042 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
2043             Parse::RecDescent::_tracefirst($text),
2044             q{comp_expr},
2045             $tracelevel)
2046             if defined $::RD_TRACE;
2047 0           $lastsep = "";
2048 0           $expectation->is(q{')'})->at($text);
2049            
2050              
2051 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
2052             {
2053            
2054 0           $expectation->failed();
2055 0 0         Parse::RecDescent::_trace(qq{<>},
2056             Parse::RecDescent::_tracefirst($text))
2057             if defined $::RD_TRACE;
2058 0           last;
2059             }
2060 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2061             . $& . q{])},
2062             Parse::RecDescent::_tracefirst($text))
2063             if defined $::RD_TRACE;
2064 0           push @item, $item{__STRING4__}=$&;
2065            
2066              
2067 0 0         Parse::RecDescent::_trace(q{Trying action},
2068             Parse::RecDescent::_tracefirst($text),
2069             q{comp_expr},
2070             $tracelevel)
2071             if defined $::RD_TRACE;
2072            
2073              
2074 0 0         $_tok = ($_noactions) ? 0 : do { [ 'COMP', $item[3], 'CONTAINS', $item[8] ] };
  0            
2075 0 0         unless (defined $_tok)
2076             {
2077 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
2078             if defined $::RD_TRACE;
2079 0           last;
2080             }
2081 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2082             . $_tok . q{])},
2083             Parse::RecDescent::_tracefirst($text))
2084             if defined $::RD_TRACE;
2085 0           push @item, $_tok;
2086 0           $item{__ACTION1__}=$_tok;
2087            
2088              
2089              
2090 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/lower/i '(' identifier ')' comp_op /lower/i '(' identifier ')']<<},
2091             Parse::RecDescent::_tracefirst($text),
2092             q{comp_expr},
2093             $tracelevel)
2094             if defined $::RD_TRACE;
2095 0           $_matched = 1;
2096 0           last;
2097             }
2098              
2099              
2100 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
2101             {
2102            
2103              
2104 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
2105 0 0         Parse::RecDescent::_trace(q{<>},
2106             Parse::RecDescent::_tracefirst($_[1]),
2107             q{comp_expr},
2108             $tracelevel)
2109             if defined $::RD_TRACE;
2110 0           return undef;
2111             }
2112 0 0 0       if (!defined($return) && defined($score))
2113             {
2114 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2115             q{comp_expr},
2116             $tracelevel)
2117             if defined $::RD_TRACE;
2118 0           $return = $score_return;
2119             }
2120 0           splice @{$thisparser->{errors}}, $err_at;
  0            
2121 0 0         $return = $item[$#item] unless defined $return;
2122 0 0         if (defined $::RD_TRACE)
2123             {
2124 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2125             $return . q{])}, "",
2126             q{comp_expr},
2127             $tracelevel);
2128 0           Parse::RecDescent::_trace(q{(consumed: [} .
2129             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2130             Parse::RecDescent::_tracefirst($text),
2131             , q{comp_expr},
2132             $tracelevel)
2133             }
2134 0           $_[1] = $text;
2135 0           return $return;
2136             }
2137              
2138             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
2139             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_op
2140             {
2141 0     0     my $thisparser = $_[0];
2142 1     1   4 use vars q{$tracelevel};
  1         1  
  1         1691  
2143 0   0       local $tracelevel = ($tracelevel||0)+1;
2144 0           $ERRORS = 0;
2145 0           my $thisrule = $thisparser->{"rules"}{"comp_op"};
2146            
2147 0 0         Parse::RecDescent::_trace(q{Trying rule: [comp_op]},
2148             Parse::RecDescent::_tracefirst($_[1]),
2149             q{comp_op},
2150             $tracelevel)
2151             if defined $::RD_TRACE;
2152              
2153            
2154 0           my $err_at = @{$thisparser->{errors}};
  0            
2155              
2156 0           my $score;
2157             my $score_return;
2158 0           my $_tok;
2159 0           my $return = undef;
2160 0           my $_matched=0;
2161 0           my $commit=0;
2162 0           my @item = ();
2163 0           my %item = ();
2164 0   0       my $repeating = defined($_[2]) && $_[2];
2165 0   0       my $_noactions = defined($_[3]) && $_[3];
2166 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
2167 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2168 0           my $text;
2169 0           my $lastsep="";
2170 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
2171 0           $expectation->at($_[1]);
2172            
2173 0           my $thisline;
2174 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2175              
2176            
2177              
2178 0   0       while (!$_matched && !$commit)
2179             {
2180            
2181 0 0         Parse::RecDescent::_trace(q{Trying production: ['!=']},
2182             Parse::RecDescent::_tracefirst($_[1]),
2183             q{comp_op},
2184             $tracelevel)
2185             if defined $::RD_TRACE;
2186 0           my $thisprod = $thisrule->{"prods"}[0];
2187 0           $text = $_[1];
2188 0           my $_savetext;
2189 0           @item = (q{comp_op});
2190 0           %item = (__RULE__ => q{comp_op});
2191 0           my $repcount = 0;
2192              
2193              
2194 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['!=']},
2195             Parse::RecDescent::_tracefirst($text),
2196             q{comp_op},
2197             $tracelevel)
2198             if defined $::RD_TRACE;
2199 0           $lastsep = "";
2200 0           $expectation->is(q{})->at($text);
2201            
2202              
2203 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\!\=//)
  0 0          
2204             {
2205            
2206 0           $expectation->failed();
2207 0 0         Parse::RecDescent::_trace(qq{<>},
2208             Parse::RecDescent::_tracefirst($text))
2209             if defined $::RD_TRACE;
2210 0           last;
2211             }
2212 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2213             . $& . q{])},
2214             Parse::RecDescent::_tracefirst($text))
2215             if defined $::RD_TRACE;
2216 0           push @item, $item{__STRING1__}=$&;
2217            
2218              
2219              
2220 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['!=']<<},
2221             Parse::RecDescent::_tracefirst($text),
2222             q{comp_op},
2223             $tracelevel)
2224             if defined $::RD_TRACE;
2225 0           $_matched = 1;
2226 0           last;
2227             }
2228              
2229              
2230 0   0       while (!$_matched && !$commit)
2231             {
2232            
2233 0 0         Parse::RecDescent::_trace(q{Trying production: ['<=']},
2234             Parse::RecDescent::_tracefirst($_[1]),
2235             q{comp_op},
2236             $tracelevel)
2237             if defined $::RD_TRACE;
2238 0           my $thisprod = $thisrule->{"prods"}[1];
2239 0           $text = $_[1];
2240 0           my $_savetext;
2241 0           @item = (q{comp_op});
2242 0           %item = (__RULE__ => q{comp_op});
2243 0           my $repcount = 0;
2244              
2245              
2246 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['<=']},
2247             Parse::RecDescent::_tracefirst($text),
2248             q{comp_op},
2249             $tracelevel)
2250             if defined $::RD_TRACE;
2251 0           $lastsep = "";
2252 0           $expectation->is(q{})->at($text);
2253            
2254              
2255 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\<\=//)
  0 0          
2256             {
2257            
2258 0           $expectation->failed();
2259 0 0         Parse::RecDescent::_trace(qq{<>},
2260             Parse::RecDescent::_tracefirst($text))
2261             if defined $::RD_TRACE;
2262 0           last;
2263             }
2264 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2265             . $& . q{])},
2266             Parse::RecDescent::_tracefirst($text))
2267             if defined $::RD_TRACE;
2268 0           push @item, $item{__STRING1__}=$&;
2269            
2270              
2271              
2272 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['<=']<<},
2273             Parse::RecDescent::_tracefirst($text),
2274             q{comp_op},
2275             $tracelevel)
2276             if defined $::RD_TRACE;
2277 0           $_matched = 1;
2278 0           last;
2279             }
2280              
2281              
2282 0   0       while (!$_matched && !$commit)
2283             {
2284            
2285 0 0         Parse::RecDescent::_trace(q{Trying production: ['>=']},
2286             Parse::RecDescent::_tracefirst($_[1]),
2287             q{comp_op},
2288             $tracelevel)
2289             if defined $::RD_TRACE;
2290 0           my $thisprod = $thisrule->{"prods"}[2];
2291 0           $text = $_[1];
2292 0           my $_savetext;
2293 0           @item = (q{comp_op});
2294 0           %item = (__RULE__ => q{comp_op});
2295 0           my $repcount = 0;
2296              
2297              
2298 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['>=']},
2299             Parse::RecDescent::_tracefirst($text),
2300             q{comp_op},
2301             $tracelevel)
2302             if defined $::RD_TRACE;
2303 0           $lastsep = "";
2304 0           $expectation->is(q{})->at($text);
2305            
2306              
2307 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\>\=//)
  0 0          
2308             {
2309            
2310 0           $expectation->failed();
2311 0 0         Parse::RecDescent::_trace(qq{<>},
2312             Parse::RecDescent::_tracefirst($text))
2313             if defined $::RD_TRACE;
2314 0           last;
2315             }
2316 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2317             . $& . q{])},
2318             Parse::RecDescent::_tracefirst($text))
2319             if defined $::RD_TRACE;
2320 0           push @item, $item{__STRING1__}=$&;
2321            
2322              
2323              
2324 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['>=']<<},
2325             Parse::RecDescent::_tracefirst($text),
2326             q{comp_op},
2327             $tracelevel)
2328             if defined $::RD_TRACE;
2329 0           $_matched = 1;
2330 0           last;
2331             }
2332              
2333              
2334 0   0       while (!$_matched && !$commit)
2335             {
2336            
2337 0 0         Parse::RecDescent::_trace(q{Trying production: [/LIKE/i]},
2338             Parse::RecDescent::_tracefirst($_[1]),
2339             q{comp_op},
2340             $tracelevel)
2341             if defined $::RD_TRACE;
2342 0           my $thisprod = $thisrule->{"prods"}[3];
2343 0           $text = $_[1];
2344 0           my $_savetext;
2345 0           @item = (q{comp_op});
2346 0           %item = (__RULE__ => q{comp_op});
2347 0           my $repcount = 0;
2348              
2349              
2350 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/LIKE/i]}, Parse::RecDescent::_tracefirst($text),
2351             q{comp_op},
2352             $tracelevel)
2353             if defined $::RD_TRACE;
2354 0           $lastsep = "";
2355 0           $expectation->is(q{})->at($text);
2356            
2357              
2358 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:LIKE)//i)
  0 0          
2359             {
2360            
2361 0           $expectation->failed();
2362 0 0         Parse::RecDescent::_trace(q{<>},
2363             Parse::RecDescent::_tracefirst($text))
2364             if defined $::RD_TRACE;
2365              
2366 0           last;
2367             }
2368 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2369             . $& . q{])},
2370             Parse::RecDescent::_tracefirst($text))
2371             if defined $::RD_TRACE;
2372 0           push @item, $item{__PATTERN1__}=$&;
2373            
2374              
2375              
2376 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/LIKE/i]<<},
2377             Parse::RecDescent::_tracefirst($text),
2378             q{comp_op},
2379             $tracelevel)
2380             if defined $::RD_TRACE;
2381 0           $_matched = 1;
2382 0           last;
2383             }
2384              
2385              
2386 0   0       while (!$_matched && !$commit)
2387             {
2388            
2389 0 0         Parse::RecDescent::_trace(q{Trying production: [/NOT\\s+LIKE/i]},
2390             Parse::RecDescent::_tracefirst($_[1]),
2391             q{comp_op},
2392             $tracelevel)
2393             if defined $::RD_TRACE;
2394 0           my $thisprod = $thisrule->{"prods"}[4];
2395 0           $text = $_[1];
2396 0           my $_savetext;
2397 0           @item = (q{comp_op});
2398 0           %item = (__RULE__ => q{comp_op});
2399 0           my $repcount = 0;
2400              
2401              
2402 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/NOT\\s+LIKE/i]}, Parse::RecDescent::_tracefirst($text),
2403             q{comp_op},
2404             $tracelevel)
2405             if defined $::RD_TRACE;
2406 0           $lastsep = "";
2407 0           $expectation->is(q{})->at($text);
2408            
2409              
2410 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:NOT\s+LIKE)//i)
  0 0          
2411             {
2412            
2413 0           $expectation->failed();
2414 0 0         Parse::RecDescent::_trace(q{<>},
2415             Parse::RecDescent::_tracefirst($text))
2416             if defined $::RD_TRACE;
2417              
2418 0           last;
2419             }
2420 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2421             . $& . q{])},
2422             Parse::RecDescent::_tracefirst($text))
2423             if defined $::RD_TRACE;
2424 0           push @item, $item{__PATTERN1__}=$&;
2425            
2426              
2427              
2428 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/NOT\\s+LIKE/i]<<},
2429             Parse::RecDescent::_tracefirst($text),
2430             q{comp_op},
2431             $tracelevel)
2432             if defined $::RD_TRACE;
2433 0           $_matched = 1;
2434 0           last;
2435             }
2436              
2437              
2438 0   0       while (!$_matched && !$commit)
2439             {
2440            
2441 0 0         Parse::RecDescent::_trace(q{Trying production: ['<']},
2442             Parse::RecDescent::_tracefirst($_[1]),
2443             q{comp_op},
2444             $tracelevel)
2445             if defined $::RD_TRACE;
2446 0           my $thisprod = $thisrule->{"prods"}[5];
2447 0           $text = $_[1];
2448 0           my $_savetext;
2449 0           @item = (q{comp_op});
2450 0           %item = (__RULE__ => q{comp_op});
2451 0           my $repcount = 0;
2452              
2453              
2454 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['<']},
2455             Parse::RecDescent::_tracefirst($text),
2456             q{comp_op},
2457             $tracelevel)
2458             if defined $::RD_TRACE;
2459 0           $lastsep = "";
2460 0           $expectation->is(q{})->at($text);
2461            
2462              
2463 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\
  0 0          
2464             {
2465            
2466 0           $expectation->failed();
2467 0 0         Parse::RecDescent::_trace(qq{<>},
2468             Parse::RecDescent::_tracefirst($text))
2469             if defined $::RD_TRACE;
2470 0           last;
2471             }
2472 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2473             . $& . q{])},
2474             Parse::RecDescent::_tracefirst($text))
2475             if defined $::RD_TRACE;
2476 0           push @item, $item{__STRING1__}=$&;
2477            
2478              
2479              
2480 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['<']<<},
2481             Parse::RecDescent::_tracefirst($text),
2482             q{comp_op},
2483             $tracelevel)
2484             if defined $::RD_TRACE;
2485 0           $_matched = 1;
2486 0           last;
2487             }
2488              
2489              
2490 0   0       while (!$_matched && !$commit)
2491             {
2492            
2493 0 0         Parse::RecDescent::_trace(q{Trying production: ['>']},
2494             Parse::RecDescent::_tracefirst($_[1]),
2495             q{comp_op},
2496             $tracelevel)
2497             if defined $::RD_TRACE;
2498 0           my $thisprod = $thisrule->{"prods"}[6];
2499 0           $text = $_[1];
2500 0           my $_savetext;
2501 0           @item = (q{comp_op});
2502 0           %item = (__RULE__ => q{comp_op});
2503 0           my $repcount = 0;
2504              
2505              
2506 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['>']},
2507             Parse::RecDescent::_tracefirst($text),
2508             q{comp_op},
2509             $tracelevel)
2510             if defined $::RD_TRACE;
2511 0           $lastsep = "";
2512 0           $expectation->is(q{})->at($text);
2513            
2514              
2515 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\>//)
  0 0          
2516             {
2517            
2518 0           $expectation->failed();
2519 0 0         Parse::RecDescent::_trace(qq{<>},
2520             Parse::RecDescent::_tracefirst($text))
2521             if defined $::RD_TRACE;
2522 0           last;
2523             }
2524 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2525             . $& . q{])},
2526             Parse::RecDescent::_tracefirst($text))
2527             if defined $::RD_TRACE;
2528 0           push @item, $item{__STRING1__}=$&;
2529            
2530              
2531              
2532 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['>']<<},
2533             Parse::RecDescent::_tracefirst($text),
2534             q{comp_op},
2535             $tracelevel)
2536             if defined $::RD_TRACE;
2537 0           $_matched = 1;
2538 0           last;
2539             }
2540              
2541              
2542 0   0       while (!$_matched && !$commit)
2543             {
2544            
2545 0 0         Parse::RecDescent::_trace(q{Trying production: ['=']},
2546             Parse::RecDescent::_tracefirst($_[1]),
2547             q{comp_op},
2548             $tracelevel)
2549             if defined $::RD_TRACE;
2550 0           my $thisprod = $thisrule->{"prods"}[7];
2551 0           $text = $_[1];
2552 0           my $_savetext;
2553 0           @item = (q{comp_op});
2554 0           %item = (__RULE__ => q{comp_op});
2555 0           my $repcount = 0;
2556              
2557              
2558 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['=']},
2559             Parse::RecDescent::_tracefirst($text),
2560             q{comp_op},
2561             $tracelevel)
2562             if defined $::RD_TRACE;
2563 0           $lastsep = "";
2564 0           $expectation->is(q{})->at($text);
2565            
2566              
2567 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\=//)
  0 0          
2568             {
2569            
2570 0           $expectation->failed();
2571 0 0         Parse::RecDescent::_trace(qq{<>},
2572             Parse::RecDescent::_tracefirst($text))
2573             if defined $::RD_TRACE;
2574 0           last;
2575             }
2576 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2577             . $& . q{])},
2578             Parse::RecDescent::_tracefirst($text))
2579             if defined $::RD_TRACE;
2580 0           push @item, $item{__STRING1__}=$&;
2581            
2582              
2583              
2584 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['=']<<},
2585             Parse::RecDescent::_tracefirst($text),
2586             q{comp_op},
2587             $tracelevel)
2588             if defined $::RD_TRACE;
2589 0           $_matched = 1;
2590 0           last;
2591             }
2592              
2593              
2594 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
2595             {
2596            
2597              
2598 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
2599 0 0         Parse::RecDescent::_trace(q{<>},
2600             Parse::RecDescent::_tracefirst($_[1]),
2601             q{comp_op},
2602             $tracelevel)
2603             if defined $::RD_TRACE;
2604 0           return undef;
2605             }
2606 0 0 0       if (!defined($return) && defined($score))
2607             {
2608 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
2609             q{comp_op},
2610             $tracelevel)
2611             if defined $::RD_TRACE;
2612 0           $return = $score_return;
2613             }
2614 0           splice @{$thisparser->{errors}}, $err_at;
  0            
2615 0 0         $return = $item[$#item] unless defined $return;
2616 0 0         if (defined $::RD_TRACE)
2617             {
2618 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
2619             $return . q{])}, "",
2620             q{comp_op},
2621             $tracelevel);
2622 0           Parse::RecDescent::_trace(q{(consumed: [} .
2623             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
2624             Parse::RecDescent::_tracefirst($text),
2625             , q{comp_op},
2626             $tracelevel)
2627             }
2628 0           $_[1] = $text;
2629 0           return $return;
2630             }
2631              
2632             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
2633             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::farg
2634             {
2635 0     0     my $thisparser = $_[0];
2636 1     1   7 use vars q{$tracelevel};
  1         2  
  1         217  
2637 0   0       local $tracelevel = ($tracelevel||0)+1;
2638 0           $ERRORS = 0;
2639 0           my $thisrule = $thisparser->{"rules"}{"farg"};
2640            
2641 0 0         Parse::RecDescent::_trace(q{Trying rule: [farg]},
2642             Parse::RecDescent::_tracefirst($_[1]),
2643             q{farg},
2644             $tracelevel)
2645             if defined $::RD_TRACE;
2646              
2647            
2648 0           my $err_at = @{$thisparser->{errors}};
  0            
2649              
2650 0           my $score;
2651             my $score_return;
2652 0           my $_tok;
2653 0           my $return = undef;
2654 0           my $_matched=0;
2655 0           my $commit=0;
2656 0           my @item = ();
2657 0           my %item = ();
2658 0   0       my $repeating = defined($_[2]) && $_[2];
2659 0   0       my $_noactions = defined($_[3]) && $_[3];
2660 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
2661 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
2662 0           my $text;
2663 0           my $lastsep="";
2664 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
2665 0           $expectation->at($_[1]);
2666            
2667 0           my $thisline;
2668 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
2669              
2670            
2671              
2672 0   0       while (!$_matched && !$commit)
2673             {
2674            
2675 0 0         Parse::RecDescent::_trace(q{Trying production: [arg_name '=>' arg_val]},
2676             Parse::RecDescent::_tracefirst($_[1]),
2677             q{farg},
2678             $tracelevel)
2679             if defined $::RD_TRACE;
2680 0           my $thisprod = $thisrule->{"prods"}[0];
2681 0           $text = $_[1];
2682 0           my $_savetext;
2683 0           @item = (q{farg});
2684 0           %item = (__RULE__ => q{farg});
2685 0           my $repcount = 0;
2686              
2687              
2688 0 0         Parse::RecDescent::_trace(q{Trying subrule: [arg_name]},
2689             Parse::RecDescent::_tracefirst($text),
2690             q{farg},
2691             $tracelevel)
2692             if defined $::RD_TRACE;
2693 1     1   4 if (1) { no strict qw{refs};
  1         4  
  1         217  
  0            
2694 0           $expectation->is(q{})->at($text);
2695 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_name($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2696             {
2697            
2698 0 0         Parse::RecDescent::_trace(q{<>},
2699             Parse::RecDescent::_tracefirst($text),
2700             q{farg},
2701             $tracelevel)
2702             if defined $::RD_TRACE;
2703 0           $expectation->failed();
2704 0           last;
2705             }
2706 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [arg_name]<< (return value: [}
2707             . $_tok . q{]},
2708            
2709             Parse::RecDescent::_tracefirst($text),
2710             q{farg},
2711             $tracelevel)
2712             if defined $::RD_TRACE;
2713 0           $item{q{arg_name}} = $_tok;
2714 0           push @item, $_tok;
2715            
2716             }
2717              
2718 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['=>']},
2719             Parse::RecDescent::_tracefirst($text),
2720             q{farg},
2721             $tracelevel)
2722             if defined $::RD_TRACE;
2723 0           $lastsep = "";
2724 0           $expectation->is(q{'=>'})->at($text);
2725            
2726              
2727 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\=\>//)
  0 0          
2728             {
2729            
2730 0           $expectation->failed();
2731 0 0         Parse::RecDescent::_trace(qq{<>},
2732             Parse::RecDescent::_tracefirst($text))
2733             if defined $::RD_TRACE;
2734 0           last;
2735             }
2736 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2737             . $& . q{])},
2738             Parse::RecDescent::_tracefirst($text))
2739             if defined $::RD_TRACE;
2740 0           push @item, $item{__STRING1__}=$&;
2741            
2742              
2743 0 0         Parse::RecDescent::_trace(q{Trying subrule: [arg_val]},
2744             Parse::RecDescent::_tracefirst($text),
2745             q{farg},
2746             $tracelevel)
2747             if defined $::RD_TRACE;
2748 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         237  
  0            
2749 0           $expectation->is(q{arg_val})->at($text);
2750 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_val($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2751             {
2752            
2753 0 0         Parse::RecDescent::_trace(q{<>},
2754             Parse::RecDescent::_tracefirst($text),
2755             q{farg},
2756             $tracelevel)
2757             if defined $::RD_TRACE;
2758 0           $expectation->failed();
2759 0           last;
2760             }
2761 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [arg_val]<< (return value: [}
2762             . $_tok . q{]},
2763            
2764             Parse::RecDescent::_tracefirst($text),
2765             q{farg},
2766             $tracelevel)
2767             if defined $::RD_TRACE;
2768 0           $item{q{arg_val}} = $_tok;
2769 0           push @item, $_tok;
2770            
2771             }
2772              
2773 0 0         Parse::RecDescent::_trace(q{Trying action},
2774             Parse::RecDescent::_tracefirst($text),
2775             q{farg},
2776             $tracelevel)
2777             if defined $::RD_TRACE;
2778            
2779              
2780 0 0         $_tok = ($_noactions) ? 0 : do { [ $item[1] => $item[3] ] };
  0            
2781 0 0         unless (defined $_tok)
2782             {
2783 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
2784             if defined $::RD_TRACE;
2785 0           last;
2786             }
2787 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
2788             . $_tok . q{])},
2789             Parse::RecDescent::_tracefirst($text))
2790             if defined $::RD_TRACE;
2791 0           push @item, $_tok;
2792 0           $item{__ACTION1__}=$_tok;
2793            
2794              
2795              
2796 0 0         Parse::RecDescent::_trace(q{>>Matched production: [arg_name '=>' arg_val]<<},
2797             Parse::RecDescent::_tracefirst($text),
2798             q{farg},
2799             $tracelevel)
2800             if defined $::RD_TRACE;
2801 0           $_matched = 1;
2802 0           last;
2803             }
2804              
2805              
2806 0   0       while (!$_matched && !$commit)
2807             {
2808            
2809 0 0         Parse::RecDescent::_trace(q{Trying production: [arg_name '=>' '[' ']']},
2810             Parse::RecDescent::_tracefirst($_[1]),
2811             q{farg},
2812             $tracelevel)
2813             if defined $::RD_TRACE;
2814 0           my $thisprod = $thisrule->{"prods"}[1];
2815 0           $text = $_[1];
2816 0           my $_savetext;
2817 0           @item = (q{farg});
2818 0           %item = (__RULE__ => q{farg});
2819 0           my $repcount = 0;
2820              
2821              
2822 0 0         Parse::RecDescent::_trace(q{Trying subrule: [arg_name]},
2823             Parse::RecDescent::_tracefirst($text),
2824             q{farg},
2825             $tracelevel)
2826             if defined $::RD_TRACE;
2827 1     1   4 if (1) { no strict qw{refs};
  1         2  
  1         341  
  0            
2828 0           $expectation->is(q{})->at($text);
2829 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_name($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2830             {
2831            
2832 0 0         Parse::RecDescent::_trace(q{<>},
2833             Parse::RecDescent::_tracefirst($text),
2834             q{farg},
2835             $tracelevel)
2836             if defined $::RD_TRACE;
2837 0           $expectation->failed();
2838 0           last;
2839             }
2840 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [arg_name]<< (return value: [}
2841             . $_tok . q{]},
2842            
2843             Parse::RecDescent::_tracefirst($text),
2844             q{farg},
2845             $tracelevel)
2846             if defined $::RD_TRACE;
2847 0           $item{q{arg_name}} = $_tok;
2848 0           push @item, $_tok;
2849            
2850             }
2851              
2852 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['=>']},
2853             Parse::RecDescent::_tracefirst($text),
2854             q{farg},
2855             $tracelevel)
2856             if defined $::RD_TRACE;
2857 0           $lastsep = "";
2858 0           $expectation->is(q{'=>'})->at($text);
2859            
2860              
2861 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\=\>//)
  0 0          
2862             {
2863            
2864 0           $expectation->failed();
2865 0 0         Parse::RecDescent::_trace(qq{<>},
2866             Parse::RecDescent::_tracefirst($text))
2867             if defined $::RD_TRACE;
2868 0           last;
2869             }
2870 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2871             . $& . q{])},
2872             Parse::RecDescent::_tracefirst($text))
2873             if defined $::RD_TRACE;
2874 0           push @item, $item{__STRING1__}=$&;
2875            
2876              
2877 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['[']},
2878             Parse::RecDescent::_tracefirst($text),
2879             q{farg},
2880             $tracelevel)
2881             if defined $::RD_TRACE;
2882 0           $lastsep = "";
2883 0           $expectation->is(q{'['})->at($text);
2884            
2885              
2886 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//)
  0 0          
2887             {
2888            
2889 0           $expectation->failed();
2890 0 0         Parse::RecDescent::_trace(qq{<>},
2891             Parse::RecDescent::_tracefirst($text))
2892             if defined $::RD_TRACE;
2893 0           last;
2894             }
2895 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2896             . $& . q{])},
2897             Parse::RecDescent::_tracefirst($text))
2898             if defined $::RD_TRACE;
2899 0           push @item, $item{__STRING2__}=$&;
2900            
2901              
2902 0 0         Parse::RecDescent::_trace(q{Trying operator: []},
2903             Parse::RecDescent::_tracefirst($text),
2904             q{farg},
2905             $tracelevel)
2906             if defined $::RD_TRACE;
2907 0           $expectation->is(q{})->at($text);
2908              
2909 0           $_tok = undef;
2910 0           OPLOOP: while (1)
2911             {
2912 0           $repcount = 0;
2913 0           my @item;
2914            
2915             # MATCH LEFTARG
2916            
2917 0 0         Parse::RecDescent::_trace(q{Trying subrule: [arg_val]},
2918             Parse::RecDescent::_tracefirst($text),
2919             q{farg},
2920             $tracelevel)
2921             if defined $::RD_TRACE;
2922 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         228  
  0            
2923 0           $expectation->is(q{arg_val})->at($text);
2924 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_val($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2925             {
2926            
2927 0 0         Parse::RecDescent::_trace(q{<>},
2928             Parse::RecDescent::_tracefirst($text),
2929             q{farg},
2930             $tracelevel)
2931             if defined $::RD_TRACE;
2932 0           $expectation->failed();
2933 0           last;
2934             }
2935 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [arg_val]<< (return value: [}
2936             . $_tok . q{]},
2937            
2938             Parse::RecDescent::_tracefirst($text),
2939             q{farg},
2940             $tracelevel)
2941             if defined $::RD_TRACE;
2942 0           $item{q{arg_val}} = $_tok;
2943 0           push @item, $_tok;
2944            
2945             }
2946              
2947              
2948 0           $repcount++;
2949              
2950 0           my $savetext = $text;
2951 0           my $backtrack;
2952              
2953             # MATCH (OP RIGHTARG)(s)
2954 0           while ($repcount < 100000000)
2955             {
2956 0           $backtrack = 0;
2957            
2958 0 0         Parse::RecDescent::_trace(q{Trying terminal: [',']},
2959             Parse::RecDescent::_tracefirst($text),
2960             q{farg},
2961             $tracelevel)
2962             if defined $::RD_TRACE;
2963 0           $lastsep = "";
2964 0           $expectation->is(q{','})->at($text);
2965            
2966              
2967 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\,//)
  0 0          
2968             {
2969            
2970 0           $expectation->failed();
2971 0 0         Parse::RecDescent::_trace(qq{<>},
2972             Parse::RecDescent::_tracefirst($text))
2973             if defined $::RD_TRACE;
2974 0           last;
2975             }
2976 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
2977             . $& . q{])},
2978             Parse::RecDescent::_tracefirst($text))
2979             if defined $::RD_TRACE;
2980 0           push @item, $item{__STRING3__}=$&;
2981            
2982              
2983 0           pop @item;
2984            
2985            
2986 0 0         Parse::RecDescent::_trace(q{Trying subrule: [arg_val]},
2987             Parse::RecDescent::_tracefirst($text),
2988             q{farg},
2989             $tracelevel)
2990             if defined $::RD_TRACE;
2991 1     1   4 if (1) { no strict qw{refs};
  1         2  
  1         618  
  0            
2992 0           $expectation->is(q{arg_val})->at($text);
2993 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_val($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
2994             {
2995            
2996 0 0         Parse::RecDescent::_trace(q{<>},
2997             Parse::RecDescent::_tracefirst($text),
2998             q{farg},
2999             $tracelevel)
3000             if defined $::RD_TRACE;
3001 0           $expectation->failed();
3002 0           last;
3003             }
3004 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [arg_val]<< (return value: [}
3005             . $_tok . q{]},
3006            
3007             Parse::RecDescent::_tracefirst($text),
3008             q{farg},
3009             $tracelevel)
3010             if defined $::RD_TRACE;
3011 0           $item{q{arg_val}} = $_tok;
3012 0           push @item, $_tok;
3013            
3014             }
3015              
3016 0           $savetext = $text;
3017 0           $repcount++;
3018             }
3019 0           $text = $savetext;
3020 0 0         pop @item if $backtrack;
3021              
3022 0 0         unless (@item) { undef $_tok; last }
  0            
  0            
3023 0           $_tok = [ @item ];
3024 0           last;
3025             }
3026              
3027 0 0         unless ($repcount>=1)
3028             {
3029 0 0         Parse::RecDescent::_trace(q{<]>>},
3030             Parse::RecDescent::_tracefirst($text),
3031             q{farg},
3032             $tracelevel)
3033             if defined $::RD_TRACE;
3034 0           $expectation->failed();
3035 0           last;
3036             }
3037 0 0         Parse::RecDescent::_trace(q{>>Matched operator: []<< (return value: [}
3038 0 0         . qq{@{$_tok||[]}} . q{]},
3039             Parse::RecDescent::_tracefirst($text),
3040             q{farg},
3041             $tracelevel)
3042             if defined $::RD_TRACE;
3043              
3044 0   0       push @item, $item{__DIRECTIVE1__}=$_tok||[];
3045              
3046              
3047 0 0         Parse::RecDescent::_trace(q{Trying terminal: [']']},
3048             Parse::RecDescent::_tracefirst($text),
3049             q{farg},
3050             $tracelevel)
3051             if defined $::RD_TRACE;
3052 0           $lastsep = "";
3053 0           $expectation->is(q{']'})->at($text);
3054            
3055              
3056 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//)
  0 0          
3057             {
3058            
3059 0           $expectation->failed();
3060 0 0         Parse::RecDescent::_trace(qq{<>},
3061             Parse::RecDescent::_tracefirst($text))
3062             if defined $::RD_TRACE;
3063 0           last;
3064             }
3065 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3066             . $& . q{])},
3067             Parse::RecDescent::_tracefirst($text))
3068             if defined $::RD_TRACE;
3069 0           push @item, $item{__STRING4__}=$&;
3070            
3071              
3072 0 0         Parse::RecDescent::_trace(q{Trying action},
3073             Parse::RecDescent::_tracefirst($text),
3074             q{farg},
3075             $tracelevel)
3076             if defined $::RD_TRACE;
3077            
3078              
3079 0 0         $_tok = ($_noactions) ? 0 : do { [ $item[1] => [ @{$item[4]} ] ] };
  0            
  0            
3080 0 0         unless (defined $_tok)
3081             {
3082 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3083             if defined $::RD_TRACE;
3084 0           last;
3085             }
3086 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3087             . $_tok . q{])},
3088             Parse::RecDescent::_tracefirst($text))
3089             if defined $::RD_TRACE;
3090 0           push @item, $_tok;
3091 0           $item{__ACTION1__}=$_tok;
3092            
3093              
3094              
3095 0 0         Parse::RecDescent::_trace(q{>>Matched production: [arg_name '=>' '[' ']']<<},
3096             Parse::RecDescent::_tracefirst($text),
3097             q{farg},
3098             $tracelevel)
3099             if defined $::RD_TRACE;
3100 0           $_matched = 1;
3101 0           last;
3102             }
3103              
3104              
3105 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
3106             {
3107            
3108              
3109 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
3110 0 0         Parse::RecDescent::_trace(q{<>},
3111             Parse::RecDescent::_tracefirst($_[1]),
3112             q{farg},
3113             $tracelevel)
3114             if defined $::RD_TRACE;
3115 0           return undef;
3116             }
3117 0 0 0       if (!defined($return) && defined($score))
3118             {
3119 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3120             q{farg},
3121             $tracelevel)
3122             if defined $::RD_TRACE;
3123 0           $return = $score_return;
3124             }
3125 0           splice @{$thisparser->{errors}}, $err_at;
  0            
3126 0 0         $return = $item[$#item] unless defined $return;
3127 0 0         if (defined $::RD_TRACE)
3128             {
3129 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3130             $return . q{])}, "",
3131             q{farg},
3132             $tracelevel);
3133 0           Parse::RecDescent::_trace(q{(consumed: [} .
3134             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3135             Parse::RecDescent::_tracefirst($text),
3136             , q{farg},
3137             $tracelevel)
3138             }
3139 0           $_[1] = $text;
3140 0           return $return;
3141             }
3142              
3143             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
3144             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::numval
3145             {
3146 0     0     my $thisparser = $_[0];
3147 1     1   5 use vars q{$tracelevel};
  1         1  
  1         547  
3148 0   0       local $tracelevel = ($tracelevel||0)+1;
3149 0           $ERRORS = 0;
3150 0           my $thisrule = $thisparser->{"rules"}{"numval"};
3151            
3152 0 0         Parse::RecDescent::_trace(q{Trying rule: [numval]},
3153             Parse::RecDescent::_tracefirst($_[1]),
3154             q{numval},
3155             $tracelevel)
3156             if defined $::RD_TRACE;
3157              
3158            
3159 0           my $err_at = @{$thisparser->{errors}};
  0            
3160              
3161 0           my $score;
3162             my $score_return;
3163 0           my $_tok;
3164 0           my $return = undef;
3165 0           my $_matched=0;
3166 0           my $commit=0;
3167 0           my @item = ();
3168 0           my %item = ();
3169 0   0       my $repeating = defined($_[2]) && $_[2];
3170 0   0       my $_noactions = defined($_[3]) && $_[3];
3171 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
3172 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3173 0           my $text;
3174 0           my $lastsep="";
3175 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
3176 0           $expectation->at($_[1]);
3177            
3178 0           my $thisline;
3179 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3180              
3181            
3182              
3183 0   0       while (!$_matched && !$commit)
3184             {
3185            
3186 0 0         Parse::RecDescent::_trace(q{Trying production: [/[\\-]?\\d+/]},
3187             Parse::RecDescent::_tracefirst($_[1]),
3188             q{numval},
3189             $tracelevel)
3190             if defined $::RD_TRACE;
3191 0           my $thisprod = $thisrule->{"prods"}[0];
3192 0           $text = $_[1];
3193 0           my $_savetext;
3194 0           @item = (q{numval});
3195 0           %item = (__RULE__ => q{numval});
3196 0           my $repcount = 0;
3197              
3198              
3199 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[\\-]?\\d+/]}, Parse::RecDescent::_tracefirst($text),
3200             q{numval},
3201             $tracelevel)
3202             if defined $::RD_TRACE;
3203 0           $lastsep = "";
3204 0           $expectation->is(q{})->at($text);
3205            
3206              
3207 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\-]?\d+)//)
  0 0          
3208             {
3209            
3210 0           $expectation->failed();
3211 0 0         Parse::RecDescent::_trace(q{<>},
3212             Parse::RecDescent::_tracefirst($text))
3213             if defined $::RD_TRACE;
3214              
3215 0           last;
3216             }
3217 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3218             . $& . q{])},
3219             Parse::RecDescent::_tracefirst($text))
3220             if defined $::RD_TRACE;
3221 0           push @item, $item{__PATTERN1__}=$&;
3222            
3223              
3224 0 0         Parse::RecDescent::_trace(q{Trying action},
3225             Parse::RecDescent::_tracefirst($text),
3226             q{numval},
3227             $tracelevel)
3228             if defined $::RD_TRACE;
3229            
3230              
3231 0 0         $_tok = ($_noactions) ? 0 : do { $item[1] };
  0            
3232 0 0         unless (defined $_tok)
3233             {
3234 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3235             if defined $::RD_TRACE;
3236 0           last;
3237             }
3238 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3239             . $_tok . q{])},
3240             Parse::RecDescent::_tracefirst($text))
3241             if defined $::RD_TRACE;
3242 0           push @item, $_tok;
3243 0           $item{__ACTION1__}=$_tok;
3244            
3245              
3246              
3247 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/[\\-]?\\d+/]<<},
3248             Parse::RecDescent::_tracefirst($text),
3249             q{numval},
3250             $tracelevel)
3251             if defined $::RD_TRACE;
3252 0           $_matched = 1;
3253 0           last;
3254             }
3255              
3256              
3257 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
3258             {
3259            
3260              
3261 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
3262 0 0         Parse::RecDescent::_trace(q{<>},
3263             Parse::RecDescent::_tracefirst($_[1]),
3264             q{numval},
3265             $tracelevel)
3266             if defined $::RD_TRACE;
3267 0           return undef;
3268             }
3269 0 0 0       if (!defined($return) && defined($score))
3270             {
3271 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3272             q{numval},
3273             $tracelevel)
3274             if defined $::RD_TRACE;
3275 0           $return = $score_return;
3276             }
3277 0           splice @{$thisparser->{errors}}, $err_at;
  0            
3278 0 0         $return = $item[$#item] unless defined $return;
3279 0 0         if (defined $::RD_TRACE)
3280             {
3281 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3282             $return . q{])}, "",
3283             q{numval},
3284             $tracelevel);
3285 0           Parse::RecDescent::_trace(q{(consumed: [} .
3286             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3287             Parse::RecDescent::_tracefirst($text),
3288             , q{numval},
3289             $tracelevel)
3290             }
3291 0           $_[1] = $text;
3292 0           return $return;
3293             }
3294              
3295             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
3296             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::identifier
3297             {
3298 0     0     my $thisparser = $_[0];
3299 1     1   5 use vars q{$tracelevel};
  1         1  
  1         2096  
3300 0   0       local $tracelevel = ($tracelevel||0)+1;
3301 0           $ERRORS = 0;
3302 0           my $thisrule = $thisparser->{"rules"}{"identifier"};
3303            
3304 0 0         Parse::RecDescent::_trace(q{Trying rule: [identifier]},
3305             Parse::RecDescent::_tracefirst($_[1]),
3306             q{identifier},
3307             $tracelevel)
3308             if defined $::RD_TRACE;
3309              
3310            
3311 0           my $err_at = @{$thisparser->{errors}};
  0            
3312              
3313 0           my $score;
3314             my $score_return;
3315 0           my $_tok;
3316 0           my $return = undef;
3317 0           my $_matched=0;
3318 0           my $commit=0;
3319 0           my @item = ();
3320 0           my %item = ();
3321 0   0       my $repeating = defined($_[2]) && $_[2];
3322 0   0       my $_noactions = defined($_[3]) && $_[3];
3323 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
3324 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3325 0           my $text;
3326 0           my $lastsep="";
3327 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
3328 0           $expectation->at($_[1]);
3329            
3330 0           my $thisline;
3331 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3332              
3333            
3334              
3335 0   0       while (!$_matched && !$commit)
3336             {
3337            
3338 0 0         Parse::RecDescent::_trace(q{Trying production: ['[' /[^\\]]*/ ']']},
3339             Parse::RecDescent::_tracefirst($_[1]),
3340             q{identifier},
3341             $tracelevel)
3342             if defined $::RD_TRACE;
3343 0           my $thisprod = $thisrule->{"prods"}[0];
3344 0           $text = $_[1];
3345 0           my $_savetext;
3346 0           @item = (q{identifier});
3347 0           %item = (__RULE__ => q{identifier});
3348 0           my $repcount = 0;
3349              
3350              
3351 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['[']},
3352             Parse::RecDescent::_tracefirst($text),
3353             q{identifier},
3354             $tracelevel)
3355             if defined $::RD_TRACE;
3356 0           $lastsep = "";
3357 0           $expectation->is(q{})->at($text);
3358            
3359              
3360 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//)
  0 0          
3361             {
3362            
3363 0           $expectation->failed();
3364 0 0         Parse::RecDescent::_trace(qq{<>},
3365             Parse::RecDescent::_tracefirst($text))
3366             if defined $::RD_TRACE;
3367 0           last;
3368             }
3369 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3370             . $& . q{])},
3371             Parse::RecDescent::_tracefirst($text))
3372             if defined $::RD_TRACE;
3373 0           push @item, $item{__STRING1__}=$&;
3374            
3375              
3376 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[^\\]]*/]}, Parse::RecDescent::_tracefirst($text),
3377             q{identifier},
3378             $tracelevel)
3379             if defined $::RD_TRACE;
3380 0           $lastsep = "";
3381 0           $expectation->is(q{/[^\\]]*/})->at($text);
3382            
3383              
3384 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[^\]]*)//)
  0 0          
3385             {
3386            
3387 0           $expectation->failed();
3388 0 0         Parse::RecDescent::_trace(q{<>},
3389             Parse::RecDescent::_tracefirst($text))
3390             if defined $::RD_TRACE;
3391              
3392 0           last;
3393             }
3394 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3395             . $& . q{])},
3396             Parse::RecDescent::_tracefirst($text))
3397             if defined $::RD_TRACE;
3398 0           push @item, $item{__PATTERN1__}=$&;
3399            
3400              
3401 0 0         Parse::RecDescent::_trace(q{Trying terminal: [']']},
3402             Parse::RecDescent::_tracefirst($text),
3403             q{identifier},
3404             $tracelevel)
3405             if defined $::RD_TRACE;
3406 0           $lastsep = "";
3407 0           $expectation->is(q{']'})->at($text);
3408            
3409              
3410 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//)
  0 0          
3411             {
3412            
3413 0           $expectation->failed();
3414 0 0         Parse::RecDescent::_trace(qq{<>},
3415             Parse::RecDescent::_tracefirst($text))
3416             if defined $::RD_TRACE;
3417 0           last;
3418             }
3419 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3420             . $& . q{])},
3421             Parse::RecDescent::_tracefirst($text))
3422             if defined $::RD_TRACE;
3423 0           push @item, $item{__STRING2__}=$&;
3424            
3425              
3426 0 0         Parse::RecDescent::_trace(q{Trying action},
3427             Parse::RecDescent::_tracefirst($text),
3428             q{identifier},
3429             $tracelevel)
3430             if defined $::RD_TRACE;
3431            
3432              
3433 0 0         $_tok = ($_noactions) ? 0 : do { [ 'COLM', $item[2] ] };
  0            
3434 0 0         unless (defined $_tok)
3435             {
3436 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3437             if defined $::RD_TRACE;
3438 0           last;
3439             }
3440 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3441             . $_tok . q{])},
3442             Parse::RecDescent::_tracefirst($text))
3443             if defined $::RD_TRACE;
3444 0           push @item, $_tok;
3445 0           $item{__ACTION1__}=$_tok;
3446            
3447              
3448              
3449 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['[' /[^\\]]*/ ']']<<},
3450             Parse::RecDescent::_tracefirst($text),
3451             q{identifier},
3452             $tracelevel)
3453             if defined $::RD_TRACE;
3454 0           $_matched = 1;
3455 0           last;
3456             }
3457              
3458              
3459 0   0       while (!$_matched && !$commit)
3460             {
3461            
3462 0 0         Parse::RecDescent::_trace(q{Trying production: ['\\'' /[^\\']*/ '\\'']},
3463             Parse::RecDescent::_tracefirst($_[1]),
3464             q{identifier},
3465             $tracelevel)
3466             if defined $::RD_TRACE;
3467 0           my $thisprod = $thisrule->{"prods"}[1];
3468 0           $text = $_[1];
3469 0           my $_savetext;
3470 0           @item = (q{identifier});
3471 0           %item = (__RULE__ => q{identifier});
3472 0           my $repcount = 0;
3473              
3474              
3475 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
3476             Parse::RecDescent::_tracefirst($text),
3477             q{identifier},
3478             $tracelevel)
3479             if defined $::RD_TRACE;
3480 0           $lastsep = "";
3481 0           $expectation->is(q{})->at($text);
3482            
3483              
3484 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
3485             substr($text,0,length($_tok)) eq $_tok and
3486 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
3487             )
3488             {
3489            
3490 0           $expectation->failed();
3491 0 0         Parse::RecDescent::_trace(q{<>},
3492             Parse::RecDescent::_tracefirst($text))
3493             if defined $::RD_TRACE;
3494 0           last;
3495             }
3496 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3497             . $_tok . q{])},
3498             Parse::RecDescent::_tracefirst($text))
3499             if defined $::RD_TRACE;
3500 0           push @item, $item{__STRING1__}=$_tok;
3501            
3502              
3503 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[^\\']*/]}, Parse::RecDescent::_tracefirst($text),
3504             q{identifier},
3505             $tracelevel)
3506             if defined $::RD_TRACE;
3507 0           $lastsep = "";
3508 0           $expectation->is(q{/[^\\']*/})->at($text);
3509            
3510              
3511 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[^\']*)//)
  0 0          
3512             {
3513            
3514 0           $expectation->failed();
3515 0 0         Parse::RecDescent::_trace(q{<>},
3516             Parse::RecDescent::_tracefirst($text))
3517             if defined $::RD_TRACE;
3518              
3519 0           last;
3520             }
3521 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3522             . $& . q{])},
3523             Parse::RecDescent::_tracefirst($text))
3524             if defined $::RD_TRACE;
3525 0           push @item, $item{__PATTERN1__}=$&;
3526            
3527              
3528 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
3529             Parse::RecDescent::_tracefirst($text),
3530             q{identifier},
3531             $tracelevel)
3532             if defined $::RD_TRACE;
3533 0           $lastsep = "";
3534 0           $expectation->is(q{'\\''})->at($text);
3535            
3536              
3537 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
3538             substr($text,0,length($_tok)) eq $_tok and
3539 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
3540             )
3541             {
3542            
3543 0           $expectation->failed();
3544 0 0         Parse::RecDescent::_trace(q{<>},
3545             Parse::RecDescent::_tracefirst($text))
3546             if defined $::RD_TRACE;
3547 0           last;
3548             }
3549 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3550             . $_tok . q{])},
3551             Parse::RecDescent::_tracefirst($text))
3552             if defined $::RD_TRACE;
3553 0           push @item, $item{__STRING2__}=$_tok;
3554            
3555              
3556 0 0         Parse::RecDescent::_trace(q{Trying action},
3557             Parse::RecDescent::_tracefirst($text),
3558             q{identifier},
3559             $tracelevel)
3560             if defined $::RD_TRACE;
3561            
3562              
3563 0 0         $_tok = ($_noactions) ? 0 : do { ['VAL', $item[2] ] };
  0            
3564 0 0         unless (defined $_tok)
3565             {
3566 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3567             if defined $::RD_TRACE;
3568 0           last;
3569             }
3570 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3571             . $_tok . q{])},
3572             Parse::RecDescent::_tracefirst($text))
3573             if defined $::RD_TRACE;
3574 0           push @item, $_tok;
3575 0           $item{__ACTION1__}=$_tok;
3576            
3577              
3578              
3579 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['\\'' /[^\\']*/ '\\'']<<},
3580             Parse::RecDescent::_tracefirst($text),
3581             q{identifier},
3582             $tracelevel)
3583             if defined $::RD_TRACE;
3584 0           $_matched = 1;
3585 0           last;
3586             }
3587              
3588              
3589 0   0       while (!$_matched && !$commit)
3590             {
3591            
3592 0 0         Parse::RecDescent::_trace(q{Trying production: ['"' /[^\\']*/ '"']},
3593             Parse::RecDescent::_tracefirst($_[1]),
3594             q{identifier},
3595             $tracelevel)
3596             if defined $::RD_TRACE;
3597 0           my $thisprod = $thisrule->{"prods"}[2];
3598 0           $text = $_[1];
3599 0           my $_savetext;
3600 0           @item = (q{identifier});
3601 0           %item = (__RULE__ => q{identifier});
3602 0           my $repcount = 0;
3603              
3604              
3605 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['"']},
3606             Parse::RecDescent::_tracefirst($text),
3607             q{identifier},
3608             $tracelevel)
3609             if defined $::RD_TRACE;
3610 0           $lastsep = "";
3611 0           $expectation->is(q{})->at($text);
3612            
3613              
3614 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\"//)
  0 0          
3615             {
3616            
3617 0           $expectation->failed();
3618 0 0         Parse::RecDescent::_trace(qq{<>},
3619             Parse::RecDescent::_tracefirst($text))
3620             if defined $::RD_TRACE;
3621 0           last;
3622             }
3623 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3624             . $& . q{])},
3625             Parse::RecDescent::_tracefirst($text))
3626             if defined $::RD_TRACE;
3627 0           push @item, $item{__STRING1__}=$&;
3628            
3629              
3630 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[^\\']*/]}, Parse::RecDescent::_tracefirst($text),
3631             q{identifier},
3632             $tracelevel)
3633             if defined $::RD_TRACE;
3634 0           $lastsep = "";
3635 0           $expectation->is(q{/[^\\']*/})->at($text);
3636            
3637              
3638 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[^\']*)//)
  0 0          
3639             {
3640            
3641 0           $expectation->failed();
3642 0 0         Parse::RecDescent::_trace(q{<>},
3643             Parse::RecDescent::_tracefirst($text))
3644             if defined $::RD_TRACE;
3645              
3646 0           last;
3647             }
3648 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3649             . $& . q{])},
3650             Parse::RecDescent::_tracefirst($text))
3651             if defined $::RD_TRACE;
3652 0           push @item, $item{__PATTERN1__}=$&;
3653            
3654              
3655 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['"']},
3656             Parse::RecDescent::_tracefirst($text),
3657             q{identifier},
3658             $tracelevel)
3659             if defined $::RD_TRACE;
3660 0           $lastsep = "";
3661 0           $expectation->is(q{'"'})->at($text);
3662            
3663              
3664 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\"//)
  0 0          
3665             {
3666            
3667 0           $expectation->failed();
3668 0 0         Parse::RecDescent::_trace(qq{<>},
3669             Parse::RecDescent::_tracefirst($text))
3670             if defined $::RD_TRACE;
3671 0           last;
3672             }
3673 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3674             . $& . q{])},
3675             Parse::RecDescent::_tracefirst($text))
3676             if defined $::RD_TRACE;
3677 0           push @item, $item{__STRING2__}=$&;
3678            
3679              
3680 0 0         Parse::RecDescent::_trace(q{Trying action},
3681             Parse::RecDescent::_tracefirst($text),
3682             q{identifier},
3683             $tracelevel)
3684             if defined $::RD_TRACE;
3685            
3686              
3687 0 0         $_tok = ($_noactions) ? 0 : do { ['VAL', $item[2] ] };
  0            
3688 0 0         unless (defined $_tok)
3689             {
3690 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3691             if defined $::RD_TRACE;
3692 0           last;
3693             }
3694 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3695             . $_tok . q{])},
3696             Parse::RecDescent::_tracefirst($text))
3697             if defined $::RD_TRACE;
3698 0           push @item, $_tok;
3699 0           $item{__ACTION1__}=$_tok;
3700            
3701              
3702              
3703 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['"' /[^\\']*/ '"']<<},
3704             Parse::RecDescent::_tracefirst($text),
3705             q{identifier},
3706             $tracelevel)
3707             if defined $::RD_TRACE;
3708 0           $_matched = 1;
3709 0           last;
3710             }
3711              
3712              
3713 0   0       while (!$_matched && !$commit)
3714             {
3715            
3716 0 0         Parse::RecDescent::_trace(q{Trying production: [/[\\-]?\\d+\\.?\\d*/]},
3717             Parse::RecDescent::_tracefirst($_[1]),
3718             q{identifier},
3719             $tracelevel)
3720             if defined $::RD_TRACE;
3721 0           my $thisprod = $thisrule->{"prods"}[3];
3722 0           $text = $_[1];
3723 0           my $_savetext;
3724 0           @item = (q{identifier});
3725 0           %item = (__RULE__ => q{identifier});
3726 0           my $repcount = 0;
3727              
3728              
3729 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[\\-]?\\d+\\.?\\d*/]}, Parse::RecDescent::_tracefirst($text),
3730             q{identifier},
3731             $tracelevel)
3732             if defined $::RD_TRACE;
3733 0           $lastsep = "";
3734 0           $expectation->is(q{})->at($text);
3735            
3736              
3737 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\-]?\d+\.?\d*)//)
  0 0          
3738             {
3739            
3740 0           $expectation->failed();
3741 0 0         Parse::RecDescent::_trace(q{<>},
3742             Parse::RecDescent::_tracefirst($text))
3743             if defined $::RD_TRACE;
3744              
3745 0           last;
3746             }
3747 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3748             . $& . q{])},
3749             Parse::RecDescent::_tracefirst($text))
3750             if defined $::RD_TRACE;
3751 0           push @item, $item{__PATTERN1__}=$&;
3752            
3753              
3754 0 0         Parse::RecDescent::_trace(q{Trying action},
3755             Parse::RecDescent::_tracefirst($text),
3756             q{identifier},
3757             $tracelevel)
3758             if defined $::RD_TRACE;
3759            
3760              
3761 0 0         $_tok = ($_noactions) ? 0 : do { ['VAL', $item[1] ] };
  0            
3762 0 0         unless (defined $_tok)
3763             {
3764 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3765             if defined $::RD_TRACE;
3766 0           last;
3767             }
3768 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3769             . $_tok . q{])},
3770             Parse::RecDescent::_tracefirst($text))
3771             if defined $::RD_TRACE;
3772 0           push @item, $_tok;
3773 0           $item{__ACTION1__}=$_tok;
3774            
3775              
3776              
3777 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/[\\-]?\\d+\\.?\\d*/]<<},
3778             Parse::RecDescent::_tracefirst($text),
3779             q{identifier},
3780             $tracelevel)
3781             if defined $::RD_TRACE;
3782 0           $_matched = 1;
3783 0           last;
3784             }
3785              
3786              
3787 0   0       while (!$_matched && !$commit)
3788             {
3789            
3790 0 0         Parse::RecDescent::_trace(q{Trying production: [/[\\-]?\\d*\\.?\\d+/]},
3791             Parse::RecDescent::_tracefirst($_[1]),
3792             q{identifier},
3793             $tracelevel)
3794             if defined $::RD_TRACE;
3795 0           my $thisprod = $thisrule->{"prods"}[4];
3796 0           $text = $_[1];
3797 0           my $_savetext;
3798 0           @item = (q{identifier});
3799 0           %item = (__RULE__ => q{identifier});
3800 0           my $repcount = 0;
3801              
3802              
3803 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[\\-]?\\d*\\.?\\d+/]}, Parse::RecDescent::_tracefirst($text),
3804             q{identifier},
3805             $tracelevel)
3806             if defined $::RD_TRACE;
3807 0           $lastsep = "";
3808 0           $expectation->is(q{})->at($text);
3809            
3810              
3811 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\-]?\d*\.?\d+)//)
  0 0          
3812             {
3813            
3814 0           $expectation->failed();
3815 0 0         Parse::RecDescent::_trace(q{<>},
3816             Parse::RecDescent::_tracefirst($text))
3817             if defined $::RD_TRACE;
3818              
3819 0           last;
3820             }
3821 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3822             . $& . q{])},
3823             Parse::RecDescent::_tracefirst($text))
3824             if defined $::RD_TRACE;
3825 0           push @item, $item{__PATTERN1__}=$&;
3826            
3827              
3828 0 0         Parse::RecDescent::_trace(q{Trying action},
3829             Parse::RecDescent::_tracefirst($text),
3830             q{identifier},
3831             $tracelevel)
3832             if defined $::RD_TRACE;
3833            
3834              
3835 0 0         $_tok = ($_noactions) ? 0 : do { ['VAL', $item[1] ] };
  0            
3836 0 0         unless (defined $_tok)
3837             {
3838 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
3839             if defined $::RD_TRACE;
3840 0           last;
3841             }
3842 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
3843             . $_tok . q{])},
3844             Parse::RecDescent::_tracefirst($text))
3845             if defined $::RD_TRACE;
3846 0           push @item, $_tok;
3847 0           $item{__ACTION1__}=$_tok;
3848            
3849              
3850              
3851 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/[\\-]?\\d*\\.?\\d+/]<<},
3852             Parse::RecDescent::_tracefirst($text),
3853             q{identifier},
3854             $tracelevel)
3855             if defined $::RD_TRACE;
3856 0           $_matched = 1;
3857 0           last;
3858             }
3859              
3860              
3861 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
3862             {
3863            
3864              
3865 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
3866 0 0         Parse::RecDescent::_trace(q{<>},
3867             Parse::RecDescent::_tracefirst($_[1]),
3868             q{identifier},
3869             $tracelevel)
3870             if defined $::RD_TRACE;
3871 0           return undef;
3872             }
3873 0 0 0       if (!defined($return) && defined($score))
3874             {
3875 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
3876             q{identifier},
3877             $tracelevel)
3878             if defined $::RD_TRACE;
3879 0           $return = $score_return;
3880             }
3881 0           splice @{$thisparser->{errors}}, $err_at;
  0            
3882 0 0         $return = $item[$#item] unless defined $return;
3883 0 0         if (defined $::RD_TRACE)
3884             {
3885 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
3886             $return . q{])}, "",
3887             q{identifier},
3888             $tracelevel);
3889 0           Parse::RecDescent::_trace(q{(consumed: [} .
3890             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
3891             Parse::RecDescent::_tracefirst($text),
3892             , q{identifier},
3893             $tracelevel)
3894             }
3895 0           $_[1] = $text;
3896 0           return $return;
3897             }
3898              
3899             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
3900             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::expr
3901             {
3902 0     0     my $thisparser = $_[0];
3903 1     1   5 use vars q{$tracelevel};
  1         1  
  1         317  
3904 0   0       local $tracelevel = ($tracelevel||0)+1;
3905 0           $ERRORS = 0;
3906 0           my $thisrule = $thisparser->{"rules"}{"expr"};
3907            
3908 0 0         Parse::RecDescent::_trace(q{Trying rule: [expr]},
3909             Parse::RecDescent::_tracefirst($_[1]),
3910             q{expr},
3911             $tracelevel)
3912             if defined $::RD_TRACE;
3913              
3914            
3915 0           my $err_at = @{$thisparser->{errors}};
  0            
3916              
3917 0           my $score;
3918             my $score_return;
3919 0           my $_tok;
3920 0           my $return = undef;
3921 0           my $_matched=0;
3922 0           my $commit=0;
3923 0           my @item = ();
3924 0           my %item = ();
3925 0   0       my $repeating = defined($_[2]) && $_[2];
3926 0   0       my $_noactions = defined($_[3]) && $_[3];
3927 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
3928 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
3929 0           my $text;
3930 0           my $lastsep="";
3931 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
3932 0           $expectation->at($_[1]);
3933            
3934 0           my $thisline;
3935 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
3936              
3937            
3938              
3939 0   0       while (!$_matched && !$commit)
3940             {
3941            
3942 0 0         Parse::RecDescent::_trace(q{Trying production: ['(' or_expr ')']},
3943             Parse::RecDescent::_tracefirst($_[1]),
3944             q{expr},
3945             $tracelevel)
3946             if defined $::RD_TRACE;
3947 0           my $thisprod = $thisrule->{"prods"}[0];
3948 0           $text = $_[1];
3949 0           my $_savetext;
3950 0           @item = (q{expr});
3951 0           %item = (__RULE__ => q{expr});
3952 0           my $repcount = 0;
3953              
3954              
3955 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['(']},
3956             Parse::RecDescent::_tracefirst($text),
3957             q{expr},
3958             $tracelevel)
3959             if defined $::RD_TRACE;
3960 0           $lastsep = "";
3961 0           $expectation->is(q{})->at($text);
3962            
3963              
3964 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//)
  0 0          
3965             {
3966            
3967 0           $expectation->failed();
3968 0 0         Parse::RecDescent::_trace(qq{<>},
3969             Parse::RecDescent::_tracefirst($text))
3970             if defined $::RD_TRACE;
3971 0           last;
3972             }
3973 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
3974             . $& . q{])},
3975             Parse::RecDescent::_tracefirst($text))
3976             if defined $::RD_TRACE;
3977 0           push @item, $item{__STRING1__}=$&;
3978            
3979              
3980 0 0         Parse::RecDescent::_trace(q{Trying subrule: [or_expr]},
3981             Parse::RecDescent::_tracefirst($text),
3982             q{expr},
3983             $tracelevel)
3984             if defined $::RD_TRACE;
3985 1     1   5 if (1) { no strict qw{refs};
  1         1  
  1         345  
  0            
3986 0           $expectation->is(q{or_expr})->at($text);
3987 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::or_expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
3988             {
3989            
3990 0 0         Parse::RecDescent::_trace(q{<>},
3991             Parse::RecDescent::_tracefirst($text),
3992             q{expr},
3993             $tracelevel)
3994             if defined $::RD_TRACE;
3995 0           $expectation->failed();
3996 0           last;
3997             }
3998 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [or_expr]<< (return value: [}
3999             . $_tok . q{]},
4000            
4001             Parse::RecDescent::_tracefirst($text),
4002             q{expr},
4003             $tracelevel)
4004             if defined $::RD_TRACE;
4005 0           $item{q{or_expr}} = $_tok;
4006 0           push @item, $_tok;
4007            
4008             }
4009              
4010 0 0         Parse::RecDescent::_trace(q{Trying terminal: [')']},
4011             Parse::RecDescent::_tracefirst($text),
4012             q{expr},
4013             $tracelevel)
4014             if defined $::RD_TRACE;
4015 0           $lastsep = "";
4016 0           $expectation->is(q{')'})->at($text);
4017            
4018              
4019 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//)
  0 0          
4020             {
4021            
4022 0           $expectation->failed();
4023 0 0         Parse::RecDescent::_trace(qq{<>},
4024             Parse::RecDescent::_tracefirst($text))
4025             if defined $::RD_TRACE;
4026 0           last;
4027             }
4028 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4029             . $& . q{])},
4030             Parse::RecDescent::_tracefirst($text))
4031             if defined $::RD_TRACE;
4032 0           push @item, $item{__STRING2__}=$&;
4033            
4034              
4035 0 0         Parse::RecDescent::_trace(q{Trying action},
4036             Parse::RecDescent::_tracefirst($text),
4037             q{expr},
4038             $tracelevel)
4039             if defined $::RD_TRACE;
4040            
4041              
4042 0 0         $_tok = ($_noactions) ? 0 : do { [ '()' , $item[2] ] };
  0            
4043 0 0         unless (defined $_tok)
4044             {
4045 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
4046             if defined $::RD_TRACE;
4047 0           last;
4048             }
4049 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4050             . $_tok . q{])},
4051             Parse::RecDescent::_tracefirst($text))
4052             if defined $::RD_TRACE;
4053 0           push @item, $_tok;
4054 0           $item{__ACTION1__}=$_tok;
4055            
4056              
4057              
4058 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['(' or_expr ')']<<},
4059             Parse::RecDescent::_tracefirst($text),
4060             q{expr},
4061             $tracelevel)
4062             if defined $::RD_TRACE;
4063 0           $_matched = 1;
4064 0           last;
4065             }
4066              
4067              
4068 0   0       while (!$_matched && !$commit)
4069             {
4070            
4071 0 0         Parse::RecDescent::_trace(q{Trying production: [function]},
4072             Parse::RecDescent::_tracefirst($_[1]),
4073             q{expr},
4074             $tracelevel)
4075             if defined $::RD_TRACE;
4076 0           my $thisprod = $thisrule->{"prods"}[1];
4077 0           $text = $_[1];
4078 0           my $_savetext;
4079 0           @item = (q{expr});
4080 0           %item = (__RULE__ => q{expr});
4081 0           my $repcount = 0;
4082              
4083              
4084 0 0         Parse::RecDescent::_trace(q{Trying subrule: [function]},
4085             Parse::RecDescent::_tracefirst($text),
4086             q{expr},
4087             $tracelevel)
4088             if defined $::RD_TRACE;
4089 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         182  
  0            
4090 0           $expectation->is(q{})->at($text);
4091 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::function($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
4092             {
4093            
4094 0 0         Parse::RecDescent::_trace(q{<>},
4095             Parse::RecDescent::_tracefirst($text),
4096             q{expr},
4097             $tracelevel)
4098             if defined $::RD_TRACE;
4099 0           $expectation->failed();
4100 0           last;
4101             }
4102 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [function]<< (return value: [}
4103             . $_tok . q{]},
4104            
4105             Parse::RecDescent::_tracefirst($text),
4106             q{expr},
4107             $tracelevel)
4108             if defined $::RD_TRACE;
4109 0           $item{q{function}} = $_tok;
4110 0           push @item, $_tok;
4111            
4112             }
4113              
4114              
4115 0 0         Parse::RecDescent::_trace(q{>>Matched production: [function]<<},
4116             Parse::RecDescent::_tracefirst($text),
4117             q{expr},
4118             $tracelevel)
4119             if defined $::RD_TRACE;
4120 0           $_matched = 1;
4121 0           last;
4122             }
4123              
4124              
4125 0   0       while (!$_matched && !$commit)
4126             {
4127            
4128 0 0         Parse::RecDescent::_trace(q{Trying production: [comp_expr]},
4129             Parse::RecDescent::_tracefirst($_[1]),
4130             q{expr},
4131             $tracelevel)
4132             if defined $::RD_TRACE;
4133 0           my $thisprod = $thisrule->{"prods"}[2];
4134 0           $text = $_[1];
4135 0           my $_savetext;
4136 0           @item = (q{expr});
4137 0           %item = (__RULE__ => q{expr});
4138 0           my $repcount = 0;
4139              
4140              
4141 0 0         Parse::RecDescent::_trace(q{Trying subrule: [comp_expr]},
4142             Parse::RecDescent::_tracefirst($text),
4143             q{expr},
4144             $tracelevel)
4145             if defined $::RD_TRACE;
4146 1     1   4 if (1) { no strict qw{refs};
  1         2  
  1         506  
  0            
4147 0           $expectation->is(q{})->at($text);
4148 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::comp_expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
4149             {
4150            
4151 0 0         Parse::RecDescent::_trace(q{<>},
4152             Parse::RecDescent::_tracefirst($text),
4153             q{expr},
4154             $tracelevel)
4155             if defined $::RD_TRACE;
4156 0           $expectation->failed();
4157 0           last;
4158             }
4159 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [comp_expr]<< (return value: [}
4160             . $_tok . q{]},
4161            
4162             Parse::RecDescent::_tracefirst($text),
4163             q{expr},
4164             $tracelevel)
4165             if defined $::RD_TRACE;
4166 0           $item{q{comp_expr}} = $_tok;
4167 0           push @item, $_tok;
4168            
4169             }
4170              
4171              
4172 0 0         Parse::RecDescent::_trace(q{>>Matched production: [comp_expr]<<},
4173             Parse::RecDescent::_tracefirst($text),
4174             q{expr},
4175             $tracelevel)
4176             if defined $::RD_TRACE;
4177 0           $_matched = 1;
4178 0           last;
4179             }
4180              
4181              
4182 0           while (!$_matched)
4183             {
4184            
4185 0 0         Parse::RecDescent::_trace(q{Trying production: []},
4186             Parse::RecDescent::_tracefirst($_[1]),
4187             q{expr},
4188             $tracelevel)
4189             if defined $::RD_TRACE;
4190 0           my $thisprod = $thisrule->{"prods"}[3];
4191            
4192 0           my $_savetext;
4193 0           @item = (q{expr});
4194 0           %item = (__RULE__ => q{expr});
4195 0           my $repcount = 0;
4196              
4197              
4198            
4199              
4200 0 0         Parse::RecDescent::_trace(q{Trying directive: []},
4201             Parse::RecDescent::_tracefirst($text),
4202             q{expr},
4203             $tracelevel)
4204             if defined $::RD_TRACE;
4205 0 0         $_tok = do { if (1) { do {
  0            
  0            
4206 0           my $rule = $item[0];
4207 0           $rule =~ s/_/ /g;
4208             #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline);
4209 0           push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline];
  0            
4210 0           } unless $_noactions; undef } else {0} };
4211 0 0         if (defined($_tok))
4212             {
4213 0 0         Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
4214             . $_tok . q{])},
4215             Parse::RecDescent::_tracefirst($text))
4216             if defined $::RD_TRACE;
4217             }
4218             else
4219             {
4220 0 0         Parse::RecDescent::_trace(q{<>},
4221             Parse::RecDescent::_tracefirst($text))
4222             if defined $::RD_TRACE;
4223             }
4224            
4225 0 0         last unless defined $_tok;
4226 0           push @item, $item{__DIRECTIVE1__}=$_tok;
4227            
4228              
4229              
4230 0 0         Parse::RecDescent::_trace(q{>>Matched production: []<<},
4231             Parse::RecDescent::_tracefirst($text),
4232             q{expr},
4233             $tracelevel)
4234             if defined $::RD_TRACE;
4235 0           $_matched = 1;
4236 0           last;
4237             }
4238              
4239              
4240 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
4241             {
4242            
4243              
4244 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
4245 0 0         Parse::RecDescent::_trace(q{<>},
4246             Parse::RecDescent::_tracefirst($_[1]),
4247             q{expr},
4248             $tracelevel)
4249             if defined $::RD_TRACE;
4250 0           return undef;
4251             }
4252 0 0 0       if (!defined($return) && defined($score))
4253             {
4254 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4255             q{expr},
4256             $tracelevel)
4257             if defined $::RD_TRACE;
4258 0           $return = $score_return;
4259             }
4260 0           splice @{$thisparser->{errors}}, $err_at;
  0            
4261 0 0         $return = $item[$#item] unless defined $return;
4262 0 0         if (defined $::RD_TRACE)
4263             {
4264 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4265             $return . q{])}, "",
4266             q{expr},
4267             $tracelevel);
4268 0           Parse::RecDescent::_trace(q{(consumed: [} .
4269             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4270             Parse::RecDescent::_tracefirst($text),
4271             , q{expr},
4272             $tracelevel)
4273             }
4274 0           $_[1] = $text;
4275 0           return $return;
4276             }
4277              
4278             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
4279             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::expression
4280             {
4281 0     0     my $thisparser = $_[0];
4282 1     1   4 use vars q{$tracelevel};
  1         2  
  1         211  
4283 0   0       local $tracelevel = ($tracelevel||0)+1;
4284 0           $ERRORS = 0;
4285 0           my $thisrule = $thisparser->{"rules"}{"expression"};
4286            
4287 0 0         Parse::RecDescent::_trace(q{Trying rule: [expression]},
4288             Parse::RecDescent::_tracefirst($_[1]),
4289             q{expression},
4290             $tracelevel)
4291             if defined $::RD_TRACE;
4292              
4293            
4294 0           my $err_at = @{$thisparser->{errors}};
  0            
4295              
4296 0           my $score;
4297             my $score_return;
4298 0           my $_tok;
4299 0           my $return = undef;
4300 0           my $_matched=0;
4301 0           my $commit=0;
4302 0           my @item = ();
4303 0           my %item = ();
4304 0   0       my $repeating = defined($_[2]) && $_[2];
4305 0   0       my $_noactions = defined($_[3]) && $_[3];
4306 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
4307 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4308 0           my $text;
4309 0           my $lastsep="";
4310 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
4311 0           $expectation->at($_[1]);
4312            
4313 0           my $thisline;
4314 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4315              
4316            
4317              
4318 0   0       while (!$_matched && !$commit)
4319             {
4320            
4321 0 0         Parse::RecDescent::_trace(q{Trying production: [or_expr /\\Z/]},
4322             Parse::RecDescent::_tracefirst($_[1]),
4323             q{expression},
4324             $tracelevel)
4325             if defined $::RD_TRACE;
4326 0           my $thisprod = $thisrule->{"prods"}[0];
4327 0           $text = $_[1];
4328 0           my $_savetext;
4329 0           @item = (q{expression});
4330 0           %item = (__RULE__ => q{expression});
4331 0           my $repcount = 0;
4332              
4333              
4334 0 0         Parse::RecDescent::_trace(q{Trying subrule: [or_expr]},
4335             Parse::RecDescent::_tracefirst($text),
4336             q{expression},
4337             $tracelevel)
4338             if defined $::RD_TRACE;
4339 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         601  
  0            
4340 0           $expectation->is(q{})->at($text);
4341 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::or_expr($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
4342             {
4343            
4344 0 0         Parse::RecDescent::_trace(q{<>},
4345             Parse::RecDescent::_tracefirst($text),
4346             q{expression},
4347             $tracelevel)
4348             if defined $::RD_TRACE;
4349 0           $expectation->failed();
4350 0           last;
4351             }
4352 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [or_expr]<< (return value: [}
4353             . $_tok . q{]},
4354            
4355             Parse::RecDescent::_tracefirst($text),
4356             q{expression},
4357             $tracelevel)
4358             if defined $::RD_TRACE;
4359 0           $item{q{or_expr}} = $_tok;
4360 0           push @item, $_tok;
4361            
4362             }
4363              
4364 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/\\Z/]}, Parse::RecDescent::_tracefirst($text),
4365             q{expression},
4366             $tracelevel)
4367             if defined $::RD_TRACE;
4368 0           $lastsep = "";
4369 0           $expectation->is(q{/\\Z/})->at($text);
4370            
4371              
4372 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:\Z)//)
  0 0          
4373             {
4374            
4375 0           $expectation->failed();
4376 0 0         Parse::RecDescent::_trace(q{<>},
4377             Parse::RecDescent::_tracefirst($text))
4378             if defined $::RD_TRACE;
4379              
4380 0           last;
4381             }
4382 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4383             . $& . q{])},
4384             Parse::RecDescent::_tracefirst($text))
4385             if defined $::RD_TRACE;
4386 0           push @item, $item{__PATTERN1__}=$&;
4387            
4388              
4389 0 0         Parse::RecDescent::_trace(q{Trying action},
4390             Parse::RecDescent::_tracefirst($text),
4391             q{expression},
4392             $tracelevel)
4393             if defined $::RD_TRACE;
4394            
4395              
4396 0 0         $_tok = ($_noactions) ? 0 : do { $item[1] };
  0            
4397 0 0         unless (defined $_tok)
4398             {
4399 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
4400             if defined $::RD_TRACE;
4401 0           last;
4402             }
4403 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4404             . $_tok . q{])},
4405             Parse::RecDescent::_tracefirst($text))
4406             if defined $::RD_TRACE;
4407 0           push @item, $_tok;
4408 0           $item{__ACTION1__}=$_tok;
4409            
4410              
4411              
4412 0 0         Parse::RecDescent::_trace(q{>>Matched production: [or_expr /\\Z/]<<},
4413             Parse::RecDescent::_tracefirst($text),
4414             q{expression},
4415             $tracelevel)
4416             if defined $::RD_TRACE;
4417 0           $_matched = 1;
4418 0           last;
4419             }
4420              
4421              
4422 0           while (!$_matched)
4423             {
4424            
4425 0 0         Parse::RecDescent::_trace(q{Trying production: []},
4426             Parse::RecDescent::_tracefirst($_[1]),
4427             q{expression},
4428             $tracelevel)
4429             if defined $::RD_TRACE;
4430 0           my $thisprod = $thisrule->{"prods"}[1];
4431            
4432 0           my $_savetext;
4433 0           @item = (q{expression});
4434 0           %item = (__RULE__ => q{expression});
4435 0           my $repcount = 0;
4436              
4437              
4438            
4439              
4440 0 0         Parse::RecDescent::_trace(q{Trying directive: []},
4441             Parse::RecDescent::_tracefirst($text),
4442             q{expression},
4443             $tracelevel)
4444             if defined $::RD_TRACE;
4445 0 0         $_tok = do { if (1) { do {
  0            
  0            
4446 0           my $rule = $item[0];
4447 0           $rule =~ s/_/ /g;
4448             #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline);
4449 0           push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline];
  0            
4450 0           } unless $_noactions; undef } else {0} };
4451 0 0         if (defined($_tok))
4452             {
4453 0 0         Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [}
4454             . $_tok . q{])},
4455             Parse::RecDescent::_tracefirst($text))
4456             if defined $::RD_TRACE;
4457             }
4458             else
4459             {
4460 0 0         Parse::RecDescent::_trace(q{<>},
4461             Parse::RecDescent::_tracefirst($text))
4462             if defined $::RD_TRACE;
4463             }
4464            
4465 0 0         last unless defined $_tok;
4466 0           push @item, $item{__DIRECTIVE1__}=$_tok;
4467            
4468              
4469              
4470 0 0         Parse::RecDescent::_trace(q{>>Matched production: []<<},
4471             Parse::RecDescent::_tracefirst($text),
4472             q{expression},
4473             $tracelevel)
4474             if defined $::RD_TRACE;
4475 0           $_matched = 1;
4476 0           last;
4477             }
4478              
4479              
4480 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
4481             {
4482            
4483              
4484 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
4485 0 0         Parse::RecDescent::_trace(q{<>},
4486             Parse::RecDescent::_tracefirst($_[1]),
4487             q{expression},
4488             $tracelevel)
4489             if defined $::RD_TRACE;
4490 0           return undef;
4491             }
4492 0 0 0       if (!defined($return) && defined($score))
4493             {
4494 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4495             q{expression},
4496             $tracelevel)
4497             if defined $::RD_TRACE;
4498 0           $return = $score_return;
4499             }
4500 0           splice @{$thisparser->{errors}}, $err_at;
  0            
4501 0 0         $return = $item[$#item] unless defined $return;
4502 0 0         if (defined $::RD_TRACE)
4503             {
4504 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4505             $return . q{])}, "",
4506             q{expression},
4507             $tracelevel);
4508 0           Parse::RecDescent::_trace(q{(consumed: [} .
4509             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4510             Parse::RecDescent::_tracefirst($text),
4511             , q{expression},
4512             $tracelevel)
4513             }
4514 0           $_[1] = $text;
4515 0           return $return;
4516             }
4517              
4518             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
4519             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::arg_val
4520             {
4521 0     0     my $thisparser = $_[0];
4522 1     1   5 use vars q{$tracelevel};
  1         1  
  1         216  
4523 0   0       local $tracelevel = ($tracelevel||0)+1;
4524 0           $ERRORS = 0;
4525 0           my $thisrule = $thisparser->{"rules"}{"arg_val"};
4526            
4527 0 0         Parse::RecDescent::_trace(q{Trying rule: [arg_val]},
4528             Parse::RecDescent::_tracefirst($_[1]),
4529             q{arg_val},
4530             $tracelevel)
4531             if defined $::RD_TRACE;
4532              
4533            
4534 0           my $err_at = @{$thisparser->{errors}};
  0            
4535              
4536 0           my $score;
4537             my $score_return;
4538 0           my $_tok;
4539 0           my $return = undef;
4540 0           my $_matched=0;
4541 0           my $commit=0;
4542 0           my @item = ();
4543 0           my %item = ();
4544 0   0       my $repeating = defined($_[2]) && $_[2];
4545 0   0       my $_noactions = defined($_[3]) && $_[3];
4546 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
4547 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4548 0           my $text;
4549 0           my $lastsep="";
4550 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
4551 0           $expectation->at($_[1]);
4552            
4553 0           my $thisline;
4554 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4555              
4556            
4557              
4558 0   0       while (!$_matched && !$commit)
4559             {
4560            
4561 0 0         Parse::RecDescent::_trace(q{Trying production: [numval]},
4562             Parse::RecDescent::_tracefirst($_[1]),
4563             q{arg_val},
4564             $tracelevel)
4565             if defined $::RD_TRACE;
4566 0           my $thisprod = $thisrule->{"prods"}[0];
4567 0           $text = $_[1];
4568 0           my $_savetext;
4569 0           @item = (q{arg_val});
4570 0           %item = (__RULE__ => q{arg_val});
4571 0           my $repcount = 0;
4572              
4573              
4574 0 0         Parse::RecDescent::_trace(q{Trying subrule: [numval]},
4575             Parse::RecDescent::_tracefirst($text),
4576             q{arg_val},
4577             $tracelevel)
4578             if defined $::RD_TRACE;
4579 1     1   4 if (1) { no strict qw{refs};
  1         1  
  1         832  
  0            
4580 0           $expectation->is(q{})->at($text);
4581 0 0   0     unless (defined ($_tok = Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::numval($thisparser,$text,$repeating,$_noactions,sub { \@arg })))
  0            
4582             {
4583            
4584 0 0         Parse::RecDescent::_trace(q{<>},
4585             Parse::RecDescent::_tracefirst($text),
4586             q{arg_val},
4587             $tracelevel)
4588             if defined $::RD_TRACE;
4589 0           $expectation->failed();
4590 0           last;
4591             }
4592 0 0         Parse::RecDescent::_trace(q{>>Matched subrule: [numval]<< (return value: [}
4593             . $_tok . q{]},
4594            
4595             Parse::RecDescent::_tracefirst($text),
4596             q{arg_val},
4597             $tracelevel)
4598             if defined $::RD_TRACE;
4599 0           $item{q{numval}} = $_tok;
4600 0           push @item, $_tok;
4601            
4602             }
4603              
4604 0 0         Parse::RecDescent::_trace(q{Trying action},
4605             Parse::RecDescent::_tracefirst($text),
4606             q{arg_val},
4607             $tracelevel)
4608             if defined $::RD_TRACE;
4609            
4610              
4611 0 0         $_tok = ($_noactions) ? 0 : do { "$item[1]" };
  0            
4612 0 0         unless (defined $_tok)
4613             {
4614 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
4615             if defined $::RD_TRACE;
4616 0           last;
4617             }
4618 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4619             . $_tok . q{])},
4620             Parse::RecDescent::_tracefirst($text))
4621             if defined $::RD_TRACE;
4622 0           push @item, $_tok;
4623 0           $item{__ACTION1__}=$_tok;
4624            
4625              
4626              
4627 0 0         Parse::RecDescent::_trace(q{>>Matched production: [numval]<<},
4628             Parse::RecDescent::_tracefirst($text),
4629             q{arg_val},
4630             $tracelevel)
4631             if defined $::RD_TRACE;
4632 0           $_matched = 1;
4633 0           last;
4634             }
4635              
4636              
4637 0   0       while (!$_matched && !$commit)
4638             {
4639            
4640 0 0         Parse::RecDescent::_trace(q{Trying production: ['\\'' /[^\\']*/ '\\'']},
4641             Parse::RecDescent::_tracefirst($_[1]),
4642             q{arg_val},
4643             $tracelevel)
4644             if defined $::RD_TRACE;
4645 0           my $thisprod = $thisrule->{"prods"}[1];
4646 0           $text = $_[1];
4647 0           my $_savetext;
4648 0           @item = (q{arg_val});
4649 0           %item = (__RULE__ => q{arg_val});
4650 0           my $repcount = 0;
4651              
4652              
4653 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
4654             Parse::RecDescent::_tracefirst($text),
4655             q{arg_val},
4656             $tracelevel)
4657             if defined $::RD_TRACE;
4658 0           $lastsep = "";
4659 0           $expectation->is(q{})->at($text);
4660            
4661              
4662 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
4663             substr($text,0,length($_tok)) eq $_tok and
4664 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
4665             )
4666             {
4667            
4668 0           $expectation->failed();
4669 0 0         Parse::RecDescent::_trace(q{<>},
4670             Parse::RecDescent::_tracefirst($text))
4671             if defined $::RD_TRACE;
4672 0           last;
4673             }
4674 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4675             . $_tok . q{])},
4676             Parse::RecDescent::_tracefirst($text))
4677             if defined $::RD_TRACE;
4678 0           push @item, $item{__STRING1__}=$_tok;
4679            
4680              
4681 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[^\\']*/]}, Parse::RecDescent::_tracefirst($text),
4682             q{arg_val},
4683             $tracelevel)
4684             if defined $::RD_TRACE;
4685 0           $lastsep = "";
4686 0           $expectation->is(q{/[^\\']*/})->at($text);
4687            
4688              
4689 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[^\']*)//)
  0 0          
4690             {
4691            
4692 0           $expectation->failed();
4693 0 0         Parse::RecDescent::_trace(q{<>},
4694             Parse::RecDescent::_tracefirst($text))
4695             if defined $::RD_TRACE;
4696              
4697 0           last;
4698             }
4699 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4700             . $& . q{])},
4701             Parse::RecDescent::_tracefirst($text))
4702             if defined $::RD_TRACE;
4703 0           push @item, $item{__PATTERN1__}=$&;
4704            
4705              
4706 0 0         Parse::RecDescent::_trace(q{Trying terminal: ['\\'']},
4707             Parse::RecDescent::_tracefirst($text),
4708             q{arg_val},
4709             $tracelevel)
4710             if defined $::RD_TRACE;
4711 0           $lastsep = "";
4712 0           $expectation->is(q{'\\''})->at($text);
4713            
4714              
4715 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and do { $_tok = "\'"; 1 } and
  0 0 0        
  0   0        
  0            
4716             substr($text,0,length($_tok)) eq $_tok and
4717 0           do { substr($text,0,length($_tok)) = ""; 1; }
  0            
4718             )
4719             {
4720            
4721 0           $expectation->failed();
4722 0 0         Parse::RecDescent::_trace(q{<>},
4723             Parse::RecDescent::_tracefirst($text))
4724             if defined $::RD_TRACE;
4725 0           last;
4726             }
4727 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4728             . $_tok . q{])},
4729             Parse::RecDescent::_tracefirst($text))
4730             if defined $::RD_TRACE;
4731 0           push @item, $item{__STRING2__}=$_tok;
4732            
4733              
4734 0 0         Parse::RecDescent::_trace(q{Trying action},
4735             Parse::RecDescent::_tracefirst($text),
4736             q{arg_val},
4737             $tracelevel)
4738             if defined $::RD_TRACE;
4739            
4740              
4741 0 0         $_tok = ($_noactions) ? 0 : do { "$item[2]" };
  0            
4742 0 0         unless (defined $_tok)
4743             {
4744 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
4745             if defined $::RD_TRACE;
4746 0           last;
4747             }
4748 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4749             . $_tok . q{])},
4750             Parse::RecDescent::_tracefirst($text))
4751             if defined $::RD_TRACE;
4752 0           push @item, $_tok;
4753 0           $item{__ACTION1__}=$_tok;
4754            
4755              
4756              
4757 0 0         Parse::RecDescent::_trace(q{>>Matched production: ['\\'' /[^\\']*/ '\\'']<<},
4758             Parse::RecDescent::_tracefirst($text),
4759             q{arg_val},
4760             $tracelevel)
4761             if defined $::RD_TRACE;
4762 0           $_matched = 1;
4763 0           last;
4764             }
4765              
4766              
4767 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
4768             {
4769            
4770              
4771 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
4772 0 0         Parse::RecDescent::_trace(q{<>},
4773             Parse::RecDescent::_tracefirst($_[1]),
4774             q{arg_val},
4775             $tracelevel)
4776             if defined $::RD_TRACE;
4777 0           return undef;
4778             }
4779 0 0 0       if (!defined($return) && defined($score))
4780             {
4781 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4782             q{arg_val},
4783             $tracelevel)
4784             if defined $::RD_TRACE;
4785 0           $return = $score_return;
4786             }
4787 0           splice @{$thisparser->{errors}}, $err_at;
  0            
4788 0 0         $return = $item[$#item] unless defined $return;
4789 0 0         if (defined $::RD_TRACE)
4790             {
4791 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4792             $return . q{])}, "",
4793             q{arg_val},
4794             $tracelevel);
4795 0           Parse::RecDescent::_trace(q{(consumed: [} .
4796             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4797             Parse::RecDescent::_tracefirst($text),
4798             , q{arg_val},
4799             $tracelevel)
4800             }
4801 0           $_[1] = $text;
4802 0           return $return;
4803             }
4804              
4805             # ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args)
4806             sub Parse::RecDescent::CGI::OptimalQuery::OQFilterParser::vname
4807             {
4808 0     0     my $thisparser = $_[0];
4809 1     1   5 use vars q{$tracelevel};
  1         2  
  1         2658  
4810 0   0       local $tracelevel = ($tracelevel||0)+1;
4811 0           $ERRORS = 0;
4812 0           my $thisrule = $thisparser->{"rules"}{"vname"};
4813            
4814 0 0         Parse::RecDescent::_trace(q{Trying rule: [vname]},
4815             Parse::RecDescent::_tracefirst($_[1]),
4816             q{vname},
4817             $tracelevel)
4818             if defined $::RD_TRACE;
4819              
4820            
4821 0           my $err_at = @{$thisparser->{errors}};
  0            
4822              
4823 0           my $score;
4824             my $score_return;
4825 0           my $_tok;
4826 0           my $return = undef;
4827 0           my $_matched=0;
4828 0           my $commit=0;
4829 0           my @item = ();
4830 0           my %item = ();
4831 0   0       my $repeating = defined($_[2]) && $_[2];
4832 0   0       my $_noactions = defined($_[3]) && $_[3];
4833 0 0         my @arg = defined $_[4] ? @{ &{$_[4]} } : ();
  0            
  0            
4834 0 0         my %arg = ($#arg & 01) ? @arg : (@arg, undef);
4835 0           my $text;
4836 0           my $lastsep="";
4837 0           my $expectation = new Parse::RecDescent::Expectation($thisrule->expected());
4838 0           $expectation->at($_[1]);
4839            
4840 0           my $thisline;
4841 0           tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser;
4842              
4843            
4844              
4845 0   0       while (!$_matched && !$commit)
4846             {
4847            
4848 0 0         Parse::RecDescent::_trace(q{Trying production: [/[a-zA-Z]+[\\w]*/]},
4849             Parse::RecDescent::_tracefirst($_[1]),
4850             q{vname},
4851             $tracelevel)
4852             if defined $::RD_TRACE;
4853 0           my $thisprod = $thisrule->{"prods"}[0];
4854 0           $text = $_[1];
4855 0           my $_savetext;
4856 0           @item = (q{vname});
4857 0           %item = (__RULE__ => q{vname});
4858 0           my $repcount = 0;
4859              
4860              
4861 0 0         Parse::RecDescent::_trace(q{Trying terminal: [/[a-zA-Z]+[\\w]*/]}, Parse::RecDescent::_tracefirst($text),
4862             q{vname},
4863             $tracelevel)
4864             if defined $::RD_TRACE;
4865 0           $lastsep = "";
4866 0           $expectation->is(q{})->at($text);
4867            
4868              
4869 0 0 0       unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[a-zA-Z]+[\w]*)//)
  0 0          
4870             {
4871            
4872 0           $expectation->failed();
4873 0 0         Parse::RecDescent::_trace(q{<>},
4874             Parse::RecDescent::_tracefirst($text))
4875             if defined $::RD_TRACE;
4876              
4877 0           last;
4878             }
4879 0 0         Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}
4880             . $& . q{])},
4881             Parse::RecDescent::_tracefirst($text))
4882             if defined $::RD_TRACE;
4883 0           push @item, $item{__PATTERN1__}=$&;
4884            
4885              
4886 0 0         Parse::RecDescent::_trace(q{Trying action},
4887             Parse::RecDescent::_tracefirst($text),
4888             q{vname},
4889             $tracelevel)
4890             if defined $::RD_TRACE;
4891            
4892              
4893 0 0         $_tok = ($_noactions) ? 0 : do { $item[1] };
  0            
4894 0 0         unless (defined $_tok)
4895             {
4896 0 0         Parse::RecDescent::_trace(q{<> (return value: [undef])})
4897             if defined $::RD_TRACE;
4898 0           last;
4899             }
4900 0 0         Parse::RecDescent::_trace(q{>>Matched action<< (return value: [}
4901             . $_tok . q{])},
4902             Parse::RecDescent::_tracefirst($text))
4903             if defined $::RD_TRACE;
4904 0           push @item, $_tok;
4905 0           $item{__ACTION1__}=$_tok;
4906            
4907              
4908              
4909 0 0         Parse::RecDescent::_trace(q{>>Matched production: [/[a-zA-Z]+[\\w]*/]<<},
4910             Parse::RecDescent::_tracefirst($text),
4911             q{vname},
4912             $tracelevel)
4913             if defined $::RD_TRACE;
4914 0           $_matched = 1;
4915 0           last;
4916             }
4917              
4918              
4919 0 0 0       unless ( $_matched || defined($return) || defined($score) )
      0        
4920             {
4921            
4922              
4923 0           $_[1] = $text; # NOT SURE THIS IS NEEDED
4924 0 0         Parse::RecDescent::_trace(q{<>},
4925             Parse::RecDescent::_tracefirst($_[1]),
4926             q{vname},
4927             $tracelevel)
4928             if defined $::RD_TRACE;
4929 0           return undef;
4930             }
4931 0 0 0       if (!defined($return) && defined($score))
4932             {
4933 0 0         Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "",
4934             q{vname},
4935             $tracelevel)
4936             if defined $::RD_TRACE;
4937 0           $return = $score_return;
4938             }
4939 0           splice @{$thisparser->{errors}}, $err_at;
  0            
4940 0 0         $return = $item[$#item] unless defined $return;
4941 0 0         if (defined $::RD_TRACE)
4942             {
4943 0           Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} .
4944             $return . q{])}, "",
4945             q{vname},
4946             $tracelevel);
4947 0           Parse::RecDescent::_trace(q{(consumed: [} .
4948             Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])},
4949             Parse::RecDescent::_tracefirst($text),
4950             , q{vname},
4951             $tracelevel)
4952             }
4953 0           $_[1] = $text;
4954 0           return $return;
4955             }
4956             }
4957 0     0 0   package CGI::OptimalQuery::OQFilterParser; sub new { my $self = bless( {
4958             '_AUTOTREE' => undef,
4959             'localvars' => '',
4960             'startcode' => '',
4961             '_check' => {
4962             'thisoffset' => '',
4963             'itempos' => '',
4964             'prevoffset' => '',
4965             'prevline' => '',
4966             'prevcolumn' => '',
4967             'thiscolumn' => ''
4968             },
4969             'namespace' => 'Parse::RecDescent::CGI::OptimalQuery::OQFilterParser',
4970             '_AUTOACTION' => undef,
4971             'rules' => {
4972             'function' => bless( {
4973             'impcount' => 0,
4974             'calls' => [
4975             'vname',
4976             'farg'
4977             ],
4978             'changed' => 0,
4979             'opcount' => 0,
4980             'prods' => [
4981             bless( {
4982             'number' => '0',
4983             'strcount' => 2,
4984             'dircount' => 0,
4985             'uncommit' => undef,
4986             'error' => undef,
4987             'patcount' => 0,
4988             'actcount' => 1,
4989             'items' => [
4990             bless( {
4991             'subrule' => 'vname',
4992             'matchrule' => 0,
4993             'implicit' => undef,
4994             'argcode' => undef,
4995             'lookahead' => 0,
4996             'line' => 55
4997             }, 'Parse::RecDescent::Subrule' ),
4998             bless( {
4999             'pattern' => '(',
5000             'hashname' => '__STRING1__',
5001             'description' => '\'(\'',
5002             'lookahead' => 0,
5003             'line' => 55
5004             }, 'Parse::RecDescent::Literal' ),
5005             bless( {
5006             'pattern' => ')',
5007             'hashname' => '__STRING2__',
5008             'description' => '\')\'',
5009             'lookahead' => 0,
5010             'line' => 55
5011             }, 'Parse::RecDescent::Literal' ),
5012             bless( {
5013             'hashname' => '__ACTION1__',
5014             'lookahead' => 0,
5015             'line' => 56,
5016             'code' => '{ [\'FUNCT\', $item[1], {} ] }'
5017             }, 'Parse::RecDescent::Action' )
5018             ],
5019             'line' => undef
5020             }, 'Parse::RecDescent::Production' ),
5021             bless( {
5022             'number' => '1',
5023             'strcount' => 3,
5024             'dircount' => 1,
5025             'uncommit' => undef,
5026             'error' => undef,
5027             'patcount' => 0,
5028             'actcount' => 1,
5029             'op' => [],
5030             'items' => [
5031             bless( {
5032             'subrule' => 'vname',
5033             'matchrule' => 0,
5034             'implicit' => undef,
5035             'argcode' => undef,
5036             'lookahead' => 0,
5037             'line' => 57
5038             }, 'Parse::RecDescent::Subrule' ),
5039             bless( {
5040             'pattern' => '(',
5041             'hashname' => '__STRING1__',
5042             'description' => '\'(\'',
5043             'lookahead' => 0,
5044             'line' => 57
5045             }, 'Parse::RecDescent::Literal' ),
5046             bless( {
5047             'expected' => '',
5048             'min' => 1,
5049             'name' => '',
5050             'max' => 100000000,
5051             'leftarg' => bless( {
5052             'subrule' => 'farg',
5053             'matchrule' => 0,
5054             'implicit' => undef,
5055             'argcode' => undef,
5056             'lookahead' => 0,
5057             'line' => 57
5058             }, 'Parse::RecDescent::Subrule' ),
5059             'rightarg' => bless( {
5060             'subrule' => 'farg',
5061             'matchrule' => 0,
5062             'implicit' => undef,
5063             'argcode' => undef,
5064             'lookahead' => 0,
5065             'line' => 57
5066             }, 'Parse::RecDescent::Subrule' ),
5067             'hashname' => '__DIRECTIVE1__',
5068             'type' => 'leftop',
5069             'op' => bless( {
5070             'pattern' => ',',
5071             'hashname' => '__STRING2__',
5072             'description' => '\',\'',
5073             'lookahead' => 0,
5074             'line' => 57
5075             }, 'Parse::RecDescent::Literal' )
5076             }, 'Parse::RecDescent::Operator' ),
5077             bless( {
5078             'pattern' => ')',
5079             'hashname' => '__STRING3__',
5080             'description' => '\')\'',
5081             'lookahead' => 0,
5082             'line' => 57
5083             }, 'Parse::RecDescent::Literal' ),
5084             bless( {
5085             'hashname' => '__ACTION1__',
5086             'lookahead' => 0,
5087             'line' => 58,
5088             'code' => '{ my %h = map {@$_} @{$item[3]};
5089             [\'FUNCT\', $item[1], \\ %h ]; }'
5090             }, 'Parse::RecDescent::Action' )
5091             ],
5092             'line' => 57
5093             }, 'Parse::RecDescent::Production' )
5094             ],
5095             'name' => 'function',
5096             'vars' => '',
5097             'line' => 54
5098             }, 'Parse::RecDescent::Rule' ),
5099             'and_expr' => bless( {
5100             'impcount' => 0,
5101             'calls' => [
5102             'expr'
5103             ],
5104             'changed' => 0,
5105             'opcount' => 0,
5106             'prods' => [
5107             bless( {
5108             'number' => '0',
5109             'strcount' => 0,
5110             'dircount' => 1,
5111             'uncommit' => undef,
5112             'error' => undef,
5113             'patcount' => 1,
5114             'actcount' => 1,
5115             'op' => [],
5116             'items' => [
5117             bless( {
5118             'expected' => '',
5119             'min' => 1,
5120             'name' => '',
5121             'max' => 100000000,
5122             'leftarg' => bless( {
5123             'subrule' => 'expr',
5124             'matchrule' => 0,
5125             'implicit' => undef,
5126             'argcode' => undef,
5127             'lookahead' => 0,
5128             'line' => 26
5129             }, 'Parse::RecDescent::Subrule' ),
5130             'rightarg' => bless( {
5131             'subrule' => 'expr',
5132             'matchrule' => 0,
5133             'implicit' => undef,
5134             'argcode' => undef,
5135             'lookahead' => 0,
5136             'line' => 26
5137             }, 'Parse::RecDescent::Subrule' ),
5138             'hashname' => '__DIRECTIVE1__',
5139             'type' => 'leftop',
5140             'op' => bless( {
5141             'pattern' => 'and',
5142             'hashname' => '__PATTERN1__',
5143             'description' => '/and/i',
5144             'lookahead' => 0,
5145             'rdelim' => '/',
5146             'line' => 26,
5147             'mod' => 'i',
5148             'ldelim' => '/'
5149             }, 'Parse::RecDescent::Token' )
5150             }, 'Parse::RecDescent::Operator' ),
5151             bless( {
5152             'hashname' => '__ACTION1__',
5153             'lookahead' => 0,
5154             'line' => 27,
5155             'code' => '{ @{$item[1]} < 2 ? $item[1][0] : [ \'AND\', @{$item[1]} ] }'
5156             }, 'Parse::RecDescent::Action' )
5157             ],
5158             'line' => undef
5159             }, 'Parse::RecDescent::Production' )
5160             ],
5161             'name' => 'and_expr',
5162             'vars' => '',
5163             'line' => 25
5164             }, 'Parse::RecDescent::Rule' ),
5165             'or_expr' => bless( {
5166             'impcount' => 0,
5167             'calls' => [
5168             'and_expr'
5169             ],
5170             'changed' => 0,
5171             'opcount' => 0,
5172             'prods' => [
5173             bless( {
5174             'number' => '0',
5175             'strcount' => 0,
5176             'dircount' => 1,
5177             'uncommit' => undef,
5178             'error' => undef,
5179             'patcount' => 1,
5180             'actcount' => 1,
5181             'op' => [],
5182             'items' => [
5183             bless( {
5184             'expected' => '',
5185             'min' => 1,
5186             'name' => '',
5187             'max' => 100000000,
5188             'leftarg' => bless( {
5189             'subrule' => 'and_expr',
5190             'matchrule' => 0,
5191             'implicit' => undef,
5192             'argcode' => undef,
5193             'lookahead' => 0,
5194             'line' => 23
5195             }, 'Parse::RecDescent::Subrule' ),
5196             'rightarg' => bless( {
5197             'subrule' => 'and_expr',
5198             'matchrule' => 0,
5199             'implicit' => undef,
5200             'argcode' => undef,
5201             'lookahead' => 0,
5202             'line' => 23
5203             }, 'Parse::RecDescent::Subrule' ),
5204             'hashname' => '__DIRECTIVE1__',
5205             'type' => 'leftop',
5206             'op' => bless( {
5207             'pattern' => 'or',
5208             'hashname' => '__PATTERN1__',
5209             'description' => '/or/i',
5210             'lookahead' => 0,
5211             'rdelim' => '/',
5212             'line' => 23,
5213             'mod' => 'i',
5214             'ldelim' => '/'
5215             }, 'Parse::RecDescent::Token' )
5216             }, 'Parse::RecDescent::Operator' ),
5217             bless( {
5218             'hashname' => '__ACTION1__',
5219             'lookahead' => 0,
5220             'line' => 24,
5221             'code' => '{ @{$item[1]} < 2 ? $item[1][0] : [ \'OR\', @{$item[1]} ] }'
5222             }, 'Parse::RecDescent::Action' )
5223             ],
5224             'line' => undef
5225             }, 'Parse::RecDescent::Production' )
5226             ],
5227             'name' => 'or_expr',
5228             'vars' => '',
5229             'line' => 22
5230             }, 'Parse::RecDescent::Rule' ),
5231             'arg_name' => bless( {
5232             'impcount' => 0,
5233             'calls' => [
5234             'vname'
5235             ],
5236             'changed' => 0,
5237             'opcount' => 0,
5238             'prods' => [
5239             bless( {
5240             'number' => '0',
5241             'strcount' => 2,
5242             'dircount' => 0,
5243             'uncommit' => undef,
5244             'error' => undef,
5245             'patcount' => 0,
5246             'actcount' => 1,
5247             'items' => [
5248             bless( {
5249             'pattern' => '\\\'',
5250             'hashname' => '__STRING1__',
5251             'description' => '\'\\\\\'\'',
5252             'lookahead' => 0,
5253             'line' => 70
5254             }, 'Parse::RecDescent::InterpLit' ),
5255             bless( {
5256             'subrule' => 'vname',
5257             'matchrule' => 0,
5258             'implicit' => undef,
5259             'argcode' => undef,
5260             'lookahead' => 0,
5261             'line' => 70
5262             }, 'Parse::RecDescent::Subrule' ),
5263             bless( {
5264             'pattern' => '\\\'',
5265             'hashname' => '__STRING2__',
5266             'description' => '\'\\\\\'\'',
5267             'lookahead' => 0,
5268             'line' => 70
5269             }, 'Parse::RecDescent::InterpLit' ),
5270             bless( {
5271             'hashname' => '__ACTION1__',
5272             'lookahead' => 0,
5273             'line' => 71,
5274             'code' => '{ $item[2] }'
5275             }, 'Parse::RecDescent::Action' )
5276             ],
5277             'line' => undef
5278             }, 'Parse::RecDescent::Production' ),
5279             bless( {
5280             'number' => '1',
5281             'strcount' => 0,
5282             'dircount' => 0,
5283             'uncommit' => undef,
5284             'error' => undef,
5285             'patcount' => 0,
5286             'actcount' => 1,
5287             'items' => [
5288             bless( {
5289             'subrule' => 'vname',
5290             'matchrule' => 0,
5291             'implicit' => undef,
5292             'argcode' => undef,
5293             'lookahead' => 0,
5294             'line' => 72
5295             }, 'Parse::RecDescent::Subrule' ),
5296             bless( {
5297             'hashname' => '__ACTION1__',
5298             'lookahead' => 0,
5299             'line' => 73,
5300             'code' => '{ $item[1] }'
5301             }, 'Parse::RecDescent::Action' )
5302             ],
5303             'line' => 72
5304             }, 'Parse::RecDescent::Production' )
5305             ],
5306             'name' => 'arg_name',
5307             'vars' => '',
5308             'line' => 69
5309             }, 'Parse::RecDescent::Rule' ),
5310             'comp_expr' => bless( {
5311             'impcount' => 0,
5312             'calls' => [
5313             'identifier',
5314             'comp_op'
5315             ],
5316             'changed' => 0,
5317             'opcount' => 0,
5318             'prods' => [
5319             bless( {
5320             'number' => '0',
5321             'strcount' => 0,
5322             'dircount' => 0,
5323             'uncommit' => undef,
5324             'error' => undef,
5325             'patcount' => 0,
5326             'actcount' => 1,
5327             'items' => [
5328             bless( {
5329             'subrule' => 'identifier',
5330             'matchrule' => 0,
5331             'implicit' => undef,
5332             'argcode' => undef,
5333             'lookahead' => 0,
5334             'line' => 35
5335             }, 'Parse::RecDescent::Subrule' ),
5336             bless( {
5337             'subrule' => 'comp_op',
5338             'matchrule' => 0,
5339             'implicit' => undef,
5340             'argcode' => undef,
5341             'lookahead' => 0,
5342             'line' => 35
5343             }, 'Parse::RecDescent::Subrule' ),
5344             bless( {
5345             'subrule' => 'identifier',
5346             'matchrule' => 0,
5347             'implicit' => undef,
5348             'argcode' => undef,
5349             'lookahead' => 0,
5350             'line' => 35
5351             }, 'Parse::RecDescent::Subrule' ),
5352             bless( {
5353             'hashname' => '__ACTION1__',
5354             'lookahead' => 0,
5355             'line' => 36,
5356             'code' => '{ [ \'COMP\', $item[1], $item[2], $item[3] ] }'
5357             }, 'Parse::RecDescent::Action' )
5358             ],
5359             'line' => undef
5360             }, 'Parse::RecDescent::Production' ),
5361             bless( {
5362             'number' => '1',
5363             'strcount' => 4,
5364             'dircount' => 0,
5365             'uncommit' => undef,
5366             'error' => undef,
5367             'patcount' => 2,
5368             'actcount' => 1,
5369             'items' => [
5370             bless( {
5371             'pattern' => 'upper',
5372             'hashname' => '__PATTERN1__',
5373             'description' => '/upper/i',
5374             'lookahead' => 0,
5375             'rdelim' => '/',
5376             'line' => 37,
5377             'mod' => 'i',
5378             'ldelim' => '/'
5379             }, 'Parse::RecDescent::Token' ),
5380             bless( {
5381             'pattern' => '(',
5382             'hashname' => '__STRING1__',
5383             'description' => '\'(\'',
5384             'lookahead' => 0,
5385             'line' => 37
5386             }, 'Parse::RecDescent::Literal' ),
5387             bless( {
5388             'subrule' => 'identifier',
5389             'matchrule' => 0,
5390             'implicit' => undef,
5391             'argcode' => undef,
5392             'lookahead' => 0,
5393             'line' => 37
5394             }, 'Parse::RecDescent::Subrule' ),
5395             bless( {
5396             'pattern' => ')',
5397             'hashname' => '__STRING2__',
5398             'description' => '\')\'',
5399             'lookahead' => 0,
5400             'line' => 37
5401             }, 'Parse::RecDescent::Literal' ),
5402             bless( {
5403             'subrule' => 'comp_op',
5404             'matchrule' => 0,
5405             'implicit' => undef,
5406             'argcode' => undef,
5407             'lookahead' => 0,
5408             'line' => 37
5409             }, 'Parse::RecDescent::Subrule' ),
5410             bless( {
5411             'pattern' => 'upper',
5412             'hashname' => '__PATTERN2__',
5413             'description' => '/upper/i',
5414             'lookahead' => 0,
5415             'rdelim' => '/',
5416             'line' => 37,
5417             'mod' => 'i',
5418             'ldelim' => '/'
5419             }, 'Parse::RecDescent::Token' ),
5420             bless( {
5421             'pattern' => '(',
5422             'hashname' => '__STRING3__',
5423             'description' => '\'(\'',
5424             'lookahead' => 0,
5425             'line' => 37
5426             }, 'Parse::RecDescent::Literal' ),
5427             bless( {
5428             'subrule' => 'identifier',
5429             'matchrule' => 0,
5430             'implicit' => undef,
5431             'argcode' => undef,
5432             'lookahead' => 0,
5433             'line' => 37
5434             }, 'Parse::RecDescent::Subrule' ),
5435             bless( {
5436             'pattern' => ')',
5437             'hashname' => '__STRING4__',
5438             'description' => '\')\'',
5439             'lookahead' => 0,
5440             'line' => 37
5441             }, 'Parse::RecDescent::Literal' ),
5442             bless( {
5443             'hashname' => '__ACTION1__',
5444             'lookahead' => 0,
5445             'line' => 38,
5446             'code' => '{ [ \'COMP\', $item[3], \'CONTAINS\', $item[8] ] }'
5447             }, 'Parse::RecDescent::Action' )
5448             ],
5449             'line' => 37
5450             }, 'Parse::RecDescent::Production' ),
5451             bless( {
5452             'number' => '2',
5453             'strcount' => 4,
5454             'dircount' => 0,
5455             'uncommit' => undef,
5456             'error' => undef,
5457             'patcount' => 2,
5458             'actcount' => 1,
5459             'items' => [
5460             bless( {
5461             'pattern' => 'lower',
5462             'hashname' => '__PATTERN1__',
5463             'description' => '/lower/i',
5464             'lookahead' => 0,
5465             'rdelim' => '/',
5466             'line' => 39,
5467             'mod' => 'i',
5468             'ldelim' => '/'
5469             }, 'Parse::RecDescent::Token' ),
5470             bless( {
5471             'pattern' => '(',
5472             'hashname' => '__STRING1__',
5473             'description' => '\'(\'',
5474             'lookahead' => 0,
5475             'line' => 39
5476             }, 'Parse::RecDescent::Literal' ),
5477             bless( {
5478             'subrule' => 'identifier',
5479             'matchrule' => 0,
5480             'implicit' => undef,
5481             'argcode' => undef,
5482             'lookahead' => 0,
5483             'line' => 39
5484             }, 'Parse::RecDescent::Subrule' ),
5485             bless( {
5486             'pattern' => ')',
5487             'hashname' => '__STRING2__',
5488             'description' => '\')\'',
5489             'lookahead' => 0,
5490             'line' => 39
5491             }, 'Parse::RecDescent::Literal' ),
5492             bless( {
5493             'subrule' => 'comp_op',
5494             'matchrule' => 0,
5495             'implicit' => undef,
5496             'argcode' => undef,
5497             'lookahead' => 0,
5498             'line' => 39
5499             }, 'Parse::RecDescent::Subrule' ),
5500             bless( {
5501             'pattern' => 'lower',
5502             'hashname' => '__PATTERN2__',
5503             'description' => '/lower/i',
5504             'lookahead' => 0,
5505             'rdelim' => '/',
5506             'line' => 39,
5507             'mod' => 'i',
5508             'ldelim' => '/'
5509             }, 'Parse::RecDescent::Token' ),
5510             bless( {
5511             'pattern' => '(',
5512             'hashname' => '__STRING3__',
5513             'description' => '\'(\'',
5514             'lookahead' => 0,
5515             'line' => 39
5516             }, 'Parse::RecDescent::Literal' ),
5517             bless( {
5518             'subrule' => 'identifier',
5519             'matchrule' => 0,
5520             'implicit' => undef,
5521             'argcode' => undef,
5522             'lookahead' => 0,
5523             'line' => 39
5524             }, 'Parse::RecDescent::Subrule' ),
5525             bless( {
5526             'pattern' => ')',
5527             'hashname' => '__STRING4__',
5528             'description' => '\')\'',
5529             'lookahead' => 0,
5530             'line' => 39
5531             }, 'Parse::RecDescent::Literal' ),
5532             bless( {
5533             'hashname' => '__ACTION1__',
5534             'lookahead' => 0,
5535             'line' => 40,
5536             'code' => '{ [ \'COMP\', $item[3], \'CONTAINS\', $item[8] ] }'
5537             }, 'Parse::RecDescent::Action' )
5538             ],
5539             'line' => 39
5540             }, 'Parse::RecDescent::Production' )
5541             ],
5542             'name' => 'comp_expr',
5543             'vars' => '',
5544             'line' => 34
5545             }, 'Parse::RecDescent::Rule' ),
5546             'comp_op' => bless( {
5547             'impcount' => 0,
5548             'calls' => [],
5549             'changed' => 0,
5550             'opcount' => 0,
5551             'prods' => [
5552             bless( {
5553             'number' => '0',
5554             'strcount' => 1,
5555             'dircount' => 0,
5556             'uncommit' => undef,
5557             'error' => undef,
5558             'patcount' => 0,
5559             'actcount' => 0,
5560             'items' => [
5561             bless( {
5562             'pattern' => '!=',
5563             'hashname' => '__STRING1__',
5564             'description' => '\'!=\'',
5565             'lookahead' => 0,
5566             'line' => 42
5567             }, 'Parse::RecDescent::Literal' )
5568             ],
5569             'line' => undef
5570             }, 'Parse::RecDescent::Production' ),
5571             bless( {
5572             'number' => '1',
5573             'strcount' => 1,
5574             'dircount' => 0,
5575             'uncommit' => undef,
5576             'error' => undef,
5577             'patcount' => 0,
5578             'actcount' => 0,
5579             'items' => [
5580             bless( {
5581             'pattern' => '<=',
5582             'hashname' => '__STRING1__',
5583             'description' => '\'<=\'',
5584             'lookahead' => 0,
5585             'line' => 42
5586             }, 'Parse::RecDescent::Literal' )
5587             ],
5588             'line' => 42
5589             }, 'Parse::RecDescent::Production' ),
5590             bless( {
5591             'number' => '2',
5592             'strcount' => 1,
5593             'dircount' => 0,
5594             'uncommit' => undef,
5595             'error' => undef,
5596             'patcount' => 0,
5597             'actcount' => 0,
5598             'items' => [
5599             bless( {
5600             'pattern' => '>=',
5601             'hashname' => '__STRING1__',
5602             'description' => '\'>=\'',
5603             'lookahead' => 0,
5604             'line' => 42
5605             }, 'Parse::RecDescent::Literal' )
5606             ],
5607             'line' => 42
5608             }, 'Parse::RecDescent::Production' ),
5609             bless( {
5610             'number' => '3',
5611             'strcount' => 0,
5612             'dircount' => 0,
5613             'uncommit' => undef,
5614             'error' => undef,
5615             'patcount' => 1,
5616             'actcount' => 0,
5617             'items' => [
5618             bless( {
5619             'pattern' => 'LIKE',
5620             'hashname' => '__PATTERN1__',
5621             'description' => '/LIKE/i',
5622             'lookahead' => 0,
5623             'rdelim' => '/',
5624             'line' => 42,
5625             'mod' => 'i',
5626             'ldelim' => '/'
5627             }, 'Parse::RecDescent::Token' )
5628             ],
5629             'line' => 42
5630             }, 'Parse::RecDescent::Production' ),
5631             bless( {
5632             'number' => '4',
5633             'strcount' => 0,
5634             'dircount' => 0,
5635             'uncommit' => undef,
5636             'error' => undef,
5637             'patcount' => 1,
5638             'actcount' => 0,
5639             'items' => [
5640             bless( {
5641             'pattern' => 'NOT\\s+LIKE',
5642             'hashname' => '__PATTERN1__',
5643             'description' => '/NOT\\\\s+LIKE/i',
5644             'lookahead' => 0,
5645             'rdelim' => '/',
5646             'line' => 42,
5647             'mod' => 'i',
5648             'ldelim' => '/'
5649             }, 'Parse::RecDescent::Token' )
5650             ],
5651             'line' => 42
5652             }, 'Parse::RecDescent::Production' ),
5653             bless( {
5654             'number' => '5',
5655             'strcount' => 1,
5656             'dircount' => 0,
5657             'uncommit' => undef,
5658             'error' => undef,
5659             'patcount' => 0,
5660             'actcount' => 0,
5661             'items' => [
5662             bless( {
5663             'pattern' => '<',
5664             'hashname' => '__STRING1__',
5665             'description' => '\'<\'',
5666             'lookahead' => 0,
5667             'line' => 42
5668             }, 'Parse::RecDescent::Literal' )
5669             ],
5670             'line' => 42
5671             }, 'Parse::RecDescent::Production' ),
5672             bless( {
5673             'number' => '6',
5674             'strcount' => 1,
5675             'dircount' => 0,
5676             'uncommit' => undef,
5677             'error' => undef,
5678             'patcount' => 0,
5679             'actcount' => 0,
5680             'items' => [
5681             bless( {
5682             'pattern' => '>',
5683             'hashname' => '__STRING1__',
5684             'description' => '\'>\'',
5685             'lookahead' => 0,
5686             'line' => 42
5687             }, 'Parse::RecDescent::Literal' )
5688             ],
5689             'line' => 42
5690             }, 'Parse::RecDescent::Production' ),
5691             bless( {
5692             'number' => '7',
5693             'strcount' => 1,
5694             'dircount' => 0,
5695             'uncommit' => undef,
5696             'error' => undef,
5697             'patcount' => 0,
5698             'actcount' => 0,
5699             'items' => [
5700             bless( {
5701             'pattern' => '=',
5702             'hashname' => '__STRING1__',
5703             'description' => '\'=\'',
5704             'lookahead' => 0,
5705             'line' => 42
5706             }, 'Parse::RecDescent::Literal' )
5707             ],
5708             'line' => 42
5709             }, 'Parse::RecDescent::Production' )
5710             ],
5711             'name' => 'comp_op',
5712             'vars' => '',
5713             'line' => 41
5714             }, 'Parse::RecDescent::Rule' ),
5715             'farg' => bless( {
5716             'impcount' => 0,
5717             'calls' => [
5718             'arg_name',
5719             'arg_val'
5720             ],
5721             'changed' => 0,
5722             'opcount' => 0,
5723             'prods' => [
5724             bless( {
5725             'number' => '0',
5726             'strcount' => 1,
5727             'dircount' => 0,
5728             'uncommit' => undef,
5729             'error' => undef,
5730             'patcount' => 0,
5731             'actcount' => 1,
5732             'items' => [
5733             bless( {
5734             'subrule' => 'arg_name',
5735             'matchrule' => 0,
5736             'implicit' => undef,
5737             'argcode' => undef,
5738             'lookahead' => 0,
5739             'line' => 65
5740             }, 'Parse::RecDescent::Subrule' ),
5741             bless( {
5742             'pattern' => '=>',
5743             'hashname' => '__STRING1__',
5744             'description' => '\'=>\'',
5745             'lookahead' => 0,
5746             'line' => 65
5747             }, 'Parse::RecDescent::Literal' ),
5748             bless( {
5749             'subrule' => 'arg_val',
5750             'matchrule' => 0,
5751             'implicit' => undef,
5752             'argcode' => undef,
5753             'lookahead' => 0,
5754             'line' => 65
5755             }, 'Parse::RecDescent::Subrule' ),
5756             bless( {
5757             'hashname' => '__ACTION1__',
5758             'lookahead' => 0,
5759             'line' => 66,
5760             'code' => '{ [ $item[1] => $item[3] ] }'
5761             }, 'Parse::RecDescent::Action' )
5762             ],
5763             'line' => undef
5764             }, 'Parse::RecDescent::Production' ),
5765             bless( {
5766             'number' => '1',
5767             'strcount' => 4,
5768             'dircount' => 1,
5769             'uncommit' => undef,
5770             'error' => undef,
5771             'patcount' => 0,
5772             'actcount' => 1,
5773             'op' => [],
5774             'items' => [
5775             bless( {
5776             'subrule' => 'arg_name',
5777             'matchrule' => 0,
5778             'implicit' => undef,
5779             'argcode' => undef,
5780             'lookahead' => 0,
5781             'line' => 67
5782             }, 'Parse::RecDescent::Subrule' ),
5783             bless( {
5784             'pattern' => '=>',
5785             'hashname' => '__STRING1__',
5786             'description' => '\'=>\'',
5787             'lookahead' => 0,
5788             'line' => 67
5789             }, 'Parse::RecDescent::Literal' ),
5790             bless( {
5791             'pattern' => '[',
5792             'hashname' => '__STRING2__',
5793             'description' => '\'[\'',
5794             'lookahead' => 0,
5795             'line' => 67
5796             }, 'Parse::RecDescent::Literal' ),
5797             bless( {
5798             'expected' => '',
5799             'min' => 1,
5800             'name' => '',
5801             'max' => 100000000,
5802             'leftarg' => bless( {
5803             'subrule' => 'arg_val',
5804             'matchrule' => 0,
5805             'implicit' => undef,
5806             'argcode' => undef,
5807             'lookahead' => 0,
5808             'line' => 67
5809             }, 'Parse::RecDescent::Subrule' ),
5810             'rightarg' => bless( {
5811             'subrule' => 'arg_val',
5812             'matchrule' => 0,
5813             'implicit' => undef,
5814             'argcode' => undef,
5815             'lookahead' => 0,
5816             'line' => 67
5817             }, 'Parse::RecDescent::Subrule' ),
5818             'hashname' => '__DIRECTIVE1__',
5819             'type' => 'leftop',
5820             'op' => bless( {
5821             'pattern' => ',',
5822             'hashname' => '__STRING3__',
5823             'description' => '\',\'',
5824             'lookahead' => 0,
5825             'line' => 67
5826             }, 'Parse::RecDescent::Literal' )
5827             }, 'Parse::RecDescent::Operator' ),
5828             bless( {
5829             'pattern' => ']',
5830             'hashname' => '__STRING4__',
5831             'description' => '\']\'',
5832             'lookahead' => 0,
5833             'line' => 67
5834             }, 'Parse::RecDescent::Literal' ),
5835             bless( {
5836             'hashname' => '__ACTION1__',
5837             'lookahead' => 0,
5838             'line' => 68,
5839             'code' => '{ [ $item[1] => [ @{$item[4]} ] ] }'
5840             }, 'Parse::RecDescent::Action' )
5841             ],
5842             'line' => 67
5843             }, 'Parse::RecDescent::Production' )
5844             ],
5845             'name' => 'farg',
5846             'vars' => '',
5847             'line' => 64
5848             }, 'Parse::RecDescent::Rule' ),
5849             'numval' => bless( {
5850             'impcount' => 0,
5851             'calls' => [],
5852             'changed' => 0,
5853             'opcount' => 0,
5854             'prods' => [
5855             bless( {
5856             'number' => '0',
5857             'strcount' => 0,
5858             'dircount' => 0,
5859             'uncommit' => undef,
5860             'error' => undef,
5861             'patcount' => 1,
5862             'actcount' => 1,
5863             'items' => [
5864             bless( {
5865             'pattern' => '[\\-]?\\d+',
5866             'hashname' => '__PATTERN1__',
5867             'description' => '/[\\\\-]?\\\\d+/',
5868             'lookahead' => 0,
5869             'rdelim' => '/',
5870             'line' => 81,
5871             'mod' => '',
5872             'ldelim' => '/'
5873             }, 'Parse::RecDescent::Token' ),
5874             bless( {
5875             'hashname' => '__ACTION1__',
5876             'lookahead' => 0,
5877             'line' => 82,
5878             'code' => '{ $item[1] }'
5879             }, 'Parse::RecDescent::Action' )
5880             ],
5881             'line' => undef
5882             }, 'Parse::RecDescent::Production' )
5883             ],
5884             'name' => 'numval',
5885             'vars' => '',
5886             'line' => 80
5887             }, 'Parse::RecDescent::Rule' ),
5888             'identifier' => bless( {
5889             'impcount' => 0,
5890             'calls' => [],
5891             'changed' => 0,
5892             'opcount' => 0,
5893             'prods' => [
5894             bless( {
5895             'number' => '0',
5896             'strcount' => 2,
5897             'dircount' => 0,
5898             'uncommit' => undef,
5899             'error' => undef,
5900             'patcount' => 1,
5901             'actcount' => 1,
5902             'items' => [
5903             bless( {
5904             'pattern' => '[',
5905             'hashname' => '__STRING1__',
5906             'description' => '\'[\'',
5907             'lookahead' => 0,
5908             'line' => 44
5909             }, 'Parse::RecDescent::Literal' ),
5910             bless( {
5911             'pattern' => '[^\\]]*',
5912             'hashname' => '__PATTERN1__',
5913             'description' => '/[^\\\\]]*/',
5914             'lookahead' => 0,
5915             'rdelim' => '/',
5916             'line' => 44,
5917             'mod' => '',
5918             'ldelim' => '/'
5919             }, 'Parse::RecDescent::Token' ),
5920             bless( {
5921             'pattern' => ']',
5922             'hashname' => '__STRING2__',
5923             'description' => '\']\'',
5924             'lookahead' => 0,
5925             'line' => 44
5926             }, 'Parse::RecDescent::Literal' ),
5927             bless( {
5928             'hashname' => '__ACTION1__',
5929             'lookahead' => 0,
5930             'line' => 45,
5931             'code' => '{ [ \'COLM\', $item[2] ] }'
5932             }, 'Parse::RecDescent::Action' )
5933             ],
5934             'line' => undef
5935             }, 'Parse::RecDescent::Production' ),
5936             bless( {
5937             'number' => '1',
5938             'strcount' => 2,
5939             'dircount' => 0,
5940             'uncommit' => undef,
5941             'error' => undef,
5942             'patcount' => 1,
5943             'actcount' => 1,
5944             'items' => [
5945             bless( {
5946             'pattern' => '\\\'',
5947             'hashname' => '__STRING1__',
5948             'description' => '\'\\\\\'\'',
5949             'lookahead' => 0,
5950             'line' => 46
5951             }, 'Parse::RecDescent::InterpLit' ),
5952             bless( {
5953             'pattern' => '[^\\\']*',
5954             'hashname' => '__PATTERN1__',
5955             'description' => '/[^\\\\\']*/',
5956             'lookahead' => 0,
5957             'rdelim' => '/',
5958             'line' => 46,
5959             'mod' => '',
5960             'ldelim' => '/'
5961             }, 'Parse::RecDescent::Token' ),
5962             bless( {
5963             'pattern' => '\\\'',
5964             'hashname' => '__STRING2__',
5965             'description' => '\'\\\\\'\'',
5966             'lookahead' => 0,
5967             'line' => 46
5968             }, 'Parse::RecDescent::InterpLit' ),
5969             bless( {
5970             'hashname' => '__ACTION1__',
5971             'lookahead' => 0,
5972             'line' => 47,
5973             'code' => '{ [\'VAL\', $item[2] ] }'
5974             }, 'Parse::RecDescent::Action' )
5975             ],
5976             'line' => 46
5977             }, 'Parse::RecDescent::Production' ),
5978             bless( {
5979             'number' => '2',
5980             'strcount' => 2,
5981             'dircount' => 0,
5982             'uncommit' => undef,
5983             'error' => undef,
5984             'patcount' => 1,
5985             'actcount' => 1,
5986             'items' => [
5987             bless( {
5988             'pattern' => '"',
5989             'hashname' => '__STRING1__',
5990             'description' => '\'"\'',
5991             'lookahead' => 0,
5992             'line' => 48
5993             }, 'Parse::RecDescent::Literal' ),
5994             bless( {
5995             'pattern' => '[^\\\']*',
5996             'hashname' => '__PATTERN1__',
5997             'description' => '/[^\\\\\']*/',
5998             'lookahead' => 0,
5999             'rdelim' => '/',
6000             'line' => 48,
6001             'mod' => '',
6002             'ldelim' => '/'
6003             }, 'Parse::RecDescent::Token' ),
6004             bless( {
6005             'pattern' => '"',
6006             'hashname' => '__STRING2__',
6007             'description' => '\'"\'',
6008             'lookahead' => 0,
6009             'line' => 48
6010             }, 'Parse::RecDescent::Literal' ),
6011             bless( {
6012             'hashname' => '__ACTION1__',
6013             'lookahead' => 0,
6014             'line' => 49,
6015             'code' => '{ [\'VAL\', $item[2] ] }'
6016             }, 'Parse::RecDescent::Action' )
6017             ],
6018             'line' => 48
6019             }, 'Parse::RecDescent::Production' ),
6020             bless( {
6021             'number' => '3',
6022             'strcount' => 0,
6023             'dircount' => 0,
6024             'uncommit' => undef,
6025             'error' => undef,
6026             'patcount' => 1,
6027             'actcount' => 1,
6028             'items' => [
6029             bless( {
6030             'pattern' => '[\\-]?\\d+\\.?\\d*',
6031             'hashname' => '__PATTERN1__',
6032             'description' => '/[\\\\-]?\\\\d+\\\\.?\\\\d*/',
6033             'lookahead' => 0,
6034             'rdelim' => '/',
6035             'line' => 50,
6036             'mod' => '',
6037             'ldelim' => '/'
6038             }, 'Parse::RecDescent::Token' ),
6039             bless( {
6040             'hashname' => '__ACTION1__',
6041             'lookahead' => 0,
6042             'line' => 51,
6043             'code' => '{ [\'VAL\', $item[1] ] }'
6044             }, 'Parse::RecDescent::Action' )
6045             ],
6046             'line' => 50
6047             }, 'Parse::RecDescent::Production' ),
6048             bless( {
6049             'number' => '4',
6050             'strcount' => 0,
6051             'dircount' => 0,
6052             'uncommit' => undef,
6053             'error' => undef,
6054             'patcount' => 1,
6055             'actcount' => 1,
6056             'items' => [
6057             bless( {
6058             'pattern' => '[\\-]?\\d*\\.?\\d+',
6059             'hashname' => '__PATTERN1__',
6060             'description' => '/[\\\\-]?\\\\d*\\\\.?\\\\d+/',
6061             'lookahead' => 0,
6062             'rdelim' => '/',
6063             'line' => 52,
6064             'mod' => '',
6065             'ldelim' => '/'
6066             }, 'Parse::RecDescent::Token' ),
6067             bless( {
6068             'hashname' => '__ACTION1__',
6069             'lookahead' => 0,
6070             'line' => 53,
6071             'code' => '{ [\'VAL\', $item[1] ] }'
6072             }, 'Parse::RecDescent::Action' )
6073             ],
6074             'line' => 52
6075             }, 'Parse::RecDescent::Production' )
6076             ],
6077             'name' => 'identifier',
6078             'vars' => '',
6079             'line' => 43
6080             }, 'Parse::RecDescent::Rule' ),
6081             'expr' => bless( {
6082             'impcount' => 0,
6083             'calls' => [
6084             'or_expr',
6085             'function',
6086             'comp_expr'
6087             ],
6088             'changed' => 0,
6089             'opcount' => 0,
6090             'prods' => [
6091             bless( {
6092             'number' => '0',
6093             'strcount' => 2,
6094             'dircount' => 0,
6095             'uncommit' => undef,
6096             'error' => undef,
6097             'patcount' => 0,
6098             'actcount' => 1,
6099             'items' => [
6100             bless( {
6101             'pattern' => '(',
6102             'hashname' => '__STRING1__',
6103             'description' => '\'(\'',
6104             'lookahead' => 0,
6105             'line' => 29
6106             }, 'Parse::RecDescent::Literal' ),
6107             bless( {
6108             'subrule' => 'or_expr',
6109             'matchrule' => 0,
6110             'implicit' => undef,
6111             'argcode' => undef,
6112             'lookahead' => 0,
6113             'line' => 29
6114             }, 'Parse::RecDescent::Subrule' ),
6115             bless( {
6116             'pattern' => ')',
6117             'hashname' => '__STRING2__',
6118             'description' => '\')\'',
6119             'lookahead' => 0,
6120             'line' => 29
6121             }, 'Parse::RecDescent::Literal' ),
6122             bless( {
6123             'hashname' => '__ACTION1__',
6124             'lookahead' => 0,
6125             'line' => 30,
6126             'code' => '{ [ \'()\' , $item[2] ] }'
6127             }, 'Parse::RecDescent::Action' )
6128             ],
6129             'line' => undef
6130             }, 'Parse::RecDescent::Production' ),
6131             bless( {
6132             'number' => '1',
6133             'strcount' => 0,
6134             'dircount' => 0,
6135             'uncommit' => undef,
6136             'error' => undef,
6137             'patcount' => 0,
6138             'actcount' => 0,
6139             'items' => [
6140             bless( {
6141             'subrule' => 'function',
6142             'matchrule' => 0,
6143             'implicit' => undef,
6144             'argcode' => undef,
6145             'lookahead' => 0,
6146             'line' => 31
6147             }, 'Parse::RecDescent::Subrule' )
6148             ],
6149             'line' => 31
6150             }, 'Parse::RecDescent::Production' ),
6151             bless( {
6152             'number' => '2',
6153             'strcount' => 0,
6154             'dircount' => 0,
6155             'uncommit' => undef,
6156             'error' => undef,
6157             'patcount' => 0,
6158             'actcount' => 0,
6159             'items' => [
6160             bless( {
6161             'subrule' => 'comp_expr',
6162             'matchrule' => 0,
6163             'implicit' => undef,
6164             'argcode' => undef,
6165             'lookahead' => 0,
6166             'line' => 32
6167             }, 'Parse::RecDescent::Subrule' )
6168             ],
6169             'line' => 32
6170             }, 'Parse::RecDescent::Production' ),
6171             bless( {
6172             'number' => '3',
6173             'strcount' => 0,
6174             'dircount' => 1,
6175             'uncommit' => 0,
6176             'error' => 1,
6177             'patcount' => 0,
6178             'actcount' => 0,
6179             'items' => [
6180             bless( {
6181             'msg' => '',
6182             'hashname' => '__DIRECTIVE1__',
6183             'commitonly' => '',
6184             'lookahead' => 0,
6185             'line' => 33
6186             }, 'Parse::RecDescent::Error' )
6187             ],
6188             'line' => 33
6189             }, 'Parse::RecDescent::Production' )
6190             ],
6191             'name' => 'expr',
6192             'vars' => '',
6193             'line' => 28
6194             }, 'Parse::RecDescent::Rule' ),
6195             'expression' => bless( {
6196             'impcount' => 0,
6197             'calls' => [
6198             'or_expr'
6199             ],
6200             'changed' => 0,
6201             'opcount' => 0,
6202             'prods' => [
6203             bless( {
6204             'number' => '0',
6205             'strcount' => 0,
6206             'dircount' => 0,
6207             'uncommit' => undef,
6208             'error' => undef,
6209             'patcount' => 1,
6210             'actcount' => 1,
6211             'items' => [
6212             bless( {
6213             'subrule' => 'or_expr',
6214             'matchrule' => 0,
6215             'implicit' => undef,
6216             'argcode' => undef,
6217             'lookahead' => 0,
6218             'line' => 18
6219             }, 'Parse::RecDescent::Subrule' ),
6220             bless( {
6221             'pattern' => '\\Z',
6222             'hashname' => '__PATTERN1__',
6223             'description' => '/\\\\Z/',
6224             'lookahead' => 0,
6225             'rdelim' => '/',
6226             'line' => 18,
6227             'mod' => '',
6228             'ldelim' => '/'
6229             }, 'Parse::RecDescent::Token' ),
6230             bless( {
6231             'hashname' => '__ACTION1__',
6232             'lookahead' => 0,
6233             'line' => 19,
6234             'code' => '{ $item[1] }'
6235             }, 'Parse::RecDescent::Action' )
6236             ],
6237             'line' => undef
6238             }, 'Parse::RecDescent::Production' ),
6239             bless( {
6240             'number' => '1',
6241             'strcount' => 0,
6242             'dircount' => 1,
6243             'uncommit' => 0,
6244             'error' => 1,
6245             'patcount' => 0,
6246             'actcount' => 0,
6247             'items' => [
6248             bless( {
6249             'msg' => '',
6250             'hashname' => '__DIRECTIVE1__',
6251             'commitonly' => '',
6252             'lookahead' => 0,
6253             'line' => 20
6254             }, 'Parse::RecDescent::Error' )
6255             ],
6256             'line' => 20
6257             }, 'Parse::RecDescent::Production' )
6258             ],
6259             'name' => 'expression',
6260             'vars' => '',
6261             'line' => 14
6262             }, 'Parse::RecDescent::Rule' ),
6263             'arg_val' => bless( {
6264             'impcount' => 0,
6265             'calls' => [
6266             'numval'
6267             ],
6268             'changed' => 0,
6269             'opcount' => 0,
6270             'prods' => [
6271             bless( {
6272             'number' => '0',
6273             'strcount' => 0,
6274             'dircount' => 0,
6275             'uncommit' => undef,
6276             'error' => undef,
6277             'patcount' => 0,
6278             'actcount' => 1,
6279             'items' => [
6280             bless( {
6281             'subrule' => 'numval',
6282             'matchrule' => 0,
6283             'implicit' => undef,
6284             'argcode' => undef,
6285             'lookahead' => 0,
6286             'line' => 75
6287             }, 'Parse::RecDescent::Subrule' ),
6288             bless( {
6289             'hashname' => '__ACTION1__',
6290             'lookahead' => 0,
6291             'line' => 76,
6292             'code' => '{ "$item[1]" }'
6293             }, 'Parse::RecDescent::Action' )
6294             ],
6295             'line' => undef
6296             }, 'Parse::RecDescent::Production' ),
6297             bless( {
6298             'number' => '1',
6299             'strcount' => 2,
6300             'dircount' => 0,
6301             'uncommit' => undef,
6302             'error' => undef,
6303             'patcount' => 1,
6304             'actcount' => 1,
6305             'items' => [
6306             bless( {
6307             'pattern' => '\\\'',
6308             'hashname' => '__STRING1__',
6309             'description' => '\'\\\\\'\'',
6310             'lookahead' => 0,
6311             'line' => 77
6312             }, 'Parse::RecDescent::InterpLit' ),
6313             bless( {
6314             'pattern' => '[^\\\']*',
6315             'hashname' => '__PATTERN1__',
6316             'description' => '/[^\\\\\']*/',
6317             'lookahead' => 0,
6318             'rdelim' => '/',
6319             'line' => 77,
6320             'mod' => '',
6321             'ldelim' => '/'
6322             }, 'Parse::RecDescent::Token' ),
6323             bless( {
6324             'pattern' => '\\\'',
6325             'hashname' => '__STRING2__',
6326             'description' => '\'\\\\\'\'',
6327             'lookahead' => 0,
6328             'line' => 77
6329             }, 'Parse::RecDescent::InterpLit' ),
6330             bless( {
6331             'hashname' => '__ACTION1__',
6332             'lookahead' => 0,
6333             'line' => 78,
6334             'code' => '{ "$item[2]" }'
6335             }, 'Parse::RecDescent::Action' )
6336             ],
6337             'line' => 77
6338             }, 'Parse::RecDescent::Production' )
6339             ],
6340             'name' => 'arg_val',
6341             'vars' => '',
6342             'line' => 74
6343             }, 'Parse::RecDescent::Rule' ),
6344             'vname' => bless( {
6345             'impcount' => 0,
6346             'calls' => [],
6347             'changed' => 0,
6348             'opcount' => 0,
6349             'prods' => [
6350             bless( {
6351             'number' => '0',
6352             'strcount' => 0,
6353             'dircount' => 0,
6354             'uncommit' => undef,
6355             'error' => undef,
6356             'patcount' => 1,
6357             'actcount' => 1,
6358             'items' => [
6359             bless( {
6360             'pattern' => '[a-zA-Z]+[\\w]*',
6361             'hashname' => '__PATTERN1__',
6362             'description' => '/[a-zA-Z]+[\\\\w]*/',
6363             'lookahead' => 0,
6364             'rdelim' => '/',
6365             'line' => 61,
6366             'mod' => '',
6367             'ldelim' => '/'
6368             }, 'Parse::RecDescent::Token' ),
6369             bless( {
6370             'hashname' => '__ACTION1__',
6371             'lookahead' => 0,
6372             'line' => 62,
6373             'code' => '{ $item[1] }'
6374             }, 'Parse::RecDescent::Action' )
6375             ],
6376             'line' => undef
6377             }, 'Parse::RecDescent::Production' )
6378             ],
6379             'name' => 'vname',
6380             'vars' => '',
6381             'line' => 60
6382             }, 'Parse::RecDescent::Rule' )
6383             }
6384             }, 'Parse::RecDescent' );
6385             }