noddos: Noddos v0.5.0 with mDNS / DNS-SD support
[feed/packages.git] / sound / forked-daapd / patches / 010-include_pregen.patch
1 diff --git a/src/pregen/DAAP.u b/src/pregen/DAAP.u
2 new file mode 100644
3 index 0000000..3de527b
4 --- /dev/null
5 +++ b/src/pregen/DAAP.u
6 @@ -0,0 +1,6 @@
7 +DAAPParser.c : DAAP.g
8 +./DAAP.tokens : DAAP.g
9 +DAAPParser.h : DAAP.g
10 +DAAPLexer.c : DAAP.g
11 +DAAPLexer.h : DAAP.g
12 +ANTLR_PRODUCTS += DAAPParser.c ./DAAP.tokens DAAPParser.h DAAPLexer.c DAAPLexer.h
13 \ No newline at end of file
14 diff --git a/src/pregen/DAAP2SQL.c b/src/pregen/DAAP2SQL.c
15 new file mode 100644
16 index 0000000..04d6153
17 --- /dev/null
18 +++ b/src/pregen/DAAP2SQL.c
19 @@ -0,0 +1,975 @@
20 +/** \file
21 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
22 + *
23 + * - From the grammar source file : DAAP2SQL.g
24 + * - On : 2016-01-01 12:23:43
25 + * - for the tree parser : DAAP2SQLTreeParser *
26 + * Editing it, at least manually, is not wise.
27 + *
28 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
29 + *
30 + *
31 +*/
32 +// [The "BSD licence"]
33 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
34 +// http://www.temporal-wave.com
35 +// http://www.linkedin.com/in/jimidle
36 +//
37 +// All rights reserved.
38 +//
39 +// Redistribution and use in source and binary forms, with or without
40 +// modification, are permitted provided that the following conditions
41 +// are met:
42 +// 1. Redistributions of source code must retain the above copyright
43 +// notice, this list of conditions and the following disclaimer.
44 +// 2. Redistributions in binary form must reproduce the above copyright
45 +// notice, this list of conditions and the following disclaimer in the
46 +// documentation and/or other materials provided with the distribution.
47 +// 3. The name of the author may not be used to endorse or promote products
48 +// derived from this software without specific prior written permission.
49 +//
50 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
51 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
54 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
55 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
57 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
58 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
59 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60 +
61 +
62 +/* =============================================================================
63 + * This is what the grammar programmer asked us to put at the top of every file.
64 + */
65 +
66 + #include <stdio.h>
67 + #include <stdlib.h>
68 + #include <string.h>
69 + #include <limits.h>
70 + #include <errno.h>
71 +
72 + #include "logger.h"
73 + #include "db.h"
74 + #include "daap_query.h"
75 +
76 +/* End of Header action.
77 + * =============================================================================
78 + */
79 +/* -----------------------------------------
80 + * Include the ANTLR3 generated header file.
81 + */
82 +#include "DAAP2SQL.h"
83 +/* ----------------------------------------- */
84 +
85 +
86 +
87 +
88 +
89 +/* MACROS that hide the C interface implementations from the
90 + * generated code, which makes it a little more understandable to the human eye.
91 + * I am very much against using C pre-processor macros for function calls and bits
92 + * of code as you cannot see what is happening when single stepping in debuggers
93 + * and so on. The exception (in my book at least) is for generated code, where you are
94 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
95 + * hides some indirect calls, but is always referring to the input stream. This is
96 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
97 + * the runtime interfaces without changing the generated code too often, without
98 + * confusing the reader of the generated output, who may not wish to know the gory
99 + * details of the interface inheritance.
100 + */
101 +
102 +#define CTX ctx
103 +
104 +/* Aids in accessing scopes for grammar programmers
105 + */
106 +#undef SCOPE_TYPE
107 +#undef SCOPE_STACK
108 +#undef SCOPE_TOP
109 +#define SCOPE_TYPE(scope) pDAAP2SQL_##scope##_SCOPE
110 +#define SCOPE_STACK(scope) pDAAP2SQL_##scope##Stack
111 +#define SCOPE_TOP(scope) ctx->pDAAP2SQL_##scope##Top
112 +#define SCOPE_SIZE(scope) ctx->pDAAP2SQL_##scope##Stack_limit
113 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
114 +
115 +/* Macros for accessing things in the parser
116 + */
117 +
118 +#undef PARSER
119 +#undef RECOGNIZER
120 +#undef HAVEPARSEDRULE
121 +#undef INPUT
122 +#undef STRSTREAM
123 +#undef HASEXCEPTION
124 +#undef EXCEPTION
125 +#undef MATCHT
126 +#undef MATCHANYT
127 +#undef FOLLOWSTACK
128 +#undef FOLLOWPUSH
129 +#undef FOLLOWPOP
130 +#undef PRECOVER
131 +#undef PREPORTERROR
132 +#undef LA
133 +#undef LT
134 +#undef CONSTRUCTEX
135 +#undef CONSUME
136 +#undef MARK
137 +#undef REWIND
138 +#undef REWINDLAST
139 +#undef PERRORRECOVERY
140 +#undef HASFAILED
141 +#undef FAILEDFLAG
142 +#undef RECOVERFROMMISMATCHEDSET
143 +#undef RECOVERFROMMISMATCHEDELEMENT
144 +#undef BACKTRACKING
145 +#undef ADAPTOR
146 +#undef RULEMEMO
147 +#undef SEEK
148 +#undef INDEX
149 +#undef DBG
150 +
151 +#define PARSER ctx->pTreeParser
152 +#define RECOGNIZER PARSER->rec
153 +#define PSRSTATE RECOGNIZER->state
154 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
155 +#define INPUT PARSER->ctnstream
156 +#define ISTREAM INPUT->tnstream->istream
157 +#define STRSTREAM INPUT->tnstream
158 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
159 +#define EXCEPTION PSRSTATE->exception
160 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
161 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
162 +#define FOLLOWSTACK PSRSTATE->following
163 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
164 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
165 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
166 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
167 +#define LA(n) ISTREAM->_LA(ISTREAM, n)
168 +#define LT(n) INPUT->tnstream->_LT(INPUT->tnstream, n)
169 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
170 +#define CONSUME() ISTREAM->consume(ISTREAM)
171 +#define MARK() ISTREAM->mark(ISTREAM)
172 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
173 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
174 +#define PERRORRECOVERY PSRSTATE->errorRecovery
175 +#define FAILEDFLAG PSRSTATE->failed
176 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
177 +#define BACKTRACKING PSRSTATE->backtracking
178 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
179 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
180 +#define ADAPTOR INPUT->adaptor
181 +#define RULEMEMO PSRSTATE->ruleMemo
182 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
183 +#define INDEX() ISTREAM->index(ISTREAM)
184 +#define DBG RECOGNIZER->debugger
185 +
186 +
187 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
188 +
189 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
190 + * then for the present you must use different names for your defines as these are hard coded
191 + * in the code generator. It would be better not to use such names internally, and maybe
192 + * we can change this in a forthcoming release. I deliberately do not #undef these
193 + * here as this will at least give you a redefined error somewhere if they clash.
194 + */
195 +#define UP ANTLR3_TOKEN_UP
196 +#define DOWN ANTLR3_TOKEN_DOWN
197 +#define EOR ANTLR3_TOKEN_EOR
198 +#define INVALID ANTLR3_TOKEN_INVALID
199 +
200 +
201 +/* =============================================================================
202 + * Functions to create and destroy scopes. First come the rule scopes, followed
203 + * by the global declared scopes.
204 + */
205 +
206 +
207 +
208 +/* ============================================================================= */
209 +
210 +/* =============================================================================
211 + * Start of recognizer
212 + */
213 +
214 +
215 +
216 +/** \brief Table of all token names in symbolic order, mainly used for
217 + * error reporting.
218 + */
219 +pANTLR3_UINT8 DAAP2SQLTokenNames[8+4]
220 + = {
221 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
222 + (pANTLR3_UINT8) "<EOR>",
223 + (pANTLR3_UINT8) "<DOWN>",
224 + (pANTLR3_UINT8) "<UP>",
225 + (pANTLR3_UINT8) "NEWLINE",
226 + (pANTLR3_UINT8) "OPOR",
227 + (pANTLR3_UINT8) "OPAND",
228 + (pANTLR3_UINT8) "LPAR",
229 + (pANTLR3_UINT8) "RPAR",
230 + (pANTLR3_UINT8) "STR",
231 + (pANTLR3_UINT8) "QUOTE",
232 + (pANTLR3_UINT8) "ESCAPED"
233 + };
234 +
235 +
236 +
237 +// Forward declare the locally static matching functions we have generated.
238 +//
239 +static pANTLR3_STRING query (pDAAP2SQL ctx);
240 +static DAAP2SQL_expr_return expr (pDAAP2SQL ctx);
241 +static void DAAP2SQLFree(pDAAP2SQL ctx);
242 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
243 + * we need a function that knows how to free a return scope when the list is destroyed.
244 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
245 + */
246 +static void ANTLR3_CDECL freeScope(void * scope)
247 +{
248 + ANTLR3_FREE(scope);
249 +}
250 +
251 +/** \brief Name of the grammar file that generated this code
252 + */
253 +static const char fileName[] = "DAAP2SQL.g";
254 +
255 +/** \brief Return the name of the grammar file that generated this code.
256 + */
257 +static const char * getGrammarFileName()
258 +{
259 + return fileName;
260 +}
261 +/** \brief Create a new DAAP2SQL parser and return a context for it.
262 + *
263 + * \param[in] instream Pointer to an input stream interface.
264 + *
265 + * \return Pointer to new parser context upon success.
266 + */
267 +ANTLR3_API pDAAP2SQL
268 +DAAP2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream)
269 +{
270 + // See if we can create a new parser with the standard constructor
271 + //
272 + return DAAP2SQLNewSSD(instream, NULL);
273 +}
274 +
275 +/** \brief Create a new DAAP2SQL parser and return a context for it.
276 + *
277 + * \param[in] instream Pointer to an input stream interface.
278 + *
279 + * \return Pointer to new parser context upon success.
280 + */
281 +ANTLR3_API pDAAP2SQL
282 +DAAP2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
283 +{
284 + pDAAP2SQL ctx; /* Context structure we will build and return */
285 +
286 + ctx = (pDAAP2SQL) ANTLR3_CALLOC(1, sizeof(DAAP2SQL));
287 +
288 + if (ctx == NULL)
289 + {
290 + // Failed to allocate memory for parser context
291 + //
292 + return NULL;
293 + }
294 +
295 + /* -------------------------------------------------------------------
296 + * Memory for basic structure is allocated, now to fill in
297 + * the base ANTLR3 structures. We initialize the function pointers
298 + * for the standard ANTLR3 parser function set, but upon return
299 + * from here, the programmer may set the pointers to provide custom
300 + * implementations of each function.
301 + *
302 + * We don't use the macros defined in DAAP2SQL.h here, in order that you can get a sense
303 + * of what goes where.
304 + */
305 +
306 + /* Create a base Tree parser/recognizer, using the supplied tree node stream
307 + */
308 + ctx->pTreeParser = antlr3TreeParserNewStream(ANTLR3_SIZE_HINT, instream, state);
309 + /* Install the implementation of our DAAP2SQL interface
310 + */
311 + ctx->query = query;
312 + ctx->expr = expr;
313 + ctx->free = DAAP2SQLFree;
314 + ctx->getGrammarFileName = getGrammarFileName;
315 +
316 + /* Install the scope pushing methods.
317 + */
318 +
319 +
320 +
321 +
322 +
323 + /* Install the token table
324 + */
325 + PSRSTATE->tokenNames = DAAP2SQLTokenNames;
326 +
327 +
328 + /* Return the newly built parser to the caller
329 + */
330 + return ctx;
331 +}
332 +
333 +/** Free the parser resources
334 + */
335 + static void
336 + DAAP2SQLFree(pDAAP2SQL ctx)
337 + {
338 + /* Free any scope memory
339 + */
340 +
341 +
342 + // Free this parser
343 + //
344 + ctx->pTreeParser->free(ctx->pTreeParser);
345 + ANTLR3_FREE(ctx);
346 +
347 + /* Everything is released, so we can return
348 + */
349 + return;
350 + }
351 +
352 +/** Return token names used by this tree parser
353 + *
354 + * The returned pointer is used as an index into the token names table (using the token
355 + * number as the index).
356 + *
357 + * \return Pointer to first char * in the table.
358 + */
359 +static pANTLR3_UINT8 *getTokenNames()
360 +{
361 + return DAAP2SQLTokenNames;
362 +}
363 +
364 +
365 + struct dmap_query_field_map {
366 + char *dmap_field;
367 + char *db_col;
368 + int as_int;
369 + };
370 +
371 + /* gperf static hash, daap_query.gperf */
372 + #include "daap_query_hash.c"
373 +
374 +
375 +/* Declare the bitsets
376 + */
377 +
378 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_query70 */
379 +static ANTLR3_BITWORD FOLLOW_expr_in_query70_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
380 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_query70 = { FOLLOW_expr_in_query70_bits, 1 };
381 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OPAND_in_expr95 */
382 +static ANTLR3_BITWORD FOLLOW_OPAND_in_expr95_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
383 +static ANTLR3_BITSET_LIST FOLLOW_OPAND_in_expr95 = { FOLLOW_OPAND_in_expr95_bits, 1 };
384 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr101 */
385 +static ANTLR3_BITWORD FOLLOW_expr_in_expr101_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000260) };
386 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr101 = { FOLLOW_expr_in_expr101_bits, 1 };
387 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr107 */
388 +static ANTLR3_BITWORD FOLLOW_expr_in_expr107_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
389 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr107 = { FOLLOW_expr_in_expr107_bits, 1 };
390 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OPOR_in_expr118 */
391 +static ANTLR3_BITWORD FOLLOW_OPOR_in_expr118_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
392 +static ANTLR3_BITSET_LIST FOLLOW_OPOR_in_expr118 = { FOLLOW_OPOR_in_expr118_bits, 1 };
393 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr124 */
394 +static ANTLR3_BITWORD FOLLOW_expr_in_expr124_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000260) };
395 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr124 = { FOLLOW_expr_in_expr124_bits, 1 };
396 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr130 */
397 +static ANTLR3_BITWORD FOLLOW_expr_in_expr130_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
398 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr130 = { FOLLOW_expr_in_expr130_bits, 1 };
399 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_expr140 */
400 +static ANTLR3_BITWORD FOLLOW_STR_in_expr140_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
401 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_expr140 = { FOLLOW_STR_in_expr140_bits, 1 };
402 +
403 +
404 +
405 +
406 +/* ==============================================
407 + * Parsing rules
408 + */
409 +/**
410 + * $ANTLR start query
411 + * DAAP2SQL.g:50:1: query returns [ pANTLR3_STRING result ] : e= expr ;
412 + */
413 +static pANTLR3_STRING
414 +query(pDAAP2SQL ctx)
415 +{
416 + pANTLR3_STRING result = NULL;
417 +
418 + DAAP2SQL_expr_return e;
419 + #undef RETURN_TYPE_e
420 + #define RETURN_TYPE_e DAAP2SQL_expr_return
421 +
422 + /* Initialize rule variables
423 + */
424 +
425 +
426 + result= NULL;
427 + {
428 + // DAAP2SQL.g:52:2: (e= expr )
429 + // DAAP2SQL.g:52:4: e= expr
430 + {
431 + FOLLOWPUSH(FOLLOW_expr_in_query70);
432 + e=expr(ctx);
433 +
434 + FOLLOWPOP();
435 + if (HASEXCEPTION())
436 + {
437 + goto rulequeryEx;
438 + }
439 +
440 + {
441 +
442 + if (!e.valid)
443 + {
444 + result= NULL;
445 + }
446 + else
447 + {
448 + result= e.result->factory->newRaw(e.result->factory);
449 + result->append8(result, "(");
450 + result->appendS(result, e.result);
451 + result->append8(result, ")");
452 + }
453 +
454 + }
455 +
456 + }
457 +
458 + }
459 +
460 +
461 + // This is where rules clean up and exit
462 + //
463 + goto rulequeryEx; /* Prevent compiler warnings */
464 + rulequeryEx: ;
465 +
466 + if (HASEXCEPTION())
467 + {
468 + PREPORTERROR();
469 + PRECOVER();
470 + }
471 +
472 +
473 + return result;
474 +}
475 +/* $ANTLR end query */
476 +
477 +/**
478 + * $ANTLR start expr
479 + * DAAP2SQL.g:68:1: expr returns [ pANTLR3_STRING result, int valid ] : ( ^( OPAND a= expr b= expr ) | ^( OPOR a= expr b= expr ) | STR );
480 + */
481 +static DAAP2SQL_expr_return
482 +expr(pDAAP2SQL ctx)
483 +{
484 + DAAP2SQL_expr_return retval;
485 +
486 + pANTLR3_BASE_TREE STR1;
487 + DAAP2SQL_expr_return a;
488 + #undef RETURN_TYPE_a
489 + #define RETURN_TYPE_a DAAP2SQL_expr_return
490 +
491 + DAAP2SQL_expr_return b;
492 + #undef RETURN_TYPE_b
493 + #define RETURN_TYPE_b DAAP2SQL_expr_return
494 +
495 + /* Initialize rule variables
496 + */
497 +
498 +
499 + retval.result= NULL; retval.valid= 1;
500 + STR1 = NULL;
501 + retval.start = LT(1); retval.stop = retval.start;
502 +
503 + {
504 + {
505 + // DAAP2SQL.g:70:2: ( ^( OPAND a= expr b= expr ) | ^( OPOR a= expr b= expr ) | STR )
506 +
507 + ANTLR3_UINT32 alt1;
508 +
509 + alt1=3;
510 +
511 + switch ( LA(1) )
512 + {
513 + case OPAND:
514 + {
515 + alt1=1;
516 + }
517 + break;
518 + case OPOR:
519 + {
520 + alt1=2;
521 + }
522 + break;
523 + case STR:
524 + {
525 + alt1=3;
526 + }
527 + break;
528 +
529 + default:
530 + CONSTRUCTEX();
531 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
532 + EXCEPTION->message = (void *)"";
533 + EXCEPTION->decisionNum = 1;
534 + EXCEPTION->state = 0;
535 +
536 +
537 + goto ruleexprEx;
538 + }
539 +
540 + switch (alt1)
541 + {
542 + case 1:
543 + // DAAP2SQL.g:70:4: ^( OPAND a= expr b= expr )
544 + {
545 + MATCHT(OPAND, &FOLLOW_OPAND_in_expr95);
546 + if (HASEXCEPTION())
547 + {
548 + goto ruleexprEx;
549 + }
550 +
551 +
552 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
553 + if (HASEXCEPTION())
554 + {
555 + goto ruleexprEx;
556 + }
557 +
558 + FOLLOWPUSH(FOLLOW_expr_in_expr101);
559 + a=expr(ctx);
560 +
561 + FOLLOWPOP();
562 + if (HASEXCEPTION())
563 + {
564 + goto ruleexprEx;
565 + }
566 +
567 + FOLLOWPUSH(FOLLOW_expr_in_expr107);
568 + b=expr(ctx);
569 +
570 + FOLLOWPOP();
571 + if (HASEXCEPTION())
572 + {
573 + goto ruleexprEx;
574 + }
575 +
576 +
577 + MATCHT(ANTLR3_TOKEN_UP, NULL);
578 + if (HASEXCEPTION())
579 + {
580 + goto ruleexprEx;
581 + }
582 +
583 + {
584 +
585 + if (a.valid && b.valid)
586 + {
587 + retval.result= a.result->factory->newRaw(a.result->factory);
588 + retval.result->append8(retval.result, "(");
589 + retval.result->appendS(retval.result, a.result);
590 + retval.result->append8(retval.result, " AND ");
591 + retval.result->appendS(retval.result, b.result);
592 + retval.result->append8(retval.result, ")");
593 + }
594 + else if (a.valid)
595 + {
596 + retval.result= a.result->factory->newRaw(a.result->factory);
597 + retval.result->appendS(retval.result, a.result);
598 + }
599 + else if (b.valid)
600 + {
601 + retval.result= b.result->factory->newRaw(b.result->factory);
602 + retval.result->appendS(retval.result, b.result);
603 + }
604 + else
605 + {
606 + retval.valid= 0;
607 + }
608 +
609 + }
610 +
611 + }
612 + break;
613 + case 2:
614 + // DAAP2SQL.g:96:4: ^( OPOR a= expr b= expr )
615 + {
616 + MATCHT(OPOR, &FOLLOW_OPOR_in_expr118);
617 + if (HASEXCEPTION())
618 + {
619 + goto ruleexprEx;
620 + }
621 +
622 +
623 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
624 + if (HASEXCEPTION())
625 + {
626 + goto ruleexprEx;
627 + }
628 +
629 + FOLLOWPUSH(FOLLOW_expr_in_expr124);
630 + a=expr(ctx);
631 +
632 + FOLLOWPOP();
633 + if (HASEXCEPTION())
634 + {
635 + goto ruleexprEx;
636 + }
637 +
638 + FOLLOWPUSH(FOLLOW_expr_in_expr130);
639 + b=expr(ctx);
640 +
641 + FOLLOWPOP();
642 + if (HASEXCEPTION())
643 + {
644 + goto ruleexprEx;
645 + }
646 +
647 +
648 + MATCHT(ANTLR3_TOKEN_UP, NULL);
649 + if (HASEXCEPTION())
650 + {
651 + goto ruleexprEx;
652 + }
653 +
654 + {
655 +
656 + if (a.valid && b.valid)
657 + {
658 + retval.result= a.result->factory->newRaw(a.result->factory);
659 + retval.result->append8(retval.result, "(");
660 + retval.result->appendS(retval.result, a.result);
661 + retval.result->append8(retval.result, " OR ");
662 + retval.result->appendS(retval.result, b.result);
663 + retval.result->append8(retval.result, ")");
664 + }
665 + else if (a.valid)
666 + {
667 + retval.result= a.result->factory->newRaw(a.result->factory);
668 + retval.result->appendS(retval.result, a.result);
669 + }
670 + else if (b.valid)
671 + {
672 + retval.result= b.result->factory->newRaw(b.result->factory);
673 + retval.result->appendS(retval.result, b.result);
674 + }
675 + else
676 + {
677 + retval.valid= 0;
678 + }
679 +
680 + }
681 +
682 + }
683 + break;
684 + case 3:
685 + // DAAP2SQL.g:122:4: STR
686 + {
687 + STR1 = (pANTLR3_BASE_TREE) MATCHT(STR, &FOLLOW_STR_in_expr140);
688 + if (HASEXCEPTION())
689 + {
690 + goto ruleexprEx;
691 + }
692 +
693 + {
694 +
695 + pANTLR3_STRING str;
696 + pANTLR3_UINT8 field;
697 + pANTLR3_UINT8 val;
698 + pANTLR3_UINT8 escaped;
699 + ANTLR3_UINT8 op;
700 + int neg_op;
701 + const struct dmap_query_field_map *dqfm;
702 + char *end;
703 + long long llval;
704 +
705 + escaped = NULL;
706 +
707 + retval.result= (STR1->getText(STR1))->factory->newRaw((STR1->getText(STR1))->factory);
708 +
709 + str = (STR1->getText(STR1))->toUTF8((STR1->getText(STR1)));
710 +
711 + /* NOTE: the lexer delivers the string without quotes
712 + which may not be obvious from the grammar due to embedded code
713 + */
714 +
715 + /* Make daap.songalbumid:0 a no-op */
716 + if (strcmp((char *)str->chars, "daap.songalbumid:0") == 0)
717 + {
718 + retval.result->append8(retval.result, "1 = 1");
719 +
720 + goto STR_out;
721 + }
722 +
723 + field = str->chars;
724 +
725 + val = field;
726 + while ((*val != '\0') && ((*val == '.')
727 + || (*val == '-')
728 + || ((*val >= 'a') && (*val <= 'z'))
729 + || ((*val >= 'A') && (*val <= 'Z'))
730 + || ((*val >= '0') && (*val <= '9'))))
731 + {
732 + val++;
733 + }
734 +
735 + if (*field == '\0')
736 + {
737 + DPRINTF(E_LOG, L_DAAP, "No field name found in clause '%s'\n", field);
738 + retval.valid= 0;
739 + goto STR_result_valid_0; /* ABORT */
740 + }
741 +
742 + if (*val == '\0')
743 + {
744 + DPRINTF(E_LOG, L_DAAP, "No operator found in clause '%s'\n", field);
745 + retval.valid= 0;
746 + goto STR_result_valid_0; /* ABORT */
747 + }
748 +
749 + op = *val;
750 + *val = '\0';
751 + val++;
752 +
753 + if (op == '!')
754 + {
755 + if (*val == '\0')
756 + {
757 + DPRINTF(E_LOG, L_DAAP, "Negation found but operator missing in clause '%s%c'\n", field, op);
758 + retval.valid= 0;
759 + goto STR_result_valid_0; /* ABORT */
760 + }
761 +
762 + neg_op = 1;
763 + op = *val;
764 + val++;
765 + }
766 + else
767 + neg_op = 0;
768 +
769 + /* Lookup DMAP field in the query field map */
770 + dqfm = daap_query_field_lookup((char *)field, strlen((char *)field));
771 + if (!dqfm)
772 + {
773 + DPRINTF(E_LOG, L_DAAP, "DMAP field '%s' is not a valid field in queries\n", field);
774 + retval.valid= 0;
775 + goto STR_result_valid_0; /* ABORT */
776 + }
777 +
778 + /* Empty values OK for string fields, NOK for integer */
779 + if (*val == '\0')
780 + {
781 + if (dqfm->as_int)
782 + {
783 + DPRINTF(E_LOG, L_DAAP, "No value given in clause '%s%s%c'\n", field, (neg_op) ? "!" : "", op);
784 + retval.valid= 0;
785 + goto STR_result_valid_0; /* ABORT */
786 + }
787 +
788 + /* No need to exclude empty artist and album, as forked-daapd makes sure there always exists an artist/album. */
789 + if (neg_op && op == ':'
790 + && (strcmp((char *)field, "daap.songalbumartist") == 0
791 + || strcmp((char *)field, "daap.songartist") == 0
792 + || strcmp((char *)field, "daap.songalbum") == 0))
793 + {
794 + DPRINTF(E_DBG, L_DAAP, "Ignoring clause '%s%s%c'\n", field, (neg_op) ? "!" : "", op);
795 + retval.valid= 0;
796 + goto STR_result_valid_0;
797 + }
798 +
799 + /* Need to check against NULL too */
800 + if (op == ':')
801 + retval.result->append8(retval.result, "(");
802 + }
803 +
804 + /* Int field: check integer conversion */
805 + if (dqfm->as_int)
806 + {
807 + errno = 0;
808 + llval = strtoll((const char *)val, &end, 10);
809 +
810 + if (((errno == ERANGE) && ((llval == LLONG_MAX) || (llval == LLONG_MIN)))
811 + || ((errno != 0) && (llval == 0)))
812 + {
813 + DPRINTF(E_LOG, L_DAAP, "Value '%s' in clause '%s%s%c%s' does not convert to an integer type\n",
814 + val, field, (neg_op) ? "!" : "", op, val);
815 + retval.valid= 0;
816 + goto STR_result_valid_0; /* ABORT */
817 + }
818 +
819 + if (end == (char *)val)
820 + {
821 + DPRINTF(E_LOG, L_DAAP, "Value '%s' in clause '%s%s%c%s' does not represent an integer value\n",
822 + val, field, (neg_op) ? "!" : "", op, val);
823 + retval.valid= 0;
824 + goto STR_result_valid_0; /* ABORT */
825 + }
826 +
827 + *end = '\0'; /* Cut out potential garbage - we're being kind */
828 +
829 + /* forked-daapd only has media_kind = 1 for music - so remove media_kind = 32 to imporve select query performance. */
830 + if (llval == 32
831 + && (strcmp((char *)field, "com.apple.itunes.mediakind") == 0
832 + || strcmp((char *)field, "com.apple.itunes.extended-media-kind") == 0))
833 + {
834 + DPRINTF(E_DBG, L_DAAP, "Ignoring clause '%s%s%c%s'\n", field, (neg_op) ? "!" : "", op, val);
835 +
836 + if (neg_op)
837 + retval.result->append8(retval.result, "1 = 1");
838 + else
839 + retval.result->append8(retval.result, "1 = 0");
840 +
841 + goto STR_out;
842 + }
843 + }
844 + /* String field: escape string, check for '*' */
845 + else
846 + {
847 + if (op != ':')
848 + {
849 + DPRINTF(E_LOG, L_DAAP, "Operation '%c' not valid for string values\n", op);
850 + retval.valid= 0;
851 + goto STR_result_valid_0; /* ABORT */
852 + }
853 +
854 + escaped = (pANTLR3_UINT8)db_escape_string((char *)val);
855 + if (!escaped)
856 + {
857 + DPRINTF(E_LOG, L_DAAP, "Could not escape value\n");
858 + retval.valid= 0;
859 + goto STR_result_valid_0; /* ABORT */
860 + }
861 +
862 + val = escaped;
863 +
864 + if (val[0] == '*')
865 + {
866 + op = '%';
867 + val[0] = '%';
868 + }
869 +
870 + if (val[0] && val[1] && val[strlen((char *)val) - 1] == '*')
871 + {
872 + op = '%';
873 + val[strlen((char *)val) - 1] = '%';
874 + }
875 + }
876 +
877 + retval.result->append8(retval.result, dqfm->db_col);
878 +
879 + switch(op)
880 + {
881 + case ':':
882 + if (neg_op)
883 + retval.result->append8(retval.result, " <> ");
884 + else
885 + retval.result->append8(retval.result, " = ");
886 + break;
887 +
888 + case '+':
889 + if (neg_op)
890 + retval.result->append8(retval.result, " <= ");
891 + else
892 + retval.result->append8(retval.result, " > ");
893 + break;
894 +
895 + case '-':
896 + if (neg_op)
897 + retval.result->append8(retval.result, " >= ");
898 + else
899 + retval.result->append8(retval.result, " < ");
900 + break;
901 +
902 + case '%':
903 + retval.result->append8(retval.result, " LIKE ");
904 + break;
905 +
906 + default:
907 + if (neg_op)
908 + DPRINTF(E_LOG, L_DAAP, "Missing or unknown operator '%c' in clause '%s!%c%s'\n", op, field, op, val);
909 + else
910 + DPRINTF(E_LOG, L_DAAP, "Unknown operator '%c' in clause '%s%c%s'\n", op, field, op, val);
911 + retval.valid= 0;
912 + goto STR_result_valid_0; /* ABORT */
913 + break;
914 + }
915 +
916 + if (!dqfm->as_int)
917 + retval.result->append8(retval.result, "'");
918 +
919 + retval.result->append8(retval.result, (const char *)val);
920 +
921 + if (!dqfm->as_int)
922 + retval.result->append8(retval.result, "'");
923 +
924 + /* For empty string value, we need to check against NULL too */
925 + if ((*val == '\0') && (op == ':'))
926 + {
927 + if (neg_op)
928 + retval.result->append8(retval.result, " AND ");
929 + else
930 + retval.result->append8(retval.result, " OR ");
931 +
932 + retval.result->append8(retval.result, dqfm->db_col);
933 +
934 + if (neg_op)
935 + retval.result->append8(retval.result, " IS NOT NULL");
936 + else
937 + retval.result->append8(retval.result, " IS NULL");
938 +
939 + retval.result->append8(retval.result, ")");
940 + }
941 +
942 + STR_result_valid_0: /* bail out label */
943 + ;
944 +
945 + if (escaped)
946 + free(escaped);
947 +
948 + STR_out: /* get out of here */
949 + ;
950 +
951 + }
952 +
953 + }
954 + break;
955 +
956 + }
957 + }
958 + }
959 +
960 +
961 + // This is where rules clean up and exit
962 + //
963 + goto ruleexprEx; /* Prevent compiler warnings */
964 + ruleexprEx: ;
965 +
966 + if (HASEXCEPTION())
967 + {
968 + PREPORTERROR();
969 + PRECOVER();
970 + }
971 +
972 +
973 + return retval;
974 +}
975 +/* $ANTLR end expr */
976 +/* End of parsing rules
977 + * ==============================================
978 + */
979 +
980 +/* ==============================================
981 + * Syntactic predicates
982 + */
983 +/* End of syntactic predicates
984 + * ==============================================
985 + */
986 +
987 +
988 +
989 +
990 +
991 +
992 +/* End of code
993 + * =============================================================================
994 + */
995 diff --git a/src/pregen/DAAP2SQL.h b/src/pregen/DAAP2SQL.h
996 new file mode 100644
997 index 0000000..e829049
998 --- /dev/null
999 +++ b/src/pregen/DAAP2SQL.h
1000 @@ -0,0 +1,195 @@
1001 +/** \file
1002 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
1003 + *
1004 + * - From the grammar source file : DAAP2SQL.g
1005 + * - On : 2016-01-01 12:23:43
1006 + * - for the tree parser : DAAP2SQLTreeParser *
1007 + * Editing it, at least manually, is not wise.
1008 + *
1009 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
1010 + *
1011 + *
1012 + * The tree parser DAAP2SQL has the callable functions (rules) shown below,
1013 + * which will invoke the code for the associated rule in the source grammar
1014 + * assuming that the input stream is pointing to a token/text stream that could begin
1015 + * this rule.
1016 + *
1017 + * For instance if you call the first (topmost) rule in a parser grammar, you will
1018 + * get the results of a full parse, but calling a rule half way through the grammar will
1019 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
1020 + * in editors and so on.
1021 + *
1022 + * The parser entry points are called indirectly (by function pointer to function) via
1023 + * a parser context typedef pDAAP2SQL, which is returned from a call to DAAP2SQLNew().
1024 + *
1025 + * The methods in pDAAP2SQL are as follows:
1026 + *
1027 + * - pANTLR3_STRING pDAAP2SQL->query(pDAAP2SQL)
1028 + * - DAAP2SQL_expr_return pDAAP2SQL->expr(pDAAP2SQL)
1029 + *
1030 + * The return type for any particular rule is of course determined by the source
1031 + * grammar file.
1032 + */
1033 +// [The "BSD licence"]
1034 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
1035 +// http://www.temporal-wave.com
1036 +// http://www.linkedin.com/in/jimidle
1037 +//
1038 +// All rights reserved.
1039 +//
1040 +// Redistribution and use in source and binary forms, with or without
1041 +// modification, are permitted provided that the following conditions
1042 +// are met:
1043 +// 1. Redistributions of source code must retain the above copyright
1044 +// notice, this list of conditions and the following disclaimer.
1045 +// 2. Redistributions in binary form must reproduce the above copyright
1046 +// notice, this list of conditions and the following disclaimer in the
1047 +// documentation and/or other materials provided with the distribution.
1048 +// 3. The name of the author may not be used to endorse or promote products
1049 +// derived from this software without specific prior written permission.
1050 +//
1051 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1052 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1053 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1054 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1055 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1056 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1057 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1058 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1059 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
1060 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1061 +
1062 +#ifndef _DAAP2SQL_H
1063 +#define _DAAP2SQL_H
1064 +/* =============================================================================
1065 + * Standard antlr3 C runtime definitions
1066 + */
1067 +#include <antlr3.h>
1068 +
1069 +/* End of standard antlr 3 runtime definitions
1070 + * =============================================================================
1071 + */
1072 +
1073 +#ifdef __cplusplus
1074 +extern "C" {
1075 +#endif
1076 +
1077 +// Forward declare the context typedef so that we can use it before it is
1078 +// properly defined. Delegators and delegates (from import statements) are
1079 +// interdependent and their context structures contain pointers to each other
1080 +// C only allows such things to be declared if you pre-declare the typedef.
1081 +//
1082 +typedef struct DAAP2SQL_Ctx_struct DAAP2SQL, * pDAAP2SQL;
1083 +
1084 +
1085 +
1086 + #include <stdio.h>
1087 + #include <stdlib.h>
1088 + #include <string.h>
1089 + #include <limits.h>
1090 + #include <errno.h>
1091 +
1092 + #include "logger.h"
1093 + #include "db.h"
1094 + #include "daap_query.h"
1095 +
1096 +
1097 +#ifdef ANTLR3_WINDOWS
1098 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
1099 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
1100 +// initialized but unused variable - tree rewrite variables declared but not needed
1101 +// Unreferenced local variable - lexer rule declares but does not always use _type
1102 +// potentially unitialized variable used - retval always returned from a rule
1103 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
1104 +//
1105 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
1106 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
1107 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
1108 +// this is a matter of orthogonality hence I disable that one.
1109 +//
1110 +#pragma warning( disable : 4100 )
1111 +#pragma warning( disable : 4101 )
1112 +#pragma warning( disable : 4127 )
1113 +#pragma warning( disable : 4189 )
1114 +#pragma warning( disable : 4505 )
1115 +#pragma warning( disable : 4701 )
1116 +#endif
1117 +typedef struct DAAP2SQL_expr_return_struct
1118 +{
1119 + pANTLR3_BASE_TREE start;
1120 + pANTLR3_BASE_TREE stop;
1121 + pANTLR3_STRING result;
1122 + int valid;
1123 +}
1124 + DAAP2SQL_expr_return;
1125 +
1126 +
1127 +
1128 +/** Context tracking structure for DAAP2SQL
1129 + */
1130 +struct DAAP2SQL_Ctx_struct
1131 +{
1132 + /** Built in ANTLR3 context tracker contains all the generic elements
1133 + * required for context tracking.
1134 + */
1135 + pANTLR3_TREE_PARSER pTreeParser;
1136 +
1137 +
1138 + pANTLR3_STRING (*query) (struct DAAP2SQL_Ctx_struct * ctx);
1139 + DAAP2SQL_expr_return (*expr) (struct DAAP2SQL_Ctx_struct * ctx);
1140 + // Delegated rules
1141 + const char * (*getGrammarFileName)();
1142 + void (*free) (struct DAAP2SQL_Ctx_struct * ctx);
1143 +
1144 +};
1145 +
1146 +// Function protoypes for the constructor functions that external translation units
1147 +// such as delegators and delegates may wish to call.
1148 +//
1149 +ANTLR3_API pDAAP2SQL DAAP2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream);
1150 +ANTLR3_API pDAAP2SQL DAAP2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
1151 +
1152 +/** Symbolic definitions of all the tokens that the tree parser will work with.
1153 + * \{
1154 + *
1155 + * Antlr will define EOF, but we can't use that as it it is too common in
1156 + * in C header files and that would be confusing. There is no way to filter this out at the moment
1157 + * so we just undef it here for now. That isn't the value we get back from C recognizers
1158 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
1159 + */
1160 +#ifdef EOF
1161 +#undef EOF
1162 +#endif
1163 +#ifdef Tokens
1164 +#undef Tokens
1165 +#endif
1166 +#define STR 9
1167 +#define QUOTE 10
1168 +#define NEWLINE 4
1169 +#define LPAR 7
1170 +#define OPOR 5
1171 +#define RPAR 8
1172 +#define ESCAPED 11
1173 +#define OPAND 6
1174 +#define EOF -1
1175 +#ifdef EOF
1176 +#undef EOF
1177 +#define EOF ANTLR3_TOKEN_EOF
1178 +#endif
1179 +
1180 +#ifndef TOKENSOURCE
1181 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
1182 +#endif
1183 +
1184 +/* End of token definitions for DAAP2SQL
1185 + * =============================================================================
1186 + */
1187 +/** \} */
1188 +
1189 +#ifdef __cplusplus
1190 +}
1191 +#endif
1192 +
1193 +#endif
1194 +
1195 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
1196 diff --git a/src/pregen/DAAP2SQL.u b/src/pregen/DAAP2SQL.u
1197 new file mode 100644
1198 index 0000000..385d80b
1199 --- /dev/null
1200 +++ b/src/pregen/DAAP2SQL.u
1201 @@ -0,0 +1,5 @@
1202 +DAAP2SQL.g: DAAP.tokens
1203 +DAAP2SQL.c : DAAP2SQL.g
1204 +./DAAP2SQL.tokens : DAAP2SQL.g
1205 +DAAP2SQL.h : DAAP2SQL.g
1206 +ANTLR_PRODUCTS += DAAP2SQL.c ./DAAP2SQL.tokens DAAP2SQL.h
1207 \ No newline at end of file
1208 diff --git a/src/pregen/DAAPLexer.c b/src/pregen/DAAPLexer.c
1209 new file mode 100644
1210 index 0000000..eab3ff4
1211 --- /dev/null
1212 +++ b/src/pregen/DAAPLexer.c
1213 @@ -0,0 +1,1101 @@
1214 +/** \file
1215 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
1216 + *
1217 + * - From the grammar source file : DAAP.g
1218 + * - On : 2016-01-01 12:23:41
1219 + * - for the lexer : DAAPLexerLexer *
1220 + * Editing it, at least manually, is not wise.
1221 + *
1222 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
1223 + *
1224 + *
1225 +*/
1226 +// [The "BSD licence"]
1227 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
1228 +// http://www.temporal-wave.com
1229 +// http://www.linkedin.com/in/jimidle
1230 +//
1231 +// All rights reserved.
1232 +//
1233 +// Redistribution and use in source and binary forms, with or without
1234 +// modification, are permitted provided that the following conditions
1235 +// are met:
1236 +// 1. Redistributions of source code must retain the above copyright
1237 +// notice, this list of conditions and the following disclaimer.
1238 +// 2. Redistributions in binary form must reproduce the above copyright
1239 +// notice, this list of conditions and the following disclaimer in the
1240 +// documentation and/or other materials provided with the distribution.
1241 +// 3. The name of the author may not be used to endorse or promote products
1242 +// derived from this software without specific prior written permission.
1243 +//
1244 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1245 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1246 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1247 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
1248 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
1249 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
1250 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
1251 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1252 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
1253 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1254 +
1255 +/* -----------------------------------------
1256 + * Include the ANTLR3 generated header file.
1257 + */
1258 +#include "DAAPLexer.h"
1259 +/* ----------------------------------------- */
1260 +
1261 +
1262 +
1263 +
1264 +
1265 +/* MACROS that hide the C interface implementations from the
1266 + * generated code, which makes it a little more understandable to the human eye.
1267 + * I am very much against using C pre-processor macros for function calls and bits
1268 + * of code as you cannot see what is happening when single stepping in debuggers
1269 + * and so on. The exception (in my book at least) is for generated code, where you are
1270 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
1271 + * hides some indirect calls, but is always referring to the input stream. This is
1272 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
1273 + * the runtime interfaces without changing the generated code too often, without
1274 + * confusing the reader of the generated output, who may not wish to know the gory
1275 + * details of the interface inheritance.
1276 + */
1277 +
1278 +#define CTX ctx
1279 +
1280 +/* Aids in accessing scopes for grammar programmers
1281 + */
1282 +#undef SCOPE_TYPE
1283 +#undef SCOPE_STACK
1284 +#undef SCOPE_TOP
1285 +#define SCOPE_TYPE(scope) pDAAPLexer_##scope##_SCOPE
1286 +#define SCOPE_STACK(scope) pDAAPLexer_##scope##Stack
1287 +#define SCOPE_TOP(scope) ctx->pDAAPLexer_##scope##Top
1288 +#define SCOPE_SIZE(scope) ctx->pDAAPLexer_##scope##Stack_limit
1289 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
1290 +
1291 +
1292 +/* Macros for accessing things in a lexer
1293 + */
1294 +#undef LEXER
1295 +#undef RECOGNIZER
1296 +#undef RULEMEMO
1297 +#undef GETCHARINDEX
1298 +#undef GETLINE
1299 +#undef GETCHARPOSITIONINLINE
1300 +#undef EMIT
1301 +#undef EMITNEW
1302 +#undef MATCHC
1303 +#undef MATCHS
1304 +#undef MATCHRANGE
1305 +#undef LTOKEN
1306 +#undef HASFAILED
1307 +#undef FAILEDFLAG
1308 +#undef INPUT
1309 +#undef STRSTREAM
1310 +#undef LA
1311 +#undef HASEXCEPTION
1312 +#undef EXCEPTION
1313 +#undef CONSTRUCTEX
1314 +#undef CONSUME
1315 +#undef LRECOVER
1316 +#undef MARK
1317 +#undef REWIND
1318 +#undef REWINDLAST
1319 +#undef BACKTRACKING
1320 +#undef MATCHANY
1321 +#undef MEMOIZE
1322 +#undef HAVEPARSEDRULE
1323 +#undef GETTEXT
1324 +#undef INDEX
1325 +#undef SEEK
1326 +#undef PUSHSTREAM
1327 +#undef POPSTREAM
1328 +#undef SETTEXT
1329 +#undef SETTEXT8
1330 +
1331 +#define LEXER ctx->pLexer
1332 +#define RECOGNIZER LEXER->rec
1333 +#define LEXSTATE RECOGNIZER->state
1334 +#define TOKSOURCE LEXSTATE->tokSource
1335 +#define GETCHARINDEX() LEXER->getCharIndex(LEXER)
1336 +#define GETLINE() LEXER->getLine(LEXER)
1337 +#define GETTEXT() LEXER->getText(LEXER)
1338 +#define GETCHARPOSITIONINLINE() LEXER->getCharPositionInLine(LEXER)
1339 +#define EMIT() LEXSTATE->type = _type; LEXER->emit(LEXER)
1340 +#define EMITNEW(t) LEXER->emitNew(LEXER, t)
1341 +#define MATCHC(c) LEXER->matchc(LEXER, c)
1342 +#define MATCHS(s) LEXER->matchs(LEXER, s)
1343 +#define MATCHRANGE(c1,c2) LEXER->matchRange(LEXER, c1, c2)
1344 +#define MATCHANY() LEXER->matchAny(LEXER)
1345 +#define LTOKEN LEXSTATE->token
1346 +#define HASFAILED() (LEXSTATE->failed == ANTLR3_TRUE)
1347 +#define BACKTRACKING LEXSTATE->backtracking
1348 +#define FAILEDFLAG LEXSTATE->failed
1349 +#define INPUT LEXER->input
1350 +#define STRSTREAM INPUT
1351 +#define ISTREAM INPUT->istream
1352 +#define INDEX() ISTREAM->index(ISTREAM)
1353 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
1354 +#define EOF_TOKEN &(LEXSTATE->tokSource->eofToken)
1355 +#define HASEXCEPTION() (LEXSTATE->error == ANTLR3_TRUE)
1356 +#define EXCEPTION LEXSTATE->exception
1357 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
1358 +#define LRECOVER() LEXER->recover(LEXER)
1359 +#define MARK() ISTREAM->mark(ISTREAM)
1360 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
1361 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
1362 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
1363 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
1364 +#define PUSHSTREAM(str) LEXER->pushCharStream(LEXER, str)
1365 +#define POPSTREAM() LEXER->popCharStream(LEXER)
1366 +#define SETTEXT(str) LEXSTATE->text = str
1367 +#define SKIP() LEXSTATE->token = &(TOKSOURCE->skipToken)
1368 +#define USER1 LEXSTATE->user1
1369 +#define USER2 LEXSTATE->user2
1370 +#define USER3 LEXSTATE->user3
1371 +#define CUSTOM LEXSTATE->custom
1372 +#define RULEMEMO LEXSTATE->ruleMemo
1373 +#define DBG RECOGNIZER->debugger
1374 +
1375 +/* If we have been told we can rely on the standard 8 bit or 16 bit input
1376 + * stream, then we can define our macros to use the direct pointers
1377 + * in the input object, which is much faster than indirect calls. This
1378 + * is really only significant to lexers with a lot of fragment rules (which
1379 + * do not place LA(1) in a temporary at the moment) and even then
1380 + * only if there is a lot of input (order of say 1M or so).
1381 + */
1382 +#if defined(ANTLR3_INLINE_INPUT_ASCII) || defined(ANTLR3_INLINE_INPUT_UTF16)
1383 +
1384 +# ifdef ANTLR3_INLINE_INPUT_ASCII
1385 +
1386 +/* 8 bit "ASCII" (actually any 8 bit character set) */
1387 +
1388 +# define NEXTCHAR ((pANTLR3_UINT8)(INPUT->nextChar))
1389 +# define DATAP ((pANTLR3_UINT8)(INPUT->data))
1390 +
1391 +# else
1392 +
1393 +# define NEXTCHAR ((pANTLR3_UINT16)(INPUT->nextChar))
1394 +# define DATAP ((pANTLR3_UINT16)(INPUT->data))
1395 +
1396 +# endif
1397 +
1398 +# define LA(n) ((NEXTCHAR + n) > (DATAP + INPUT->sizeBuf) ? ANTLR3_CHARSTREAM_EOF : (ANTLR3_UCHAR)(*(NEXTCHAR + n - 1)))
1399 +# define CONSUME() \
1400 +{ \
1401 + if (NEXTCHAR < (DATAP + INPUT->sizeBuf)) \
1402 + { \
1403 + INPUT->charPositionInLine++; \
1404 + if ((ANTLR3_UCHAR)(*NEXTCHAR) == INPUT->newlineChar) \
1405 + { \
1406 + INPUT->line++; \
1407 + INPUT->charPositionInLine = 0; \
1408 + INPUT->currentLine = (void *)(NEXTCHAR + 1); \
1409 + } \
1410 + INPUT->nextChar = (void *)(NEXTCHAR + 1); \
1411 + } \
1412 +}
1413 +
1414 +#else
1415 +
1416 +// Pick up the input character by calling the input stream implementation.
1417 +//
1418 +#define CONSUME() INPUT->istream->consume(INPUT->istream)
1419 +#define LA(n) INPUT->istream->_LA(INPUT->istream, n)
1420 +
1421 +#endif
1422 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
1423 +
1424 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
1425 + * then for the present you must use different names for your defines as these are hard coded
1426 + * in the code generator. It would be better not to use such names internally, and maybe
1427 + * we can change this in a forthcoming release. I deliberately do not #undef these
1428 + * here as this will at least give you a redefined error somewhere if they clash.
1429 + */
1430 +#define UP ANTLR3_TOKEN_UP
1431 +#define DOWN ANTLR3_TOKEN_DOWN
1432 +#define EOR ANTLR3_TOKEN_EOR
1433 +#define INVALID ANTLR3_TOKEN_INVALID
1434 +
1435 +
1436 +/* =============================================================================
1437 + * Functions to create and destroy scopes. First come the rule scopes, followed
1438 + * by the global declared scopes.
1439 + */
1440 +
1441 +
1442 +
1443 +/* ============================================================================= */
1444 +
1445 +/* =============================================================================
1446 + * Start of recognizer
1447 + */
1448 +
1449 +
1450 +/* Forward declare the locally static matching functions we have generated and any predicate functions.
1451 + */
1452 +static ANTLR3_INLINE void mQUOTE (pDAAPLexer ctx);
1453 +static ANTLR3_INLINE void mLPAR (pDAAPLexer ctx);
1454 +static ANTLR3_INLINE void mRPAR (pDAAPLexer ctx);
1455 +static ANTLR3_INLINE void mOPAND (pDAAPLexer ctx);
1456 +static ANTLR3_INLINE void mOPOR (pDAAPLexer ctx);
1457 +static ANTLR3_INLINE void mNEWLINE (pDAAPLexer ctx);
1458 +static ANTLR3_INLINE void mSTR (pDAAPLexer ctx);
1459 +static ANTLR3_INLINE void mESCAPED (pDAAPLexer ctx);
1460 +static ANTLR3_INLINE void mTokens (pDAAPLexer ctx);
1461 +static void DAAPLexerFree(pDAAPLexer ctx);
1462 +
1463 +/* =========================================================================
1464 + * Lexer matching rules end.
1465 + * =========================================================================
1466 + */
1467 +
1468 +
1469 +
1470 +static void
1471 +DAAPLexerFree (pDAAPLexer ctx)
1472 +{
1473 + LEXER->free(LEXER);
1474 +
1475 + ANTLR3_FREE(ctx);
1476 +}
1477 +
1478 +/** \brief Name of the grammar file that generated this code
1479 + */
1480 +static const char fileName[] = "DAAP.g";
1481 +
1482 +/** \brief Return the name of the grammar file that generated this code.
1483 + */
1484 +static const char * getGrammarFileName()
1485 +{
1486 + return fileName;
1487 +}
1488 +
1489 +/** \brief Create a new lexer called DAAPLexer
1490 + *
1491 + * \param[in] instream Pointer to an initialized input stream
1492 + * \return
1493 + * - Success pDAAPLexer initialized for the lex start
1494 + * - Fail NULL
1495 + */
1496 +ANTLR3_API pDAAPLexer DAAPLexerNew
1497 +(pANTLR3_INPUT_STREAM instream)
1498 +{
1499 + // See if we can create a new lexer with the standard constructor
1500 + //
1501 + return DAAPLexerNewSSD(instream, NULL);
1502 +}
1503 +
1504 +/** \brief Create a new lexer called DAAPLexer
1505 + *
1506 + * \param[in] instream Pointer to an initialized input stream
1507 + * \param[state] state Previously created shared recognizer stat
1508 + * \return
1509 + * - Success pDAAPLexer initialized for the lex start
1510 + * - Fail NULL
1511 + */
1512 +ANTLR3_API pDAAPLexer DAAPLexerNewSSD
1513 +(pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
1514 +{
1515 + pDAAPLexer ctx; // Context structure we will build and return
1516 +
1517 + ctx = (pDAAPLexer) ANTLR3_CALLOC(1, sizeof(DAAPLexer));
1518 +
1519 + if (ctx == NULL)
1520 + {
1521 + // Failed to allocate memory for lexer context
1522 + return NULL;
1523 + }
1524 +
1525 + /* -------------------------------------------------------------------
1526 + * Memory for basic structure is allocated, now to fill in
1527 + * in base ANTLR3 structures. We initialize the function pointers
1528 + * for the standard ANTLR3 lexer function set, but upon return
1529 + * from here, the programmer may set the pointers to provide custom
1530 + * implementations of each function.
1531 + *
1532 + * We don't use the macros defined in DAAPLexer.h here so you can get a sense
1533 + * of what goes where.
1534 + */
1535 +
1536 + /* Create a base lexer, using the supplied input stream
1537 + */
1538 + ctx->pLexer = antlr3LexerNewStream(ANTLR3_SIZE_HINT, instream, state);
1539 +
1540 + /* Check that we allocated the memory correctly
1541 + */
1542 + if (ctx->pLexer == NULL)
1543 + {
1544 + ANTLR3_FREE(ctx);
1545 + return NULL;
1546 + }
1547 + /* Install the implementation of our DAAPLexer interface
1548 + */
1549 + ctx->mQUOTE = mQUOTE;
1550 + ctx->mLPAR = mLPAR;
1551 + ctx->mRPAR = mRPAR;
1552 + ctx->mOPAND = mOPAND;
1553 + ctx->mOPOR = mOPOR;
1554 + ctx->mNEWLINE = mNEWLINE;
1555 + ctx->mSTR = mSTR;
1556 + ctx->mESCAPED = mESCAPED;
1557 + ctx->mTokens = mTokens;
1558 +
1559 + /** When the nextToken() call is made to this lexer's pANTLR3_TOKEN_SOURCE
1560 + * it will call mTokens() in this generated code, and will pass it the ctx
1561 + * pointer of this lexer, not the context of the base lexer, so store that now.
1562 + */
1563 + ctx->pLexer->ctx = ctx;
1564 +
1565 + /**Install the token matching function
1566 + */
1567 + ctx->pLexer->mTokens = (void (*) (void *))(mTokens);
1568 +
1569 + ctx->getGrammarFileName = getGrammarFileName;
1570 + ctx->free = DAAPLexerFree;
1571 +
1572 +
1573 +
1574 +
1575 +
1576 + /* Return the newly built lexer to the caller
1577 + */
1578 + return ctx;
1579 +}
1580 +
1581 +
1582 +/* =========================================================================
1583 + * Functions to match the lexer grammar defined tokens from the input stream
1584 + */
1585 +
1586 +// Comes from: 40:7: ( '\\'' )
1587 +/** \brief Lexer rule generated by ANTLR3
1588 + *
1589 + * $ANTLR start QUOTE
1590 + *
1591 + * Looks to match the characters the constitute the token QUOTE
1592 + * from the attached input stream.
1593 + *
1594 + *
1595 + * \remark
1596 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1597 + */
1598 +static ANTLR3_INLINE
1599 +void mQUOTE(pDAAPLexer ctx)
1600 +{
1601 + ANTLR3_UINT32 _type;
1602 +
1603 + _type = QUOTE;
1604 +
1605 +
1606 + // DAAP.g:40:7: ( '\\'' )
1607 + // DAAP.g:40:9: '\\''
1608 + {
1609 + MATCHC('\'');
1610 + if (HASEXCEPTION())
1611 + {
1612 + goto ruleQUOTEEx;
1613 + }
1614 +
1615 +
1616 + }
1617 +
1618 + LEXSTATE->type = _type;
1619 +
1620 + // This is where rules clean up and exit
1621 + //
1622 + goto ruleQUOTEEx; /* Prevent compiler warnings */
1623 + ruleQUOTEEx: ;
1624 +
1625 +}
1626 +// $ANTLR end QUOTE
1627 +
1628 +// Comes from: 41:6: ( '(' )
1629 +/** \brief Lexer rule generated by ANTLR3
1630 + *
1631 + * $ANTLR start LPAR
1632 + *
1633 + * Looks to match the characters the constitute the token LPAR
1634 + * from the attached input stream.
1635 + *
1636 + *
1637 + * \remark
1638 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1639 + */
1640 +static ANTLR3_INLINE
1641 +void mLPAR(pDAAPLexer ctx)
1642 +{
1643 + ANTLR3_UINT32 _type;
1644 +
1645 + _type = LPAR;
1646 +
1647 +
1648 + // DAAP.g:41:6: ( '(' )
1649 + // DAAP.g:41:8: '('
1650 + {
1651 + MATCHC('(');
1652 + if (HASEXCEPTION())
1653 + {
1654 + goto ruleLPAREx;
1655 + }
1656 +
1657 +
1658 + }
1659 +
1660 + LEXSTATE->type = _type;
1661 +
1662 + // This is where rules clean up and exit
1663 + //
1664 + goto ruleLPAREx; /* Prevent compiler warnings */
1665 + ruleLPAREx: ;
1666 +
1667 +}
1668 +// $ANTLR end LPAR
1669 +
1670 +// Comes from: 42:6: ( ')' )
1671 +/** \brief Lexer rule generated by ANTLR3
1672 + *
1673 + * $ANTLR start RPAR
1674 + *
1675 + * Looks to match the characters the constitute the token RPAR
1676 + * from the attached input stream.
1677 + *
1678 + *
1679 + * \remark
1680 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1681 + */
1682 +static ANTLR3_INLINE
1683 +void mRPAR(pDAAPLexer ctx)
1684 +{
1685 + ANTLR3_UINT32 _type;
1686 +
1687 + _type = RPAR;
1688 +
1689 +
1690 + // DAAP.g:42:6: ( ')' )
1691 + // DAAP.g:42:8: ')'
1692 + {
1693 + MATCHC(')');
1694 + if (HASEXCEPTION())
1695 + {
1696 + goto ruleRPAREx;
1697 + }
1698 +
1699 +
1700 + }
1701 +
1702 + LEXSTATE->type = _type;
1703 +
1704 + // This is where rules clean up and exit
1705 + //
1706 + goto ruleRPAREx; /* Prevent compiler warnings */
1707 + ruleRPAREx: ;
1708 +
1709 +}
1710 +// $ANTLR end RPAR
1711 +
1712 +// Comes from: 44:7: ( '+' | ' ' )
1713 +/** \brief Lexer rule generated by ANTLR3
1714 + *
1715 + * $ANTLR start OPAND
1716 + *
1717 + * Looks to match the characters the constitute the token OPAND
1718 + * from the attached input stream.
1719 + *
1720 + *
1721 + * \remark
1722 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1723 + */
1724 +static ANTLR3_INLINE
1725 +void mOPAND(pDAAPLexer ctx)
1726 +{
1727 + ANTLR3_UINT32 _type;
1728 +
1729 + _type = OPAND;
1730 +
1731 +
1732 + // DAAP.g:44:7: ( '+' | ' ' )
1733 + // DAAP.g:
1734 + {
1735 + if ( LA(1) == ' ' || LA(1) == '+' )
1736 + {
1737 + CONSUME();
1738 +
1739 + }
1740 + else
1741 + {
1742 + CONSTRUCTEX();
1743 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
1744 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
1745 +
1746 + LRECOVER(); goto ruleOPANDEx;
1747 + }
1748 +
1749 +
1750 + }
1751 +
1752 + LEXSTATE->type = _type;
1753 +
1754 + // This is where rules clean up and exit
1755 + //
1756 + goto ruleOPANDEx; /* Prevent compiler warnings */
1757 + ruleOPANDEx: ;
1758 +
1759 +}
1760 +// $ANTLR end OPAND
1761 +
1762 +// Comes from: 45:6: ( ',' )
1763 +/** \brief Lexer rule generated by ANTLR3
1764 + *
1765 + * $ANTLR start OPOR
1766 + *
1767 + * Looks to match the characters the constitute the token OPOR
1768 + * from the attached input stream.
1769 + *
1770 + *
1771 + * \remark
1772 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1773 + */
1774 +static ANTLR3_INLINE
1775 +void mOPOR(pDAAPLexer ctx)
1776 +{
1777 + ANTLR3_UINT32 _type;
1778 +
1779 + _type = OPOR;
1780 +
1781 +
1782 + // DAAP.g:45:6: ( ',' )
1783 + // DAAP.g:45:8: ','
1784 + {
1785 + MATCHC(',');
1786 + if (HASEXCEPTION())
1787 + {
1788 + goto ruleOPOREx;
1789 + }
1790 +
1791 +
1792 + }
1793 +
1794 + LEXSTATE->type = _type;
1795 +
1796 + // This is where rules clean up and exit
1797 + //
1798 + goto ruleOPOREx; /* Prevent compiler warnings */
1799 + ruleOPOREx: ;
1800 +
1801 +}
1802 +// $ANTLR end OPOR
1803 +
1804 +// Comes from: 47:9: ( ( '\\r' )? '\\n' )
1805 +/** \brief Lexer rule generated by ANTLR3
1806 + *
1807 + * $ANTLR start NEWLINE
1808 + *
1809 + * Looks to match the characters the constitute the token NEWLINE
1810 + * from the attached input stream.
1811 + *
1812 + *
1813 + * \remark
1814 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1815 + */
1816 +static ANTLR3_INLINE
1817 +void mNEWLINE(pDAAPLexer ctx)
1818 +{
1819 + ANTLR3_UINT32 _type;
1820 +
1821 + _type = NEWLINE;
1822 +
1823 +
1824 + // DAAP.g:47:9: ( ( '\\r' )? '\\n' )
1825 + // DAAP.g:47:11: ( '\\r' )? '\\n'
1826 + {
1827 +
1828 + // DAAP.g:47:11: ( '\\r' )?
1829 + {
1830 + int alt1=2;
1831 + switch ( LA(1) )
1832 + {
1833 + case '\r':
1834 + {
1835 + alt1=1;
1836 + }
1837 + break;
1838 + }
1839 +
1840 + switch (alt1)
1841 + {
1842 + case 1:
1843 + // DAAP.g:47:11: '\\r'
1844 + {
1845 + MATCHC('\r');
1846 + if (HASEXCEPTION())
1847 + {
1848 + goto ruleNEWLINEEx;
1849 + }
1850 +
1851 +
1852 + }
1853 + break;
1854 +
1855 + }
1856 + }
1857 + MATCHC('\n');
1858 + if (HASEXCEPTION())
1859 + {
1860 + goto ruleNEWLINEEx;
1861 + }
1862 +
1863 +
1864 + }
1865 +
1866 + LEXSTATE->type = _type;
1867 +
1868 + // This is where rules clean up and exit
1869 + //
1870 + goto ruleNEWLINEEx; /* Prevent compiler warnings */
1871 + ruleNEWLINEEx: ;
1872 +
1873 +}
1874 +// $ANTLR end NEWLINE
1875 +
1876 +// Comes from: 55:2: ( QUOTE (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+ QUOTE )
1877 +/** \brief Lexer rule generated by ANTLR3
1878 + *
1879 + * $ANTLR start STR
1880 + *
1881 + * Looks to match the characters the constitute the token STR
1882 + * from the attached input stream.
1883 + *
1884 + *
1885 + * \remark
1886 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
1887 + */
1888 +static ANTLR3_INLINE
1889 +void mSTR(pDAAPLexer ctx)
1890 +{
1891 + ANTLR3_UINT32 _type;
1892 + pANTLR3_COMMON_TOKEN esc;
1893 + ANTLR3_UINT32 reg;
1894 +
1895 +
1896 + esc = NULL;
1897 +
1898 + _type = STR;
1899 +
1900 + pANTLR3_STRING unesc = GETTEXT()->factory->newRaw(GETTEXT()->factory);
1901 +
1902 + // DAAP.g:55:2: ( QUOTE (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+ QUOTE )
1903 + // DAAP.g:55:4: QUOTE (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+ QUOTE
1904 + {
1905 + /* 55:4: QUOTE (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+ QUOTE */
1906 + mQUOTE(ctx );
1907 + if (HASEXCEPTION())
1908 + {
1909 + goto ruleSTREx;
1910 + }
1911 +
1912 + // DAAP.g:55:10: (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+
1913 + {
1914 + int cnt2=0;
1915 +
1916 + for (;;)
1917 + {
1918 + int alt2=3;
1919 + {
1920 + /* dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState)
1921 + */
1922 + int LA2_0 = LA(1);
1923 + if ( (((LA2_0 >= 0x0000) && (LA2_0 <= '&')) || ((LA2_0 >= '(') && (LA2_0 <= '[')) || ((LA2_0 >= ']') && (LA2_0 <= 0xFFFF))) )
1924 + {
1925 + alt2=1;
1926 + }
1927 + else if ( (LA2_0 == '\\') )
1928 + {
1929 + alt2=2;
1930 + }
1931 +
1932 + }
1933 + switch (alt2)
1934 + {
1935 + case 1:
1936 + // DAAP.g:55:12: reg=~ ( '\\\\' | '\\'' )
1937 + {
1938 + reg= LA(1);
1939 + if ( ((LA(1) >= 0x0000) && (LA(1) <= '&')) || ((LA(1) >= '(') && (LA(1) <= '[')) || ((LA(1) >= ']') && (LA(1) <= 0xFFFF)) )
1940 + {
1941 + CONSUME();
1942 +
1943 + }
1944 + else
1945 + {
1946 + CONSTRUCTEX();
1947 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
1948 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
1949 +
1950 + LRECOVER(); goto ruleSTREx;
1951 + }
1952 +
1953 + {
1954 + unesc->addc(unesc, reg);
1955 + }
1956 +
1957 + }
1958 + break;
1959 + case 2:
1960 + // DAAP.g:56:6: esc= ESCAPED
1961 + {
1962 + /* 56:6: esc= ESCAPED */
1963 + {
1964 + ANTLR3_MARKER escStart118 = GETCHARINDEX();
1965 + mESCAPED(ctx );
1966 + if (HASEXCEPTION())
1967 + {
1968 + goto ruleSTREx;
1969 + }
1970 +
1971 + esc = LEXSTATE->tokFactory->newToken(LEXSTATE->tokFactory);
1972 + esc->setType(esc, ANTLR3_TOKEN_INVALID);
1973 + esc->setStartIndex(esc, escStart118);
1974 + esc->setStopIndex(esc, GETCHARINDEX()-1);
1975 + esc->input = INPUT;
1976 + }
1977 + {
1978 + unesc->appendS(unesc, GETTEXT());
1979 + }
1980 +
1981 + }
1982 + break;
1983 +
1984 + default:
1985 +
1986 + if ( cnt2 >= 1 )
1987 + {
1988 + goto loop2;
1989 + }
1990 + /* mismatchedSetEx()
1991 + */
1992 + CONSTRUCTEX();
1993 + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;
1994 + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;
1995 +
1996 +
1997 + goto ruleSTREx;
1998 + }
1999 + cnt2++;
2000 + }
2001 + loop2: ; /* Jump to here if this rule does not match */
2002 + }
2003 + /* 55:4: QUOTE (reg=~ ( '\\\\' | '\\'' ) | esc= ESCAPED )+ QUOTE */
2004 + mQUOTE(ctx );
2005 + if (HASEXCEPTION())
2006 + {
2007 + goto ruleSTREx;
2008 + }
2009 +
2010 + {
2011 + SETTEXT(unesc);
2012 + }
2013 +
2014 + }
2015 +
2016 + LEXSTATE->type = _type;
2017 +
2018 + // This is where rules clean up and exit
2019 + //
2020 + goto ruleSTREx; /* Prevent compiler warnings */
2021 + ruleSTREx: ;
2022 +
2023 + esc = NULL;
2024 +
2025 +}
2026 +// $ANTLR end STR
2027 +
2028 +// Comes from: 59:9: ( '\\\\' ( '\\\\' | '\\'' ) )
2029 +/** \brief Lexer rule generated by ANTLR3
2030 + *
2031 + * $ANTLR start ESCAPED
2032 + *
2033 + * Looks to match the characters the constitute the token ESCAPED
2034 + * from the attached input stream.
2035 + *
2036 + *
2037 + * \remark
2038 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
2039 + */
2040 +static ANTLR3_INLINE
2041 +void mESCAPED(pDAAPLexer ctx)
2042 +{
2043 + ANTLR3_UINT32 _type;
2044 +
2045 +
2046 + // DAAP.g:59:9: ( '\\\\' ( '\\\\' | '\\'' ) )
2047 + // DAAP.g:59:11: '\\\\' ( '\\\\' | '\\'' )
2048 + {
2049 + MATCHC('\\');
2050 + if (HASEXCEPTION())
2051 + {
2052 + goto ruleESCAPEDEx;
2053 + }
2054 +
2055 +
2056 + // DAAP.g:60:3: ( '\\\\' | '\\'' )
2057 + {
2058 + int alt3=2;
2059 + switch ( LA(1) )
2060 + {
2061 + case '\\':
2062 + {
2063 + alt3=1;
2064 + }
2065 + break;
2066 + case '\'':
2067 + {
2068 + alt3=2;
2069 + }
2070 + break;
2071 +
2072 + default:
2073 + CONSTRUCTEX();
2074 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
2075 + EXCEPTION->message = (void *)"";
2076 + EXCEPTION->decisionNum = 3;
2077 + EXCEPTION->state = 0;
2078 +
2079 +
2080 + goto ruleESCAPEDEx;
2081 + }
2082 +
2083 + switch (alt3)
2084 + {
2085 + case 1:
2086 + // DAAP.g:60:5: '\\\\'
2087 + {
2088 + MATCHC('\\');
2089 + if (HASEXCEPTION())
2090 + {
2091 + goto ruleESCAPEDEx;
2092 + }
2093 +
2094 + {
2095 + SETTEXT(GETTEXT()->factory->newStr8(GETTEXT()->factory, (pANTLR3_UINT8)"\\"));
2096 + }
2097 +
2098 + }
2099 + break;
2100 + case 2:
2101 + // DAAP.g:61:5: '\\''
2102 + {
2103 + MATCHC('\'');
2104 + if (HASEXCEPTION())
2105 + {
2106 + goto ruleESCAPEDEx;
2107 + }
2108 +
2109 + {
2110 + SETTEXT(GETTEXT()->factory->newStr8(GETTEXT()->factory, (pANTLR3_UINT8)"\'"));
2111 + }
2112 +
2113 + }
2114 + break;
2115 +
2116 + }
2117 + }
2118 +
2119 + }
2120 +
2121 +
2122 +
2123 + // This is where rules clean up and exit
2124 + //
2125 + goto ruleESCAPEDEx; /* Prevent compiler warnings */
2126 + ruleESCAPEDEx: ;
2127 +
2128 +}
2129 +// $ANTLR end ESCAPED
2130 +
2131 +/** This is the entry point in to the lexer from an object that
2132 + * wants to generate the next token, such as a pCOMMON_TOKEN_STREAM
2133 + */
2134 +static void
2135 +mTokens(pDAAPLexer ctx)
2136 +{
2137 + {
2138 + // DAAP.g:1:8: ( QUOTE | LPAR | RPAR | OPAND | OPOR | NEWLINE | STR )
2139 +
2140 + ANTLR3_UINT32 alt4;
2141 +
2142 + alt4=7;
2143 +
2144 + switch ( LA(1) )
2145 + {
2146 + case '\'':
2147 + {
2148 +
2149 + {
2150 + int LA4_1 = LA(2);
2151 + if ( (((LA4_1 >= 0x0000) && (LA4_1 <= '&')) || ((LA4_1 >= '(') && (LA4_1 <= 0xFFFF))) )
2152 + {
2153 + alt4=7;
2154 + }
2155 + else
2156 + {
2157 + alt4=1; }
2158 + }
2159 + }
2160 + break;
2161 + case '(':
2162 + {
2163 + alt4=2;
2164 + }
2165 + break;
2166 + case ')':
2167 + {
2168 + alt4=3;
2169 + }
2170 + break;
2171 + case ' ':
2172 + case '+':
2173 + {
2174 + alt4=4;
2175 + }
2176 + break;
2177 + case ',':
2178 + {
2179 + alt4=5;
2180 + }
2181 + break;
2182 + case '\n':
2183 + case '\r':
2184 + {
2185 + alt4=6;
2186 + }
2187 + break;
2188 +
2189 + default:
2190 + CONSTRUCTEX();
2191 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
2192 + EXCEPTION->message = (void *)"";
2193 + EXCEPTION->decisionNum = 4;
2194 + EXCEPTION->state = 0;
2195 +
2196 +
2197 + goto ruleTokensEx;
2198 + }
2199 +
2200 + switch (alt4)
2201 + {
2202 + case 1:
2203 + // DAAP.g:1:10: QUOTE
2204 + {
2205 + /* 1:10: QUOTE */
2206 + mQUOTE(ctx );
2207 + if (HASEXCEPTION())
2208 + {
2209 + goto ruleTokensEx;
2210 + }
2211 +
2212 +
2213 + }
2214 + break;
2215 + case 2:
2216 + // DAAP.g:1:16: LPAR
2217 + {
2218 + /* 1:16: LPAR */
2219 + mLPAR(ctx );
2220 + if (HASEXCEPTION())
2221 + {
2222 + goto ruleTokensEx;
2223 + }
2224 +
2225 +
2226 + }
2227 + break;
2228 + case 3:
2229 + // DAAP.g:1:21: RPAR
2230 + {
2231 + /* 1:21: RPAR */
2232 + mRPAR(ctx );
2233 + if (HASEXCEPTION())
2234 + {
2235 + goto ruleTokensEx;
2236 + }
2237 +
2238 +
2239 + }
2240 + break;
2241 + case 4:
2242 + // DAAP.g:1:26: OPAND
2243 + {
2244 + /* 1:26: OPAND */
2245 + mOPAND(ctx );
2246 + if (HASEXCEPTION())
2247 + {
2248 + goto ruleTokensEx;
2249 + }
2250 +
2251 +
2252 + }
2253 + break;
2254 + case 5:
2255 + // DAAP.g:1:32: OPOR
2256 + {
2257 + /* 1:32: OPOR */
2258 + mOPOR(ctx );
2259 + if (HASEXCEPTION())
2260 + {
2261 + goto ruleTokensEx;
2262 + }
2263 +
2264 +
2265 + }
2266 + break;
2267 + case 6:
2268 + // DAAP.g:1:37: NEWLINE
2269 + {
2270 + /* 1:37: NEWLINE */
2271 + mNEWLINE(ctx );
2272 + if (HASEXCEPTION())
2273 + {
2274 + goto ruleTokensEx;
2275 + }
2276 +
2277 +
2278 + }
2279 + break;
2280 + case 7:
2281 + // DAAP.g:1:45: STR
2282 + {
2283 + /* 1:45: STR */
2284 + mSTR(ctx );
2285 + if (HASEXCEPTION())
2286 + {
2287 + goto ruleTokensEx;
2288 + }
2289 +
2290 +
2291 + }
2292 + break;
2293 +
2294 + }
2295 + }
2296 +
2297 +
2298 + goto ruleTokensEx; /* Prevent compiler warnings */
2299 +ruleTokensEx: ;
2300 +}
2301 +
2302 +/* =========================================================================
2303 + * Lexer matching rules end.
2304 + * =========================================================================
2305 + */
2306 +/* End of Lexer code
2307 + * ================================================
2308 + * ================================================
2309 + */
2310 +
2311 +
2312 +/* End of code
2313 + * =============================================================================
2314 + */
2315 diff --git a/src/pregen/DAAPLexer.h b/src/pregen/DAAPLexer.h
2316 new file mode 100644
2317 index 0000000..685a0bc
2318 --- /dev/null
2319 +++ b/src/pregen/DAAPLexer.h
2320 @@ -0,0 +1,188 @@
2321 +/** \file
2322 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
2323 + *
2324 + * - From the grammar source file : DAAP.g
2325 + * - On : 2016-01-01 12:23:41
2326 + * - for the lexer : DAAPLexerLexer *
2327 + * Editing it, at least manually, is not wise.
2328 + *
2329 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
2330 + *
2331 + *
2332 + * The lexer DAAPLexer has the callable functions (rules) shown below,
2333 + * which will invoke the code for the associated rule in the source grammar
2334 + * assuming that the input stream is pointing to a token/text stream that could begin
2335 + * this rule.
2336 + *
2337 + * For instance if you call the first (topmost) rule in a parser grammar, you will
2338 + * get the results of a full parse, but calling a rule half way through the grammar will
2339 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
2340 + * in editors and so on.
2341 + *
2342 + * The parser entry points are called indirectly (by function pointer to function) via
2343 + * a parser context typedef pDAAPLexer, which is returned from a call to DAAPLexerNew().
2344 + *
2345 + * As this is a generated lexer, it is unlikely you will call it 'manually'. However
2346 + * the methods are provided anyway.
2347 + * * The methods in pDAAPLexer are as follows:
2348 + *
2349 + * - void pDAAPLexer->QUOTE(pDAAPLexer)
2350 + * - void pDAAPLexer->LPAR(pDAAPLexer)
2351 + * - void pDAAPLexer->RPAR(pDAAPLexer)
2352 + * - void pDAAPLexer->OPAND(pDAAPLexer)
2353 + * - void pDAAPLexer->OPOR(pDAAPLexer)
2354 + * - void pDAAPLexer->NEWLINE(pDAAPLexer)
2355 + * - void pDAAPLexer->STR(pDAAPLexer)
2356 + * - void pDAAPLexer->ESCAPED(pDAAPLexer)
2357 + * - void pDAAPLexer->Tokens(pDAAPLexer)
2358 + *
2359 + * The return type for any particular rule is of course determined by the source
2360 + * grammar file.
2361 + */
2362 +// [The "BSD licence"]
2363 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
2364 +// http://www.temporal-wave.com
2365 +// http://www.linkedin.com/in/jimidle
2366 +//
2367 +// All rights reserved.
2368 +//
2369 +// Redistribution and use in source and binary forms, with or without
2370 +// modification, are permitted provided that the following conditions
2371 +// are met:
2372 +// 1. Redistributions of source code must retain the above copyright
2373 +// notice, this list of conditions and the following disclaimer.
2374 +// 2. Redistributions in binary form must reproduce the above copyright
2375 +// notice, this list of conditions and the following disclaimer in the
2376 +// documentation and/or other materials provided with the distribution.
2377 +// 3. The name of the author may not be used to endorse or promote products
2378 +// derived from this software without specific prior written permission.
2379 +//
2380 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2381 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2382 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2383 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2384 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2385 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2386 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2387 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2388 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2389 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2390 +
2391 +#ifndef _DAAPLexer_H
2392 +#define _DAAPLexer_H
2393 +/* =============================================================================
2394 + * Standard antlr3 C runtime definitions
2395 + */
2396 +#include <antlr3.h>
2397 +
2398 +/* End of standard antlr 3 runtime definitions
2399 + * =============================================================================
2400 + */
2401 +
2402 +#ifdef __cplusplus
2403 +extern "C" {
2404 +#endif
2405 +
2406 +// Forward declare the context typedef so that we can use it before it is
2407 +// properly defined. Delegators and delegates (from import statements) are
2408 +// interdependent and their context structures contain pointers to each other
2409 +// C only allows such things to be declared if you pre-declare the typedef.
2410 +//
2411 +typedef struct DAAPLexer_Ctx_struct DAAPLexer, * pDAAPLexer;
2412 +
2413 +
2414 +
2415 +#ifdef ANTLR3_WINDOWS
2416 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
2417 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
2418 +// initialized but unused variable - tree rewrite variables declared but not needed
2419 +// Unreferenced local variable - lexer rule declares but does not always use _type
2420 +// potentially unitialized variable used - retval always returned from a rule
2421 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
2422 +//
2423 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
2424 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
2425 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
2426 +// this is a matter of orthogonality hence I disable that one.
2427 +//
2428 +#pragma warning( disable : 4100 )
2429 +#pragma warning( disable : 4101 )
2430 +#pragma warning( disable : 4127 )
2431 +#pragma warning( disable : 4189 )
2432 +#pragma warning( disable : 4505 )
2433 +#pragma warning( disable : 4701 )
2434 +#endif
2435 +
2436 +/** Context tracking structure for DAAPLexer
2437 + */
2438 +struct DAAPLexer_Ctx_struct
2439 +{
2440 + /** Built in ANTLR3 context tracker contains all the generic elements
2441 + * required for context tracking.
2442 + */
2443 + pANTLR3_LEXER pLexer;
2444 +
2445 +
2446 + void (*mQUOTE) (struct DAAPLexer_Ctx_struct * ctx);
2447 + void (*mLPAR) (struct DAAPLexer_Ctx_struct * ctx);
2448 + void (*mRPAR) (struct DAAPLexer_Ctx_struct * ctx);
2449 + void (*mOPAND) (struct DAAPLexer_Ctx_struct * ctx);
2450 + void (*mOPOR) (struct DAAPLexer_Ctx_struct * ctx);
2451 + void (*mNEWLINE) (struct DAAPLexer_Ctx_struct * ctx);
2452 + void (*mSTR) (struct DAAPLexer_Ctx_struct * ctx);
2453 + void (*mESCAPED) (struct DAAPLexer_Ctx_struct * ctx);
2454 + void (*mTokens) (struct DAAPLexer_Ctx_struct * ctx); const char * (*getGrammarFileName)();
2455 + void (*free) (struct DAAPLexer_Ctx_struct * ctx);
2456 +
2457 +};
2458 +
2459 +// Function protoypes for the constructor functions that external translation units
2460 +// such as delegators and delegates may wish to call.
2461 +//
2462 +ANTLR3_API pDAAPLexer DAAPLexerNew (pANTLR3_INPUT_STREAM instream);
2463 +ANTLR3_API pDAAPLexer DAAPLexerNewSSD (pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
2464 +
2465 +/** Symbolic definitions of all the tokens that the lexer will work with.
2466 + * \{
2467 + *
2468 + * Antlr will define EOF, but we can't use that as it it is too common in
2469 + * in C header files and that would be confusing. There is no way to filter this out at the moment
2470 + * so we just undef it here for now. That isn't the value we get back from C recognizers
2471 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
2472 + */
2473 +#ifdef EOF
2474 +#undef EOF
2475 +#endif
2476 +#ifdef Tokens
2477 +#undef Tokens
2478 +#endif
2479 +#define STR 9
2480 +#define QUOTE 10
2481 +#define NEWLINE 4
2482 +#define LPAR 7
2483 +#define OPOR 5
2484 +#define RPAR 8
2485 +#define ESCAPED 11
2486 +#define OPAND 6
2487 +#define EOF -1
2488 +#ifdef EOF
2489 +#undef EOF
2490 +#define EOF ANTLR3_TOKEN_EOF
2491 +#endif
2492 +
2493 +#ifndef TOKENSOURCE
2494 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
2495 +#endif
2496 +
2497 +/* End of token definitions for DAAPLexer
2498 + * =============================================================================
2499 + */
2500 +/** \} */
2501 +
2502 +#ifdef __cplusplus
2503 +}
2504 +#endif
2505 +
2506 +#endif
2507 +
2508 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
2509 diff --git a/src/pregen/DAAPParser.c b/src/pregen/DAAPParser.c
2510 new file mode 100644
2511 index 0000000..1091f05
2512 --- /dev/null
2513 +++ b/src/pregen/DAAPParser.c
2514 @@ -0,0 +1,1014 @@
2515 +/** \file
2516 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
2517 + *
2518 + * - From the grammar source file : DAAP.g
2519 + * - On : 2016-01-01 12:23:41
2520 + * - for the parser : DAAPParserParser *
2521 + * Editing it, at least manually, is not wise.
2522 + *
2523 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
2524 + *
2525 + *
2526 +*/
2527 +// [The "BSD licence"]
2528 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
2529 +// http://www.temporal-wave.com
2530 +// http://www.linkedin.com/in/jimidle
2531 +//
2532 +// All rights reserved.
2533 +//
2534 +// Redistribution and use in source and binary forms, with or without
2535 +// modification, are permitted provided that the following conditions
2536 +// are met:
2537 +// 1. Redistributions of source code must retain the above copyright
2538 +// notice, this list of conditions and the following disclaimer.
2539 +// 2. Redistributions in binary form must reproduce the above copyright
2540 +// notice, this list of conditions and the following disclaimer in the
2541 +// documentation and/or other materials provided with the distribution.
2542 +// 3. The name of the author may not be used to endorse or promote products
2543 +// derived from this software without specific prior written permission.
2544 +//
2545 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2546 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2547 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2548 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2549 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2550 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2551 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2552 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2553 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2554 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2555 +
2556 +/* -----------------------------------------
2557 + * Include the ANTLR3 generated header file.
2558 + */
2559 +#include "DAAPParser.h"
2560 +/* ----------------------------------------- */
2561 +
2562 +
2563 +
2564 +
2565 +
2566 +/* MACROS that hide the C interface implementations from the
2567 + * generated code, which makes it a little more understandable to the human eye.
2568 + * I am very much against using C pre-processor macros for function calls and bits
2569 + * of code as you cannot see what is happening when single stepping in debuggers
2570 + * and so on. The exception (in my book at least) is for generated code, where you are
2571 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
2572 + * hides some indirect calls, but is always referring to the input stream. This is
2573 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
2574 + * the runtime interfaces without changing the generated code too often, without
2575 + * confusing the reader of the generated output, who may not wish to know the gory
2576 + * details of the interface inheritance.
2577 + */
2578 +
2579 +#define CTX ctx
2580 +
2581 +/* Aids in accessing scopes for grammar programmers
2582 + */
2583 +#undef SCOPE_TYPE
2584 +#undef SCOPE_STACK
2585 +#undef SCOPE_TOP
2586 +#define SCOPE_TYPE(scope) pDAAPParser_##scope##_SCOPE
2587 +#define SCOPE_STACK(scope) pDAAPParser_##scope##Stack
2588 +#define SCOPE_TOP(scope) ctx->pDAAPParser_##scope##Top
2589 +#define SCOPE_SIZE(scope) ctx->pDAAPParser_##scope##Stack_limit
2590 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
2591 +
2592 +/* Macros for accessing things in the parser
2593 + */
2594 +
2595 +#undef PARSER
2596 +#undef RECOGNIZER
2597 +#undef HAVEPARSEDRULE
2598 +#undef MEMOIZE
2599 +#undef INPUT
2600 +#undef STRSTREAM
2601 +#undef HASEXCEPTION
2602 +#undef EXCEPTION
2603 +#undef MATCHT
2604 +#undef MATCHANYT
2605 +#undef FOLLOWSTACK
2606 +#undef FOLLOWPUSH
2607 +#undef FOLLOWPOP
2608 +#undef PRECOVER
2609 +#undef PREPORTERROR
2610 +#undef LA
2611 +#undef LT
2612 +#undef CONSTRUCTEX
2613 +#undef CONSUME
2614 +#undef MARK
2615 +#undef REWIND
2616 +#undef REWINDLAST
2617 +#undef PERRORRECOVERY
2618 +#undef HASFAILED
2619 +#undef FAILEDFLAG
2620 +#undef RECOVERFROMMISMATCHEDSET
2621 +#undef RECOVERFROMMISMATCHEDELEMENT
2622 +#undef INDEX
2623 +#undef ADAPTOR
2624 +#undef SEEK
2625 +#undef RULEMEMO
2626 +#undef DBG
2627 +
2628 +#define PARSER ctx->pParser
2629 +#define RECOGNIZER PARSER->rec
2630 +#define PSRSTATE RECOGNIZER->state
2631 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
2632 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
2633 +#define INPUT PARSER->tstream
2634 +#define STRSTREAM INPUT
2635 +#define ISTREAM INPUT->istream
2636 +#define INDEX() ISTREAM->index(INPUT->istream)
2637 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
2638 +#define EXCEPTION PSRSTATE->exception
2639 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
2640 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
2641 +#define FOLLOWSTACK PSRSTATE->following
2642 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
2643 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
2644 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
2645 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
2646 +#define LA(n) INPUT->istream->_LA(ISTREAM, n)
2647 +#define LT(n) INPUT->_LT(INPUT, n)
2648 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
2649 +#define CONSUME() ISTREAM->consume(ISTREAM)
2650 +#define MARK() ISTREAM->mark(ISTREAM)
2651 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
2652 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
2653 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
2654 +#define PERRORRECOVERY PSRSTATE->errorRecovery
2655 +#define FAILEDFLAG PSRSTATE->failed
2656 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
2657 +#define BACKTRACKING PSRSTATE->backtracking
2658 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
2659 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
2660 +#define ADAPTOR ctx->adaptor
2661 +#define RULEMEMO PSRSTATE->ruleMemo
2662 +#define DBG RECOGNIZER->debugger
2663 +
2664 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
2665 +
2666 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
2667 + * then for the present you must use different names for your defines as these are hard coded
2668 + * in the code generator. It would be better not to use such names internally, and maybe
2669 + * we can change this in a forthcoming release. I deliberately do not #undef these
2670 + * here as this will at least give you a redefined error somewhere if they clash.
2671 + */
2672 +#define UP ANTLR3_TOKEN_UP
2673 +#define DOWN ANTLR3_TOKEN_DOWN
2674 +#define EOR ANTLR3_TOKEN_EOR
2675 +#define INVALID ANTLR3_TOKEN_INVALID
2676 +
2677 +
2678 +/* =============================================================================
2679 + * Functions to create and destroy scopes. First come the rule scopes, followed
2680 + * by the global declared scopes.
2681 + */
2682 +
2683 +
2684 +
2685 +/* ============================================================================= */
2686 +
2687 +/* =============================================================================
2688 + * Start of recognizer
2689 + */
2690 +
2691 +
2692 +
2693 +/** \brief Table of all token names in symbolic order, mainly used for
2694 + * error reporting.
2695 + */
2696 +pANTLR3_UINT8 DAAPParserTokenNames[8+4]
2697 + = {
2698 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
2699 + (pANTLR3_UINT8) "<EOR>",
2700 + (pANTLR3_UINT8) "<DOWN>",
2701 + (pANTLR3_UINT8) "<UP>",
2702 + (pANTLR3_UINT8) "NEWLINE",
2703 + (pANTLR3_UINT8) "OPOR",
2704 + (pANTLR3_UINT8) "OPAND",
2705 + (pANTLR3_UINT8) "LPAR",
2706 + (pANTLR3_UINT8) "RPAR",
2707 + (pANTLR3_UINT8) "STR",
2708 + (pANTLR3_UINT8) "QUOTE",
2709 + (pANTLR3_UINT8) "ESCAPED"
2710 + };
2711 +
2712 +
2713 +
2714 +// Forward declare the locally static matching functions we have generated.
2715 +//
2716 +static DAAPParser_query_return query (pDAAPParser ctx);
2717 +static DAAPParser_expr_return expr (pDAAPParser ctx);
2718 +static DAAPParser_aexpr_return aexpr (pDAAPParser ctx);
2719 +static DAAPParser_crit_return crit (pDAAPParser ctx);
2720 +static void DAAPParserFree(pDAAPParser ctx);
2721 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
2722 + * we need a function that knows how to free a return scope when the list is destroyed.
2723 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
2724 + */
2725 +static void ANTLR3_CDECL freeScope(void * scope)
2726 +{
2727 + ANTLR3_FREE(scope);
2728 +}
2729 +
2730 +/** \brief Name of the grammar file that generated this code
2731 + */
2732 +static const char fileName[] = "DAAP.g";
2733 +
2734 +/** \brief Return the name of the grammar file that generated this code.
2735 + */
2736 +static const char * getGrammarFileName()
2737 +{
2738 + return fileName;
2739 +}
2740 +/** \brief Create a new DAAPParser parser and return a context for it.
2741 + *
2742 + * \param[in] instream Pointer to an input stream interface.
2743 + *
2744 + * \return Pointer to new parser context upon success.
2745 + */
2746 +ANTLR3_API pDAAPParser
2747 +DAAPParserNew (pANTLR3_COMMON_TOKEN_STREAM instream)
2748 +{
2749 + // See if we can create a new parser with the standard constructor
2750 + //
2751 + return DAAPParserNewSSD(instream, NULL);
2752 +}
2753 +
2754 +/** \brief Create a new DAAPParser parser and return a context for it.
2755 + *
2756 + * \param[in] instream Pointer to an input stream interface.
2757 + *
2758 + * \return Pointer to new parser context upon success.
2759 + */
2760 +ANTLR3_API pDAAPParser
2761 +DAAPParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
2762 +{
2763 + pDAAPParser ctx; /* Context structure we will build and return */
2764 +
2765 + ctx = (pDAAPParser) ANTLR3_CALLOC(1, sizeof(DAAPParser));
2766 +
2767 + if (ctx == NULL)
2768 + {
2769 + // Failed to allocate memory for parser context
2770 + //
2771 + return NULL;
2772 + }
2773 +
2774 + /* -------------------------------------------------------------------
2775 + * Memory for basic structure is allocated, now to fill in
2776 + * the base ANTLR3 structures. We initialize the function pointers
2777 + * for the standard ANTLR3 parser function set, but upon return
2778 + * from here, the programmer may set the pointers to provide custom
2779 + * implementations of each function.
2780 + *
2781 + * We don't use the macros defined in DAAPParser.h here, in order that you can get a sense
2782 + * of what goes where.
2783 + */
2784 +
2785 + /* Create a base parser/recognizer, using the supplied token stream
2786 + */
2787 + ctx->pParser = antlr3ParserNewStream(ANTLR3_SIZE_HINT, instream->tstream, state);
2788 + /* Install the implementation of our DAAPParser interface
2789 + */
2790 + ctx->query = query;
2791 + ctx->expr = expr;
2792 + ctx->aexpr = aexpr;
2793 + ctx->crit = crit;
2794 + ctx->free = DAAPParserFree;
2795 + ctx->getGrammarFileName = getGrammarFileName;
2796 +
2797 + /* Install the scope pushing methods.
2798 + */
2799 + ADAPTOR = ANTLR3_TREE_ADAPTORNew(instream->tstream->tokenSource->strFactory);
2800 + ctx->vectors = antlr3VectorFactoryNew(0);
2801 +
2802 +
2803 +
2804 + /* Install the token table
2805 + */
2806 + PSRSTATE->tokenNames = DAAPParserTokenNames;
2807 +
2808 +
2809 + /* Return the newly built parser to the caller
2810 + */
2811 + return ctx;
2812 +}
2813 +
2814 +/** Free the parser resources
2815 + */
2816 + static void
2817 + DAAPParserFree(pDAAPParser ctx)
2818 + {
2819 + /* Free any scope memory
2820 + */
2821 +
2822 + ctx->vectors->close(ctx->vectors);
2823 + /* We created the adaptor so we must free it
2824 + */
2825 + ADAPTOR->free(ADAPTOR);
2826 + // Free this parser
2827 + //
2828 + ctx->pParser->free(ctx->pParser);
2829 + ANTLR3_FREE(ctx);
2830 +
2831 + /* Everything is released, so we can return
2832 + */
2833 + return;
2834 + }
2835 +
2836 +/** Return token names used by this parser
2837 + *
2838 + * The returned pointer is used as an index into the token names table (using the token
2839 + * number as the index).
2840 + *
2841 + * \return Pointer to first char * in the table.
2842 + */
2843 +static pANTLR3_UINT8 *getTokenNames()
2844 +{
2845 + return DAAPParserTokenNames;
2846 +}
2847 +
2848 +
2849 +/* Declare the bitsets
2850 + */
2851 +
2852 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_query42 */
2853 +static ANTLR3_BITWORD FOLLOW_expr_in_query42_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000010) };
2854 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_query42 = { FOLLOW_expr_in_query42_bits, 1 };
2855 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NEWLINE_in_query44 */
2856 +static ANTLR3_BITWORD FOLLOW_NEWLINE_in_query44_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000000) };
2857 +static ANTLR3_BITSET_LIST FOLLOW_NEWLINE_in_query44 = { FOLLOW_NEWLINE_in_query44_bits, 1 };
2858 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EOF_in_query47 */
2859 +static ANTLR3_BITWORD FOLLOW_EOF_in_query47_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
2860 +static ANTLR3_BITSET_LIST FOLLOW_EOF_in_query47 = { FOLLOW_EOF_in_query47_bits, 1 };
2861 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expr62 */
2862 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expr62_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
2863 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expr62 = { FOLLOW_aexpr_in_expr62_bits, 1 };
2864 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OPOR_in_expr65 */
2865 +static ANTLR3_BITWORD FOLLOW_OPOR_in_expr65_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
2866 +static ANTLR3_BITSET_LIST FOLLOW_OPOR_in_expr65 = { FOLLOW_OPOR_in_expr65_bits, 1 };
2867 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expr68 */
2868 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expr68_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
2869 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expr68 = { FOLLOW_aexpr_in_expr68_bits, 1 };
2870 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_aexpr80 */
2871 +static ANTLR3_BITWORD FOLLOW_crit_in_aexpr80_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
2872 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_aexpr80 = { FOLLOW_crit_in_aexpr80_bits, 1 };
2873 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OPAND_in_aexpr83 */
2874 +static ANTLR3_BITWORD FOLLOW_OPAND_in_aexpr83_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
2875 +static ANTLR3_BITSET_LIST FOLLOW_OPAND_in_aexpr83 = { FOLLOW_OPAND_in_aexpr83_bits, 1 };
2876 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_aexpr86 */
2877 +static ANTLR3_BITWORD FOLLOW_crit_in_aexpr86_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
2878 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_aexpr86 = { FOLLOW_crit_in_aexpr86_bits, 1 };
2879 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LPAR_in_crit98 */
2880 +static ANTLR3_BITWORD FOLLOW_LPAR_in_crit98_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
2881 +static ANTLR3_BITSET_LIST FOLLOW_LPAR_in_crit98 = { FOLLOW_LPAR_in_crit98_bits, 1 };
2882 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_crit100 */
2883 +static ANTLR3_BITWORD FOLLOW_expr_in_crit100_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000100) };
2884 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_crit100 = { FOLLOW_expr_in_crit100_bits, 1 };
2885 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_RPAR_in_crit102 */
2886 +static ANTLR3_BITWORD FOLLOW_RPAR_in_crit102_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
2887 +static ANTLR3_BITSET_LIST FOLLOW_RPAR_in_crit102 = { FOLLOW_RPAR_in_crit102_bits, 1 };
2888 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_crit112 */
2889 +static ANTLR3_BITWORD FOLLOW_STR_in_crit112_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
2890 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_crit112 = { FOLLOW_STR_in_crit112_bits, 1 };
2891 +
2892 +
2893 +
2894 +
2895 +/* ==============================================
2896 + * Parsing rules
2897 + */
2898 +/**
2899 + * $ANTLR start query
2900 + * DAAP.g:27:1: query : expr ( NEWLINE )? EOF -> expr ;
2901 + */
2902 +static DAAPParser_query_return
2903 +query(pDAAPParser ctx)
2904 +{
2905 + DAAPParser_query_return retval;
2906 +
2907 + pANTLR3_BASE_TREE root_0;
2908 +
2909 + pANTLR3_COMMON_TOKEN NEWLINE2;
2910 + pANTLR3_COMMON_TOKEN EOF3;
2911 + DAAPParser_expr_return expr1;
2912 + #undef RETURN_TYPE_expr1
2913 + #define RETURN_TYPE_expr1 DAAPParser_expr_return
2914 +
2915 + pANTLR3_BASE_TREE NEWLINE2_tree;
2916 + pANTLR3_BASE_TREE EOF3_tree;
2917 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_NEWLINE;
2918 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_EOF;
2919 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expr;
2920 + /* Initialize rule variables
2921 + */
2922 +
2923 +
2924 + root_0 = NULL;
2925 +
2926 + NEWLINE2 = NULL;
2927 + EOF3 = NULL;
2928 + expr1.tree = NULL;
2929 +
2930 + retval.start = LT(1); retval.stop = retval.start;
2931 +
2932 + NEWLINE2_tree = NULL;
2933 + EOF3_tree = NULL;
2934 +
2935 + stream_NEWLINE = NULL;
2936 + #define CREATE_stream_NEWLINE if (stream_NEWLINE == NULL) {stream_NEWLINE = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token NEWLINE"); }
2937 + stream_EOF = NULL;
2938 + #define CREATE_stream_EOF if (stream_EOF == NULL) {stream_EOF = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token EOF"); }
2939 + stream_expr = NULL;
2940 + #define CREATE_stream_expr if (stream_expr == NULL) {stream_expr = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expr"); }
2941 +
2942 + retval.tree = NULL;
2943 + {
2944 + // DAAP.g:27:7: ( expr ( NEWLINE )? EOF -> expr )
2945 + // DAAP.g:27:9: expr ( NEWLINE )? EOF
2946 + {
2947 + FOLLOWPUSH(FOLLOW_expr_in_query42);
2948 + expr1=expr(ctx);
2949 +
2950 + FOLLOWPOP();
2951 + if (HASEXCEPTION())
2952 + {
2953 + goto rulequeryEx;
2954 + }
2955 +
2956 + CREATE_stream_expr; stream_expr->add(stream_expr, expr1.tree, NULL);
2957 +
2958 + // DAAP.g:27:14: ( NEWLINE )?
2959 + {
2960 + int alt1=2;
2961 + switch ( LA(1) )
2962 + {
2963 + case NEWLINE:
2964 + {
2965 + alt1=1;
2966 + }
2967 + break;
2968 + }
2969 +
2970 + switch (alt1)
2971 + {
2972 + case 1:
2973 + // DAAP.g:27:14: NEWLINE
2974 + {
2975 + NEWLINE2 = (pANTLR3_COMMON_TOKEN) MATCHT(NEWLINE, &FOLLOW_NEWLINE_in_query44);
2976 + if (HASEXCEPTION())
2977 + {
2978 + goto rulequeryEx;
2979 + }
2980 +
2981 + CREATE_stream_NEWLINE; stream_NEWLINE->add(stream_NEWLINE, NEWLINE2, NULL);
2982 +
2983 +
2984 + }
2985 + break;
2986 +
2987 + }
2988 + }
2989 + EOF3 = (pANTLR3_COMMON_TOKEN) MATCHT(EOF, &FOLLOW_EOF_in_query47);
2990 + if (HASEXCEPTION())
2991 + {
2992 + goto rulequeryEx;
2993 + }
2994 +
2995 + CREATE_stream_EOF; stream_EOF->add(stream_EOF, EOF3, NULL);
2996 +
2997 +
2998 +
2999 + /* AST REWRITE
3000 + * elements : expr
3001 + * token labels :
3002 + * rule labels : retval
3003 + * token list labels :
3004 + * rule list labels :
3005 + */
3006 + {
3007 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
3008 +
3009 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
3010 +
3011 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
3012 + retval.tree = root_0;
3013 + // 27:27: -> expr
3014 + {
3015 + ADAPTOR->addChild(ADAPTOR, root_0, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr));
3016 +
3017 + }
3018 +
3019 + retval.tree = root_0; // set result root
3020 + if (stream_retval != NULL) stream_retval->free(stream_retval);
3021 +
3022 +
3023 + }
3024 + }
3025 +
3026 + }
3027 +
3028 +
3029 + // This is where rules clean up and exit
3030 + //
3031 + goto rulequeryEx; /* Prevent compiler warnings */
3032 + rulequeryEx: ;
3033 + retval.stop = LT(-1);
3034 +
3035 + retval.stop = LT(-1);
3036 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
3037 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
3038 + if (stream_NEWLINE != NULL) stream_NEWLINE->free(stream_NEWLINE);
3039 + if (stream_EOF != NULL) stream_EOF->free(stream_EOF);
3040 + if (stream_expr != NULL) stream_expr->free(stream_expr);
3041 +
3042 + if (HASEXCEPTION())
3043 + {
3044 + PREPORTERROR();
3045 + PRECOVER();
3046 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
3047 + }
3048 +
3049 +
3050 + return retval;
3051 +}
3052 +/* $ANTLR end query */
3053 +
3054 +/**
3055 + * $ANTLR start expr
3056 + * DAAP.g:30:1: expr : aexpr ( OPOR aexpr )* ;
3057 + */
3058 +static DAAPParser_expr_return
3059 +expr(pDAAPParser ctx)
3060 +{
3061 + DAAPParser_expr_return retval;
3062 +
3063 + pANTLR3_BASE_TREE root_0;
3064 +
3065 + pANTLR3_COMMON_TOKEN OPOR5;
3066 + DAAPParser_aexpr_return aexpr4;
3067 + #undef RETURN_TYPE_aexpr4
3068 + #define RETURN_TYPE_aexpr4 DAAPParser_aexpr_return
3069 +
3070 + DAAPParser_aexpr_return aexpr6;
3071 + #undef RETURN_TYPE_aexpr6
3072 + #define RETURN_TYPE_aexpr6 DAAPParser_aexpr_return
3073 +
3074 + pANTLR3_BASE_TREE OPOR5_tree;
3075 +
3076 + /* Initialize rule variables
3077 + */
3078 +
3079 +
3080 + root_0 = NULL;
3081 +
3082 + OPOR5 = NULL;
3083 + aexpr4.tree = NULL;
3084 +
3085 + aexpr6.tree = NULL;
3086 +
3087 + retval.start = LT(1); retval.stop = retval.start;
3088 +
3089 + OPOR5_tree = NULL;
3090 +
3091 +
3092 + retval.tree = NULL;
3093 + {
3094 + // DAAP.g:30:6: ( aexpr ( OPOR aexpr )* )
3095 + // DAAP.g:30:8: aexpr ( OPOR aexpr )*
3096 + {
3097 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
3098 +
3099 + FOLLOWPUSH(FOLLOW_aexpr_in_expr62);
3100 + aexpr4=aexpr(ctx);
3101 +
3102 + FOLLOWPOP();
3103 + if (HASEXCEPTION())
3104 + {
3105 + goto ruleexprEx;
3106 + }
3107 +
3108 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr4.tree);
3109 +
3110 + // DAAP.g:30:14: ( OPOR aexpr )*
3111 +
3112 + for (;;)
3113 + {
3114 + int alt2=2;
3115 + switch ( LA(1) )
3116 + {
3117 + case OPOR:
3118 + {
3119 + alt2=1;
3120 + }
3121 + break;
3122 +
3123 + }
3124 +
3125 + switch (alt2)
3126 + {
3127 + case 1:
3128 + // DAAP.g:30:15: OPOR aexpr
3129 + {
3130 + OPOR5 = (pANTLR3_COMMON_TOKEN) MATCHT(OPOR, &FOLLOW_OPOR_in_expr65);
3131 + if (HASEXCEPTION())
3132 + {
3133 + goto ruleexprEx;
3134 + }
3135 +
3136 + OPOR5_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, OPOR5));
3137 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, OPOR5_tree, root_0));
3138 +
3139 + FOLLOWPUSH(FOLLOW_aexpr_in_expr68);
3140 + aexpr6=aexpr(ctx);
3141 +
3142 + FOLLOWPOP();
3143 + if (HASEXCEPTION())
3144 + {
3145 + goto ruleexprEx;
3146 + }
3147 +
3148 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr6.tree);
3149 +
3150 + }
3151 + break;
3152 +
3153 + default:
3154 + goto loop2; /* break out of the loop */
3155 + break;
3156 + }
3157 + }
3158 + loop2: ; /* Jump out to here if this rule does not match */
3159 +
3160 +
3161 + }
3162 +
3163 + }
3164 +
3165 +
3166 + // This is where rules clean up and exit
3167 + //
3168 + goto ruleexprEx; /* Prevent compiler warnings */
3169 + ruleexprEx: ;
3170 + retval.stop = LT(-1);
3171 +
3172 + retval.stop = LT(-1);
3173 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
3174 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
3175 +
3176 + if (HASEXCEPTION())
3177 + {
3178 + PREPORTERROR();
3179 + PRECOVER();
3180 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
3181 + }
3182 +
3183 +
3184 + return retval;
3185 +}
3186 +/* $ANTLR end expr */
3187 +
3188 +/**
3189 + * $ANTLR start aexpr
3190 + * DAAP.g:33:1: aexpr : crit ( OPAND crit )* ;
3191 + */
3192 +static DAAPParser_aexpr_return
3193 +aexpr(pDAAPParser ctx)
3194 +{
3195 + DAAPParser_aexpr_return retval;
3196 +
3197 + pANTLR3_BASE_TREE root_0;
3198 +
3199 + pANTLR3_COMMON_TOKEN OPAND8;
3200 + DAAPParser_crit_return crit7;
3201 + #undef RETURN_TYPE_crit7
3202 + #define RETURN_TYPE_crit7 DAAPParser_crit_return
3203 +
3204 + DAAPParser_crit_return crit9;
3205 + #undef RETURN_TYPE_crit9
3206 + #define RETURN_TYPE_crit9 DAAPParser_crit_return
3207 +
3208 + pANTLR3_BASE_TREE OPAND8_tree;
3209 +
3210 + /* Initialize rule variables
3211 + */
3212 +
3213 +
3214 + root_0 = NULL;
3215 +
3216 + OPAND8 = NULL;
3217 + crit7.tree = NULL;
3218 +
3219 + crit9.tree = NULL;
3220 +
3221 + retval.start = LT(1); retval.stop = retval.start;
3222 +
3223 + OPAND8_tree = NULL;
3224 +
3225 +
3226 + retval.tree = NULL;
3227 + {
3228 + // DAAP.g:33:7: ( crit ( OPAND crit )* )
3229 + // DAAP.g:33:9: crit ( OPAND crit )*
3230 + {
3231 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
3232 +
3233 + FOLLOWPUSH(FOLLOW_crit_in_aexpr80);
3234 + crit7=crit(ctx);
3235 +
3236 + FOLLOWPOP();
3237 + if (HASEXCEPTION())
3238 + {
3239 + goto ruleaexprEx;
3240 + }
3241 +
3242 + ADAPTOR->addChild(ADAPTOR, root_0, crit7.tree);
3243 +
3244 + // DAAP.g:33:14: ( OPAND crit )*
3245 +
3246 + for (;;)
3247 + {
3248 + int alt3=2;
3249 + switch ( LA(1) )
3250 + {
3251 + case OPAND:
3252 + {
3253 + alt3=1;
3254 + }
3255 + break;
3256 +
3257 + }
3258 +
3259 + switch (alt3)
3260 + {
3261 + case 1:
3262 + // DAAP.g:33:15: OPAND crit
3263 + {
3264 + OPAND8 = (pANTLR3_COMMON_TOKEN) MATCHT(OPAND, &FOLLOW_OPAND_in_aexpr83);
3265 + if (HASEXCEPTION())
3266 + {
3267 + goto ruleaexprEx;
3268 + }
3269 +
3270 + OPAND8_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, OPAND8));
3271 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, OPAND8_tree, root_0));
3272 +
3273 + FOLLOWPUSH(FOLLOW_crit_in_aexpr86);
3274 + crit9=crit(ctx);
3275 +
3276 + FOLLOWPOP();
3277 + if (HASEXCEPTION())
3278 + {
3279 + goto ruleaexprEx;
3280 + }
3281 +
3282 + ADAPTOR->addChild(ADAPTOR, root_0, crit9.tree);
3283 +
3284 + }
3285 + break;
3286 +
3287 + default:
3288 + goto loop3; /* break out of the loop */
3289 + break;
3290 + }
3291 + }
3292 + loop3: ; /* Jump out to here if this rule does not match */
3293 +
3294 +
3295 + }
3296 +
3297 + }
3298 +
3299 +
3300 + // This is where rules clean up and exit
3301 + //
3302 + goto ruleaexprEx; /* Prevent compiler warnings */
3303 + ruleaexprEx: ;
3304 + retval.stop = LT(-1);
3305 +
3306 + retval.stop = LT(-1);
3307 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
3308 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
3309 +
3310 + if (HASEXCEPTION())
3311 + {
3312 + PREPORTERROR();
3313 + PRECOVER();
3314 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
3315 + }
3316 +
3317 +
3318 + return retval;
3319 +}
3320 +/* $ANTLR end aexpr */
3321 +
3322 +/**
3323 + * $ANTLR start crit
3324 + * DAAP.g:36:1: crit : ( LPAR expr RPAR -> expr | STR );
3325 + */
3326 +static DAAPParser_crit_return
3327 +crit(pDAAPParser ctx)
3328 +{
3329 + DAAPParser_crit_return retval;
3330 +
3331 + pANTLR3_BASE_TREE root_0;
3332 +
3333 + pANTLR3_COMMON_TOKEN LPAR10;
3334 + pANTLR3_COMMON_TOKEN RPAR12;
3335 + pANTLR3_COMMON_TOKEN STR13;
3336 + DAAPParser_expr_return expr11;
3337 + #undef RETURN_TYPE_expr11
3338 + #define RETURN_TYPE_expr11 DAAPParser_expr_return
3339 +
3340 + pANTLR3_BASE_TREE LPAR10_tree;
3341 + pANTLR3_BASE_TREE RPAR12_tree;
3342 + pANTLR3_BASE_TREE STR13_tree;
3343 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_RPAR;
3344 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_LPAR;
3345 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expr;
3346 + /* Initialize rule variables
3347 + */
3348 +
3349 +
3350 + root_0 = NULL;
3351 +
3352 + LPAR10 = NULL;
3353 + RPAR12 = NULL;
3354 + STR13 = NULL;
3355 + expr11.tree = NULL;
3356 +
3357 + retval.start = LT(1); retval.stop = retval.start;
3358 +
3359 + LPAR10_tree = NULL;
3360 + RPAR12_tree = NULL;
3361 + STR13_tree = NULL;
3362 +
3363 + stream_RPAR = NULL;
3364 + #define CREATE_stream_RPAR if (stream_RPAR == NULL) {stream_RPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token RPAR"); }
3365 + stream_LPAR = NULL;
3366 + #define CREATE_stream_LPAR if (stream_LPAR == NULL) {stream_LPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token LPAR"); }
3367 + stream_expr = NULL;
3368 + #define CREATE_stream_expr if (stream_expr == NULL) {stream_expr = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expr"); }
3369 +
3370 + retval.tree = NULL;
3371 + {
3372 + {
3373 + // DAAP.g:36:6: ( LPAR expr RPAR -> expr | STR )
3374 +
3375 + ANTLR3_UINT32 alt4;
3376 +
3377 + alt4=2;
3378 +
3379 + switch ( LA(1) )
3380 + {
3381 + case LPAR:
3382 + {
3383 + alt4=1;
3384 + }
3385 + break;
3386 + case STR:
3387 + {
3388 + alt4=2;
3389 + }
3390 + break;
3391 +
3392 + default:
3393 + CONSTRUCTEX();
3394 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
3395 + EXCEPTION->message = (void *)"";
3396 + EXCEPTION->decisionNum = 4;
3397 + EXCEPTION->state = 0;
3398 +
3399 +
3400 + goto rulecritEx;
3401 + }
3402 +
3403 + switch (alt4)
3404 + {
3405 + case 1:
3406 + // DAAP.g:36:8: LPAR expr RPAR
3407 + {
3408 + LPAR10 = (pANTLR3_COMMON_TOKEN) MATCHT(LPAR, &FOLLOW_LPAR_in_crit98);
3409 + if (HASEXCEPTION())
3410 + {
3411 + goto rulecritEx;
3412 + }
3413 +
3414 + CREATE_stream_LPAR; stream_LPAR->add(stream_LPAR, LPAR10, NULL);
3415 +
3416 + FOLLOWPUSH(FOLLOW_expr_in_crit100);
3417 + expr11=expr(ctx);
3418 +
3419 + FOLLOWPOP();
3420 + if (HASEXCEPTION())
3421 + {
3422 + goto rulecritEx;
3423 + }
3424 +
3425 + CREATE_stream_expr; stream_expr->add(stream_expr, expr11.tree, NULL);
3426 + RPAR12 = (pANTLR3_COMMON_TOKEN) MATCHT(RPAR, &FOLLOW_RPAR_in_crit102);
3427 + if (HASEXCEPTION())
3428 + {
3429 + goto rulecritEx;
3430 + }
3431 +
3432 + CREATE_stream_RPAR; stream_RPAR->add(stream_RPAR, RPAR12, NULL);
3433 +
3434 +
3435 +
3436 + /* AST REWRITE
3437 + * elements : expr
3438 + * token labels :
3439 + * rule labels : retval
3440 + * token list labels :
3441 + * rule list labels :
3442 + */
3443 + {
3444 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
3445 +
3446 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
3447 +
3448 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
3449 + retval.tree = root_0;
3450 + // 36:24: -> expr
3451 + {
3452 + ADAPTOR->addChild(ADAPTOR, root_0, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr));
3453 +
3454 + }
3455 +
3456 + retval.tree = root_0; // set result root
3457 + if (stream_retval != NULL) stream_retval->free(stream_retval);
3458 +
3459 +
3460 + }
3461 + }
3462 + break;
3463 + case 2:
3464 + // DAAP.g:37:4: STR
3465 + {
3466 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
3467 +
3468 + STR13 = (pANTLR3_COMMON_TOKEN) MATCHT(STR, &FOLLOW_STR_in_crit112);
3469 + if (HASEXCEPTION())
3470 + {
3471 + goto rulecritEx;
3472 + }
3473 +
3474 + STR13_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, STR13));
3475 + ADAPTOR->addChild(ADAPTOR, root_0, STR13_tree);
3476 +
3477 +
3478 + }
3479 + break;
3480 +
3481 + }
3482 + }
3483 + }
3484 +
3485 +
3486 + // This is where rules clean up and exit
3487 + //
3488 + goto rulecritEx; /* Prevent compiler warnings */
3489 + rulecritEx: ;
3490 + retval.stop = LT(-1);
3491 +
3492 + retval.stop = LT(-1);
3493 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
3494 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
3495 + if (stream_RPAR != NULL) stream_RPAR->free(stream_RPAR);
3496 + if (stream_LPAR != NULL) stream_LPAR->free(stream_LPAR);
3497 + if (stream_expr != NULL) stream_expr->free(stream_expr);
3498 +
3499 + if (HASEXCEPTION())
3500 + {
3501 + PREPORTERROR();
3502 + PRECOVER();
3503 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
3504 + }
3505 +
3506 +
3507 + return retval;
3508 +}
3509 +/* $ANTLR end crit */
3510 +/* End of parsing rules
3511 + * ==============================================
3512 + */
3513 +
3514 +/* ==============================================
3515 + * Syntactic predicates
3516 + */
3517 +/* End of syntactic predicates
3518 + * ==============================================
3519 + */
3520 +
3521 +
3522 +
3523 +
3524 +
3525 +
3526 +/* End of code
3527 + * =============================================================================
3528 + */
3529 diff --git a/src/pregen/DAAPParser.h b/src/pregen/DAAPParser.h
3530 new file mode 100644
3531 index 0000000..e206694
3532 --- /dev/null
3533 +++ b/src/pregen/DAAPParser.h
3534 @@ -0,0 +1,226 @@
3535 +/** \file
3536 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
3537 + *
3538 + * - From the grammar source file : DAAP.g
3539 + * - On : 2016-01-01 12:23:41
3540 + * - for the parser : DAAPParserParser *
3541 + * Editing it, at least manually, is not wise.
3542 + *
3543 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
3544 + *
3545 + *
3546 + * The parser DAAPParser has the callable functions (rules) shown below,
3547 + * which will invoke the code for the associated rule in the source grammar
3548 + * assuming that the input stream is pointing to a token/text stream that could begin
3549 + * this rule.
3550 + *
3551 + * For instance if you call the first (topmost) rule in a parser grammar, you will
3552 + * get the results of a full parse, but calling a rule half way through the grammar will
3553 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
3554 + * in editors and so on.
3555 + *
3556 + * The parser entry points are called indirectly (by function pointer to function) via
3557 + * a parser context typedef pDAAPParser, which is returned from a call to DAAPParserNew().
3558 + *
3559 + * The methods in pDAAPParser are as follows:
3560 + *
3561 + * - DAAPParser_query_return pDAAPParser->query(pDAAPParser)
3562 + * - DAAPParser_expr_return pDAAPParser->expr(pDAAPParser)
3563 + * - DAAPParser_aexpr_return pDAAPParser->aexpr(pDAAPParser)
3564 + * - DAAPParser_crit_return pDAAPParser->crit(pDAAPParser)
3565 + *
3566 + * The return type for any particular rule is of course determined by the source
3567 + * grammar file.
3568 + */
3569 +// [The "BSD licence"]
3570 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
3571 +// http://www.temporal-wave.com
3572 +// http://www.linkedin.com/in/jimidle
3573 +//
3574 +// All rights reserved.
3575 +//
3576 +// Redistribution and use in source and binary forms, with or without
3577 +// modification, are permitted provided that the following conditions
3578 +// are met:
3579 +// 1. Redistributions of source code must retain the above copyright
3580 +// notice, this list of conditions and the following disclaimer.
3581 +// 2. Redistributions in binary form must reproduce the above copyright
3582 +// notice, this list of conditions and the following disclaimer in the
3583 +// documentation and/or other materials provided with the distribution.
3584 +// 3. The name of the author may not be used to endorse or promote products
3585 +// derived from this software without specific prior written permission.
3586 +//
3587 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
3588 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
3589 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
3590 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
3591 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3592 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3593 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3594 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3595 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3596 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3597 +
3598 +#ifndef _DAAPParser_H
3599 +#define _DAAPParser_H
3600 +/* =============================================================================
3601 + * Standard antlr3 C runtime definitions
3602 + */
3603 +#include <antlr3.h>
3604 +
3605 +/* End of standard antlr 3 runtime definitions
3606 + * =============================================================================
3607 + */
3608 +
3609 +#ifdef __cplusplus
3610 +extern "C" {
3611 +#endif
3612 +
3613 +// Forward declare the context typedef so that we can use it before it is
3614 +// properly defined. Delegators and delegates (from import statements) are
3615 +// interdependent and their context structures contain pointers to each other
3616 +// C only allows such things to be declared if you pre-declare the typedef.
3617 +//
3618 +typedef struct DAAPParser_Ctx_struct DAAPParser, * pDAAPParser;
3619 +
3620 +
3621 +
3622 +#ifdef ANTLR3_WINDOWS
3623 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
3624 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
3625 +// initialized but unused variable - tree rewrite variables declared but not needed
3626 +// Unreferenced local variable - lexer rule declares but does not always use _type
3627 +// potentially unitialized variable used - retval always returned from a rule
3628 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
3629 +//
3630 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
3631 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
3632 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
3633 +// this is a matter of orthogonality hence I disable that one.
3634 +//
3635 +#pragma warning( disable : 4100 )
3636 +#pragma warning( disable : 4101 )
3637 +#pragma warning( disable : 4127 )
3638 +#pragma warning( disable : 4189 )
3639 +#pragma warning( disable : 4505 )
3640 +#pragma warning( disable : 4701 )
3641 +#endif
3642 +typedef struct DAAPParser_query_return_struct
3643 +{
3644 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
3645 + */
3646 + pANTLR3_COMMON_TOKEN start;
3647 + pANTLR3_COMMON_TOKEN stop;
3648 + pANTLR3_BASE_TREE tree;
3649 +
3650 +}
3651 + DAAPParser_query_return;
3652 +
3653 +typedef struct DAAPParser_expr_return_struct
3654 +{
3655 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
3656 + */
3657 + pANTLR3_COMMON_TOKEN start;
3658 + pANTLR3_COMMON_TOKEN stop;
3659 + pANTLR3_BASE_TREE tree;
3660 +
3661 +}
3662 + DAAPParser_expr_return;
3663 +
3664 +typedef struct DAAPParser_aexpr_return_struct
3665 +{
3666 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
3667 + */
3668 + pANTLR3_COMMON_TOKEN start;
3669 + pANTLR3_COMMON_TOKEN stop;
3670 + pANTLR3_BASE_TREE tree;
3671 +
3672 +}
3673 + DAAPParser_aexpr_return;
3674 +
3675 +typedef struct DAAPParser_crit_return_struct
3676 +{
3677 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
3678 + */
3679 + pANTLR3_COMMON_TOKEN start;
3680 + pANTLR3_COMMON_TOKEN stop;
3681 + pANTLR3_BASE_TREE tree;
3682 +
3683 +}
3684 + DAAPParser_crit_return;
3685 +
3686 +
3687 +
3688 +/** Context tracking structure for DAAPParser
3689 + */
3690 +struct DAAPParser_Ctx_struct
3691 +{
3692 + /** Built in ANTLR3 context tracker contains all the generic elements
3693 + * required for context tracking.
3694 + */
3695 + pANTLR3_PARSER pParser;
3696 +
3697 +
3698 + DAAPParser_query_return (*query) (struct DAAPParser_Ctx_struct * ctx);
3699 + DAAPParser_expr_return (*expr) (struct DAAPParser_Ctx_struct * ctx);
3700 + DAAPParser_aexpr_return (*aexpr) (struct DAAPParser_Ctx_struct * ctx);
3701 + DAAPParser_crit_return (*crit) (struct DAAPParser_Ctx_struct * ctx);
3702 + // Delegated rules
3703 + const char * (*getGrammarFileName)();
3704 + void (*free) (struct DAAPParser_Ctx_struct * ctx);
3705 + /* @headerFile.members() */
3706 + pANTLR3_BASE_TREE_ADAPTOR adaptor;
3707 + pANTLR3_VECTOR_FACTORY vectors;
3708 + /* End @headerFile.members() */
3709 +};
3710 +
3711 +// Function protoypes for the constructor functions that external translation units
3712 +// such as delegators and delegates may wish to call.
3713 +//
3714 +ANTLR3_API pDAAPParser DAAPParserNew (pANTLR3_COMMON_TOKEN_STREAM instream);
3715 +ANTLR3_API pDAAPParser DAAPParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
3716 +
3717 +/** Symbolic definitions of all the tokens that the parser will work with.
3718 + * \{
3719 + *
3720 + * Antlr will define EOF, but we can't use that as it it is too common in
3721 + * in C header files and that would be confusing. There is no way to filter this out at the moment
3722 + * so we just undef it here for now. That isn't the value we get back from C recognizers
3723 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
3724 + */
3725 +#ifdef EOF
3726 +#undef EOF
3727 +#endif
3728 +#ifdef Tokens
3729 +#undef Tokens
3730 +#endif
3731 +#define STR 9
3732 +#define QUOTE 10
3733 +#define LPAR 7
3734 +#define NEWLINE 4
3735 +#define OPOR 5
3736 +#define RPAR 8
3737 +#define ESCAPED 11
3738 +#define OPAND 6
3739 +#define EOF -1
3740 +#ifdef EOF
3741 +#undef EOF
3742 +#define EOF ANTLR3_TOKEN_EOF
3743 +#endif
3744 +
3745 +#ifndef TOKENSOURCE
3746 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
3747 +#endif
3748 +
3749 +/* End of token definitions for DAAPParser
3750 + * =============================================================================
3751 + */
3752 +/** \} */
3753 +
3754 +#ifdef __cplusplus
3755 +}
3756 +#endif
3757 +
3758 +#endif
3759 +
3760 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
3761 diff --git a/src/pregen/RSP.u b/src/pregen/RSP.u
3762 new file mode 100644
3763 index 0000000..89256ff
3764 --- /dev/null
3765 +++ b/src/pregen/RSP.u
3766 @@ -0,0 +1,6 @@
3767 +RSPParser.c : RSP.g
3768 +./RSP.tokens : RSP.g
3769 +RSPParser.h : RSP.g
3770 +RSPLexer.c : RSP.g
3771 +RSPLexer.h : RSP.g
3772 +ANTLR_PRODUCTS += RSPParser.c ./RSP.tokens RSPParser.h RSPLexer.c RSPLexer.h
3773 \ No newline at end of file
3774 diff --git a/src/pregen/RSP2SQL.c b/src/pregen/RSP2SQL.c
3775 new file mode 100644
3776 index 0000000..40958f9
3777 --- /dev/null
3778 +++ b/src/pregen/RSP2SQL.c
3779 @@ -0,0 +1,2546 @@
3780 +/** \file
3781 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
3782 + *
3783 + * - From the grammar source file : RSP2SQL.g
3784 + * - On : 2016-01-01 12:23:43
3785 + * - for the tree parser : RSP2SQLTreeParser *
3786 + * Editing it, at least manually, is not wise.
3787 + *
3788 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
3789 + *
3790 + *
3791 +*/
3792 +// [The "BSD licence"]
3793 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
3794 +// http://www.temporal-wave.com
3795 +// http://www.linkedin.com/in/jimidle
3796 +//
3797 +// All rights reserved.
3798 +//
3799 +// Redistribution and use in source and binary forms, with or without
3800 +// modification, are permitted provided that the following conditions
3801 +// are met:
3802 +// 1. Redistributions of source code must retain the above copyright
3803 +// notice, this list of conditions and the following disclaimer.
3804 +// 2. Redistributions in binary form must reproduce the above copyright
3805 +// notice, this list of conditions and the following disclaimer in the
3806 +// documentation and/or other materials provided with the distribution.
3807 +// 3. The name of the author may not be used to endorse or promote products
3808 +// derived from this software without specific prior written permission.
3809 +//
3810 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
3811 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
3812 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
3813 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
3814 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
3815 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3816 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3817 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3818 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3819 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3820 +
3821 +
3822 +/* =============================================================================
3823 + * This is what the grammar programmer asked us to put at the top of every file.
3824 + */
3825 +
3826 + /* Needs #define _GNU_SOURCE for strptime() */
3827 +
3828 + #include <stdio.h>
3829 + #include <string.h>
3830 + #include <time.h>
3831 + #include <stdint.h>
3832 +
3833 + #include "logger.h"
3834 + #include "db.h"
3835 + #include "misc.h"
3836 + #include "rsp_query.h"
3837 +
3838 +/* End of Header action.
3839 + * =============================================================================
3840 + */
3841 +/* -----------------------------------------
3842 + * Include the ANTLR3 generated header file.
3843 + */
3844 +#include "RSP2SQL.h"
3845 +/* ----------------------------------------- */
3846 +
3847 +
3848 +
3849 +
3850 +
3851 +/* MACROS that hide the C interface implementations from the
3852 + * generated code, which makes it a little more understandable to the human eye.
3853 + * I am very much against using C pre-processor macros for function calls and bits
3854 + * of code as you cannot see what is happening when single stepping in debuggers
3855 + * and so on. The exception (in my book at least) is for generated code, where you are
3856 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
3857 + * hides some indirect calls, but is always referring to the input stream. This is
3858 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
3859 + * the runtime interfaces without changing the generated code too often, without
3860 + * confusing the reader of the generated output, who may not wish to know the gory
3861 + * details of the interface inheritance.
3862 + */
3863 +
3864 +#define CTX ctx
3865 +
3866 +/* Aids in accessing scopes for grammar programmers
3867 + */
3868 +#undef SCOPE_TYPE
3869 +#undef SCOPE_STACK
3870 +#undef SCOPE_TOP
3871 +#define SCOPE_TYPE(scope) pRSP2SQL_##scope##_SCOPE
3872 +#define SCOPE_STACK(scope) pRSP2SQL_##scope##Stack
3873 +#define SCOPE_TOP(scope) ctx->pRSP2SQL_##scope##Top
3874 +#define SCOPE_SIZE(scope) ctx->pRSP2SQL_##scope##Stack_limit
3875 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
3876 +
3877 +/* Macros for accessing things in the parser
3878 + */
3879 +
3880 +#undef PARSER
3881 +#undef RECOGNIZER
3882 +#undef HAVEPARSEDRULE
3883 +#undef INPUT
3884 +#undef STRSTREAM
3885 +#undef HASEXCEPTION
3886 +#undef EXCEPTION
3887 +#undef MATCHT
3888 +#undef MATCHANYT
3889 +#undef FOLLOWSTACK
3890 +#undef FOLLOWPUSH
3891 +#undef FOLLOWPOP
3892 +#undef PRECOVER
3893 +#undef PREPORTERROR
3894 +#undef LA
3895 +#undef LT
3896 +#undef CONSTRUCTEX
3897 +#undef CONSUME
3898 +#undef MARK
3899 +#undef REWIND
3900 +#undef REWINDLAST
3901 +#undef PERRORRECOVERY
3902 +#undef HASFAILED
3903 +#undef FAILEDFLAG
3904 +#undef RECOVERFROMMISMATCHEDSET
3905 +#undef RECOVERFROMMISMATCHEDELEMENT
3906 +#undef BACKTRACKING
3907 +#undef ADAPTOR
3908 +#undef RULEMEMO
3909 +#undef SEEK
3910 +#undef INDEX
3911 +#undef DBG
3912 +
3913 +#define PARSER ctx->pTreeParser
3914 +#define RECOGNIZER PARSER->rec
3915 +#define PSRSTATE RECOGNIZER->state
3916 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
3917 +#define INPUT PARSER->ctnstream
3918 +#define ISTREAM INPUT->tnstream->istream
3919 +#define STRSTREAM INPUT->tnstream
3920 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
3921 +#define EXCEPTION PSRSTATE->exception
3922 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
3923 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
3924 +#define FOLLOWSTACK PSRSTATE->following
3925 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
3926 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
3927 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
3928 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
3929 +#define LA(n) ISTREAM->_LA(ISTREAM, n)
3930 +#define LT(n) INPUT->tnstream->_LT(INPUT->tnstream, n)
3931 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
3932 +#define CONSUME() ISTREAM->consume(ISTREAM)
3933 +#define MARK() ISTREAM->mark(ISTREAM)
3934 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
3935 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
3936 +#define PERRORRECOVERY PSRSTATE->errorRecovery
3937 +#define FAILEDFLAG PSRSTATE->failed
3938 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
3939 +#define BACKTRACKING PSRSTATE->backtracking
3940 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
3941 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
3942 +#define ADAPTOR INPUT->adaptor
3943 +#define RULEMEMO PSRSTATE->ruleMemo
3944 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
3945 +#define INDEX() ISTREAM->index(ISTREAM)
3946 +#define DBG RECOGNIZER->debugger
3947 +
3948 +
3949 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
3950 +
3951 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
3952 + * then for the present you must use different names for your defines as these are hard coded
3953 + * in the code generator. It would be better not to use such names internally, and maybe
3954 + * we can change this in a forthcoming release. I deliberately do not #undef these
3955 + * here as this will at least give you a redefined error somewhere if they clash.
3956 + */
3957 +#define UP ANTLR3_TOKEN_UP
3958 +#define DOWN ANTLR3_TOKEN_DOWN
3959 +#define EOR ANTLR3_TOKEN_EOR
3960 +#define INVALID ANTLR3_TOKEN_INVALID
3961 +
3962 +
3963 +/* =============================================================================
3964 + * Functions to create and destroy scopes. First come the rule scopes, followed
3965 + * by the global declared scopes.
3966 + */
3967 +
3968 +
3969 +
3970 +/* ============================================================================= */
3971 +
3972 +/* =============================================================================
3973 + * Start of recognizer
3974 + */
3975 +
3976 +
3977 +
3978 +/** \brief Table of all token names in symbolic order, mainly used for
3979 + * error reporting.
3980 + */
3981 +pANTLR3_UINT8 RSP2SQLTokenNames[30+4]
3982 + = {
3983 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
3984 + (pANTLR3_UINT8) "<EOR>",
3985 + (pANTLR3_UINT8) "<DOWN>",
3986 + (pANTLR3_UINT8) "<UP>",
3987 + (pANTLR3_UINT8) "NEWLINE",
3988 + (pANTLR3_UINT8) "OR",
3989 + (pANTLR3_UINT8) "AND",
3990 + (pANTLR3_UINT8) "LPAR",
3991 + (pANTLR3_UINT8) "RPAR",
3992 + (pANTLR3_UINT8) "FIELD",
3993 + (pANTLR3_UINT8) "STR",
3994 + (pANTLR3_UINT8) "NOT",
3995 + (pANTLR3_UINT8) "EQUAL",
3996 + (pANTLR3_UINT8) "INCLUDES",
3997 + (pANTLR3_UINT8) "STARTSW",
3998 + (pANTLR3_UINT8) "ENDSW",
3999 + (pANTLR3_UINT8) "INT",
4000 + (pANTLR3_UINT8) "LESS",
4001 + (pANTLR3_UINT8) "GREATER",
4002 + (pANTLR3_UINT8) "LTE",
4003 + (pANTLR3_UINT8) "GTE",
4004 + (pANTLR3_UINT8) "BEFORE",
4005 + (pANTLR3_UINT8) "AFTER",
4006 + (pANTLR3_UINT8) "DATE",
4007 + (pANTLR3_UINT8) "TODAY",
4008 + (pANTLR3_UINT8) "DAY",
4009 + (pANTLR3_UINT8) "WEEK",
4010 + (pANTLR3_UINT8) "MONTH",
4011 + (pANTLR3_UINT8) "YEAR",
4012 + (pANTLR3_UINT8) "QUOTE",
4013 + (pANTLR3_UINT8) "WS",
4014 + (pANTLR3_UINT8) "DIGIT19",
4015 + (pANTLR3_UINT8) "DIGIT09",
4016 + (pANTLR3_UINT8) "ESCAPED"
4017 + };
4018 +
4019 +
4020 +
4021 +// Forward declare the locally static matching functions we have generated.
4022 +//
4023 +static pANTLR3_STRING query (pRSP2SQL ctx);
4024 +static RSP2SQL_expr_return expr (pRSP2SQL ctx);
4025 +static RSP2SQL_strcrit_return strcrit (pRSP2SQL ctx);
4026 +static pANTLR3_COMMON_TOKEN strop (pRSP2SQL ctx);
4027 +static RSP2SQL_intcrit_return intcrit (pRSP2SQL ctx);
4028 +static pANTLR3_COMMON_TOKEN intop (pRSP2SQL ctx);
4029 +static RSP2SQL_datecrit_return datecrit (pRSP2SQL ctx);
4030 +static pANTLR3_COMMON_TOKEN dateop (pRSP2SQL ctx);
4031 +static RSP2SQL_datespec_return datespec (pRSP2SQL ctx);
4032 +static RSP2SQL_dateref_return dateref (pRSP2SQL ctx);
4033 +static RSP2SQL_dateintval_return dateintval (pRSP2SQL ctx);
4034 +static void RSP2SQLFree(pRSP2SQL ctx);
4035 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
4036 + * we need a function that knows how to free a return scope when the list is destroyed.
4037 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
4038 + */
4039 +static void ANTLR3_CDECL freeScope(void * scope)
4040 +{
4041 + ANTLR3_FREE(scope);
4042 +}
4043 +
4044 +/** \brief Name of the grammar file that generated this code
4045 + */
4046 +static const char fileName[] = "RSP2SQL.g";
4047 +
4048 +/** \brief Return the name of the grammar file that generated this code.
4049 + */
4050 +static const char * getGrammarFileName()
4051 +{
4052 + return fileName;
4053 +}
4054 +/** \brief Create a new RSP2SQL parser and return a context for it.
4055 + *
4056 + * \param[in] instream Pointer to an input stream interface.
4057 + *
4058 + * \return Pointer to new parser context upon success.
4059 + */
4060 +ANTLR3_API pRSP2SQL
4061 +RSP2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream)
4062 +{
4063 + // See if we can create a new parser with the standard constructor
4064 + //
4065 + return RSP2SQLNewSSD(instream, NULL);
4066 +}
4067 +
4068 +/** \brief Create a new RSP2SQL parser and return a context for it.
4069 + *
4070 + * \param[in] instream Pointer to an input stream interface.
4071 + *
4072 + * \return Pointer to new parser context upon success.
4073 + */
4074 +ANTLR3_API pRSP2SQL
4075 +RSP2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
4076 +{
4077 + pRSP2SQL ctx; /* Context structure we will build and return */
4078 +
4079 + ctx = (pRSP2SQL) ANTLR3_CALLOC(1, sizeof(RSP2SQL));
4080 +
4081 + if (ctx == NULL)
4082 + {
4083 + // Failed to allocate memory for parser context
4084 + //
4085 + return NULL;
4086 + }
4087 +
4088 + /* -------------------------------------------------------------------
4089 + * Memory for basic structure is allocated, now to fill in
4090 + * the base ANTLR3 structures. We initialize the function pointers
4091 + * for the standard ANTLR3 parser function set, but upon return
4092 + * from here, the programmer may set the pointers to provide custom
4093 + * implementations of each function.
4094 + *
4095 + * We don't use the macros defined in RSP2SQL.h here, in order that you can get a sense
4096 + * of what goes where.
4097 + */
4098 +
4099 + /* Create a base Tree parser/recognizer, using the supplied tree node stream
4100 + */
4101 + ctx->pTreeParser = antlr3TreeParserNewStream(ANTLR3_SIZE_HINT, instream, state);
4102 + /* Install the implementation of our RSP2SQL interface
4103 + */
4104 + ctx->query = query;
4105 + ctx->expr = expr;
4106 + ctx->strcrit = strcrit;
4107 + ctx->strop = strop;
4108 + ctx->intcrit = intcrit;
4109 + ctx->intop = intop;
4110 + ctx->datecrit = datecrit;
4111 + ctx->dateop = dateop;
4112 + ctx->datespec = datespec;
4113 + ctx->dateref = dateref;
4114 + ctx->dateintval = dateintval;
4115 + ctx->free = RSP2SQLFree;
4116 + ctx->getGrammarFileName = getGrammarFileName;
4117 +
4118 + /* Install the scope pushing methods.
4119 + */
4120 +
4121 +
4122 +
4123 +
4124 +
4125 + /* Install the token table
4126 + */
4127 + PSRSTATE->tokenNames = RSP2SQLTokenNames;
4128 +
4129 +
4130 + /* Return the newly built parser to the caller
4131 + */
4132 + return ctx;
4133 +}
4134 +
4135 +/** Free the parser resources
4136 + */
4137 + static void
4138 + RSP2SQLFree(pRSP2SQL ctx)
4139 + {
4140 + /* Free any scope memory
4141 + */
4142 +
4143 +
4144 + // Free this parser
4145 + //
4146 + ctx->pTreeParser->free(ctx->pTreeParser);
4147 + ANTLR3_FREE(ctx);
4148 +
4149 + /* Everything is released, so we can return
4150 + */
4151 + return;
4152 + }
4153 +
4154 +/** Return token names used by this tree parser
4155 + *
4156 + * The returned pointer is used as an index into the token names table (using the token
4157 + * number as the index).
4158 + *
4159 + * \return Pointer to first char * in the table.
4160 + */
4161 +static pANTLR3_UINT8 *getTokenNames()
4162 +{
4163 + return RSP2SQLTokenNames;
4164 +}
4165 +
4166 +
4167 + #define RSP_TYPE_STRING 0
4168 + #define RSP_TYPE_INT 1
4169 + #define RSP_TYPE_DATE 2
4170 +
4171 + struct rsp_query_field_map {
4172 + char *rsp_field;
4173 + int field_type;
4174 + /* RSP fields are named after the DB columns - or vice versa */
4175 + };
4176 +
4177 + /* gperf static hash, rsp_query.gperf */
4178 + #include "rsp_query_hash.c"
4179 +
4180 +
4181 +/* Declare the bitsets
4182 + */
4183 +
4184 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_query70 */
4185 +static ANTLR3_BITWORD FOLLOW_expr_in_query70_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4186 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_query70 = { FOLLOW_expr_in_query70_bits, 1 };
4187 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AND_in_expr95 */
4188 +static ANTLR3_BITWORD FOLLOW_AND_in_expr95_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4189 +static ANTLR3_BITSET_LIST FOLLOW_AND_in_expr95 = { FOLLOW_AND_in_expr95_bits, 1 };
4190 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr101 */
4191 +static ANTLR3_BITWORD FOLLOW_expr_in_expr101_bits[] = { ANTLR3_UINT64_LIT(0x00000000007EF860) };
4192 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr101 = { FOLLOW_expr_in_expr101_bits, 1 };
4193 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr107 */
4194 +static ANTLR3_BITWORD FOLLOW_expr_in_expr107_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4195 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr107 = { FOLLOW_expr_in_expr107_bits, 1 };
4196 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OR_in_expr118 */
4197 +static ANTLR3_BITWORD FOLLOW_OR_in_expr118_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4198 +static ANTLR3_BITSET_LIST FOLLOW_OR_in_expr118 = { FOLLOW_OR_in_expr118_bits, 1 };
4199 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr124 */
4200 +static ANTLR3_BITWORD FOLLOW_expr_in_expr124_bits[] = { ANTLR3_UINT64_LIT(0x00000000007EF860) };
4201 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr124 = { FOLLOW_expr_in_expr124_bits, 1 };
4202 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_expr130 */
4203 +static ANTLR3_BITWORD FOLLOW_expr_in_expr130_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4204 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_expr130 = { FOLLOW_expr_in_expr130_bits, 1 };
4205 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strcrit_in_expr144 */
4206 +static ANTLR3_BITWORD FOLLOW_strcrit_in_expr144_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4207 +static ANTLR3_BITSET_LIST FOLLOW_strcrit_in_expr144 = { FOLLOW_strcrit_in_expr144_bits, 1 };
4208 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_expr154 */
4209 +static ANTLR3_BITWORD FOLLOW_NOT_in_expr154_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4210 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_expr154 = { FOLLOW_NOT_in_expr154_bits, 1 };
4211 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strcrit_in_expr160 */
4212 +static ANTLR3_BITWORD FOLLOW_strcrit_in_expr160_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4213 +static ANTLR3_BITSET_LIST FOLLOW_strcrit_in_expr160 = { FOLLOW_strcrit_in_expr160_bits, 1 };
4214 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intcrit_in_expr174 */
4215 +static ANTLR3_BITWORD FOLLOW_intcrit_in_expr174_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4216 +static ANTLR3_BITSET_LIST FOLLOW_intcrit_in_expr174 = { FOLLOW_intcrit_in_expr174_bits, 1 };
4217 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_expr184 */
4218 +static ANTLR3_BITWORD FOLLOW_NOT_in_expr184_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4219 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_expr184 = { FOLLOW_NOT_in_expr184_bits, 1 };
4220 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intcrit_in_expr190 */
4221 +static ANTLR3_BITWORD FOLLOW_intcrit_in_expr190_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4222 +static ANTLR3_BITSET_LIST FOLLOW_intcrit_in_expr190 = { FOLLOW_intcrit_in_expr190_bits, 1 };
4223 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_datecrit_in_expr204 */
4224 +static ANTLR3_BITWORD FOLLOW_datecrit_in_expr204_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4225 +static ANTLR3_BITSET_LIST FOLLOW_datecrit_in_expr204 = { FOLLOW_datecrit_in_expr204_bits, 1 };
4226 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strop_in_strcrit233 */
4227 +static ANTLR3_BITWORD FOLLOW_strop_in_strcrit233_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4228 +static ANTLR3_BITSET_LIST FOLLOW_strop_in_strcrit233 = { FOLLOW_strop_in_strcrit233_bits, 1 };
4229 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_strcrit239 */
4230 +static ANTLR3_BITWORD FOLLOW_FIELD_in_strcrit239_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000400) };
4231 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_strcrit239 = { FOLLOW_FIELD_in_strcrit239_bits, 1 };
4232 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_strcrit245 */
4233 +static ANTLR3_BITWORD FOLLOW_STR_in_strcrit245_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4234 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_strcrit245 = { FOLLOW_STR_in_strcrit245_bits, 1 };
4235 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_strop274 */
4236 +static ANTLR3_BITWORD FOLLOW_EQUAL_in_strop274_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4237 +static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_strop274 = { FOLLOW_EQUAL_in_strop274_bits, 1 };
4238 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INCLUDES_in_strop287 */
4239 +static ANTLR3_BITWORD FOLLOW_INCLUDES_in_strop287_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4240 +static ANTLR3_BITSET_LIST FOLLOW_INCLUDES_in_strop287 = { FOLLOW_INCLUDES_in_strop287_bits, 1 };
4241 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STARTSW_in_strop300 */
4242 +static ANTLR3_BITWORD FOLLOW_STARTSW_in_strop300_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4243 +static ANTLR3_BITSET_LIST FOLLOW_STARTSW_in_strop300 = { FOLLOW_STARTSW_in_strop300_bits, 1 };
4244 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENDSW_in_strop313 */
4245 +static ANTLR3_BITWORD FOLLOW_ENDSW_in_strop313_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4246 +static ANTLR3_BITSET_LIST FOLLOW_ENDSW_in_strop313 = { FOLLOW_ENDSW_in_strop313_bits, 1 };
4247 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit342 */
4248 +static ANTLR3_BITWORD FOLLOW_intop_in_intcrit342_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4249 +static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit342 = { FOLLOW_intop_in_intcrit342_bits, 1 };
4250 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit348 */
4251 +static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit348_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
4252 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit348 = { FOLLOW_FIELD_in_intcrit348_bits, 1 };
4253 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit354 */
4254 +static ANTLR3_BITWORD FOLLOW_INT_in_intcrit354_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4255 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit354 = { FOLLOW_INT_in_intcrit354_bits, 1 };
4256 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_intop383 */
4257 +static ANTLR3_BITWORD FOLLOW_EQUAL_in_intop383_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4258 +static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_intop383 = { FOLLOW_EQUAL_in_intop383_bits, 1 };
4259 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LESS_in_intop396 */
4260 +static ANTLR3_BITWORD FOLLOW_LESS_in_intop396_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4261 +static ANTLR3_BITSET_LIST FOLLOW_LESS_in_intop396 = { FOLLOW_LESS_in_intop396_bits, 1 };
4262 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GREATER_in_intop409 */
4263 +static ANTLR3_BITWORD FOLLOW_GREATER_in_intop409_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4264 +static ANTLR3_BITSET_LIST FOLLOW_GREATER_in_intop409 = { FOLLOW_GREATER_in_intop409_bits, 1 };
4265 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LTE_in_intop422 */
4266 +static ANTLR3_BITWORD FOLLOW_LTE_in_intop422_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4267 +static ANTLR3_BITSET_LIST FOLLOW_LTE_in_intop422 = { FOLLOW_LTE_in_intop422_bits, 1 };
4268 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GTE_in_intop435 */
4269 +static ANTLR3_BITWORD FOLLOW_GTE_in_intop435_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4270 +static ANTLR3_BITSET_LIST FOLLOW_GTE_in_intop435 = { FOLLOW_GTE_in_intop435_bits, 1 };
4271 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datecrit464 */
4272 +static ANTLR3_BITWORD FOLLOW_dateop_in_datecrit464_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4273 +static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datecrit464 = { FOLLOW_dateop_in_datecrit464_bits, 1 };
4274 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_datecrit470 */
4275 +static ANTLR3_BITWORD FOLLOW_FIELD_in_datecrit470_bits[] = { ANTLR3_UINT64_LIT(0x0000000001FEF860) };
4276 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_datecrit470 = { FOLLOW_FIELD_in_datecrit470_bits, 1 };
4277 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_datespec_in_datecrit476 */
4278 +static ANTLR3_BITWORD FOLLOW_datespec_in_datecrit476_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4279 +static ANTLR3_BITSET_LIST FOLLOW_datespec_in_datecrit476 = { FOLLOW_datespec_in_datecrit476_bits, 1 };
4280 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_dateop505 */
4281 +static ANTLR3_BITWORD FOLLOW_BEFORE_in_dateop505_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4282 +static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_dateop505 = { FOLLOW_BEFORE_in_dateop505_bits, 1 };
4283 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_dateop518 */
4284 +static ANTLR3_BITWORD FOLLOW_AFTER_in_dateop518_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4285 +static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_dateop518 = { FOLLOW_AFTER_in_dateop518_bits, 1 };
4286 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec546 */
4287 +static ANTLR3_BITWORD FOLLOW_dateref_in_datespec546_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4288 +static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec546 = { FOLLOW_dateref_in_datespec546_bits, 1 };
4289 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datespec560 */
4290 +static ANTLR3_BITWORD FOLLOW_dateop_in_datespec560_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
4291 +static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datespec560 = { FOLLOW_dateop_in_datespec560_bits, 1 };
4292 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec566 */
4293 +static ANTLR3_BITWORD FOLLOW_dateref_in_datespec566_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
4294 +static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec566 = { FOLLOW_dateref_in_datespec566_bits, 1 };
4295 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_datespec572 */
4296 +static ANTLR3_BITWORD FOLLOW_INT_in_datespec572_bits[] = { ANTLR3_UINT64_LIT(0x000000001E000000) };
4297 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_datespec572 = { FOLLOW_INT_in_datespec572_bits, 1 };
4298 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateintval_in_datespec578 */
4299 +static ANTLR3_BITWORD FOLLOW_dateintval_in_datespec578_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
4300 +static ANTLR3_BITSET_LIST FOLLOW_dateintval_in_datespec578 = { FOLLOW_dateintval_in_datespec578_bits, 1 };
4301 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateref607 */
4302 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateref607_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4303 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateref607 = { FOLLOW_DATE_in_dateref607_bits, 1 };
4304 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_TODAY_in_dateref616 */
4305 +static ANTLR3_BITWORD FOLLOW_TODAY_in_dateref616_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4306 +static ANTLR3_BITSET_LIST FOLLOW_TODAY_in_dateref616 = { FOLLOW_TODAY_in_dateref616_bits, 1 };
4307 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DAY_in_dateintval640 */
4308 +static ANTLR3_BITWORD FOLLOW_DAY_in_dateintval640_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4309 +static ANTLR3_BITSET_LIST FOLLOW_DAY_in_dateintval640 = { FOLLOW_DAY_in_dateintval640_bits, 1 };
4310 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_WEEK_in_dateintval649 */
4311 +static ANTLR3_BITWORD FOLLOW_WEEK_in_dateintval649_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4312 +static ANTLR3_BITSET_LIST FOLLOW_WEEK_in_dateintval649 = { FOLLOW_WEEK_in_dateintval649_bits, 1 };
4313 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_MONTH_in_dateintval658 */
4314 +static ANTLR3_BITWORD FOLLOW_MONTH_in_dateintval658_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4315 +static ANTLR3_BITSET_LIST FOLLOW_MONTH_in_dateintval658 = { FOLLOW_MONTH_in_dateintval658_bits, 1 };
4316 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_YEAR_in_dateintval667 */
4317 +static ANTLR3_BITWORD FOLLOW_YEAR_in_dateintval667_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
4318 +static ANTLR3_BITSET_LIST FOLLOW_YEAR_in_dateintval667 = { FOLLOW_YEAR_in_dateintval667_bits, 1 };
4319 +
4320 +
4321 +
4322 +
4323 +/* ==============================================
4324 + * Parsing rules
4325 + */
4326 +/**
4327 + * $ANTLR start query
4328 + * RSP2SQL.g:56:1: query returns [ pANTLR3_STRING result ] : e= expr ;
4329 + */
4330 +static pANTLR3_STRING
4331 +query(pRSP2SQL ctx)
4332 +{
4333 + pANTLR3_STRING result = NULL;
4334 +
4335 + RSP2SQL_expr_return e;
4336 + #undef RETURN_TYPE_e
4337 + #define RETURN_TYPE_e RSP2SQL_expr_return
4338 +
4339 + /* Initialize rule variables
4340 + */
4341 +
4342 +
4343 + result= NULL;
4344 + {
4345 + // RSP2SQL.g:58:2: (e= expr )
4346 + // RSP2SQL.g:58:4: e= expr
4347 + {
4348 + FOLLOWPUSH(FOLLOW_expr_in_query70);
4349 + e=expr(ctx);
4350 +
4351 + FOLLOWPOP();
4352 + if (HASEXCEPTION())
4353 + {
4354 + goto rulequeryEx;
4355 + }
4356 +
4357 + {
4358 +
4359 + if (!e.valid)
4360 + {
4361 + result= NULL;
4362 + }
4363 + else
4364 + {
4365 + result= e.result->factory->newRaw(e.result->factory);
4366 + result->append8(result, "(");
4367 + result->appendS(result, e.result);
4368 + result->append8(result, ")");
4369 + }
4370 +
4371 + }
4372 +
4373 + }
4374 +
4375 + }
4376 +
4377 +
4378 + // This is where rules clean up and exit
4379 + //
4380 + goto rulequeryEx; /* Prevent compiler warnings */
4381 + rulequeryEx: ;
4382 +
4383 + if (HASEXCEPTION())
4384 + {
4385 + PREPORTERROR();
4386 + PRECOVER();
4387 + }
4388 +
4389 +
4390 + return result;
4391 +}
4392 +/* $ANTLR end query */
4393 +
4394 +/**
4395 + * $ANTLR start expr
4396 + * RSP2SQL.g:74:1: expr returns [ pANTLR3_STRING result, int valid ] : ( ^( AND a= expr b= expr ) | ^( OR a= expr b= expr ) | c= strcrit | ^( NOT c= strcrit ) | i= intcrit | ^( NOT i= intcrit ) | d= datecrit );
4397 + */
4398 +static RSP2SQL_expr_return
4399 +expr(pRSP2SQL ctx)
4400 +{
4401 + RSP2SQL_expr_return retval;
4402 +
4403 + RSP2SQL_expr_return a;
4404 + #undef RETURN_TYPE_a
4405 + #define RETURN_TYPE_a RSP2SQL_expr_return
4406 +
4407 + RSP2SQL_expr_return b;
4408 + #undef RETURN_TYPE_b
4409 + #define RETURN_TYPE_b RSP2SQL_expr_return
4410 +
4411 + RSP2SQL_strcrit_return c;
4412 + #undef RETURN_TYPE_c
4413 + #define RETURN_TYPE_c RSP2SQL_strcrit_return
4414 +
4415 + RSP2SQL_intcrit_return i;
4416 + #undef RETURN_TYPE_i
4417 + #define RETURN_TYPE_i RSP2SQL_intcrit_return
4418 +
4419 + RSP2SQL_datecrit_return d;
4420 + #undef RETURN_TYPE_d
4421 + #define RETURN_TYPE_d RSP2SQL_datecrit_return
4422 +
4423 + /* Initialize rule variables
4424 + */
4425 +
4426 +
4427 + retval.result= NULL; retval.valid= 1;
4428 + retval.start = LT(1); retval.stop = retval.start;
4429 +
4430 + {
4431 + {
4432 + // RSP2SQL.g:76:2: ( ^( AND a= expr b= expr ) | ^( OR a= expr b= expr ) | c= strcrit | ^( NOT c= strcrit ) | i= intcrit | ^( NOT i= intcrit ) | d= datecrit )
4433 +
4434 + ANTLR3_UINT32 alt1;
4435 +
4436 + alt1=7;
4437 +
4438 + switch ( LA(1) )
4439 + {
4440 + case AND:
4441 + {
4442 + alt1=1;
4443 + }
4444 + break;
4445 + case OR:
4446 + {
4447 + alt1=2;
4448 + }
4449 + break;
4450 + case EQUAL:
4451 + {
4452 + switch ( LA(2) )
4453 + {
4454 + case DOWN:
4455 + {
4456 + switch ( LA(3) )
4457 + {
4458 + case FIELD:
4459 + {
4460 + switch ( LA(4) )
4461 + {
4462 + case INT:
4463 + {
4464 + alt1=5;
4465 + }
4466 + break;
4467 + case STR:
4468 + {
4469 + alt1=3;
4470 + }
4471 + break;
4472 +
4473 + default:
4474 + CONSTRUCTEX();
4475 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4476 + EXCEPTION->message = (void *)"";
4477 + EXCEPTION->decisionNum = 1;
4478 + EXCEPTION->state = 10;
4479 +
4480 +
4481 + goto ruleexprEx;
4482 + }
4483 +
4484 + }
4485 + break;
4486 +
4487 + default:
4488 + CONSTRUCTEX();
4489 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4490 + EXCEPTION->message = (void *)"";
4491 + EXCEPTION->decisionNum = 1;
4492 + EXCEPTION->state = 8;
4493 +
4494 +
4495 + goto ruleexprEx;
4496 + }
4497 +
4498 + }
4499 + break;
4500 +
4501 + default:
4502 + CONSTRUCTEX();
4503 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4504 + EXCEPTION->message = (void *)"";
4505 + EXCEPTION->decisionNum = 1;
4506 + EXCEPTION->state = 3;
4507 +
4508 +
4509 + goto ruleexprEx;
4510 + }
4511 +
4512 + }
4513 + break;
4514 + case INCLUDES:
4515 + case STARTSW:
4516 + case ENDSW:
4517 + {
4518 + alt1=3;
4519 + }
4520 + break;
4521 + case NOT:
4522 + {
4523 + switch ( LA(2) )
4524 + {
4525 + case DOWN:
4526 + {
4527 + switch ( LA(3) )
4528 + {
4529 + case EQUAL:
4530 + {
4531 + switch ( LA(4) )
4532 + {
4533 + case DOWN:
4534 + {
4535 + switch ( LA(5) )
4536 + {
4537 + case FIELD:
4538 + {
4539 + switch ( LA(6) )
4540 + {
4541 + case STR:
4542 + {
4543 + alt1=4;
4544 + }
4545 + break;
4546 + case INT:
4547 + {
4548 + alt1=6;
4549 + }
4550 + break;
4551 +
4552 + default:
4553 + CONSTRUCTEX();
4554 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4555 + EXCEPTION->message = (void *)"";
4556 + EXCEPTION->decisionNum = 1;
4557 + EXCEPTION->state = 15;
4558 +
4559 +
4560 + goto ruleexprEx;
4561 + }
4562 +
4563 + }
4564 + break;
4565 +
4566 + default:
4567 + CONSTRUCTEX();
4568 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4569 + EXCEPTION->message = (void *)"";
4570 + EXCEPTION->decisionNum = 1;
4571 + EXCEPTION->state = 14;
4572 +
4573 +
4574 + goto ruleexprEx;
4575 + }
4576 +
4577 + }
4578 + break;
4579 +
4580 + default:
4581 + CONSTRUCTEX();
4582 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4583 + EXCEPTION->message = (void *)"";
4584 + EXCEPTION->decisionNum = 1;
4585 + EXCEPTION->state = 11;
4586 +
4587 +
4588 + goto ruleexprEx;
4589 + }
4590 +
4591 + }
4592 + break;
4593 + case LESS:
4594 + case GREATER:
4595 + case LTE:
4596 + case GTE:
4597 + {
4598 + alt1=6;
4599 + }
4600 + break;
4601 + case INCLUDES:
4602 + case STARTSW:
4603 + case ENDSW:
4604 + {
4605 + alt1=4;
4606 + }
4607 + break;
4608 +
4609 + default:
4610 + CONSTRUCTEX();
4611 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4612 + EXCEPTION->message = (void *)"";
4613 + EXCEPTION->decisionNum = 1;
4614 + EXCEPTION->state = 9;
4615 +
4616 +
4617 + goto ruleexprEx;
4618 + }
4619 +
4620 + }
4621 + break;
4622 +
4623 + default:
4624 + CONSTRUCTEX();
4625 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4626 + EXCEPTION->message = (void *)"";
4627 + EXCEPTION->decisionNum = 1;
4628 + EXCEPTION->state = 5;
4629 +
4630 +
4631 + goto ruleexprEx;
4632 + }
4633 +
4634 + }
4635 + break;
4636 + case LESS:
4637 + case GREATER:
4638 + case LTE:
4639 + case GTE:
4640 + {
4641 + alt1=5;
4642 + }
4643 + break;
4644 + case BEFORE:
4645 + case AFTER:
4646 + {
4647 + alt1=7;
4648 + }
4649 + break;
4650 +
4651 + default:
4652 + CONSTRUCTEX();
4653 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
4654 + EXCEPTION->message = (void *)"";
4655 + EXCEPTION->decisionNum = 1;
4656 + EXCEPTION->state = 0;
4657 +
4658 +
4659 + goto ruleexprEx;
4660 + }
4661 +
4662 + switch (alt1)
4663 + {
4664 + case 1:
4665 + // RSP2SQL.g:76:4: ^( AND a= expr b= expr )
4666 + {
4667 + MATCHT(AND, &FOLLOW_AND_in_expr95);
4668 + if (HASEXCEPTION())
4669 + {
4670 + goto ruleexprEx;
4671 + }
4672 +
4673 +
4674 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
4675 + if (HASEXCEPTION())
4676 + {
4677 + goto ruleexprEx;
4678 + }
4679 +
4680 + FOLLOWPUSH(FOLLOW_expr_in_expr101);
4681 + a=expr(ctx);
4682 +
4683 + FOLLOWPOP();
4684 + if (HASEXCEPTION())
4685 + {
4686 + goto ruleexprEx;
4687 + }
4688 +
4689 + FOLLOWPUSH(FOLLOW_expr_in_expr107);
4690 + b=expr(ctx);
4691 +
4692 + FOLLOWPOP();
4693 + if (HASEXCEPTION())
4694 + {
4695 + goto ruleexprEx;
4696 + }
4697 +
4698 +
4699 + MATCHT(ANTLR3_TOKEN_UP, NULL);
4700 + if (HASEXCEPTION())
4701 + {
4702 + goto ruleexprEx;
4703 + }
4704 +
4705 + {
4706 +
4707 + if (!a.valid || !b.valid)
4708 + {
4709 + retval.valid= 0;
4710 + }
4711 + else
4712 + {
4713 + retval.result= a.result->factory->newRaw(a.result->factory);
4714 + retval.result->append8(retval.result, "(");
4715 + retval.result->appendS(retval.result, a.result);
4716 + retval.result->append8(retval.result, " AND ");
4717 + retval.result->appendS(retval.result, b.result);
4718 + retval.result->append8(retval.result, ")");
4719 + }
4720 +
4721 + }
4722 +
4723 + }
4724 + break;
4725 + case 2:
4726 + // RSP2SQL.g:92:4: ^( OR a= expr b= expr )
4727 + {
4728 + MATCHT(OR, &FOLLOW_OR_in_expr118);
4729 + if (HASEXCEPTION())
4730 + {
4731 + goto ruleexprEx;
4732 + }
4733 +
4734 +
4735 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
4736 + if (HASEXCEPTION())
4737 + {
4738 + goto ruleexprEx;
4739 + }
4740 +
4741 + FOLLOWPUSH(FOLLOW_expr_in_expr124);
4742 + a=expr(ctx);
4743 +
4744 + FOLLOWPOP();
4745 + if (HASEXCEPTION())
4746 + {
4747 + goto ruleexprEx;
4748 + }
4749 +
4750 + FOLLOWPUSH(FOLLOW_expr_in_expr130);
4751 + b=expr(ctx);
4752 +
4753 + FOLLOWPOP();
4754 + if (HASEXCEPTION())
4755 + {
4756 + goto ruleexprEx;
4757 + }
4758 +
4759 +
4760 + MATCHT(ANTLR3_TOKEN_UP, NULL);
4761 + if (HASEXCEPTION())
4762 + {
4763 + goto ruleexprEx;
4764 + }
4765 +
4766 + {
4767 +
4768 + if (!a.valid || !b.valid)
4769 + {
4770 + retval.valid= 0;
4771 + }
4772 + else
4773 + {
4774 + retval.result= a.result->factory->newRaw(a.result->factory);
4775 + retval.result->append8(retval.result, "(");
4776 + retval.result->appendS(retval.result, a.result);
4777 + retval.result->append8(retval.result, " OR ");
4778 + retval.result->appendS(retval.result, b.result);
4779 + retval.result->append8(retval.result, ")");
4780 + }
4781 +
4782 + }
4783 +
4784 + }
4785 + break;
4786 + case 3:
4787 + // RSP2SQL.g:108:4: c= strcrit
4788 + {
4789 + FOLLOWPUSH(FOLLOW_strcrit_in_expr144);
4790 + c=strcrit(ctx);
4791 +
4792 + FOLLOWPOP();
4793 + if (HASEXCEPTION())
4794 + {
4795 + goto ruleexprEx;
4796 + }
4797 +
4798 + {
4799 +
4800 + retval.valid= c.valid;
4801 + retval.result= c.result;
4802 +
4803 + }
4804 +
4805 + }
4806 + break;
4807 + case 4:
4808 + // RSP2SQL.g:113:4: ^( NOT c= strcrit )
4809 + {
4810 + MATCHT(NOT, &FOLLOW_NOT_in_expr154);
4811 + if (HASEXCEPTION())
4812 + {
4813 + goto ruleexprEx;
4814 + }
4815 +
4816 +
4817 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
4818 + if (HASEXCEPTION())
4819 + {
4820 + goto ruleexprEx;
4821 + }
4822 +
4823 + FOLLOWPUSH(FOLLOW_strcrit_in_expr160);
4824 + c=strcrit(ctx);
4825 +
4826 + FOLLOWPOP();
4827 + if (HASEXCEPTION())
4828 + {
4829 + goto ruleexprEx;
4830 + }
4831 +
4832 +
4833 + MATCHT(ANTLR3_TOKEN_UP, NULL);
4834 + if (HASEXCEPTION())
4835 + {
4836 + goto ruleexprEx;
4837 + }
4838 +
4839 + {
4840 +
4841 + if (!c.valid)
4842 + {
4843 + retval.valid= 0;
4844 + }
4845 + else
4846 + {
4847 + retval.result= c.result->factory->newRaw(c.result->factory);
4848 + retval.result->append8(retval.result, "(NOT ");
4849 + retval.result->appendS(retval.result, c.result);
4850 + retval.result->append8(retval.result, ")");
4851 + }
4852 +
4853 + }
4854 +
4855 + }
4856 + break;
4857 + case 5:
4858 + // RSP2SQL.g:127:4: i= intcrit
4859 + {
4860 + FOLLOWPUSH(FOLLOW_intcrit_in_expr174);
4861 + i=intcrit(ctx);
4862 +
4863 + FOLLOWPOP();
4864 + if (HASEXCEPTION())
4865 + {
4866 + goto ruleexprEx;
4867 + }
4868 +
4869 + {
4870 +
4871 + retval.valid= i.valid;
4872 + retval.result= i.result;
4873 +
4874 + }
4875 +
4876 + }
4877 + break;
4878 + case 6:
4879 + // RSP2SQL.g:132:4: ^( NOT i= intcrit )
4880 + {
4881 + MATCHT(NOT, &FOLLOW_NOT_in_expr184);
4882 + if (HASEXCEPTION())
4883 + {
4884 + goto ruleexprEx;
4885 + }
4886 +
4887 +
4888 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
4889 + if (HASEXCEPTION())
4890 + {
4891 + goto ruleexprEx;
4892 + }
4893 +
4894 + FOLLOWPUSH(FOLLOW_intcrit_in_expr190);
4895 + i=intcrit(ctx);
4896 +
4897 + FOLLOWPOP();
4898 + if (HASEXCEPTION())
4899 + {
4900 + goto ruleexprEx;
4901 + }
4902 +
4903 +
4904 + MATCHT(ANTLR3_TOKEN_UP, NULL);
4905 + if (HASEXCEPTION())
4906 + {
4907 + goto ruleexprEx;
4908 + }
4909 +
4910 + {
4911 +
4912 + if (!i.valid)
4913 + {
4914 + retval.valid= 0;
4915 + }
4916 + else
4917 + {
4918 + retval.result= i.result->factory->newRaw(i.result->factory);
4919 + retval.result->append8(retval.result, "(NOT ");
4920 + retval.result->appendS(retval.result, i.result);
4921 + retval.result->append8(retval.result, ")");
4922 + }
4923 +
4924 + }
4925 +
4926 + }
4927 + break;
4928 + case 7:
4929 + // RSP2SQL.g:146:4: d= datecrit
4930 + {
4931 + FOLLOWPUSH(FOLLOW_datecrit_in_expr204);
4932 + d=datecrit(ctx);
4933 +
4934 + FOLLOWPOP();
4935 + if (HASEXCEPTION())
4936 + {
4937 + goto ruleexprEx;
4938 + }
4939 +
4940 + {
4941 +
4942 + retval.valid= d.valid;
4943 + retval.result= d.result;
4944 +
4945 + }
4946 +
4947 + }
4948 + break;
4949 +
4950 + }
4951 + }
4952 + }
4953 +
4954 +
4955 + // This is where rules clean up and exit
4956 + //
4957 + goto ruleexprEx; /* Prevent compiler warnings */
4958 + ruleexprEx: ;
4959 +
4960 + if (HASEXCEPTION())
4961 + {
4962 + PREPORTERROR();
4963 + PRECOVER();
4964 + }
4965 +
4966 +
4967 + return retval;
4968 +}
4969 +/* $ANTLR end expr */
4970 +
4971 +/**
4972 + * $ANTLR start strcrit
4973 + * RSP2SQL.g:153:1: strcrit returns [ pANTLR3_STRING result, int valid ] : ^(o= strop f= FIELD s= STR ) ;
4974 + */
4975 +static RSP2SQL_strcrit_return
4976 +strcrit(pRSP2SQL ctx)
4977 +{
4978 + RSP2SQL_strcrit_return retval;
4979 +
4980 + pANTLR3_BASE_TREE f;
4981 + pANTLR3_BASE_TREE s;
4982 + pANTLR3_COMMON_TOKEN o;
4983 + #undef RETURN_TYPE_o
4984 + #define RETURN_TYPE_o pANTLR3_COMMON_TOKEN
4985 +
4986 + /* Initialize rule variables
4987 + */
4988 +
4989 +
4990 + retval.result= NULL; retval.valid= 1;
4991 + f = NULL;
4992 + s = NULL;
4993 + o = NULL;
4994 + retval.start = LT(1); retval.stop = retval.start;
4995 +
4996 + {
4997 + // RSP2SQL.g:155:2: ( ^(o= strop f= FIELD s= STR ) )
4998 + // RSP2SQL.g:155:4: ^(o= strop f= FIELD s= STR )
4999 + {
5000 + FOLLOWPUSH(FOLLOW_strop_in_strcrit233);
5001 + o=strop(ctx);
5002 +
5003 + FOLLOWPOP();
5004 + if (HASEXCEPTION())
5005 + {
5006 + goto rulestrcritEx;
5007 + }
5008 +
5009 +
5010 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
5011 + if (HASEXCEPTION())
5012 + {
5013 + goto rulestrcritEx;
5014 + }
5015 +
5016 + f = (pANTLR3_BASE_TREE) MATCHT(FIELD, &FOLLOW_FIELD_in_strcrit239);
5017 + if (HASEXCEPTION())
5018 + {
5019 + goto rulestrcritEx;
5020 + }
5021 +
5022 + s = (pANTLR3_BASE_TREE) MATCHT(STR, &FOLLOW_STR_in_strcrit245);
5023 + if (HASEXCEPTION())
5024 + {
5025 + goto rulestrcritEx;
5026 + }
5027 +
5028 +
5029 + MATCHT(ANTLR3_TOKEN_UP, NULL);
5030 + if (HASEXCEPTION())
5031 + {
5032 + goto rulestrcritEx;
5033 + }
5034 +
5035 + {
5036 +
5037 + char *op;
5038 + const struct rsp_query_field_map *rqfp;
5039 + pANTLR3_STRING field;
5040 + char *escaped;
5041 + ANTLR3_UINT32 optok;
5042 +
5043 + escaped = NULL;
5044 +
5045 + op = NULL;
5046 + optok = o->getType(o);
5047 + switch (optok)
5048 + {
5049 + case EQUAL:
5050 + op = " = ";
5051 + break;
5052 +
5053 + case INCLUDES:
5054 + case STARTSW:
5055 + case ENDSW:
5056 + op = " LIKE ";
5057 + break;
5058 + }
5059 +
5060 + field = f->getText(f);
5061 +
5062 + /* Field lookup */
5063 + rqfp = rsp_query_field_lookup((char *)field->chars, strlen((char *)field->chars));
5064 + if (!rqfp)
5065 + {
5066 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not a valid field in queries\n", field->chars);
5067 + retval.valid= 0;
5068 + goto strcrit_valid_0; /* ABORT */
5069 + }
5070 +
5071 + /* Check field type */
5072 + if (rqfp->field_type != RSP_TYPE_STRING)
5073 + {
5074 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not a string field\n", field->chars);
5075 + retval.valid= 0;
5076 + goto strcrit_valid_0; /* ABORT */
5077 + }
5078 +
5079 + escaped = db_escape_string((char *)s->getText(s)->chars);
5080 + if (!escaped)
5081 + {
5082 + DPRINTF(E_LOG, L_RSP, "Could not escape value\n");
5083 + retval.valid= 0;
5084 + goto strcrit_valid_0; /* ABORT */
5085 + }
5086 +
5087 + retval.result= field->factory->newRaw(field->factory);
5088 + retval.result->append8(retval.result, "f.");
5089 + retval.result->appendS(retval.result, field);
5090 + retval.result->append8(retval.result, op);
5091 + retval.result->append8(retval.result, "'");
5092 + if ((optok == INCLUDES) || (optok == STARTSW))
5093 + retval.result->append8(retval.result, "%");
5094 +
5095 + retval.result->append8(retval.result, escaped);
5096 +
5097 + if ((optok == INCLUDES) || (optok == ENDSW))
5098 + retval.result->append8(retval.result, "%");
5099 + retval.result->append8(retval.result, "'");
5100 +
5101 + strcrit_valid_0:
5102 + ;
5103 +
5104 + if (escaped)
5105 + free(escaped);
5106 +
5107 + }
5108 +
5109 + }
5110 +
5111 + }
5112 +
5113 +
5114 + // This is where rules clean up and exit
5115 + //
5116 + goto rulestrcritEx; /* Prevent compiler warnings */
5117 + rulestrcritEx: ;
5118 +
5119 + if (HASEXCEPTION())
5120 + {
5121 + PREPORTERROR();
5122 + PRECOVER();
5123 + }
5124 +
5125 +
5126 + return retval;
5127 +}
5128 +/* $ANTLR end strcrit */
5129 +
5130 +/**
5131 + * $ANTLR start strop
5132 + * RSP2SQL.g:229:1: strop returns [ pANTLR3_COMMON_TOKEN op ] : (n= EQUAL | n= INCLUDES | n= STARTSW | n= ENDSW );
5133 + */
5134 +static pANTLR3_COMMON_TOKEN
5135 +strop(pRSP2SQL ctx)
5136 +{
5137 + pANTLR3_COMMON_TOKEN op = NULL;
5138 +
5139 + pANTLR3_BASE_TREE n;
5140 +
5141 + /* Initialize rule variables
5142 + */
5143 +
5144 +
5145 + op= NULL;
5146 + n = NULL;
5147 +
5148 + {
5149 + {
5150 + // RSP2SQL.g:231:2: (n= EQUAL | n= INCLUDES | n= STARTSW | n= ENDSW )
5151 +
5152 + ANTLR3_UINT32 alt2;
5153 +
5154 + alt2=4;
5155 +
5156 + switch ( LA(1) )
5157 + {
5158 + case EQUAL:
5159 + {
5160 + alt2=1;
5161 + }
5162 + break;
5163 + case INCLUDES:
5164 + {
5165 + alt2=2;
5166 + }
5167 + break;
5168 + case STARTSW:
5169 + {
5170 + alt2=3;
5171 + }
5172 + break;
5173 + case ENDSW:
5174 + {
5175 + alt2=4;
5176 + }
5177 + break;
5178 +
5179 + default:
5180 + CONSTRUCTEX();
5181 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
5182 + EXCEPTION->message = (void *)"";
5183 + EXCEPTION->decisionNum = 2;
5184 + EXCEPTION->state = 0;
5185 +
5186 +
5187 + goto rulestropEx;
5188 + }
5189 +
5190 + switch (alt2)
5191 + {
5192 + case 1:
5193 + // RSP2SQL.g:231:4: n= EQUAL
5194 + {
5195 + n = (pANTLR3_BASE_TREE) MATCHT(EQUAL, &FOLLOW_EQUAL_in_strop274);
5196 + if (HASEXCEPTION())
5197 + {
5198 + goto rulestropEx;
5199 + }
5200 +
5201 + {
5202 + op= n->getToken(n);
5203 + }
5204 +
5205 + }
5206 + break;
5207 + case 2:
5208 + // RSP2SQL.g:233:4: n= INCLUDES
5209 + {
5210 + n = (pANTLR3_BASE_TREE) MATCHT(INCLUDES, &FOLLOW_INCLUDES_in_strop287);
5211 + if (HASEXCEPTION())
5212 + {
5213 + goto rulestropEx;
5214 + }
5215 +
5216 + {
5217 + op= n->getToken(n);
5218 + }
5219 +
5220 + }
5221 + break;
5222 + case 3:
5223 + // RSP2SQL.g:235:4: n= STARTSW
5224 + {
5225 + n = (pANTLR3_BASE_TREE) MATCHT(STARTSW, &FOLLOW_STARTSW_in_strop300);
5226 + if (HASEXCEPTION())
5227 + {
5228 + goto rulestropEx;
5229 + }
5230 +
5231 + {
5232 + op= n->getToken(n);
5233 + }
5234 +
5235 + }
5236 + break;
5237 + case 4:
5238 + // RSP2SQL.g:237:4: n= ENDSW
5239 + {
5240 + n = (pANTLR3_BASE_TREE) MATCHT(ENDSW, &FOLLOW_ENDSW_in_strop313);
5241 + if (HASEXCEPTION())
5242 + {
5243 + goto rulestropEx;
5244 + }
5245 +
5246 + {
5247 + op= n->getToken(n);
5248 + }
5249 +
5250 + }
5251 + break;
5252 +
5253 + }
5254 + }
5255 + }
5256 +
5257 +
5258 + // This is where rules clean up and exit
5259 + //
5260 + goto rulestropEx; /* Prevent compiler warnings */
5261 + rulestropEx: ;
5262 +
5263 + if (HASEXCEPTION())
5264 + {
5265 + PREPORTERROR();
5266 + PRECOVER();
5267 + }
5268 +
5269 +
5270 + return op;
5271 +}
5272 +/* $ANTLR end strop */
5273 +
5274 +/**
5275 + * $ANTLR start intcrit
5276 + * RSP2SQL.g:241:1: intcrit returns [ pANTLR3_STRING result, int valid ] : ^(o= intop f= FIELD i= INT ) ;
5277 + */
5278 +static RSP2SQL_intcrit_return
5279 +intcrit(pRSP2SQL ctx)
5280 +{
5281 + RSP2SQL_intcrit_return retval;
5282 +
5283 + pANTLR3_BASE_TREE f;
5284 + pANTLR3_BASE_TREE i;
5285 + pANTLR3_COMMON_TOKEN o;
5286 + #undef RETURN_TYPE_o
5287 + #define RETURN_TYPE_o pANTLR3_COMMON_TOKEN
5288 +
5289 + /* Initialize rule variables
5290 + */
5291 +
5292 +
5293 + retval.result= NULL; retval.valid= 1;
5294 + f = NULL;
5295 + i = NULL;
5296 + o = NULL;
5297 + retval.start = LT(1); retval.stop = retval.start;
5298 +
5299 + {
5300 + // RSP2SQL.g:243:2: ( ^(o= intop f= FIELD i= INT ) )
5301 + // RSP2SQL.g:243:4: ^(o= intop f= FIELD i= INT )
5302 + {
5303 + FOLLOWPUSH(FOLLOW_intop_in_intcrit342);
5304 + o=intop(ctx);
5305 +
5306 + FOLLOWPOP();
5307 + if (HASEXCEPTION())
5308 + {
5309 + goto ruleintcritEx;
5310 + }
5311 +
5312 +
5313 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
5314 + if (HASEXCEPTION())
5315 + {
5316 + goto ruleintcritEx;
5317 + }
5318 +
5319 + f = (pANTLR3_BASE_TREE) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit348);
5320 + if (HASEXCEPTION())
5321 + {
5322 + goto ruleintcritEx;
5323 + }
5324 +
5325 + i = (pANTLR3_BASE_TREE) MATCHT(INT, &FOLLOW_INT_in_intcrit354);
5326 + if (HASEXCEPTION())
5327 + {
5328 + goto ruleintcritEx;
5329 + }
5330 +
5331 +
5332 + MATCHT(ANTLR3_TOKEN_UP, NULL);
5333 + if (HASEXCEPTION())
5334 + {
5335 + goto ruleintcritEx;
5336 + }
5337 +
5338 + {
5339 +
5340 + char *op;
5341 + const struct rsp_query_field_map *rqfp;
5342 + pANTLR3_STRING field;
5343 +
5344 + op = NULL;
5345 + switch (o->getType(o))
5346 + {
5347 + case EQUAL:
5348 + op = " = ";
5349 + break;
5350 +
5351 + case LESS:
5352 + op = " < ";
5353 + break;
5354 +
5355 + case GREATER:
5356 + op = " > ";
5357 + break;
5358 +
5359 + case LTE:
5360 + op = " <= ";
5361 + break;
5362 +
5363 + case GTE:
5364 + op = " >= ";
5365 + break;
5366 + }
5367 +
5368 + field = f->getText(f);
5369 +
5370 + /* Field lookup */
5371 + rqfp = rsp_query_field_lookup((char *)field->chars, strlen((char *)field->chars));
5372 + if (!rqfp)
5373 + {
5374 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not a valid field in queries\n", field->chars);
5375 + retval.valid= 0;
5376 + goto intcrit_valid_0; /* ABORT */
5377 + }
5378 +
5379 + /* Check field type */
5380 + if (rqfp->field_type != RSP_TYPE_INT)
5381 + {
5382 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not an integer field\n", field->chars);
5383 + retval.valid= 0;
5384 + goto intcrit_valid_0; /* ABORT */
5385 + }
5386 +
5387 + retval.result= field->factory->newRaw(field->factory);
5388 + retval.result->append8(retval.result, "f.");
5389 + retval.result->appendS(retval.result, field);
5390 + retval.result->append8(retval.result, op);
5391 + retval.result->appendS(retval.result, i->getText(i));
5392 +
5393 + intcrit_valid_0:
5394 + ;
5395 +
5396 + }
5397 +
5398 + }
5399 +
5400 + }
5401 +
5402 +
5403 + // This is where rules clean up and exit
5404 + //
5405 + goto ruleintcritEx; /* Prevent compiler warnings */
5406 + ruleintcritEx: ;
5407 +
5408 + if (HASEXCEPTION())
5409 + {
5410 + PREPORTERROR();
5411 + PRECOVER();
5412 + }
5413 +
5414 +
5415 + return retval;
5416 +}
5417 +/* $ANTLR end intcrit */
5418 +
5419 +/**
5420 + * $ANTLR start intop
5421 + * RSP2SQL.g:303:1: intop returns [ pANTLR3_COMMON_TOKEN op ] : (n= EQUAL | n= LESS | n= GREATER | n= LTE | n= GTE );
5422 + */
5423 +static pANTLR3_COMMON_TOKEN
5424 +intop(pRSP2SQL ctx)
5425 +{
5426 + pANTLR3_COMMON_TOKEN op = NULL;
5427 +
5428 + pANTLR3_BASE_TREE n;
5429 +
5430 + /* Initialize rule variables
5431 + */
5432 +
5433 +
5434 + op= NULL;
5435 + n = NULL;
5436 +
5437 + {
5438 + {
5439 + // RSP2SQL.g:305:2: (n= EQUAL | n= LESS | n= GREATER | n= LTE | n= GTE )
5440 +
5441 + ANTLR3_UINT32 alt3;
5442 +
5443 + alt3=5;
5444 +
5445 + switch ( LA(1) )
5446 + {
5447 + case EQUAL:
5448 + {
5449 + alt3=1;
5450 + }
5451 + break;
5452 + case LESS:
5453 + {
5454 + alt3=2;
5455 + }
5456 + break;
5457 + case GREATER:
5458 + {
5459 + alt3=3;
5460 + }
5461 + break;
5462 + case LTE:
5463 + {
5464 + alt3=4;
5465 + }
5466 + break;
5467 + case GTE:
5468 + {
5469 + alt3=5;
5470 + }
5471 + break;
5472 +
5473 + default:
5474 + CONSTRUCTEX();
5475 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
5476 + EXCEPTION->message = (void *)"";
5477 + EXCEPTION->decisionNum = 3;
5478 + EXCEPTION->state = 0;
5479 +
5480 +
5481 + goto ruleintopEx;
5482 + }
5483 +
5484 + switch (alt3)
5485 + {
5486 + case 1:
5487 + // RSP2SQL.g:305:4: n= EQUAL
5488 + {
5489 + n = (pANTLR3_BASE_TREE) MATCHT(EQUAL, &FOLLOW_EQUAL_in_intop383);
5490 + if (HASEXCEPTION())
5491 + {
5492 + goto ruleintopEx;
5493 + }
5494 +
5495 + {
5496 + op= n->getToken(n);
5497 + }
5498 +
5499 + }
5500 + break;
5501 + case 2:
5502 + // RSP2SQL.g:307:4: n= LESS
5503 + {
5504 + n = (pANTLR3_BASE_TREE) MATCHT(LESS, &FOLLOW_LESS_in_intop396);
5505 + if (HASEXCEPTION())
5506 + {
5507 + goto ruleintopEx;
5508 + }
5509 +
5510 + {
5511 + op= n->getToken(n);
5512 + }
5513 +
5514 + }
5515 + break;
5516 + case 3:
5517 + // RSP2SQL.g:309:4: n= GREATER
5518 + {
5519 + n = (pANTLR3_BASE_TREE) MATCHT(GREATER, &FOLLOW_GREATER_in_intop409);
5520 + if (HASEXCEPTION())
5521 + {
5522 + goto ruleintopEx;
5523 + }
5524 +
5525 + {
5526 + op= n->getToken(n);
5527 + }
5528 +
5529 + }
5530 + break;
5531 + case 4:
5532 + // RSP2SQL.g:311:4: n= LTE
5533 + {
5534 + n = (pANTLR3_BASE_TREE) MATCHT(LTE, &FOLLOW_LTE_in_intop422);
5535 + if (HASEXCEPTION())
5536 + {
5537 + goto ruleintopEx;
5538 + }
5539 +
5540 + {
5541 + op= n->getToken(n);
5542 + }
5543 +
5544 + }
5545 + break;
5546 + case 5:
5547 + // RSP2SQL.g:313:4: n= GTE
5548 + {
5549 + n = (pANTLR3_BASE_TREE) MATCHT(GTE, &FOLLOW_GTE_in_intop435);
5550 + if (HASEXCEPTION())
5551 + {
5552 + goto ruleintopEx;
5553 + }
5554 +
5555 + {
5556 + op= n->getToken(n);
5557 + }
5558 +
5559 + }
5560 + break;
5561 +
5562 + }
5563 + }
5564 + }
5565 +
5566 +
5567 + // This is where rules clean up and exit
5568 + //
5569 + goto ruleintopEx; /* Prevent compiler warnings */
5570 + ruleintopEx: ;
5571 +
5572 + if (HASEXCEPTION())
5573 + {
5574 + PREPORTERROR();
5575 + PRECOVER();
5576 + }
5577 +
5578 +
5579 + return op;
5580 +}
5581 +/* $ANTLR end intop */
5582 +
5583 +/**
5584 + * $ANTLR start datecrit
5585 + * RSP2SQL.g:317:1: datecrit returns [ pANTLR3_STRING result, int valid ] : ^(o= dateop f= FIELD d= datespec ) ;
5586 + */
5587 +static RSP2SQL_datecrit_return
5588 +datecrit(pRSP2SQL ctx)
5589 +{
5590 + RSP2SQL_datecrit_return retval;
5591 +
5592 + pANTLR3_BASE_TREE f;
5593 + pANTLR3_COMMON_TOKEN o;
5594 + #undef RETURN_TYPE_o
5595 + #define RETURN_TYPE_o pANTLR3_COMMON_TOKEN
5596 +
5597 + RSP2SQL_datespec_return d;
5598 + #undef RETURN_TYPE_d
5599 + #define RETURN_TYPE_d RSP2SQL_datespec_return
5600 +
5601 + /* Initialize rule variables
5602 + */
5603 +
5604 +
5605 + retval.result= NULL; retval.valid= 1;
5606 + f = NULL;
5607 + o = NULL;
5608 + retval.start = LT(1); retval.stop = retval.start;
5609 +
5610 + {
5611 + // RSP2SQL.g:319:2: ( ^(o= dateop f= FIELD d= datespec ) )
5612 + // RSP2SQL.g:319:4: ^(o= dateop f= FIELD d= datespec )
5613 + {
5614 + FOLLOWPUSH(FOLLOW_dateop_in_datecrit464);
5615 + o=dateop(ctx);
5616 +
5617 + FOLLOWPOP();
5618 + if (HASEXCEPTION())
5619 + {
5620 + goto ruledatecritEx;
5621 + }
5622 +
5623 +
5624 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
5625 + if (HASEXCEPTION())
5626 + {
5627 + goto ruledatecritEx;
5628 + }
5629 +
5630 + f = (pANTLR3_BASE_TREE) MATCHT(FIELD, &FOLLOW_FIELD_in_datecrit470);
5631 + if (HASEXCEPTION())
5632 + {
5633 + goto ruledatecritEx;
5634 + }
5635 +
5636 + FOLLOWPUSH(FOLLOW_datespec_in_datecrit476);
5637 + d=datespec(ctx);
5638 +
5639 + FOLLOWPOP();
5640 + if (HASEXCEPTION())
5641 + {
5642 + goto ruledatecritEx;
5643 + }
5644 +
5645 +
5646 + MATCHT(ANTLR3_TOKEN_UP, NULL);
5647 + if (HASEXCEPTION())
5648 + {
5649 + goto ruledatecritEx;
5650 + }
5651 +
5652 + {
5653 +
5654 + char *op;
5655 + const struct rsp_query_field_map *rqfp;
5656 + pANTLR3_STRING field;
5657 + char buf[32];
5658 + int ret;
5659 +
5660 + op = NULL;
5661 + switch (o->getType(o))
5662 + {
5663 + case BEFORE:
5664 + op = " < ";
5665 + break;
5666 +
5667 + case AFTER:
5668 + op = " > ";
5669 + break;
5670 + }
5671 +
5672 + field = f->getText(f);
5673 +
5674 + /* Field lookup */
5675 + rqfp = rsp_query_field_lookup((char *)field->chars, strlen((char *)field->chars));
5676 + if (!rqfp)
5677 + {
5678 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not a valid field in queries\n", field->chars);
5679 + retval.valid= 0;
5680 + goto datecrit_valid_0; /* ABORT */
5681 + }
5682 +
5683 + /* Check field type */
5684 + if (rqfp->field_type != RSP_TYPE_DATE)
5685 + {
5686 + DPRINTF(E_LOG, L_RSP, "Field '%s' is not a date field\n", field->chars);
5687 + retval.valid= 0;
5688 + goto datecrit_valid_0; /* ABORT */
5689 + }
5690 +
5691 + ret = snprintf(buf, sizeof(buf), "%ld", d.date);
5692 + if ((ret < 0) || (ret >= sizeof(buf)))
5693 + {
5694 + DPRINTF(E_LOG, L_RSP, "Date %ld too large for buffer, oops!\n", d.date);
5695 + retval.valid= 0;
5696 + goto datecrit_valid_0; /* ABORT */
5697 + }
5698 +
5699 + retval.result= field->factory->newRaw(field->factory);
5700 + retval.result->append8(retval.result, "f.");
5701 + retval.result->appendS(retval.result, field);
5702 + retval.result->append8(retval.result, op);
5703 + retval.result->append8(retval.result, buf);
5704 +
5705 + datecrit_valid_0:
5706 + ;
5707 +
5708 + }
5709 +
5710 + }
5711 +
5712 + }
5713 +
5714 +
5715 + // This is where rules clean up and exit
5716 + //
5717 + goto ruledatecritEx; /* Prevent compiler warnings */
5718 + ruledatecritEx: ;
5719 +
5720 + if (HASEXCEPTION())
5721 + {
5722 + PREPORTERROR();
5723 + PRECOVER();
5724 + }
5725 +
5726 +
5727 + return retval;
5728 +}
5729 +/* $ANTLR end datecrit */
5730 +
5731 +/**
5732 + * $ANTLR start dateop
5733 + * RSP2SQL.g:377:1: dateop returns [ pANTLR3_COMMON_TOKEN op ] : (n= BEFORE | n= AFTER );
5734 + */
5735 +static pANTLR3_COMMON_TOKEN
5736 +dateop(pRSP2SQL ctx)
5737 +{
5738 + pANTLR3_COMMON_TOKEN op = NULL;
5739 +
5740 + pANTLR3_BASE_TREE n;
5741 +
5742 + /* Initialize rule variables
5743 + */
5744 +
5745 +
5746 + op= NULL;
5747 + n = NULL;
5748 +
5749 + {
5750 + {
5751 + // RSP2SQL.g:379:2: (n= BEFORE | n= AFTER )
5752 +
5753 + ANTLR3_UINT32 alt4;
5754 +
5755 + alt4=2;
5756 +
5757 + switch ( LA(1) )
5758 + {
5759 + case BEFORE:
5760 + {
5761 + alt4=1;
5762 + }
5763 + break;
5764 + case AFTER:
5765 + {
5766 + alt4=2;
5767 + }
5768 + break;
5769 +
5770 + default:
5771 + CONSTRUCTEX();
5772 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
5773 + EXCEPTION->message = (void *)"";
5774 + EXCEPTION->decisionNum = 4;
5775 + EXCEPTION->state = 0;
5776 +
5777 +
5778 + goto ruledateopEx;
5779 + }
5780 +
5781 + switch (alt4)
5782 + {
5783 + case 1:
5784 + // RSP2SQL.g:379:4: n= BEFORE
5785 + {
5786 + n = (pANTLR3_BASE_TREE) MATCHT(BEFORE, &FOLLOW_BEFORE_in_dateop505);
5787 + if (HASEXCEPTION())
5788 + {
5789 + goto ruledateopEx;
5790 + }
5791 +
5792 + {
5793 + op= n->getToken(n);
5794 + }
5795 +
5796 + }
5797 + break;
5798 + case 2:
5799 + // RSP2SQL.g:381:4: n= AFTER
5800 + {
5801 + n = (pANTLR3_BASE_TREE) MATCHT(AFTER, &FOLLOW_AFTER_in_dateop518);
5802 + if (HASEXCEPTION())
5803 + {
5804 + goto ruledateopEx;
5805 + }
5806 +
5807 + {
5808 + op= n->getToken(n);
5809 + }
5810 +
5811 + }
5812 + break;
5813 +
5814 + }
5815 + }
5816 + }
5817 +
5818 +
5819 + // This is where rules clean up and exit
5820 + //
5821 + goto ruledateopEx; /* Prevent compiler warnings */
5822 + ruledateopEx: ;
5823 +
5824 + if (HASEXCEPTION())
5825 + {
5826 + PREPORTERROR();
5827 + PRECOVER();
5828 + }
5829 +
5830 +
5831 + return op;
5832 +}
5833 +/* $ANTLR end dateop */
5834 +
5835 +/**
5836 + * $ANTLR start datespec
5837 + * RSP2SQL.g:385:1: datespec returns [ time_t date, int valid ] : (r= dateref | ^(o= dateop r= dateref m= INT i= dateintval ) );
5838 + */
5839 +static RSP2SQL_datespec_return
5840 +datespec(pRSP2SQL ctx)
5841 +{
5842 + RSP2SQL_datespec_return retval;
5843 +
5844 + pANTLR3_BASE_TREE m;
5845 + RSP2SQL_dateref_return r;
5846 + #undef RETURN_TYPE_r
5847 + #define RETURN_TYPE_r RSP2SQL_dateref_return
5848 +
5849 + pANTLR3_COMMON_TOKEN o;
5850 + #undef RETURN_TYPE_o
5851 + #define RETURN_TYPE_o pANTLR3_COMMON_TOKEN
5852 +
5853 + RSP2SQL_dateintval_return i;
5854 + #undef RETURN_TYPE_i
5855 + #define RETURN_TYPE_i RSP2SQL_dateintval_return
5856 +
5857 + /* Initialize rule variables
5858 + */
5859 +
5860 +
5861 + retval.date= 0; retval.valid= 1;
5862 + m = NULL;
5863 + o = NULL;
5864 + retval.start = LT(1); retval.stop = retval.start;
5865 +
5866 + {
5867 + {
5868 + // RSP2SQL.g:387:2: (r= dateref | ^(o= dateop r= dateref m= INT i= dateintval ) )
5869 +
5870 + ANTLR3_UINT32 alt5;
5871 +
5872 + alt5=2;
5873 +
5874 + switch ( LA(1) )
5875 + {
5876 + case DATE:
5877 + case TODAY:
5878 + {
5879 + alt5=1;
5880 + }
5881 + break;
5882 + case BEFORE:
5883 + case AFTER:
5884 + {
5885 + alt5=2;
5886 + }
5887 + break;
5888 +
5889 + default:
5890 + CONSTRUCTEX();
5891 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
5892 + EXCEPTION->message = (void *)"";
5893 + EXCEPTION->decisionNum = 5;
5894 + EXCEPTION->state = 0;
5895 +
5896 +
5897 + goto ruledatespecEx;
5898 + }
5899 +
5900 + switch (alt5)
5901 + {
5902 + case 1:
5903 + // RSP2SQL.g:387:4: r= dateref
5904 + {
5905 + FOLLOWPUSH(FOLLOW_dateref_in_datespec546);
5906 + r=dateref(ctx);
5907 +
5908 + FOLLOWPOP();
5909 + if (HASEXCEPTION())
5910 + {
5911 + goto ruledatespecEx;
5912 + }
5913 +
5914 + {
5915 +
5916 + if (!r.valid)
5917 + retval.valid= 0;
5918 + else
5919 + retval.date= r.date;
5920 +
5921 + }
5922 +
5923 + }
5924 + break;
5925 + case 2:
5926 + // RSP2SQL.g:394:4: ^(o= dateop r= dateref m= INT i= dateintval )
5927 + {
5928 + FOLLOWPUSH(FOLLOW_dateop_in_datespec560);
5929 + o=dateop(ctx);
5930 +
5931 + FOLLOWPOP();
5932 + if (HASEXCEPTION())
5933 + {
5934 + goto ruledatespecEx;
5935 + }
5936 +
5937 +
5938 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
5939 + if (HASEXCEPTION())
5940 + {
5941 + goto ruledatespecEx;
5942 + }
5943 +
5944 + FOLLOWPUSH(FOLLOW_dateref_in_datespec566);
5945 + r=dateref(ctx);
5946 +
5947 + FOLLOWPOP();
5948 + if (HASEXCEPTION())
5949 + {
5950 + goto ruledatespecEx;
5951 + }
5952 +
5953 + m = (pANTLR3_BASE_TREE) MATCHT(INT, &FOLLOW_INT_in_datespec572);
5954 + if (HASEXCEPTION())
5955 + {
5956 + goto ruledatespecEx;
5957 + }
5958 +
5959 + FOLLOWPUSH(FOLLOW_dateintval_in_datespec578);
5960 + i=dateintval(ctx);
5961 +
5962 + FOLLOWPOP();
5963 + if (HASEXCEPTION())
5964 + {
5965 + goto ruledatespecEx;
5966 + }
5967 +
5968 +
5969 + MATCHT(ANTLR3_TOKEN_UP, NULL);
5970 + if (HASEXCEPTION())
5971 + {
5972 + goto ruledatespecEx;
5973 + }
5974 +
5975 + {
5976 +
5977 + int32_t val;
5978 + int ret;
5979 +
5980 + if (!r.valid || !i.valid)
5981 + {
5982 + retval.valid= 0;
5983 + goto datespec_valid_0; /* ABORT */
5984 + }
5985 +
5986 + ret = safe_atoi32((char *)m->getText(m)->chars, &val);
5987 + if (ret < 0)
5988 + {
5989 + DPRINTF(E_LOG, L_RSP, "Could not convert '%s' to integer\n", (char *)m->getText(m));
5990 + retval.valid= 0;
5991 + goto datespec_valid_0; /* ABORT */
5992 + }
5993 +
5994 + switch (o->getType(o))
5995 + {
5996 + case BEFORE:
5997 + retval.date= r.date - (val * i.period);
5998 + break;
5999 +
6000 + case AFTER:
6001 + retval.date= r.date + (val * i.period);
6002 + break;
6003 + }
6004 +
6005 + datespec_valid_0:
6006 + ;
6007 +
6008 + }
6009 +
6010 + }
6011 + break;
6012 +
6013 + }
6014 + }
6015 + }
6016 +
6017 +
6018 + // This is where rules clean up and exit
6019 + //
6020 + goto ruledatespecEx; /* Prevent compiler warnings */
6021 + ruledatespecEx: ;
6022 +
6023 + if (HASEXCEPTION())
6024 + {
6025 + PREPORTERROR();
6026 + PRECOVER();
6027 + }
6028 +
6029 +
6030 + return retval;
6031 +}
6032 +/* $ANTLR end datespec */
6033 +
6034 +/**
6035 + * $ANTLR start dateref
6036 + * RSP2SQL.g:429:1: dateref returns [ time_t date, int valid ] : (n= DATE | TODAY );
6037 + */
6038 +static RSP2SQL_dateref_return
6039 +dateref(pRSP2SQL ctx)
6040 +{
6041 + RSP2SQL_dateref_return retval;
6042 +
6043 + pANTLR3_BASE_TREE n;
6044 +
6045 + /* Initialize rule variables
6046 + */
6047 +
6048 +
6049 + retval.date= 0; retval.valid= 1;
6050 + n = NULL;
6051 + retval.start = LT(1); retval.stop = retval.start;
6052 +
6053 + {
6054 + {
6055 + // RSP2SQL.g:431:2: (n= DATE | TODAY )
6056 +
6057 + ANTLR3_UINT32 alt6;
6058 +
6059 + alt6=2;
6060 +
6061 + switch ( LA(1) )
6062 + {
6063 + case DATE:
6064 + {
6065 + alt6=1;
6066 + }
6067 + break;
6068 + case TODAY:
6069 + {
6070 + alt6=2;
6071 + }
6072 + break;
6073 +
6074 + default:
6075 + CONSTRUCTEX();
6076 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
6077 + EXCEPTION->message = (void *)"";
6078 + EXCEPTION->decisionNum = 6;
6079 + EXCEPTION->state = 0;
6080 +
6081 +
6082 + goto ruledaterefEx;
6083 + }
6084 +
6085 + switch (alt6)
6086 + {
6087 + case 1:
6088 + // RSP2SQL.g:431:4: n= DATE
6089 + {
6090 + n = (pANTLR3_BASE_TREE) MATCHT(DATE, &FOLLOW_DATE_in_dateref607);
6091 + if (HASEXCEPTION())
6092 + {
6093 + goto ruledaterefEx;
6094 + }
6095 +
6096 + {
6097 +
6098 + struct tm tm;
6099 + char *ret;
6100 +
6101 + ret = strptime((char *)n->getText(n), "%Y-%m-%d", &tm);
6102 + if (!ret)
6103 + {
6104 + DPRINTF(E_LOG, L_RSP, "Date '%s' could not be interpreted\n", (char *)n->getText(n));
6105 + retval.valid= 0;
6106 + goto dateref_valid_0; /* ABORT */
6107 + }
6108 + else
6109 + {
6110 + if (*ret != '\0')
6111 + DPRINTF(E_LOG, L_RSP, "Garbage at end of date '%s' ?!\n", (char *)n->getText(n));
6112 +
6113 + retval.date= mktime(&tm);
6114 + if (retval.date == (time_t) -1)
6115 + {
6116 + DPRINTF(E_LOG, L_RSP, "Date '%s' could not be converted to an epoch\n", (char *)n->getText(n));
6117 + retval.valid= 0;
6118 + goto dateref_valid_0; /* ABORT */
6119 + }
6120 + }
6121 +
6122 + dateref_valid_0:
6123 + ;
6124 +
6125 + }
6126 +
6127 + }
6128 + break;
6129 + case 2:
6130 + // RSP2SQL.g:460:4: TODAY
6131 + {
6132 + MATCHT(TODAY, &FOLLOW_TODAY_in_dateref616);
6133 + if (HASEXCEPTION())
6134 + {
6135 + goto ruledaterefEx;
6136 + }
6137 +
6138 + {
6139 + retval.date= time(NULL);
6140 + }
6141 +
6142 + }
6143 + break;
6144 +
6145 + }
6146 + }
6147 + }
6148 +
6149 +
6150 + // This is where rules clean up and exit
6151 + //
6152 + goto ruledaterefEx; /* Prevent compiler warnings */
6153 + ruledaterefEx: ;
6154 +
6155 + if (HASEXCEPTION())
6156 + {
6157 + PREPORTERROR();
6158 + PRECOVER();
6159 + }
6160 +
6161 +
6162 + return retval;
6163 +}
6164 +/* $ANTLR end dateref */
6165 +
6166 +/**
6167 + * $ANTLR start dateintval
6168 + * RSP2SQL.g:464:1: dateintval returns [ time_t period, int valid ] : ( DAY | WEEK | MONTH | YEAR );
6169 + */
6170 +static RSP2SQL_dateintval_return
6171 +dateintval(pRSP2SQL ctx)
6172 +{
6173 + RSP2SQL_dateintval_return retval;
6174 +
6175 + /* Initialize rule variables
6176 + */
6177 +
6178 +
6179 + retval.period= 0; retval.valid= 1;
6180 + retval.start = LT(1); retval.stop = retval.start;
6181 +
6182 + {
6183 + {
6184 + // RSP2SQL.g:466:2: ( DAY | WEEK | MONTH | YEAR )
6185 +
6186 + ANTLR3_UINT32 alt7;
6187 +
6188 + alt7=4;
6189 +
6190 + switch ( LA(1) )
6191 + {
6192 + case DAY:
6193 + {
6194 + alt7=1;
6195 + }
6196 + break;
6197 + case WEEK:
6198 + {
6199 + alt7=2;
6200 + }
6201 + break;
6202 + case MONTH:
6203 + {
6204 + alt7=3;
6205 + }
6206 + break;
6207 + case YEAR:
6208 + {
6209 + alt7=4;
6210 + }
6211 + break;
6212 +
6213 + default:
6214 + CONSTRUCTEX();
6215 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
6216 + EXCEPTION->message = (void *)"";
6217 + EXCEPTION->decisionNum = 7;
6218 + EXCEPTION->state = 0;
6219 +
6220 +
6221 + goto ruledateintvalEx;
6222 + }
6223 +
6224 + switch (alt7)
6225 + {
6226 + case 1:
6227 + // RSP2SQL.g:466:4: DAY
6228 + {
6229 + MATCHT(DAY, &FOLLOW_DAY_in_dateintval640);
6230 + if (HASEXCEPTION())
6231 + {
6232 + goto ruledateintvalEx;
6233 + }
6234 +
6235 + {
6236 + retval.period= 24 * 60 * 60;
6237 + }
6238 +
6239 + }
6240 + break;
6241 + case 2:
6242 + // RSP2SQL.g:468:4: WEEK
6243 + {
6244 + MATCHT(WEEK, &FOLLOW_WEEK_in_dateintval649);
6245 + if (HASEXCEPTION())
6246 + {
6247 + goto ruledateintvalEx;
6248 + }
6249 +
6250 + {
6251 + retval.period= 7 * 24 * 60 * 60;
6252 + }
6253 +
6254 + }
6255 + break;
6256 + case 3:
6257 + // RSP2SQL.g:470:4: MONTH
6258 + {
6259 + MATCHT(MONTH, &FOLLOW_MONTH_in_dateintval658);
6260 + if (HASEXCEPTION())
6261 + {
6262 + goto ruledateintvalEx;
6263 + }
6264 +
6265 + {
6266 + retval.period= 30 * 24 * 60 * 60;
6267 + }
6268 +
6269 + }
6270 + break;
6271 + case 4:
6272 + // RSP2SQL.g:472:4: YEAR
6273 + {
6274 + MATCHT(YEAR, &FOLLOW_YEAR_in_dateintval667);
6275 + if (HASEXCEPTION())
6276 + {
6277 + goto ruledateintvalEx;
6278 + }
6279 +
6280 + {
6281 + retval.period= 365 * 24 * 60 * 60;
6282 + }
6283 +
6284 + }
6285 + break;
6286 +
6287 + }
6288 + }
6289 + }
6290 +
6291 +
6292 + // This is where rules clean up and exit
6293 + //
6294 + goto ruledateintvalEx; /* Prevent compiler warnings */
6295 + ruledateintvalEx: ;
6296 +
6297 + if (HASEXCEPTION())
6298 + {
6299 + PREPORTERROR();
6300 + PRECOVER();
6301 + }
6302 +
6303 +
6304 + return retval;
6305 +}
6306 +/* $ANTLR end dateintval */
6307 +/* End of parsing rules
6308 + * ==============================================
6309 + */
6310 +
6311 +/* ==============================================
6312 + * Syntactic predicates
6313 + */
6314 +/* End of syntactic predicates
6315 + * ==============================================
6316 + */
6317 +
6318 +
6319 +
6320 +
6321 +
6322 +
6323 +/* End of code
6324 + * =============================================================================
6325 + */
6326 diff --git a/src/pregen/RSP2SQL.h b/src/pregen/RSP2SQL.h
6327 new file mode 100644
6328 index 0000000..08ac7bb
6329 --- /dev/null
6330 +++ b/src/pregen/RSP2SQL.h
6331 @@ -0,0 +1,291 @@
6332 +/** \file
6333 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
6334 + *
6335 + * - From the grammar source file : RSP2SQL.g
6336 + * - On : 2016-01-01 12:23:43
6337 + * - for the tree parser : RSP2SQLTreeParser *
6338 + * Editing it, at least manually, is not wise.
6339 + *
6340 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
6341 + *
6342 + *
6343 + * The tree parser RSP2SQL has the callable functions (rules) shown below,
6344 + * which will invoke the code for the associated rule in the source grammar
6345 + * assuming that the input stream is pointing to a token/text stream that could begin
6346 + * this rule.
6347 + *
6348 + * For instance if you call the first (topmost) rule in a parser grammar, you will
6349 + * get the results of a full parse, but calling a rule half way through the grammar will
6350 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
6351 + * in editors and so on.
6352 + *
6353 + * The parser entry points are called indirectly (by function pointer to function) via
6354 + * a parser context typedef pRSP2SQL, which is returned from a call to RSP2SQLNew().
6355 + *
6356 + * The methods in pRSP2SQL are as follows:
6357 + *
6358 + * - pANTLR3_STRING pRSP2SQL->query(pRSP2SQL)
6359 + * - RSP2SQL_expr_return pRSP2SQL->expr(pRSP2SQL)
6360 + * - RSP2SQL_strcrit_return pRSP2SQL->strcrit(pRSP2SQL)
6361 + * - pANTLR3_COMMON_TOKEN pRSP2SQL->strop(pRSP2SQL)
6362 + * - RSP2SQL_intcrit_return pRSP2SQL->intcrit(pRSP2SQL)
6363 + * - pANTLR3_COMMON_TOKEN pRSP2SQL->intop(pRSP2SQL)
6364 + * - RSP2SQL_datecrit_return pRSP2SQL->datecrit(pRSP2SQL)
6365 + * - pANTLR3_COMMON_TOKEN pRSP2SQL->dateop(pRSP2SQL)
6366 + * - RSP2SQL_datespec_return pRSP2SQL->datespec(pRSP2SQL)
6367 + * - RSP2SQL_dateref_return pRSP2SQL->dateref(pRSP2SQL)
6368 + * - RSP2SQL_dateintval_return pRSP2SQL->dateintval(pRSP2SQL)
6369 + *
6370 + * The return type for any particular rule is of course determined by the source
6371 + * grammar file.
6372 + */
6373 +// [The "BSD licence"]
6374 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
6375 +// http://www.temporal-wave.com
6376 +// http://www.linkedin.com/in/jimidle
6377 +//
6378 +// All rights reserved.
6379 +//
6380 +// Redistribution and use in source and binary forms, with or without
6381 +// modification, are permitted provided that the following conditions
6382 +// are met:
6383 +// 1. Redistributions of source code must retain the above copyright
6384 +// notice, this list of conditions and the following disclaimer.
6385 +// 2. Redistributions in binary form must reproduce the above copyright
6386 +// notice, this list of conditions and the following disclaimer in the
6387 +// documentation and/or other materials provided with the distribution.
6388 +// 3. The name of the author may not be used to endorse or promote products
6389 +// derived from this software without specific prior written permission.
6390 +//
6391 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
6392 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
6393 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
6394 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
6395 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
6396 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
6397 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
6398 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
6399 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
6400 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6401 +
6402 +#ifndef _RSP2SQL_H
6403 +#define _RSP2SQL_H
6404 +/* =============================================================================
6405 + * Standard antlr3 C runtime definitions
6406 + */
6407 +#include <antlr3.h>
6408 +
6409 +/* End of standard antlr 3 runtime definitions
6410 + * =============================================================================
6411 + */
6412 +
6413 +#ifdef __cplusplus
6414 +extern "C" {
6415 +#endif
6416 +
6417 +// Forward declare the context typedef so that we can use it before it is
6418 +// properly defined. Delegators and delegates (from import statements) are
6419 +// interdependent and their context structures contain pointers to each other
6420 +// C only allows such things to be declared if you pre-declare the typedef.
6421 +//
6422 +typedef struct RSP2SQL_Ctx_struct RSP2SQL, * pRSP2SQL;
6423 +
6424 +
6425 +
6426 + /* Needs #define _GNU_SOURCE for strptime() */
6427 +
6428 + #include <stdio.h>
6429 + #include <string.h>
6430 + #include <time.h>
6431 + #include <stdint.h>
6432 +
6433 + #include "logger.h"
6434 + #include "db.h"
6435 + #include "misc.h"
6436 + #include "rsp_query.h"
6437 +
6438 +
6439 +#ifdef ANTLR3_WINDOWS
6440 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
6441 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
6442 +// initialized but unused variable - tree rewrite variables declared but not needed
6443 +// Unreferenced local variable - lexer rule declares but does not always use _type
6444 +// potentially unitialized variable used - retval always returned from a rule
6445 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
6446 +//
6447 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
6448 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
6449 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
6450 +// this is a matter of orthogonality hence I disable that one.
6451 +//
6452 +#pragma warning( disable : 4100 )
6453 +#pragma warning( disable : 4101 )
6454 +#pragma warning( disable : 4127 )
6455 +#pragma warning( disable : 4189 )
6456 +#pragma warning( disable : 4505 )
6457 +#pragma warning( disable : 4701 )
6458 +#endif
6459 +typedef struct RSP2SQL_expr_return_struct
6460 +{
6461 + pANTLR3_BASE_TREE start;
6462 + pANTLR3_BASE_TREE stop;
6463 + pANTLR3_STRING result;
6464 + int valid;
6465 +}
6466 + RSP2SQL_expr_return;
6467 +
6468 +typedef struct RSP2SQL_strcrit_return_struct
6469 +{
6470 + pANTLR3_BASE_TREE start;
6471 + pANTLR3_BASE_TREE stop;
6472 + pANTLR3_STRING result;
6473 + int valid;
6474 +}
6475 + RSP2SQL_strcrit_return;
6476 +
6477 +typedef struct RSP2SQL_intcrit_return_struct
6478 +{
6479 + pANTLR3_BASE_TREE start;
6480 + pANTLR3_BASE_TREE stop;
6481 + pANTLR3_STRING result;
6482 + int valid;
6483 +}
6484 + RSP2SQL_intcrit_return;
6485 +
6486 +typedef struct RSP2SQL_datecrit_return_struct
6487 +{
6488 + pANTLR3_BASE_TREE start;
6489 + pANTLR3_BASE_TREE stop;
6490 + pANTLR3_STRING result;
6491 + int valid;
6492 +}
6493 + RSP2SQL_datecrit_return;
6494 +
6495 +typedef struct RSP2SQL_datespec_return_struct
6496 +{
6497 + pANTLR3_BASE_TREE start;
6498 + pANTLR3_BASE_TREE stop;
6499 + time_t date;
6500 + int valid;
6501 +}
6502 + RSP2SQL_datespec_return;
6503 +
6504 +typedef struct RSP2SQL_dateref_return_struct
6505 +{
6506 + pANTLR3_BASE_TREE start;
6507 + pANTLR3_BASE_TREE stop;
6508 + time_t date;
6509 + int valid;
6510 +}
6511 + RSP2SQL_dateref_return;
6512 +
6513 +typedef struct RSP2SQL_dateintval_return_struct
6514 +{
6515 + pANTLR3_BASE_TREE start;
6516 + pANTLR3_BASE_TREE stop;
6517 + time_t period;
6518 + int valid;
6519 +}
6520 + RSP2SQL_dateintval_return;
6521 +
6522 +
6523 +
6524 +/** Context tracking structure for RSP2SQL
6525 + */
6526 +struct RSP2SQL_Ctx_struct
6527 +{
6528 + /** Built in ANTLR3 context tracker contains all the generic elements
6529 + * required for context tracking.
6530 + */
6531 + pANTLR3_TREE_PARSER pTreeParser;
6532 +
6533 +
6534 + pANTLR3_STRING (*query) (struct RSP2SQL_Ctx_struct * ctx);
6535 + RSP2SQL_expr_return (*expr) (struct RSP2SQL_Ctx_struct * ctx);
6536 + RSP2SQL_strcrit_return (*strcrit) (struct RSP2SQL_Ctx_struct * ctx);
6537 + pANTLR3_COMMON_TOKEN (*strop) (struct RSP2SQL_Ctx_struct * ctx);
6538 + RSP2SQL_intcrit_return (*intcrit) (struct RSP2SQL_Ctx_struct * ctx);
6539 + pANTLR3_COMMON_TOKEN (*intop) (struct RSP2SQL_Ctx_struct * ctx);
6540 + RSP2SQL_datecrit_return (*datecrit) (struct RSP2SQL_Ctx_struct * ctx);
6541 + pANTLR3_COMMON_TOKEN (*dateop) (struct RSP2SQL_Ctx_struct * ctx);
6542 + RSP2SQL_datespec_return (*datespec) (struct RSP2SQL_Ctx_struct * ctx);
6543 + RSP2SQL_dateref_return (*dateref) (struct RSP2SQL_Ctx_struct * ctx);
6544 + RSP2SQL_dateintval_return (*dateintval) (struct RSP2SQL_Ctx_struct * ctx);
6545 + // Delegated rules
6546 + const char * (*getGrammarFileName)();
6547 + void (*free) (struct RSP2SQL_Ctx_struct * ctx);
6548 +
6549 +};
6550 +
6551 +// Function protoypes for the constructor functions that external translation units
6552 +// such as delegators and delegates may wish to call.
6553 +//
6554 +ANTLR3_API pRSP2SQL RSP2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream);
6555 +ANTLR3_API pRSP2SQL RSP2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
6556 +
6557 +/** Symbolic definitions of all the tokens that the tree parser will work with.
6558 + * \{
6559 + *
6560 + * Antlr will define EOF, but we can't use that as it it is too common in
6561 + * in C header files and that would be confusing. There is no way to filter this out at the moment
6562 + * so we just undef it here for now. That isn't the value we get back from C recognizers
6563 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
6564 + */
6565 +#ifdef EOF
6566 +#undef EOF
6567 +#endif
6568 +#ifdef Tokens
6569 +#undef Tokens
6570 +#endif
6571 +#define STARTSW 14
6572 +#define WEEK 26
6573 +#define TODAY 24
6574 +#define YEAR 28
6575 +#define ENDSW 15
6576 +#define GTE 20
6577 +#define BEFORE 21
6578 +#define DAY 25
6579 +#define INT 16
6580 +#define NOT 11
6581 +#define AFTER 22
6582 +#define AND 6
6583 +#define EOF -1
6584 +#define LTE 19
6585 +#define MONTH 27
6586 +#define DIGIT19 31
6587 +#define INCLUDES 13
6588 +#define STR 10
6589 +#define QUOTE 29
6590 +#define GREATER 18
6591 +#define WS 30
6592 +#define LPAR 7
6593 +#define NEWLINE 4
6594 +#define EQUAL 12
6595 +#define OR 5
6596 +#define LESS 17
6597 +#define FIELD 9
6598 +#define RPAR 8
6599 +#define ESCAPED 33
6600 +#define DATE 23
6601 +#define DIGIT09 32
6602 +#ifdef EOF
6603 +#undef EOF
6604 +#define EOF ANTLR3_TOKEN_EOF
6605 +#endif
6606 +
6607 +#ifndef TOKENSOURCE
6608 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
6609 +#endif
6610 +
6611 +/* End of token definitions for RSP2SQL
6612 + * =============================================================================
6613 + */
6614 +/** \} */
6615 +
6616 +#ifdef __cplusplus
6617 +}
6618 +#endif
6619 +
6620 +#endif
6621 +
6622 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
6623 diff --git a/src/pregen/RSP2SQL.u b/src/pregen/RSP2SQL.u
6624 new file mode 100644
6625 index 0000000..53d8cda
6626 --- /dev/null
6627 +++ b/src/pregen/RSP2SQL.u
6628 @@ -0,0 +1,5 @@
6629 +RSP2SQL.g: RSP.tokens
6630 +RSP2SQL.c : RSP2SQL.g
6631 +./RSP2SQL.tokens : RSP2SQL.g
6632 +RSP2SQL.h : RSP2SQL.g
6633 +ANTLR_PRODUCTS += RSP2SQL.c ./RSP2SQL.tokens RSP2SQL.h
6634 \ No newline at end of file
6635 diff --git a/src/pregen/RSPLexer.c b/src/pregen/RSPLexer.c
6636 new file mode 100644
6637 index 0000000..2e3faae
6638 --- /dev/null
6639 +++ b/src/pregen/RSPLexer.c
6640 @@ -0,0 +1,4867 @@
6641 +/** \file
6642 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
6643 + *
6644 + * - From the grammar source file : RSP.g
6645 + * - On : 2016-01-01 12:23:42
6646 + * - for the lexer : RSPLexerLexer *
6647 + * Editing it, at least manually, is not wise.
6648 + *
6649 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
6650 + *
6651 + *
6652 +*/
6653 +// [The "BSD licence"]
6654 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
6655 +// http://www.temporal-wave.com
6656 +// http://www.linkedin.com/in/jimidle
6657 +//
6658 +// All rights reserved.
6659 +//
6660 +// Redistribution and use in source and binary forms, with or without
6661 +// modification, are permitted provided that the following conditions
6662 +// are met:
6663 +// 1. Redistributions of source code must retain the above copyright
6664 +// notice, this list of conditions and the following disclaimer.
6665 +// 2. Redistributions in binary form must reproduce the above copyright
6666 +// notice, this list of conditions and the following disclaimer in the
6667 +// documentation and/or other materials provided with the distribution.
6668 +// 3. The name of the author may not be used to endorse or promote products
6669 +// derived from this software without specific prior written permission.
6670 +//
6671 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
6672 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
6673 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
6674 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
6675 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
6676 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
6677 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
6678 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
6679 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
6680 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
6681 +
6682 +/* -----------------------------------------
6683 + * Include the ANTLR3 generated header file.
6684 + */
6685 +#include "RSPLexer.h"
6686 +/* ----------------------------------------- */
6687 +
6688 +
6689 +/** String literals used by RSPLexer that we must do things like MATCHS() with.
6690 + * C will normally just lay down 8 bit characters, and you can use L"xxx" to
6691 + * get wchar_t, but wchar_t is 16 bits on Windows, which is not UTF32 and so
6692 + * we perform this little trick of defining the literals as arrays of UINT32
6693 + * and passing in the address of these.
6694 + */
6695 +static ANTLR3_UCHAR lit_1[] = { 0x61, 0x6E, 0x64, ANTLR3_STRING_TERMINATOR};
6696 +static ANTLR3_UCHAR lit_2[] = { 0x6F, 0x72, ANTLR3_STRING_TERMINATOR};
6697 +static ANTLR3_UCHAR lit_3[] = { 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73, ANTLR3_STRING_TERMINATOR};
6698 +static ANTLR3_UCHAR lit_4[] = { 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x77, 0x69, 0x74, 0x68, ANTLR3_STRING_TERMINATOR};
6699 +static ANTLR3_UCHAR lit_5[] = { 0x65, 0x6E, 0x64, 0x73, 0x77, 0x69, 0x74, 0x68, ANTLR3_STRING_TERMINATOR};
6700 +static ANTLR3_UCHAR lit_6[] = { 0x3E, 0x3D, ANTLR3_STRING_TERMINATOR};
6701 +static ANTLR3_UCHAR lit_7[] = { 0x3C, 0x3D, ANTLR3_STRING_TERMINATOR};
6702 +static ANTLR3_UCHAR lit_8[] = { 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, ANTLR3_STRING_TERMINATOR};
6703 +static ANTLR3_UCHAR lit_9[] = { 0x61, 0x66, 0x74, 0x65, 0x72, ANTLR3_STRING_TERMINATOR};
6704 +static ANTLR3_UCHAR lit_10[] = { 0x64, 0x61, 0x79, ANTLR3_STRING_TERMINATOR};
6705 +static ANTLR3_UCHAR lit_11[] = { 0x64, 0x61, 0x79, 0x73, ANTLR3_STRING_TERMINATOR};
6706 +static ANTLR3_UCHAR lit_12[] = { 0x77, 0x65, 0x65, 0x6B, ANTLR3_STRING_TERMINATOR};
6707 +static ANTLR3_UCHAR lit_13[] = { 0x77, 0x65, 0x65, 0x6B, 0x73, ANTLR3_STRING_TERMINATOR};
6708 +static ANTLR3_UCHAR lit_14[] = { 0x6D, 0x6F, 0x6E, 0x74, 0x68, ANTLR3_STRING_TERMINATOR};
6709 +static ANTLR3_UCHAR lit_15[] = { 0x6D, 0x6F, 0x6E, 0x74, 0x68, 0x73, ANTLR3_STRING_TERMINATOR};
6710 +static ANTLR3_UCHAR lit_16[] = { 0x79, 0x65, 0x61, 0x72, ANTLR3_STRING_TERMINATOR};
6711 +static ANTLR3_UCHAR lit_17[] = { 0x79, 0x65, 0x61, 0x72, 0x73, ANTLR3_STRING_TERMINATOR};
6712 +static ANTLR3_UCHAR lit_18[] = { 0x74, 0x6F, 0x64, 0x61, 0x79, ANTLR3_STRING_TERMINATOR};
6713 +
6714 +
6715 +
6716 +
6717 +/* MACROS that hide the C interface implementations from the
6718 + * generated code, which makes it a little more understandable to the human eye.
6719 + * I am very much against using C pre-processor macros for function calls and bits
6720 + * of code as you cannot see what is happening when single stepping in debuggers
6721 + * and so on. The exception (in my book at least) is for generated code, where you are
6722 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
6723 + * hides some indirect calls, but is always referring to the input stream. This is
6724 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
6725 + * the runtime interfaces without changing the generated code too often, without
6726 + * confusing the reader of the generated output, who may not wish to know the gory
6727 + * details of the interface inheritance.
6728 + */
6729 +
6730 +#define CTX ctx
6731 +
6732 +/* Aids in accessing scopes for grammar programmers
6733 + */
6734 +#undef SCOPE_TYPE
6735 +#undef SCOPE_STACK
6736 +#undef SCOPE_TOP
6737 +#define SCOPE_TYPE(scope) pRSPLexer_##scope##_SCOPE
6738 +#define SCOPE_STACK(scope) pRSPLexer_##scope##Stack
6739 +#define SCOPE_TOP(scope) ctx->pRSPLexer_##scope##Top
6740 +#define SCOPE_SIZE(scope) ctx->pRSPLexer_##scope##Stack_limit
6741 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
6742 +
6743 +
6744 +/* Macros for accessing things in a lexer
6745 + */
6746 +#undef LEXER
6747 +#undef RECOGNIZER
6748 +#undef RULEMEMO
6749 +#undef GETCHARINDEX
6750 +#undef GETLINE
6751 +#undef GETCHARPOSITIONINLINE
6752 +#undef EMIT
6753 +#undef EMITNEW
6754 +#undef MATCHC
6755 +#undef MATCHS
6756 +#undef MATCHRANGE
6757 +#undef LTOKEN
6758 +#undef HASFAILED
6759 +#undef FAILEDFLAG
6760 +#undef INPUT
6761 +#undef STRSTREAM
6762 +#undef LA
6763 +#undef HASEXCEPTION
6764 +#undef EXCEPTION
6765 +#undef CONSTRUCTEX
6766 +#undef CONSUME
6767 +#undef LRECOVER
6768 +#undef MARK
6769 +#undef REWIND
6770 +#undef REWINDLAST
6771 +#undef BACKTRACKING
6772 +#undef MATCHANY
6773 +#undef MEMOIZE
6774 +#undef HAVEPARSEDRULE
6775 +#undef GETTEXT
6776 +#undef INDEX
6777 +#undef SEEK
6778 +#undef PUSHSTREAM
6779 +#undef POPSTREAM
6780 +#undef SETTEXT
6781 +#undef SETTEXT8
6782 +
6783 +#define LEXER ctx->pLexer
6784 +#define RECOGNIZER LEXER->rec
6785 +#define LEXSTATE RECOGNIZER->state
6786 +#define TOKSOURCE LEXSTATE->tokSource
6787 +#define GETCHARINDEX() LEXER->getCharIndex(LEXER)
6788 +#define GETLINE() LEXER->getLine(LEXER)
6789 +#define GETTEXT() LEXER->getText(LEXER)
6790 +#define GETCHARPOSITIONINLINE() LEXER->getCharPositionInLine(LEXER)
6791 +#define EMIT() LEXSTATE->type = _type; LEXER->emit(LEXER)
6792 +#define EMITNEW(t) LEXER->emitNew(LEXER, t)
6793 +#define MATCHC(c) LEXER->matchc(LEXER, c)
6794 +#define MATCHS(s) LEXER->matchs(LEXER, s)
6795 +#define MATCHRANGE(c1,c2) LEXER->matchRange(LEXER, c1, c2)
6796 +#define MATCHANY() LEXER->matchAny(LEXER)
6797 +#define LTOKEN LEXSTATE->token
6798 +#define HASFAILED() (LEXSTATE->failed == ANTLR3_TRUE)
6799 +#define BACKTRACKING LEXSTATE->backtracking
6800 +#define FAILEDFLAG LEXSTATE->failed
6801 +#define INPUT LEXER->input
6802 +#define STRSTREAM INPUT
6803 +#define ISTREAM INPUT->istream
6804 +#define INDEX() ISTREAM->index(ISTREAM)
6805 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
6806 +#define EOF_TOKEN &(LEXSTATE->tokSource->eofToken)
6807 +#define HASEXCEPTION() (LEXSTATE->error == ANTLR3_TRUE)
6808 +#define EXCEPTION LEXSTATE->exception
6809 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
6810 +#define LRECOVER() LEXER->recover(LEXER)
6811 +#define MARK() ISTREAM->mark(ISTREAM)
6812 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
6813 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
6814 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
6815 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
6816 +#define PUSHSTREAM(str) LEXER->pushCharStream(LEXER, str)
6817 +#define POPSTREAM() LEXER->popCharStream(LEXER)
6818 +#define SETTEXT(str) LEXSTATE->text = str
6819 +#define SKIP() LEXSTATE->token = &(TOKSOURCE->skipToken)
6820 +#define USER1 LEXSTATE->user1
6821 +#define USER2 LEXSTATE->user2
6822 +#define USER3 LEXSTATE->user3
6823 +#define CUSTOM LEXSTATE->custom
6824 +#define RULEMEMO LEXSTATE->ruleMemo
6825 +#define DBG RECOGNIZER->debugger
6826 +
6827 +/* If we have been told we can rely on the standard 8 bit or 16 bit input
6828 + * stream, then we can define our macros to use the direct pointers
6829 + * in the input object, which is much faster than indirect calls. This
6830 + * is really only significant to lexers with a lot of fragment rules (which
6831 + * do not place LA(1) in a temporary at the moment) and even then
6832 + * only if there is a lot of input (order of say 1M or so).
6833 + */
6834 +#if defined(ANTLR3_INLINE_INPUT_ASCII) || defined(ANTLR3_INLINE_INPUT_UTF16)
6835 +
6836 +# ifdef ANTLR3_INLINE_INPUT_ASCII
6837 +
6838 +/* 8 bit "ASCII" (actually any 8 bit character set) */
6839 +
6840 +# define NEXTCHAR ((pANTLR3_UINT8)(INPUT->nextChar))
6841 +# define DATAP ((pANTLR3_UINT8)(INPUT->data))
6842 +
6843 +# else
6844 +
6845 +# define NEXTCHAR ((pANTLR3_UINT16)(INPUT->nextChar))
6846 +# define DATAP ((pANTLR3_UINT16)(INPUT->data))
6847 +
6848 +# endif
6849 +
6850 +# define LA(n) ((NEXTCHAR + n) > (DATAP + INPUT->sizeBuf) ? ANTLR3_CHARSTREAM_EOF : (ANTLR3_UCHAR)(*(NEXTCHAR + n - 1)))
6851 +# define CONSUME() \
6852 +{ \
6853 + if (NEXTCHAR < (DATAP + INPUT->sizeBuf)) \
6854 + { \
6855 + INPUT->charPositionInLine++; \
6856 + if ((ANTLR3_UCHAR)(*NEXTCHAR) == INPUT->newlineChar) \
6857 + { \
6858 + INPUT->line++; \
6859 + INPUT->charPositionInLine = 0; \
6860 + INPUT->currentLine = (void *)(NEXTCHAR + 1); \
6861 + } \
6862 + INPUT->nextChar = (void *)(NEXTCHAR + 1); \
6863 + } \
6864 +}
6865 +
6866 +#else
6867 +
6868 +// Pick up the input character by calling the input stream implementation.
6869 +//
6870 +#define CONSUME() INPUT->istream->consume(INPUT->istream)
6871 +#define LA(n) INPUT->istream->_LA(INPUT->istream, n)
6872 +
6873 +#endif
6874 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
6875 +
6876 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
6877 + * then for the present you must use different names for your defines as these are hard coded
6878 + * in the code generator. It would be better not to use such names internally, and maybe
6879 + * we can change this in a forthcoming release. I deliberately do not #undef these
6880 + * here as this will at least give you a redefined error somewhere if they clash.
6881 + */
6882 +#define UP ANTLR3_TOKEN_UP
6883 +#define DOWN ANTLR3_TOKEN_DOWN
6884 +#define EOR ANTLR3_TOKEN_EOR
6885 +#define INVALID ANTLR3_TOKEN_INVALID
6886 +
6887 +
6888 +/* =============================================================================
6889 + * Functions to create and destroy scopes. First come the rule scopes, followed
6890 + * by the global declared scopes.
6891 + */
6892 +
6893 +
6894 +
6895 +/* ============================================================================= */
6896 +
6897 +/* =============================================================================
6898 + * Start of recognizer
6899 + */
6900 +
6901 +
6902 +/* Forward declare the locally static matching functions we have generated and any predicate functions.
6903 + */
6904 +static ANTLR3_INLINE void mQUOTE (pRSPLexer ctx);
6905 +static ANTLR3_INLINE void mLPAR (pRSPLexer ctx);
6906 +static ANTLR3_INLINE void mRPAR (pRSPLexer ctx);
6907 +static ANTLR3_INLINE void mAND (pRSPLexer ctx);
6908 +static ANTLR3_INLINE void mOR (pRSPLexer ctx);
6909 +static ANTLR3_INLINE void mNOT (pRSPLexer ctx);
6910 +static ANTLR3_INLINE void mEQUAL (pRSPLexer ctx);
6911 +static ANTLR3_INLINE void mINCLUDES (pRSPLexer ctx);
6912 +static ANTLR3_INLINE void mSTARTSW (pRSPLexer ctx);
6913 +static ANTLR3_INLINE void mENDSW (pRSPLexer ctx);
6914 +static ANTLR3_INLINE void mGREATER (pRSPLexer ctx);
6915 +static ANTLR3_INLINE void mLESS (pRSPLexer ctx);
6916 +static ANTLR3_INLINE void mGTE (pRSPLexer ctx);
6917 +static ANTLR3_INLINE void mLTE (pRSPLexer ctx);
6918 +static ANTLR3_INLINE void mBEFORE (pRSPLexer ctx);
6919 +static ANTLR3_INLINE void mAFTER (pRSPLexer ctx);
6920 +static ANTLR3_INLINE void mDAY (pRSPLexer ctx);
6921 +static ANTLR3_INLINE void mWEEK (pRSPLexer ctx);
6922 +static ANTLR3_INLINE void mMONTH (pRSPLexer ctx);
6923 +static ANTLR3_INLINE void mYEAR (pRSPLexer ctx);
6924 +static ANTLR3_INLINE void mTODAY (pRSPLexer ctx);
6925 +static ANTLR3_INLINE void mNEWLINE (pRSPLexer ctx);
6926 +static ANTLR3_INLINE void mWS (pRSPLexer ctx);
6927 +static ANTLR3_INLINE void mFIELD (pRSPLexer ctx);
6928 +static ANTLR3_INLINE void mINT (pRSPLexer ctx);
6929 +static ANTLR3_INLINE void mDATE (pRSPLexer ctx);
6930 +static ANTLR3_INLINE void mSTR (pRSPLexer ctx);
6931 +static ANTLR3_INLINE void mESCAPED (pRSPLexer ctx);
6932 +static ANTLR3_INLINE void mDIGIT09 (pRSPLexer ctx);
6933 +static ANTLR3_INLINE void mDIGIT19 (pRSPLexer ctx);
6934 +static ANTLR3_INLINE void mTokens (pRSPLexer ctx);
6935 +static void RSPLexerFree(pRSPLexer ctx);
6936 +
6937 +/* =========================================================================
6938 + * Lexer matching rules end.
6939 + * =========================================================================
6940 + */
6941 +
6942 +
6943 +
6944 +static void
6945 +RSPLexerFree (pRSPLexer ctx)
6946 +{
6947 + LEXER->free(LEXER);
6948 +
6949 + ANTLR3_FREE(ctx);
6950 +}
6951 +
6952 +/** \brief Name of the grammar file that generated this code
6953 + */
6954 +static const char fileName[] = "RSP.g";
6955 +
6956 +/** \brief Return the name of the grammar file that generated this code.
6957 + */
6958 +static const char * getGrammarFileName()
6959 +{
6960 + return fileName;
6961 +}
6962 +
6963 +/** \brief Create a new lexer called RSPLexer
6964 + *
6965 + * \param[in] instream Pointer to an initialized input stream
6966 + * \return
6967 + * - Success pRSPLexer initialized for the lex start
6968 + * - Fail NULL
6969 + */
6970 +ANTLR3_API pRSPLexer RSPLexerNew
6971 +(pANTLR3_INPUT_STREAM instream)
6972 +{
6973 + // See if we can create a new lexer with the standard constructor
6974 + //
6975 + return RSPLexerNewSSD(instream, NULL);
6976 +}
6977 +
6978 +/** \brief Create a new lexer called RSPLexer
6979 + *
6980 + * \param[in] instream Pointer to an initialized input stream
6981 + * \param[state] state Previously created shared recognizer stat
6982 + * \return
6983 + * - Success pRSPLexer initialized for the lex start
6984 + * - Fail NULL
6985 + */
6986 +ANTLR3_API pRSPLexer RSPLexerNewSSD
6987 +(pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
6988 +{
6989 + pRSPLexer ctx; // Context structure we will build and return
6990 +
6991 + ctx = (pRSPLexer) ANTLR3_CALLOC(1, sizeof(RSPLexer));
6992 +
6993 + if (ctx == NULL)
6994 + {
6995 + // Failed to allocate memory for lexer context
6996 + return NULL;
6997 + }
6998 +
6999 + /* -------------------------------------------------------------------
7000 + * Memory for basic structure is allocated, now to fill in
7001 + * in base ANTLR3 structures. We initialize the function pointers
7002 + * for the standard ANTLR3 lexer function set, but upon return
7003 + * from here, the programmer may set the pointers to provide custom
7004 + * implementations of each function.
7005 + *
7006 + * We don't use the macros defined in RSPLexer.h here so you can get a sense
7007 + * of what goes where.
7008 + */
7009 +
7010 + /* Create a base lexer, using the supplied input stream
7011 + */
7012 + ctx->pLexer = antlr3LexerNewStream(ANTLR3_SIZE_HINT, instream, state);
7013 +
7014 + /* Check that we allocated the memory correctly
7015 + */
7016 + if (ctx->pLexer == NULL)
7017 + {
7018 + ANTLR3_FREE(ctx);
7019 + return NULL;
7020 + }
7021 + /* Install the implementation of our RSPLexer interface
7022 + */
7023 + ctx->mQUOTE = mQUOTE;
7024 + ctx->mLPAR = mLPAR;
7025 + ctx->mRPAR = mRPAR;
7026 + ctx->mAND = mAND;
7027 + ctx->mOR = mOR;
7028 + ctx->mNOT = mNOT;
7029 + ctx->mEQUAL = mEQUAL;
7030 + ctx->mINCLUDES = mINCLUDES;
7031 + ctx->mSTARTSW = mSTARTSW;
7032 + ctx->mENDSW = mENDSW;
7033 + ctx->mGREATER = mGREATER;
7034 + ctx->mLESS = mLESS;
7035 + ctx->mGTE = mGTE;
7036 + ctx->mLTE = mLTE;
7037 + ctx->mBEFORE = mBEFORE;
7038 + ctx->mAFTER = mAFTER;
7039 + ctx->mDAY = mDAY;
7040 + ctx->mWEEK = mWEEK;
7041 + ctx->mMONTH = mMONTH;
7042 + ctx->mYEAR = mYEAR;
7043 + ctx->mTODAY = mTODAY;
7044 + ctx->mNEWLINE = mNEWLINE;
7045 + ctx->mWS = mWS;
7046 + ctx->mFIELD = mFIELD;
7047 + ctx->mINT = mINT;
7048 + ctx->mDATE = mDATE;
7049 + ctx->mSTR = mSTR;
7050 + ctx->mESCAPED = mESCAPED;
7051 + ctx->mDIGIT09 = mDIGIT09;
7052 + ctx->mDIGIT19 = mDIGIT19;
7053 + ctx->mTokens = mTokens;
7054 +
7055 + /** When the nextToken() call is made to this lexer's pANTLR3_TOKEN_SOURCE
7056 + * it will call mTokens() in this generated code, and will pass it the ctx
7057 + * pointer of this lexer, not the context of the base lexer, so store that now.
7058 + */
7059 + ctx->pLexer->ctx = ctx;
7060 +
7061 + /**Install the token matching function
7062 + */
7063 + ctx->pLexer->mTokens = (void (*) (void *))(mTokens);
7064 +
7065 + ctx->getGrammarFileName = getGrammarFileName;
7066 + ctx->free = RSPLexerFree;
7067 +
7068 +
7069 +
7070 +
7071 +
7072 + /* Return the newly built lexer to the caller
7073 + */
7074 + return ctx;
7075 +}
7076 +
7077 +
7078 +/* =========================================================================
7079 + * Functions to match the lexer grammar defined tokens from the input stream
7080 + */
7081 +
7082 +// Comes from: 85:7: ( '\"' )
7083 +/** \brief Lexer rule generated by ANTLR3
7084 + *
7085 + * $ANTLR start QUOTE
7086 + *
7087 + * Looks to match the characters the constitute the token QUOTE
7088 + * from the attached input stream.
7089 + *
7090 + *
7091 + * \remark
7092 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7093 + */
7094 +static ANTLR3_INLINE
7095 +void mQUOTE(pRSPLexer ctx)
7096 +{
7097 + ANTLR3_UINT32 _type;
7098 +
7099 + _type = QUOTE;
7100 +
7101 +
7102 + // RSP.g:85:7: ( '\"' )
7103 + // RSP.g:85:9: '\"'
7104 + {
7105 + MATCHC('"');
7106 + if (HASEXCEPTION())
7107 + {
7108 + goto ruleQUOTEEx;
7109 + }
7110 +
7111 +
7112 + }
7113 +
7114 + LEXSTATE->type = _type;
7115 +
7116 + // This is where rules clean up and exit
7117 + //
7118 + goto ruleQUOTEEx; /* Prevent compiler warnings */
7119 + ruleQUOTEEx: ;
7120 +
7121 +}
7122 +// $ANTLR end QUOTE
7123 +
7124 +// Comes from: 86:6: ( '(' )
7125 +/** \brief Lexer rule generated by ANTLR3
7126 + *
7127 + * $ANTLR start LPAR
7128 + *
7129 + * Looks to match the characters the constitute the token LPAR
7130 + * from the attached input stream.
7131 + *
7132 + *
7133 + * \remark
7134 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7135 + */
7136 +static ANTLR3_INLINE
7137 +void mLPAR(pRSPLexer ctx)
7138 +{
7139 + ANTLR3_UINT32 _type;
7140 +
7141 + _type = LPAR;
7142 +
7143 +
7144 + // RSP.g:86:6: ( '(' )
7145 + // RSP.g:86:8: '('
7146 + {
7147 + MATCHC('(');
7148 + if (HASEXCEPTION())
7149 + {
7150 + goto ruleLPAREx;
7151 + }
7152 +
7153 +
7154 + }
7155 +
7156 + LEXSTATE->type = _type;
7157 +
7158 + // This is where rules clean up and exit
7159 + //
7160 + goto ruleLPAREx; /* Prevent compiler warnings */
7161 + ruleLPAREx: ;
7162 +
7163 +}
7164 +// $ANTLR end LPAR
7165 +
7166 +// Comes from: 87:6: ( ')' )
7167 +/** \brief Lexer rule generated by ANTLR3
7168 + *
7169 + * $ANTLR start RPAR
7170 + *
7171 + * Looks to match the characters the constitute the token RPAR
7172 + * from the attached input stream.
7173 + *
7174 + *
7175 + * \remark
7176 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7177 + */
7178 +static ANTLR3_INLINE
7179 +void mRPAR(pRSPLexer ctx)
7180 +{
7181 + ANTLR3_UINT32 _type;
7182 +
7183 + _type = RPAR;
7184 +
7185 +
7186 + // RSP.g:87:6: ( ')' )
7187 + // RSP.g:87:8: ')'
7188 + {
7189 + MATCHC(')');
7190 + if (HASEXCEPTION())
7191 + {
7192 + goto ruleRPAREx;
7193 + }
7194 +
7195 +
7196 + }
7197 +
7198 + LEXSTATE->type = _type;
7199 +
7200 + // This is where rules clean up and exit
7201 + //
7202 + goto ruleRPAREx; /* Prevent compiler warnings */
7203 + ruleRPAREx: ;
7204 +
7205 +}
7206 +// $ANTLR end RPAR
7207 +
7208 +// Comes from: 89:5: ( 'and' )
7209 +/** \brief Lexer rule generated by ANTLR3
7210 + *
7211 + * $ANTLR start AND
7212 + *
7213 + * Looks to match the characters the constitute the token AND
7214 + * from the attached input stream.
7215 + *
7216 + *
7217 + * \remark
7218 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7219 + */
7220 +static ANTLR3_INLINE
7221 +void mAND(pRSPLexer ctx)
7222 +{
7223 + ANTLR3_UINT32 _type;
7224 +
7225 + _type = AND;
7226 +
7227 +
7228 + // RSP.g:89:5: ( 'and' )
7229 + // RSP.g:89:7: 'and'
7230 + {
7231 + MATCHS(lit_1);
7232 + if (HASEXCEPTION())
7233 + {
7234 + goto ruleANDEx;
7235 + }
7236 +
7237 +
7238 +
7239 + }
7240 +
7241 + LEXSTATE->type = _type;
7242 +
7243 + // This is where rules clean up and exit
7244 + //
7245 + goto ruleANDEx; /* Prevent compiler warnings */
7246 + ruleANDEx: ;
7247 +
7248 +}
7249 +// $ANTLR end AND
7250 +
7251 +// Comes from: 90:4: ( 'or' )
7252 +/** \brief Lexer rule generated by ANTLR3
7253 + *
7254 + * $ANTLR start OR
7255 + *
7256 + * Looks to match the characters the constitute the token OR
7257 + * from the attached input stream.
7258 + *
7259 + *
7260 + * \remark
7261 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7262 + */
7263 +static ANTLR3_INLINE
7264 +void mOR(pRSPLexer ctx)
7265 +{
7266 + ANTLR3_UINT32 _type;
7267 +
7268 + _type = OR;
7269 +
7270 +
7271 + // RSP.g:90:4: ( 'or' )
7272 + // RSP.g:90:6: 'or'
7273 + {
7274 + MATCHS(lit_2);
7275 + if (HASEXCEPTION())
7276 + {
7277 + goto ruleOREx;
7278 + }
7279 +
7280 +
7281 +
7282 + }
7283 +
7284 + LEXSTATE->type = _type;
7285 +
7286 + // This is where rules clean up and exit
7287 + //
7288 + goto ruleOREx; /* Prevent compiler warnings */
7289 + ruleOREx: ;
7290 +
7291 +}
7292 +// $ANTLR end OR
7293 +
7294 +// Comes from: 91:5: ( '!' )
7295 +/** \brief Lexer rule generated by ANTLR3
7296 + *
7297 + * $ANTLR start NOT
7298 + *
7299 + * Looks to match the characters the constitute the token NOT
7300 + * from the attached input stream.
7301 + *
7302 + *
7303 + * \remark
7304 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7305 + */
7306 +static ANTLR3_INLINE
7307 +void mNOT(pRSPLexer ctx)
7308 +{
7309 + ANTLR3_UINT32 _type;
7310 +
7311 + _type = NOT;
7312 +
7313 +
7314 + // RSP.g:91:5: ( '!' )
7315 + // RSP.g:91:7: '!'
7316 + {
7317 + MATCHC('!');
7318 + if (HASEXCEPTION())
7319 + {
7320 + goto ruleNOTEx;
7321 + }
7322 +
7323 +
7324 + }
7325 +
7326 + LEXSTATE->type = _type;
7327 +
7328 + // This is where rules clean up and exit
7329 + //
7330 + goto ruleNOTEx; /* Prevent compiler warnings */
7331 + ruleNOTEx: ;
7332 +
7333 +}
7334 +// $ANTLR end NOT
7335 +
7336 +// Comes from: 94:7: ( '=' )
7337 +/** \brief Lexer rule generated by ANTLR3
7338 + *
7339 + * $ANTLR start EQUAL
7340 + *
7341 + * Looks to match the characters the constitute the token EQUAL
7342 + * from the attached input stream.
7343 + *
7344 + *
7345 + * \remark
7346 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7347 + */
7348 +static ANTLR3_INLINE
7349 +void mEQUAL(pRSPLexer ctx)
7350 +{
7351 + ANTLR3_UINT32 _type;
7352 +
7353 + _type = EQUAL;
7354 +
7355 +
7356 + // RSP.g:94:7: ( '=' )
7357 + // RSP.g:94:9: '='
7358 + {
7359 + MATCHC('=');
7360 + if (HASEXCEPTION())
7361 + {
7362 + goto ruleEQUALEx;
7363 + }
7364 +
7365 +
7366 + }
7367 +
7368 + LEXSTATE->type = _type;
7369 +
7370 + // This is where rules clean up and exit
7371 + //
7372 + goto ruleEQUALEx; /* Prevent compiler warnings */
7373 + ruleEQUALEx: ;
7374 +
7375 +}
7376 +// $ANTLR end EQUAL
7377 +
7378 +// Comes from: 97:9: ( 'includes' )
7379 +/** \brief Lexer rule generated by ANTLR3
7380 + *
7381 + * $ANTLR start INCLUDES
7382 + *
7383 + * Looks to match the characters the constitute the token INCLUDES
7384 + * from the attached input stream.
7385 + *
7386 + *
7387 + * \remark
7388 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7389 + */
7390 +static ANTLR3_INLINE
7391 +void mINCLUDES(pRSPLexer ctx)
7392 +{
7393 + ANTLR3_UINT32 _type;
7394 +
7395 + _type = INCLUDES;
7396 +
7397 +
7398 + // RSP.g:97:9: ( 'includes' )
7399 + // RSP.g:97:11: 'includes'
7400 + {
7401 + MATCHS(lit_3);
7402 + if (HASEXCEPTION())
7403 + {
7404 + goto ruleINCLUDESEx;
7405 + }
7406 +
7407 +
7408 +
7409 + }
7410 +
7411 + LEXSTATE->type = _type;
7412 +
7413 + // This is where rules clean up and exit
7414 + //
7415 + goto ruleINCLUDESEx; /* Prevent compiler warnings */
7416 + ruleINCLUDESEx: ;
7417 +
7418 +}
7419 +// $ANTLR end INCLUDES
7420 +
7421 +// Comes from: 98:9: ( 'startswith' )
7422 +/** \brief Lexer rule generated by ANTLR3
7423 + *
7424 + * $ANTLR start STARTSW
7425 + *
7426 + * Looks to match the characters the constitute the token STARTSW
7427 + * from the attached input stream.
7428 + *
7429 + *
7430 + * \remark
7431 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7432 + */
7433 +static ANTLR3_INLINE
7434 +void mSTARTSW(pRSPLexer ctx)
7435 +{
7436 + ANTLR3_UINT32 _type;
7437 +
7438 + _type = STARTSW;
7439 +
7440 +
7441 + // RSP.g:98:9: ( 'startswith' )
7442 + // RSP.g:98:11: 'startswith'
7443 + {
7444 + MATCHS(lit_4);
7445 + if (HASEXCEPTION())
7446 + {
7447 + goto ruleSTARTSWEx;
7448 + }
7449 +
7450 +
7451 +
7452 + }
7453 +
7454 + LEXSTATE->type = _type;
7455 +
7456 + // This is where rules clean up and exit
7457 + //
7458 + goto ruleSTARTSWEx; /* Prevent compiler warnings */
7459 + ruleSTARTSWEx: ;
7460 +
7461 +}
7462 +// $ANTLR end STARTSW
7463 +
7464 +// Comes from: 99:7: ( 'endswith' )
7465 +/** \brief Lexer rule generated by ANTLR3
7466 + *
7467 + * $ANTLR start ENDSW
7468 + *
7469 + * Looks to match the characters the constitute the token ENDSW
7470 + * from the attached input stream.
7471 + *
7472 + *
7473 + * \remark
7474 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7475 + */
7476 +static ANTLR3_INLINE
7477 +void mENDSW(pRSPLexer ctx)
7478 +{
7479 + ANTLR3_UINT32 _type;
7480 +
7481 + _type = ENDSW;
7482 +
7483 +
7484 + // RSP.g:99:7: ( 'endswith' )
7485 + // RSP.g:99:9: 'endswith'
7486 + {
7487 + MATCHS(lit_5);
7488 + if (HASEXCEPTION())
7489 + {
7490 + goto ruleENDSWEx;
7491 + }
7492 +
7493 +
7494 +
7495 + }
7496 +
7497 + LEXSTATE->type = _type;
7498 +
7499 + // This is where rules clean up and exit
7500 + //
7501 + goto ruleENDSWEx; /* Prevent compiler warnings */
7502 + ruleENDSWEx: ;
7503 +
7504 +}
7505 +// $ANTLR end ENDSW
7506 +
7507 +// Comes from: 102:9: ( '>' )
7508 +/** \brief Lexer rule generated by ANTLR3
7509 + *
7510 + * $ANTLR start GREATER
7511 + *
7512 + * Looks to match the characters the constitute the token GREATER
7513 + * from the attached input stream.
7514 + *
7515 + *
7516 + * \remark
7517 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7518 + */
7519 +static ANTLR3_INLINE
7520 +void mGREATER(pRSPLexer ctx)
7521 +{
7522 + ANTLR3_UINT32 _type;
7523 +
7524 + _type = GREATER;
7525 +
7526 +
7527 + // RSP.g:102:9: ( '>' )
7528 + // RSP.g:102:11: '>'
7529 + {
7530 + MATCHC('>');
7531 + if (HASEXCEPTION())
7532 + {
7533 + goto ruleGREATEREx;
7534 + }
7535 +
7536 +
7537 + }
7538 +
7539 + LEXSTATE->type = _type;
7540 +
7541 + // This is where rules clean up and exit
7542 + //
7543 + goto ruleGREATEREx; /* Prevent compiler warnings */
7544 + ruleGREATEREx: ;
7545 +
7546 +}
7547 +// $ANTLR end GREATER
7548 +
7549 +// Comes from: 103:6: ( '<' )
7550 +/** \brief Lexer rule generated by ANTLR3
7551 + *
7552 + * $ANTLR start LESS
7553 + *
7554 + * Looks to match the characters the constitute the token LESS
7555 + * from the attached input stream.
7556 + *
7557 + *
7558 + * \remark
7559 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7560 + */
7561 +static ANTLR3_INLINE
7562 +void mLESS(pRSPLexer ctx)
7563 +{
7564 + ANTLR3_UINT32 _type;
7565 +
7566 + _type = LESS;
7567 +
7568 +
7569 + // RSP.g:103:6: ( '<' )
7570 + // RSP.g:103:8: '<'
7571 + {
7572 + MATCHC('<');
7573 + if (HASEXCEPTION())
7574 + {
7575 + goto ruleLESSEx;
7576 + }
7577 +
7578 +
7579 + }
7580 +
7581 + LEXSTATE->type = _type;
7582 +
7583 + // This is where rules clean up and exit
7584 + //
7585 + goto ruleLESSEx; /* Prevent compiler warnings */
7586 + ruleLESSEx: ;
7587 +
7588 +}
7589 +// $ANTLR end LESS
7590 +
7591 +// Comes from: 104:5: ( '>=' )
7592 +/** \brief Lexer rule generated by ANTLR3
7593 + *
7594 + * $ANTLR start GTE
7595 + *
7596 + * Looks to match the characters the constitute the token GTE
7597 + * from the attached input stream.
7598 + *
7599 + *
7600 + * \remark
7601 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7602 + */
7603 +static ANTLR3_INLINE
7604 +void mGTE(pRSPLexer ctx)
7605 +{
7606 + ANTLR3_UINT32 _type;
7607 +
7608 + _type = GTE;
7609 +
7610 +
7611 + // RSP.g:104:5: ( '>=' )
7612 + // RSP.g:104:7: '>='
7613 + {
7614 + MATCHS(lit_6);
7615 + if (HASEXCEPTION())
7616 + {
7617 + goto ruleGTEEx;
7618 + }
7619 +
7620 +
7621 +
7622 + }
7623 +
7624 + LEXSTATE->type = _type;
7625 +
7626 + // This is where rules clean up and exit
7627 + //
7628 + goto ruleGTEEx; /* Prevent compiler warnings */
7629 + ruleGTEEx: ;
7630 +
7631 +}
7632 +// $ANTLR end GTE
7633 +
7634 +// Comes from: 105:5: ( '<=' )
7635 +/** \brief Lexer rule generated by ANTLR3
7636 + *
7637 + * $ANTLR start LTE
7638 + *
7639 + * Looks to match the characters the constitute the token LTE
7640 + * from the attached input stream.
7641 + *
7642 + *
7643 + * \remark
7644 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7645 + */
7646 +static ANTLR3_INLINE
7647 +void mLTE(pRSPLexer ctx)
7648 +{
7649 + ANTLR3_UINT32 _type;
7650 +
7651 + _type = LTE;
7652 +
7653 +
7654 + // RSP.g:105:5: ( '<=' )
7655 + // RSP.g:105:7: '<='
7656 + {
7657 + MATCHS(lit_7);
7658 + if (HASEXCEPTION())
7659 + {
7660 + goto ruleLTEEx;
7661 + }
7662 +
7663 +
7664 +
7665 + }
7666 +
7667 + LEXSTATE->type = _type;
7668 +
7669 + // This is where rules clean up and exit
7670 + //
7671 + goto ruleLTEEx; /* Prevent compiler warnings */
7672 + ruleLTEEx: ;
7673 +
7674 +}
7675 +// $ANTLR end LTE
7676 +
7677 +// Comes from: 108:8: ( 'before' )
7678 +/** \brief Lexer rule generated by ANTLR3
7679 + *
7680 + * $ANTLR start BEFORE
7681 + *
7682 + * Looks to match the characters the constitute the token BEFORE
7683 + * from the attached input stream.
7684 + *
7685 + *
7686 + * \remark
7687 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7688 + */
7689 +static ANTLR3_INLINE
7690 +void mBEFORE(pRSPLexer ctx)
7691 +{
7692 + ANTLR3_UINT32 _type;
7693 +
7694 + _type = BEFORE;
7695 +
7696 +
7697 + // RSP.g:108:8: ( 'before' )
7698 + // RSP.g:108:10: 'before'
7699 + {
7700 + MATCHS(lit_8);
7701 + if (HASEXCEPTION())
7702 + {
7703 + goto ruleBEFOREEx;
7704 + }
7705 +
7706 +
7707 +
7708 + }
7709 +
7710 + LEXSTATE->type = _type;
7711 +
7712 + // This is where rules clean up and exit
7713 + //
7714 + goto ruleBEFOREEx; /* Prevent compiler warnings */
7715 + ruleBEFOREEx: ;
7716 +
7717 +}
7718 +// $ANTLR end BEFORE
7719 +
7720 +// Comes from: 109:7: ( 'after' )
7721 +/** \brief Lexer rule generated by ANTLR3
7722 + *
7723 + * $ANTLR start AFTER
7724 + *
7725 + * Looks to match the characters the constitute the token AFTER
7726 + * from the attached input stream.
7727 + *
7728 + *
7729 + * \remark
7730 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7731 + */
7732 +static ANTLR3_INLINE
7733 +void mAFTER(pRSPLexer ctx)
7734 +{
7735 + ANTLR3_UINT32 _type;
7736 +
7737 + _type = AFTER;
7738 +
7739 +
7740 + // RSP.g:109:7: ( 'after' )
7741 + // RSP.g:109:9: 'after'
7742 + {
7743 + MATCHS(lit_9);
7744 + if (HASEXCEPTION())
7745 + {
7746 + goto ruleAFTEREx;
7747 + }
7748 +
7749 +
7750 +
7751 + }
7752 +
7753 + LEXSTATE->type = _type;
7754 +
7755 + // This is where rules clean up and exit
7756 + //
7757 + goto ruleAFTEREx; /* Prevent compiler warnings */
7758 + ruleAFTEREx: ;
7759 +
7760 +}
7761 +// $ANTLR end AFTER
7762 +
7763 +// Comes from: 110:5: ( 'day' | 'days' )
7764 +/** \brief Lexer rule generated by ANTLR3
7765 + *
7766 + * $ANTLR start DAY
7767 + *
7768 + * Looks to match the characters the constitute the token DAY
7769 + * from the attached input stream.
7770 + *
7771 + *
7772 + * \remark
7773 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7774 + */
7775 +static ANTLR3_INLINE
7776 +void mDAY(pRSPLexer ctx)
7777 +{
7778 + ANTLR3_UINT32 _type;
7779 +
7780 + _type = DAY;
7781 +
7782 +
7783 + {
7784 + // RSP.g:110:5: ( 'day' | 'days' )
7785 +
7786 + ANTLR3_UINT32 alt1;
7787 +
7788 + alt1=2;
7789 +
7790 + switch ( LA(1) )
7791 + {
7792 + case 'd':
7793 + {
7794 + switch ( LA(2) )
7795 + {
7796 + case 'a':
7797 + {
7798 + switch ( LA(3) )
7799 + {
7800 + case 'y':
7801 + {
7802 + switch ( LA(4) )
7803 + {
7804 + case 's':
7805 + {
7806 + alt1=2;
7807 + }
7808 + break;
7809 +
7810 + default:
7811 + alt1=1;}
7812 +
7813 + }
7814 + break;
7815 +
7816 + default:
7817 + CONSTRUCTEX();
7818 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7819 + EXCEPTION->message = (void *)"";
7820 + EXCEPTION->decisionNum = 1;
7821 + EXCEPTION->state = 2;
7822 +
7823 +
7824 + goto ruleDAYEx;
7825 + }
7826 +
7827 + }
7828 + break;
7829 +
7830 + default:
7831 + CONSTRUCTEX();
7832 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7833 + EXCEPTION->message = (void *)"";
7834 + EXCEPTION->decisionNum = 1;
7835 + EXCEPTION->state = 1;
7836 +
7837 +
7838 + goto ruleDAYEx;
7839 + }
7840 +
7841 + }
7842 + break;
7843 +
7844 + default:
7845 + CONSTRUCTEX();
7846 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7847 + EXCEPTION->message = (void *)"";
7848 + EXCEPTION->decisionNum = 1;
7849 + EXCEPTION->state = 0;
7850 +
7851 +
7852 + goto ruleDAYEx;
7853 + }
7854 +
7855 + switch (alt1)
7856 + {
7857 + case 1:
7858 + // RSP.g:110:7: 'day'
7859 + {
7860 + MATCHS(lit_10);
7861 + if (HASEXCEPTION())
7862 + {
7863 + goto ruleDAYEx;
7864 + }
7865 +
7866 +
7867 +
7868 + }
7869 + break;
7870 + case 2:
7871 + // RSP.g:110:15: 'days'
7872 + {
7873 + MATCHS(lit_11);
7874 + if (HASEXCEPTION())
7875 + {
7876 + goto ruleDAYEx;
7877 + }
7878 +
7879 +
7880 +
7881 + }
7882 + break;
7883 +
7884 + }
7885 + }
7886 + LEXSTATE->type = _type;
7887 +
7888 + // This is where rules clean up and exit
7889 + //
7890 + goto ruleDAYEx; /* Prevent compiler warnings */
7891 + ruleDAYEx: ;
7892 +
7893 +}
7894 +// $ANTLR end DAY
7895 +
7896 +// Comes from: 111:6: ( 'week' | 'weeks' )
7897 +/** \brief Lexer rule generated by ANTLR3
7898 + *
7899 + * $ANTLR start WEEK
7900 + *
7901 + * Looks to match the characters the constitute the token WEEK
7902 + * from the attached input stream.
7903 + *
7904 + *
7905 + * \remark
7906 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
7907 + */
7908 +static ANTLR3_INLINE
7909 +void mWEEK(pRSPLexer ctx)
7910 +{
7911 + ANTLR3_UINT32 _type;
7912 +
7913 + _type = WEEK;
7914 +
7915 +
7916 + {
7917 + // RSP.g:111:6: ( 'week' | 'weeks' )
7918 +
7919 + ANTLR3_UINT32 alt2;
7920 +
7921 + alt2=2;
7922 +
7923 + switch ( LA(1) )
7924 + {
7925 + case 'w':
7926 + {
7927 + switch ( LA(2) )
7928 + {
7929 + case 'e':
7930 + {
7931 + switch ( LA(3) )
7932 + {
7933 + case 'e':
7934 + {
7935 + switch ( LA(4) )
7936 + {
7937 + case 'k':
7938 + {
7939 + switch ( LA(5) )
7940 + {
7941 + case 's':
7942 + {
7943 + alt2=2;
7944 + }
7945 + break;
7946 +
7947 + default:
7948 + alt2=1;}
7949 +
7950 + }
7951 + break;
7952 +
7953 + default:
7954 + CONSTRUCTEX();
7955 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7956 + EXCEPTION->message = (void *)"";
7957 + EXCEPTION->decisionNum = 2;
7958 + EXCEPTION->state = 3;
7959 +
7960 +
7961 + goto ruleWEEKEx;
7962 + }
7963 +
7964 + }
7965 + break;
7966 +
7967 + default:
7968 + CONSTRUCTEX();
7969 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7970 + EXCEPTION->message = (void *)"";
7971 + EXCEPTION->decisionNum = 2;
7972 + EXCEPTION->state = 2;
7973 +
7974 +
7975 + goto ruleWEEKEx;
7976 + }
7977 +
7978 + }
7979 + break;
7980 +
7981 + default:
7982 + CONSTRUCTEX();
7983 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7984 + EXCEPTION->message = (void *)"";
7985 + EXCEPTION->decisionNum = 2;
7986 + EXCEPTION->state = 1;
7987 +
7988 +
7989 + goto ruleWEEKEx;
7990 + }
7991 +
7992 + }
7993 + break;
7994 +
7995 + default:
7996 + CONSTRUCTEX();
7997 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
7998 + EXCEPTION->message = (void *)"";
7999 + EXCEPTION->decisionNum = 2;
8000 + EXCEPTION->state = 0;
8001 +
8002 +
8003 + goto ruleWEEKEx;
8004 + }
8005 +
8006 + switch (alt2)
8007 + {
8008 + case 1:
8009 + // RSP.g:111:8: 'week'
8010 + {
8011 + MATCHS(lit_12);
8012 + if (HASEXCEPTION())
8013 + {
8014 + goto ruleWEEKEx;
8015 + }
8016 +
8017 +
8018 +
8019 + }
8020 + break;
8021 + case 2:
8022 + // RSP.g:111:17: 'weeks'
8023 + {
8024 + MATCHS(lit_13);
8025 + if (HASEXCEPTION())
8026 + {
8027 + goto ruleWEEKEx;
8028 + }
8029 +
8030 +
8031 +
8032 + }
8033 + break;
8034 +
8035 + }
8036 + }
8037 + LEXSTATE->type = _type;
8038 +
8039 + // This is where rules clean up and exit
8040 + //
8041 + goto ruleWEEKEx; /* Prevent compiler warnings */
8042 + ruleWEEKEx: ;
8043 +
8044 +}
8045 +// $ANTLR end WEEK
8046 +
8047 +// Comes from: 112:7: ( 'month' | 'months' )
8048 +/** \brief Lexer rule generated by ANTLR3
8049 + *
8050 + * $ANTLR start MONTH
8051 + *
8052 + * Looks to match the characters the constitute the token MONTH
8053 + * from the attached input stream.
8054 + *
8055 + *
8056 + * \remark
8057 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8058 + */
8059 +static ANTLR3_INLINE
8060 +void mMONTH(pRSPLexer ctx)
8061 +{
8062 + ANTLR3_UINT32 _type;
8063 +
8064 + _type = MONTH;
8065 +
8066 +
8067 + {
8068 + // RSP.g:112:7: ( 'month' | 'months' )
8069 +
8070 + ANTLR3_UINT32 alt3;
8071 +
8072 + alt3=2;
8073 +
8074 + switch ( LA(1) )
8075 + {
8076 + case 'm':
8077 + {
8078 + switch ( LA(2) )
8079 + {
8080 + case 'o':
8081 + {
8082 + switch ( LA(3) )
8083 + {
8084 + case 'n':
8085 + {
8086 + switch ( LA(4) )
8087 + {
8088 + case 't':
8089 + {
8090 + switch ( LA(5) )
8091 + {
8092 + case 'h':
8093 + {
8094 + switch ( LA(6) )
8095 + {
8096 + case 's':
8097 + {
8098 + alt3=2;
8099 + }
8100 + break;
8101 +
8102 + default:
8103 + alt3=1;}
8104 +
8105 + }
8106 + break;
8107 +
8108 + default:
8109 + CONSTRUCTEX();
8110 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8111 + EXCEPTION->message = (void *)"";
8112 + EXCEPTION->decisionNum = 3;
8113 + EXCEPTION->state = 4;
8114 +
8115 +
8116 + goto ruleMONTHEx;
8117 + }
8118 +
8119 + }
8120 + break;
8121 +
8122 + default:
8123 + CONSTRUCTEX();
8124 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8125 + EXCEPTION->message = (void *)"";
8126 + EXCEPTION->decisionNum = 3;
8127 + EXCEPTION->state = 3;
8128 +
8129 +
8130 + goto ruleMONTHEx;
8131 + }
8132 +
8133 + }
8134 + break;
8135 +
8136 + default:
8137 + CONSTRUCTEX();
8138 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8139 + EXCEPTION->message = (void *)"";
8140 + EXCEPTION->decisionNum = 3;
8141 + EXCEPTION->state = 2;
8142 +
8143 +
8144 + goto ruleMONTHEx;
8145 + }
8146 +
8147 + }
8148 + break;
8149 +
8150 + default:
8151 + CONSTRUCTEX();
8152 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8153 + EXCEPTION->message = (void *)"";
8154 + EXCEPTION->decisionNum = 3;
8155 + EXCEPTION->state = 1;
8156 +
8157 +
8158 + goto ruleMONTHEx;
8159 + }
8160 +
8161 + }
8162 + break;
8163 +
8164 + default:
8165 + CONSTRUCTEX();
8166 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8167 + EXCEPTION->message = (void *)"";
8168 + EXCEPTION->decisionNum = 3;
8169 + EXCEPTION->state = 0;
8170 +
8171 +
8172 + goto ruleMONTHEx;
8173 + }
8174 +
8175 + switch (alt3)
8176 + {
8177 + case 1:
8178 + // RSP.g:112:9: 'month'
8179 + {
8180 + MATCHS(lit_14);
8181 + if (HASEXCEPTION())
8182 + {
8183 + goto ruleMONTHEx;
8184 + }
8185 +
8186 +
8187 +
8188 + }
8189 + break;
8190 + case 2:
8191 + // RSP.g:112:19: 'months'
8192 + {
8193 + MATCHS(lit_15);
8194 + if (HASEXCEPTION())
8195 + {
8196 + goto ruleMONTHEx;
8197 + }
8198 +
8199 +
8200 +
8201 + }
8202 + break;
8203 +
8204 + }
8205 + }
8206 + LEXSTATE->type = _type;
8207 +
8208 + // This is where rules clean up and exit
8209 + //
8210 + goto ruleMONTHEx; /* Prevent compiler warnings */
8211 + ruleMONTHEx: ;
8212 +
8213 +}
8214 +// $ANTLR end MONTH
8215 +
8216 +// Comes from: 113:6: ( 'year' | 'years' )
8217 +/** \brief Lexer rule generated by ANTLR3
8218 + *
8219 + * $ANTLR start YEAR
8220 + *
8221 + * Looks to match the characters the constitute the token YEAR
8222 + * from the attached input stream.
8223 + *
8224 + *
8225 + * \remark
8226 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8227 + */
8228 +static ANTLR3_INLINE
8229 +void mYEAR(pRSPLexer ctx)
8230 +{
8231 + ANTLR3_UINT32 _type;
8232 +
8233 + _type = YEAR;
8234 +
8235 +
8236 + {
8237 + // RSP.g:113:6: ( 'year' | 'years' )
8238 +
8239 + ANTLR3_UINT32 alt4;
8240 +
8241 + alt4=2;
8242 +
8243 + switch ( LA(1) )
8244 + {
8245 + case 'y':
8246 + {
8247 + switch ( LA(2) )
8248 + {
8249 + case 'e':
8250 + {
8251 + switch ( LA(3) )
8252 + {
8253 + case 'a':
8254 + {
8255 + switch ( LA(4) )
8256 + {
8257 + case 'r':
8258 + {
8259 + switch ( LA(5) )
8260 + {
8261 + case 's':
8262 + {
8263 + alt4=2;
8264 + }
8265 + break;
8266 +
8267 + default:
8268 + alt4=1;}
8269 +
8270 + }
8271 + break;
8272 +
8273 + default:
8274 + CONSTRUCTEX();
8275 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8276 + EXCEPTION->message = (void *)"";
8277 + EXCEPTION->decisionNum = 4;
8278 + EXCEPTION->state = 3;
8279 +
8280 +
8281 + goto ruleYEAREx;
8282 + }
8283 +
8284 + }
8285 + break;
8286 +
8287 + default:
8288 + CONSTRUCTEX();
8289 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8290 + EXCEPTION->message = (void *)"";
8291 + EXCEPTION->decisionNum = 4;
8292 + EXCEPTION->state = 2;
8293 +
8294 +
8295 + goto ruleYEAREx;
8296 + }
8297 +
8298 + }
8299 + break;
8300 +
8301 + default:
8302 + CONSTRUCTEX();
8303 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8304 + EXCEPTION->message = (void *)"";
8305 + EXCEPTION->decisionNum = 4;
8306 + EXCEPTION->state = 1;
8307 +
8308 +
8309 + goto ruleYEAREx;
8310 + }
8311 +
8312 + }
8313 + break;
8314 +
8315 + default:
8316 + CONSTRUCTEX();
8317 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8318 + EXCEPTION->message = (void *)"";
8319 + EXCEPTION->decisionNum = 4;
8320 + EXCEPTION->state = 0;
8321 +
8322 +
8323 + goto ruleYEAREx;
8324 + }
8325 +
8326 + switch (alt4)
8327 + {
8328 + case 1:
8329 + // RSP.g:113:8: 'year'
8330 + {
8331 + MATCHS(lit_16);
8332 + if (HASEXCEPTION())
8333 + {
8334 + goto ruleYEAREx;
8335 + }
8336 +
8337 +
8338 +
8339 + }
8340 + break;
8341 + case 2:
8342 + // RSP.g:113:17: 'years'
8343 + {
8344 + MATCHS(lit_17);
8345 + if (HASEXCEPTION())
8346 + {
8347 + goto ruleYEAREx;
8348 + }
8349 +
8350 +
8351 +
8352 + }
8353 + break;
8354 +
8355 + }
8356 + }
8357 + LEXSTATE->type = _type;
8358 +
8359 + // This is where rules clean up and exit
8360 + //
8361 + goto ruleYEAREx; /* Prevent compiler warnings */
8362 + ruleYEAREx: ;
8363 +
8364 +}
8365 +// $ANTLR end YEAR
8366 +
8367 +// Comes from: 114:7: ( 'today' )
8368 +/** \brief Lexer rule generated by ANTLR3
8369 + *
8370 + * $ANTLR start TODAY
8371 + *
8372 + * Looks to match the characters the constitute the token TODAY
8373 + * from the attached input stream.
8374 + *
8375 + *
8376 + * \remark
8377 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8378 + */
8379 +static ANTLR3_INLINE
8380 +void mTODAY(pRSPLexer ctx)
8381 +{
8382 + ANTLR3_UINT32 _type;
8383 +
8384 + _type = TODAY;
8385 +
8386 +
8387 + // RSP.g:114:7: ( 'today' )
8388 + // RSP.g:114:9: 'today'
8389 + {
8390 + MATCHS(lit_18);
8391 + if (HASEXCEPTION())
8392 + {
8393 + goto ruleTODAYEx;
8394 + }
8395 +
8396 +
8397 +
8398 + }
8399 +
8400 + LEXSTATE->type = _type;
8401 +
8402 + // This is where rules clean up and exit
8403 + //
8404 + goto ruleTODAYEx; /* Prevent compiler warnings */
8405 + ruleTODAYEx: ;
8406 +
8407 +}
8408 +// $ANTLR end TODAY
8409 +
8410 +// Comes from: 116:9: ( ( '\\r' )? '\\n' )
8411 +/** \brief Lexer rule generated by ANTLR3
8412 + *
8413 + * $ANTLR start NEWLINE
8414 + *
8415 + * Looks to match the characters the constitute the token NEWLINE
8416 + * from the attached input stream.
8417 + *
8418 + *
8419 + * \remark
8420 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8421 + */
8422 +static ANTLR3_INLINE
8423 +void mNEWLINE(pRSPLexer ctx)
8424 +{
8425 + ANTLR3_UINT32 _type;
8426 +
8427 + _type = NEWLINE;
8428 +
8429 +
8430 + // RSP.g:116:9: ( ( '\\r' )? '\\n' )
8431 + // RSP.g:116:11: ( '\\r' )? '\\n'
8432 + {
8433 +
8434 + // RSP.g:116:11: ( '\\r' )?
8435 + {
8436 + int alt5=2;
8437 + switch ( LA(1) )
8438 + {
8439 + case '\r':
8440 + {
8441 + alt5=1;
8442 + }
8443 + break;
8444 + }
8445 +
8446 + switch (alt5)
8447 + {
8448 + case 1:
8449 + // RSP.g:116:11: '\\r'
8450 + {
8451 + MATCHC('\r');
8452 + if (HASEXCEPTION())
8453 + {
8454 + goto ruleNEWLINEEx;
8455 + }
8456 +
8457 +
8458 + }
8459 + break;
8460 +
8461 + }
8462 + }
8463 + MATCHC('\n');
8464 + if (HASEXCEPTION())
8465 + {
8466 + goto ruleNEWLINEEx;
8467 + }
8468 +
8469 +
8470 + }
8471 +
8472 + LEXSTATE->type = _type;
8473 +
8474 + // This is where rules clean up and exit
8475 + //
8476 + goto ruleNEWLINEEx; /* Prevent compiler warnings */
8477 + ruleNEWLINEEx: ;
8478 +
8479 +}
8480 +// $ANTLR end NEWLINE
8481 +
8482 +// Comes from: 118:4: ( ( ' ' | '\\t' ) )
8483 +/** \brief Lexer rule generated by ANTLR3
8484 + *
8485 + * $ANTLR start WS
8486 + *
8487 + * Looks to match the characters the constitute the token WS
8488 + * from the attached input stream.
8489 + *
8490 + *
8491 + * \remark
8492 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8493 + */
8494 +static ANTLR3_INLINE
8495 +void mWS(pRSPLexer ctx)
8496 +{
8497 + ANTLR3_UINT32 _type;
8498 +
8499 + _type = WS;
8500 +
8501 +
8502 + // RSP.g:118:4: ( ( ' ' | '\\t' ) )
8503 + // RSP.g:118:6: ( ' ' | '\\t' )
8504 + {
8505 + if ( LA(1) == '\t' || LA(1) == ' ' )
8506 + {
8507 + CONSUME();
8508 +
8509 + }
8510 + else
8511 + {
8512 + CONSTRUCTEX();
8513 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
8514 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
8515 +
8516 + LRECOVER(); goto ruleWSEx;
8517 + }
8518 +
8519 + {
8520 + LEXSTATE->channel = HIDDEN;
8521 + }
8522 +
8523 + }
8524 +
8525 + LEXSTATE->type = _type;
8526 +
8527 + // This is where rules clean up and exit
8528 + //
8529 + goto ruleWSEx; /* Prevent compiler warnings */
8530 + ruleWSEx: ;
8531 +
8532 +}
8533 +// $ANTLR end WS
8534 +
8535 +// Comes from: 120:7: ( 'a' .. 'z' ( 'a' .. 'z' | '_' )* 'a' .. 'z' )
8536 +/** \brief Lexer rule generated by ANTLR3
8537 + *
8538 + * $ANTLR start FIELD
8539 + *
8540 + * Looks to match the characters the constitute the token FIELD
8541 + * from the attached input stream.
8542 + *
8543 + *
8544 + * \remark
8545 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8546 + */
8547 +static ANTLR3_INLINE
8548 +void mFIELD(pRSPLexer ctx)
8549 +{
8550 + ANTLR3_UINT32 _type;
8551 +
8552 + _type = FIELD;
8553 +
8554 +
8555 + // RSP.g:120:7: ( 'a' .. 'z' ( 'a' .. 'z' | '_' )* 'a' .. 'z' )
8556 + // RSP.g:120:9: 'a' .. 'z' ( 'a' .. 'z' | '_' )* 'a' .. 'z'
8557 + {
8558 + MATCHRANGE('a', 'z');
8559 + if (HASEXCEPTION())
8560 + {
8561 + goto ruleFIELDEx;
8562 + }
8563 +
8564 +
8565 + // RSP.g:120:18: ( 'a' .. 'z' | '_' )*
8566 +
8567 + for (;;)
8568 + {
8569 + int alt6=2;
8570 + switch ( LA(1) )
8571 + {
8572 + case 'a':
8573 + case 'b':
8574 + case 'c':
8575 + case 'd':
8576 + case 'e':
8577 + case 'f':
8578 + case 'g':
8579 + case 'h':
8580 + case 'i':
8581 + case 'j':
8582 + case 'k':
8583 + case 'l':
8584 + case 'm':
8585 + case 'n':
8586 + case 'o':
8587 + case 'p':
8588 + case 'q':
8589 + case 'r':
8590 + case 's':
8591 + case 't':
8592 + case 'u':
8593 + case 'v':
8594 + case 'w':
8595 + case 'x':
8596 + case 'y':
8597 + case 'z':
8598 + {
8599 + switch ( LA(2) )
8600 + {
8601 + case '_':
8602 + case 'a':
8603 + case 'b':
8604 + case 'c':
8605 + case 'd':
8606 + case 'e':
8607 + case 'f':
8608 + case 'g':
8609 + case 'h':
8610 + case 'i':
8611 + case 'j':
8612 + case 'k':
8613 + case 'l':
8614 + case 'm':
8615 + case 'n':
8616 + case 'o':
8617 + case 'p':
8618 + case 'q':
8619 + case 'r':
8620 + case 's':
8621 + case 't':
8622 + case 'u':
8623 + case 'v':
8624 + case 'w':
8625 + case 'x':
8626 + case 'y':
8627 + case 'z':
8628 + {
8629 + alt6=1;
8630 + }
8631 + break;
8632 +
8633 + }
8634 +
8635 + }
8636 + break;
8637 + case '_':
8638 + {
8639 + alt6=1;
8640 + }
8641 + break;
8642 +
8643 + }
8644 +
8645 + switch (alt6)
8646 + {
8647 + case 1:
8648 + // RSP.g:
8649 + {
8650 + if ( LA(1) == '_' || ((LA(1) >= 'a') && (LA(1) <= 'z')) )
8651 + {
8652 + CONSUME();
8653 +
8654 + }
8655 + else
8656 + {
8657 + CONSTRUCTEX();
8658 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
8659 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
8660 +
8661 + LRECOVER(); goto ruleFIELDEx;
8662 + }
8663 +
8664 +
8665 + }
8666 + break;
8667 +
8668 + default:
8669 + goto loop6; /* break out of the loop */
8670 + break;
8671 + }
8672 + }
8673 + loop6: ; /* Jump out to here if this rule does not match */
8674 +
8675 + MATCHRANGE('a', 'z');
8676 + if (HASEXCEPTION())
8677 + {
8678 + goto ruleFIELDEx;
8679 + }
8680 +
8681 +
8682 + }
8683 +
8684 + LEXSTATE->type = _type;
8685 +
8686 + // This is where rules clean up and exit
8687 + //
8688 + goto ruleFIELDEx; /* Prevent compiler warnings */
8689 + ruleFIELDEx: ;
8690 +
8691 +}
8692 +// $ANTLR end FIELD
8693 +
8694 +// Comes from: 122:5: ( DIGIT19 ( DIGIT09 )* )
8695 +/** \brief Lexer rule generated by ANTLR3
8696 + *
8697 + * $ANTLR start INT
8698 + *
8699 + * Looks to match the characters the constitute the token INT
8700 + * from the attached input stream.
8701 + *
8702 + *
8703 + * \remark
8704 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8705 + */
8706 +static ANTLR3_INLINE
8707 +void mINT(pRSPLexer ctx)
8708 +{
8709 + ANTLR3_UINT32 _type;
8710 +
8711 + _type = INT;
8712 +
8713 +
8714 + // RSP.g:122:5: ( DIGIT19 ( DIGIT09 )* )
8715 + // RSP.g:122:7: DIGIT19 ( DIGIT09 )*
8716 + {
8717 + /* 122:7: DIGIT19 ( DIGIT09 )* */
8718 + mDIGIT19(ctx );
8719 + if (HASEXCEPTION())
8720 + {
8721 + goto ruleINTEx;
8722 + }
8723 +
8724 +
8725 + // RSP.g:122:15: ( DIGIT09 )*
8726 +
8727 + for (;;)
8728 + {
8729 + int alt7=2;
8730 + switch ( LA(1) )
8731 + {
8732 + case '0':
8733 + case '1':
8734 + case '2':
8735 + case '3':
8736 + case '4':
8737 + case '5':
8738 + case '6':
8739 + case '7':
8740 + case '8':
8741 + case '9':
8742 + {
8743 + alt7=1;
8744 + }
8745 + break;
8746 +
8747 + }
8748 +
8749 + switch (alt7)
8750 + {
8751 + case 1:
8752 + // RSP.g:122:15: DIGIT09
8753 + {
8754 + /* 122:15: DIGIT09 */
8755 + mDIGIT09(ctx );
8756 + if (HASEXCEPTION())
8757 + {
8758 + goto ruleINTEx;
8759 + }
8760 +
8761 +
8762 + }
8763 + break;
8764 +
8765 + default:
8766 + goto loop7; /* break out of the loop */
8767 + break;
8768 + }
8769 + }
8770 + loop7: ; /* Jump out to here if this rule does not match */
8771 +
8772 +
8773 + }
8774 +
8775 + LEXSTATE->type = _type;
8776 +
8777 + // This is where rules clean up and exit
8778 + //
8779 + goto ruleINTEx; /* Prevent compiler warnings */
8780 + ruleINTEx: ;
8781 +
8782 +}
8783 +// $ANTLR end INT
8784 +
8785 +// Comes from: 125:6: ( DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) )
8786 +/** \brief Lexer rule generated by ANTLR3
8787 + *
8788 + * $ANTLR start DATE
8789 + *
8790 + * Looks to match the characters the constitute the token DATE
8791 + * from the attached input stream.
8792 + *
8793 + *
8794 + * \remark
8795 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
8796 + */
8797 +static ANTLR3_INLINE
8798 +void mDATE(pRSPLexer ctx)
8799 +{
8800 + ANTLR3_UINT32 _type;
8801 +
8802 + _type = DATE;
8803 +
8804 +
8805 + // RSP.g:125:6: ( DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) )
8806 + // RSP.g:125:8: DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' )
8807 + {
8808 + /* 125:8: DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) */
8809 + mDIGIT19(ctx );
8810 + if (HASEXCEPTION())
8811 + {
8812 + goto ruleDATEEx;
8813 + }
8814 +
8815 + /* 125:8: DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) */
8816 + mDIGIT09(ctx );
8817 + if (HASEXCEPTION())
8818 + {
8819 + goto ruleDATEEx;
8820 + }
8821 +
8822 + /* 125:8: DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) */
8823 + mDIGIT09(ctx );
8824 + if (HASEXCEPTION())
8825 + {
8826 + goto ruleDATEEx;
8827 + }
8828 +
8829 + /* 125:8: DIGIT19 DIGIT09 DIGIT09 DIGIT09 '-' ( '0' DIGIT19 | '1' '0' .. '2' ) '-' ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' ) */
8830 + mDIGIT09(ctx );
8831 + if (HASEXCEPTION())
8832 + {
8833 + goto ruleDATEEx;
8834 + }
8835 +
8836 + MATCHC('-');
8837 + if (HASEXCEPTION())
8838 + {
8839 + goto ruleDATEEx;
8840 + }
8841 +
8842 +
8843 + // RSP.g:125:44: ( '0' DIGIT19 | '1' '0' .. '2' )
8844 + {
8845 + int alt8=2;
8846 + switch ( LA(1) )
8847 + {
8848 + case '0':
8849 + {
8850 + alt8=1;
8851 + }
8852 + break;
8853 + case '1':
8854 + {
8855 + alt8=2;
8856 + }
8857 + break;
8858 +
8859 + default:
8860 + CONSTRUCTEX();
8861 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8862 + EXCEPTION->message = (void *)"";
8863 + EXCEPTION->decisionNum = 8;
8864 + EXCEPTION->state = 0;
8865 +
8866 +
8867 + goto ruleDATEEx;
8868 + }
8869 +
8870 + switch (alt8)
8871 + {
8872 + case 1:
8873 + // RSP.g:125:45: '0' DIGIT19
8874 + {
8875 + MATCHC('0');
8876 + if (HASEXCEPTION())
8877 + {
8878 + goto ruleDATEEx;
8879 + }
8880 +
8881 + /* 125:45: '0' DIGIT19 */
8882 + mDIGIT19(ctx );
8883 + if (HASEXCEPTION())
8884 + {
8885 + goto ruleDATEEx;
8886 + }
8887 +
8888 +
8889 + }
8890 + break;
8891 + case 2:
8892 + // RSP.g:125:59: '1' '0' .. '2'
8893 + {
8894 + MATCHC('1');
8895 + if (HASEXCEPTION())
8896 + {
8897 + goto ruleDATEEx;
8898 + }
8899 +
8900 + MATCHRANGE('0', '2');
8901 + if (HASEXCEPTION())
8902 + {
8903 + goto ruleDATEEx;
8904 + }
8905 +
8906 +
8907 + }
8908 + break;
8909 +
8910 + }
8911 + }
8912 + MATCHC('-');
8913 + if (HASEXCEPTION())
8914 + {
8915 + goto ruleDATEEx;
8916 + }
8917 +
8918 +
8919 + // RSP.g:125:77: ( '0' DIGIT19 | '1' .. '2' DIGIT09 | '3' '0' .. '1' )
8920 + {
8921 + int alt9=3;
8922 + switch ( LA(1) )
8923 + {
8924 + case '0':
8925 + {
8926 + alt9=1;
8927 + }
8928 + break;
8929 + case '1':
8930 + case '2':
8931 + {
8932 + alt9=2;
8933 + }
8934 + break;
8935 + case '3':
8936 + {
8937 + alt9=3;
8938 + }
8939 + break;
8940 +
8941 + default:
8942 + CONSTRUCTEX();
8943 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
8944 + EXCEPTION->message = (void *)"";
8945 + EXCEPTION->decisionNum = 9;
8946 + EXCEPTION->state = 0;
8947 +
8948 +
8949 + goto ruleDATEEx;
8950 + }
8951 +
8952 + switch (alt9)
8953 + {
8954 + case 1:
8955 + // RSP.g:125:78: '0' DIGIT19
8956 + {
8957 + MATCHC('0');
8958 + if (HASEXCEPTION())
8959 + {
8960 + goto ruleDATEEx;
8961 + }
8962 +
8963 + /* 125:78: '0' DIGIT19 */
8964 + mDIGIT19(ctx );
8965 + if (HASEXCEPTION())
8966 + {
8967 + goto ruleDATEEx;
8968 + }
8969 +
8970 +
8971 + }
8972 + break;
8973 + case 2:
8974 + // RSP.g:125:92: '1' .. '2' DIGIT09
8975 + {
8976 + MATCHRANGE('1', '2');
8977 + if (HASEXCEPTION())
8978 + {
8979 + goto ruleDATEEx;
8980 + }
8981 +
8982 + /* 125:92: '1' .. '2' DIGIT09 */
8983 + mDIGIT09(ctx );
8984 + if (HASEXCEPTION())
8985 + {
8986 + goto ruleDATEEx;
8987 + }
8988 +
8989 +
8990 + }
8991 + break;
8992 + case 3:
8993 + // RSP.g:125:111: '3' '0' .. '1'
8994 + {
8995 + MATCHC('3');
8996 + if (HASEXCEPTION())
8997 + {
8998 + goto ruleDATEEx;
8999 + }
9000 +
9001 + MATCHRANGE('0', '1');
9002 + if (HASEXCEPTION())
9003 + {
9004 + goto ruleDATEEx;
9005 + }
9006 +
9007 +
9008 + }
9009 + break;
9010 +
9011 + }
9012 + }
9013 +
9014 + }
9015 +
9016 + LEXSTATE->type = _type;
9017 +
9018 + // This is where rules clean up and exit
9019 + //
9020 + goto ruleDATEEx; /* Prevent compiler warnings */
9021 + ruleDATEEx: ;
9022 +
9023 +}
9024 +// $ANTLR end DATE
9025 +
9026 +// Comes from: 133:2: ( QUOTE (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+ QUOTE )
9027 +/** \brief Lexer rule generated by ANTLR3
9028 + *
9029 + * $ANTLR start STR
9030 + *
9031 + * Looks to match the characters the constitute the token STR
9032 + * from the attached input stream.
9033 + *
9034 + *
9035 + * \remark
9036 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
9037 + */
9038 +static ANTLR3_INLINE
9039 +void mSTR(pRSPLexer ctx)
9040 +{
9041 + ANTLR3_UINT32 _type;
9042 + pANTLR3_COMMON_TOKEN esc;
9043 + ANTLR3_UINT32 reg;
9044 +
9045 +
9046 + esc = NULL;
9047 +
9048 + _type = STR;
9049 +
9050 + pANTLR3_STRING unesc = GETTEXT()->factory->newRaw(GETTEXT()->factory);
9051 +
9052 + // RSP.g:133:2: ( QUOTE (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+ QUOTE )
9053 + // RSP.g:133:4: QUOTE (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+ QUOTE
9054 + {
9055 + /* 133:4: QUOTE (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+ QUOTE */
9056 + mQUOTE(ctx );
9057 + if (HASEXCEPTION())
9058 + {
9059 + goto ruleSTREx;
9060 + }
9061 +
9062 + // RSP.g:133:10: (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+
9063 + {
9064 + int cnt10=0;
9065 +
9066 + for (;;)
9067 + {
9068 + int alt10=3;
9069 + {
9070 + /* dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState)
9071 + */
9072 + int LA10_0 = LA(1);
9073 + if ( (((LA10_0 >= 0x0000) && (LA10_0 <= '!')) || ((LA10_0 >= '#') && (LA10_0 <= '[')) || ((LA10_0 >= ']') && (LA10_0 <= 0xFFFF))) )
9074 + {
9075 + alt10=1;
9076 + }
9077 + else if ( (LA10_0 == '\\') )
9078 + {
9079 + alt10=2;
9080 + }
9081 +
9082 + }
9083 + switch (alt10)
9084 + {
9085 + case 1:
9086 + // RSP.g:133:12: reg=~ ( '\\\\' | '\"' )
9087 + {
9088 + reg= LA(1);
9089 + if ( ((LA(1) >= 0x0000) && (LA(1) <= '!')) || ((LA(1) >= '#') && (LA(1) <= '[')) || ((LA(1) >= ']') && (LA(1) <= 0xFFFF)) )
9090 + {
9091 + CONSUME();
9092 +
9093 + }
9094 + else
9095 + {
9096 + CONSTRUCTEX();
9097 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
9098 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
9099 +
9100 + LRECOVER(); goto ruleSTREx;
9101 + }
9102 +
9103 + {
9104 + unesc->addc(unesc, reg);
9105 + }
9106 +
9107 + }
9108 + break;
9109 + case 2:
9110 + // RSP.g:134:6: esc= ESCAPED
9111 + {
9112 + /* 134:6: esc= ESCAPED */
9113 + {
9114 + ANTLR3_MARKER escStart381 = GETCHARINDEX();
9115 + mESCAPED(ctx );
9116 + if (HASEXCEPTION())
9117 + {
9118 + goto ruleSTREx;
9119 + }
9120 +
9121 + esc = LEXSTATE->tokFactory->newToken(LEXSTATE->tokFactory);
9122 + esc->setType(esc, ANTLR3_TOKEN_INVALID);
9123 + esc->setStartIndex(esc, escStart381);
9124 + esc->setStopIndex(esc, GETCHARINDEX()-1);
9125 + esc->input = INPUT;
9126 + }
9127 + {
9128 + unesc->appendS(unesc, GETTEXT());
9129 + }
9130 +
9131 + }
9132 + break;
9133 +
9134 + default:
9135 +
9136 + if ( cnt10 >= 1 )
9137 + {
9138 + goto loop10;
9139 + }
9140 + /* mismatchedSetEx()
9141 + */
9142 + CONSTRUCTEX();
9143 + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;
9144 + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;
9145 +
9146 +
9147 + goto ruleSTREx;
9148 + }
9149 + cnt10++;
9150 + }
9151 + loop10: ; /* Jump to here if this rule does not match */
9152 + }
9153 + /* 133:4: QUOTE (reg=~ ( '\\\\' | '\"' ) | esc= ESCAPED )+ QUOTE */
9154 + mQUOTE(ctx );
9155 + if (HASEXCEPTION())
9156 + {
9157 + goto ruleSTREx;
9158 + }
9159 +
9160 + {
9161 + SETTEXT(unesc);
9162 + }
9163 +
9164 + }
9165 +
9166 + LEXSTATE->type = _type;
9167 +
9168 + // This is where rules clean up and exit
9169 + //
9170 + goto ruleSTREx; /* Prevent compiler warnings */
9171 + ruleSTREx: ;
9172 +
9173 + esc = NULL;
9174 +
9175 +}
9176 +// $ANTLR end STR
9177 +
9178 +// Comes from: 138:9: ( '\\\\' ( '\\\\' | '\"' ) )
9179 +/** \brief Lexer rule generated by ANTLR3
9180 + *
9181 + * $ANTLR start ESCAPED
9182 + *
9183 + * Looks to match the characters the constitute the token ESCAPED
9184 + * from the attached input stream.
9185 + *
9186 + *
9187 + * \remark
9188 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
9189 + */
9190 +static ANTLR3_INLINE
9191 +void mESCAPED(pRSPLexer ctx)
9192 +{
9193 + ANTLR3_UINT32 _type;
9194 +
9195 +
9196 + // RSP.g:138:9: ( '\\\\' ( '\\\\' | '\"' ) )
9197 + // RSP.g:138:11: '\\\\' ( '\\\\' | '\"' )
9198 + {
9199 + MATCHC('\\');
9200 + if (HASEXCEPTION())
9201 + {
9202 + goto ruleESCAPEDEx;
9203 + }
9204 +
9205 +
9206 + // RSP.g:139:3: ( '\\\\' | '\"' )
9207 + {
9208 + int alt11=2;
9209 + switch ( LA(1) )
9210 + {
9211 + case '\\':
9212 + {
9213 + alt11=1;
9214 + }
9215 + break;
9216 + case '"':
9217 + {
9218 + alt11=2;
9219 + }
9220 + break;
9221 +
9222 + default:
9223 + CONSTRUCTEX();
9224 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
9225 + EXCEPTION->message = (void *)"";
9226 + EXCEPTION->decisionNum = 11;
9227 + EXCEPTION->state = 0;
9228 +
9229 +
9230 + goto ruleESCAPEDEx;
9231 + }
9232 +
9233 + switch (alt11)
9234 + {
9235 + case 1:
9236 + // RSP.g:139:5: '\\\\'
9237 + {
9238 + MATCHC('\\');
9239 + if (HASEXCEPTION())
9240 + {
9241 + goto ruleESCAPEDEx;
9242 + }
9243 +
9244 + {
9245 + SETTEXT(GETTEXT()->factory->newStr8(GETTEXT()->factory, (pANTLR3_UINT8)"\\"));
9246 + }
9247 +
9248 + }
9249 + break;
9250 + case 2:
9251 + // RSP.g:140:5: '\"'
9252 + {
9253 + MATCHC('"');
9254 + if (HASEXCEPTION())
9255 + {
9256 + goto ruleESCAPEDEx;
9257 + }
9258 +
9259 + {
9260 + SETTEXT(GETTEXT()->factory->newStr8(GETTEXT()->factory, (pANTLR3_UINT8)"\""));
9261 + }
9262 +
9263 + }
9264 + break;
9265 +
9266 + }
9267 + }
9268 +
9269 + }
9270 +
9271 +
9272 +
9273 + // This is where rules clean up and exit
9274 + //
9275 + goto ruleESCAPEDEx; /* Prevent compiler warnings */
9276 + ruleESCAPEDEx: ;
9277 +
9278 +}
9279 +// $ANTLR end ESCAPED
9280 +
9281 +// Comes from: 145:9: ( '0' .. '9' )
9282 +/** \brief Lexer rule generated by ANTLR3
9283 + *
9284 + * $ANTLR start DIGIT09
9285 + *
9286 + * Looks to match the characters the constitute the token DIGIT09
9287 + * from the attached input stream.
9288 + *
9289 + *
9290 + * \remark
9291 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
9292 + */
9293 +static ANTLR3_INLINE
9294 +void mDIGIT09(pRSPLexer ctx)
9295 +{
9296 + ANTLR3_UINT32 _type;
9297 +
9298 +
9299 + // RSP.g:145:9: ( '0' .. '9' )
9300 + // RSP.g:145:11: '0' .. '9'
9301 + {
9302 + MATCHRANGE('0', '9');
9303 + if (HASEXCEPTION())
9304 + {
9305 + goto ruleDIGIT09Ex;
9306 + }
9307 +
9308 +
9309 + }
9310 +
9311 +
9312 +
9313 + // This is where rules clean up and exit
9314 + //
9315 + goto ruleDIGIT09Ex; /* Prevent compiler warnings */
9316 + ruleDIGIT09Ex: ;
9317 +
9318 +}
9319 +// $ANTLR end DIGIT09
9320 +
9321 +// Comes from: 148:9: ( '1' .. '9' )
9322 +/** \brief Lexer rule generated by ANTLR3
9323 + *
9324 + * $ANTLR start DIGIT19
9325 + *
9326 + * Looks to match the characters the constitute the token DIGIT19
9327 + * from the attached input stream.
9328 + *
9329 + *
9330 + * \remark
9331 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
9332 + */
9333 +static ANTLR3_INLINE
9334 +void mDIGIT19(pRSPLexer ctx)
9335 +{
9336 + ANTLR3_UINT32 _type;
9337 +
9338 +
9339 + // RSP.g:148:9: ( '1' .. '9' )
9340 + // RSP.g:148:11: '1' .. '9'
9341 + {
9342 + MATCHRANGE('1', '9');
9343 + if (HASEXCEPTION())
9344 + {
9345 + goto ruleDIGIT19Ex;
9346 + }
9347 +
9348 +
9349 + }
9350 +
9351 +
9352 +
9353 + // This is where rules clean up and exit
9354 + //
9355 + goto ruleDIGIT19Ex; /* Prevent compiler warnings */
9356 + ruleDIGIT19Ex: ;
9357 +
9358 +}
9359 +// $ANTLR end DIGIT19
9360 +
9361 +/** This is the entry point in to the lexer from an object that
9362 + * wants to generate the next token, such as a pCOMMON_TOKEN_STREAM
9363 + */
9364 +static void
9365 +mTokens(pRSPLexer ctx)
9366 +{
9367 + {
9368 + // RSP.g:1:8: ( QUOTE | LPAR | RPAR | AND | OR | NOT | EQUAL | INCLUDES | STARTSW | ENDSW | GREATER | LESS | GTE | LTE | BEFORE | AFTER | DAY | WEEK | MONTH | YEAR | TODAY | NEWLINE | WS | FIELD | INT | DATE | STR )
9369 +
9370 + ANTLR3_UINT32 alt12;
9371 +
9372 + alt12=27;
9373 +
9374 + switch ( LA(1) )
9375 + {
9376 + case '"':
9377 + {
9378 +
9379 + {
9380 + int LA12_1 = LA(2);
9381 + if ( (((LA12_1 >= 0x0000) && (LA12_1 <= '!')) || ((LA12_1 >= '#') && (LA12_1 <= 0xFFFF))) )
9382 + {
9383 + alt12=27;
9384 + }
9385 + else
9386 + {
9387 + alt12=1; }
9388 + }
9389 + }
9390 + break;
9391 + case '(':
9392 + {
9393 + alt12=2;
9394 + }
9395 + break;
9396 + case ')':
9397 + {
9398 + alt12=3;
9399 + }
9400 + break;
9401 + case 'a':
9402 + {
9403 + switch ( LA(2) )
9404 + {
9405 + case 'n':
9406 + {
9407 + switch ( LA(3) )
9408 + {
9409 + case 'd':
9410 + {
9411 + switch ( LA(4) )
9412 + {
9413 + case '_':
9414 + case 'a':
9415 + case 'b':
9416 + case 'c':
9417 + case 'd':
9418 + case 'e':
9419 + case 'f':
9420 + case 'g':
9421 + case 'h':
9422 + case 'i':
9423 + case 'j':
9424 + case 'k':
9425 + case 'l':
9426 + case 'm':
9427 + case 'n':
9428 + case 'o':
9429 + case 'p':
9430 + case 'q':
9431 + case 'r':
9432 + case 's':
9433 + case 't':
9434 + case 'u':
9435 + case 'v':
9436 + case 'w':
9437 + case 'x':
9438 + case 'y':
9439 + case 'z':
9440 + {
9441 + alt12=24;
9442 + }
9443 + break;
9444 +
9445 + default:
9446 + alt12=4;}
9447 +
9448 + }
9449 + break;
9450 +
9451 + default:
9452 + alt12=24;}
9453 +
9454 + }
9455 + break;
9456 + case 'f':
9457 + {
9458 + switch ( LA(3) )
9459 + {
9460 + case 't':
9461 + {
9462 + switch ( LA(4) )
9463 + {
9464 + case 'e':
9465 + {
9466 + switch ( LA(5) )
9467 + {
9468 + case 'r':
9469 + {
9470 + switch ( LA(6) )
9471 + {
9472 + case '_':
9473 + case 'a':
9474 + case 'b':
9475 + case 'c':
9476 + case 'd':
9477 + case 'e':
9478 + case 'f':
9479 + case 'g':
9480 + case 'h':
9481 + case 'i':
9482 + case 'j':
9483 + case 'k':
9484 + case 'l':
9485 + case 'm':
9486 + case 'n':
9487 + case 'o':
9488 + case 'p':
9489 + case 'q':
9490 + case 'r':
9491 + case 's':
9492 + case 't':
9493 + case 'u':
9494 + case 'v':
9495 + case 'w':
9496 + case 'x':
9497 + case 'y':
9498 + case 'z':
9499 + {
9500 + alt12=24;
9501 + }
9502 + break;
9503 +
9504 + default:
9505 + alt12=16;}
9506 +
9507 + }
9508 + break;
9509 +
9510 + default:
9511 + alt12=24;}
9512 +
9513 + }
9514 + break;
9515 +
9516 + default:
9517 + alt12=24;}
9518 +
9519 + }
9520 + break;
9521 +
9522 + default:
9523 + alt12=24;}
9524 +
9525 + }
9526 + break;
9527 + case '_':
9528 + case 'a':
9529 + case 'b':
9530 + case 'c':
9531 + case 'd':
9532 + case 'e':
9533 + case 'g':
9534 + case 'h':
9535 + case 'i':
9536 + case 'j':
9537 + case 'k':
9538 + case 'l':
9539 + case 'm':
9540 + case 'o':
9541 + case 'p':
9542 + case 'q':
9543 + case 'r':
9544 + case 's':
9545 + case 't':
9546 + case 'u':
9547 + case 'v':
9548 + case 'w':
9549 + case 'x':
9550 + case 'y':
9551 + case 'z':
9552 + {
9553 + alt12=24;
9554 + }
9555 + break;
9556 +
9557 + default:
9558 + CONSTRUCTEX();
9559 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
9560 + EXCEPTION->message = (void *)"";
9561 + EXCEPTION->decisionNum = 12;
9562 + EXCEPTION->state = 4;
9563 +
9564 +
9565 + goto ruleTokensEx;
9566 + }
9567 +
9568 + }
9569 + break;
9570 + case 'o':
9571 + {
9572 + switch ( LA(2) )
9573 + {
9574 + case 'r':
9575 + {
9576 + switch ( LA(3) )
9577 + {
9578 + case '_':
9579 + case 'a':
9580 + case 'b':
9581 + case 'c':
9582 + case 'd':
9583 + case 'e':
9584 + case 'f':
9585 + case 'g':
9586 + case 'h':
9587 + case 'i':
9588 + case 'j':
9589 + case 'k':
9590 + case 'l':
9591 + case 'm':
9592 + case 'n':
9593 + case 'o':
9594 + case 'p':
9595 + case 'q':
9596 + case 'r':
9597 + case 's':
9598 + case 't':
9599 + case 'u':
9600 + case 'v':
9601 + case 'w':
9602 + case 'x':
9603 + case 'y':
9604 + case 'z':
9605 + {
9606 + alt12=24;
9607 + }
9608 + break;
9609 +
9610 + default:
9611 + alt12=5;}
9612 +
9613 + }
9614 + break;
9615 + case '_':
9616 + case 'a':
9617 + case 'b':
9618 + case 'c':
9619 + case 'd':
9620 + case 'e':
9621 + case 'f':
9622 + case 'g':
9623 + case 'h':
9624 + case 'i':
9625 + case 'j':
9626 + case 'k':
9627 + case 'l':
9628 + case 'm':
9629 + case 'n':
9630 + case 'o':
9631 + case 'p':
9632 + case 'q':
9633 + case 's':
9634 + case 't':
9635 + case 'u':
9636 + case 'v':
9637 + case 'w':
9638 + case 'x':
9639 + case 'y':
9640 + case 'z':
9641 + {
9642 + alt12=24;
9643 + }
9644 + break;
9645 +
9646 + default:
9647 + CONSTRUCTEX();
9648 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
9649 + EXCEPTION->message = (void *)"";
9650 + EXCEPTION->decisionNum = 12;
9651 + EXCEPTION->state = 5;
9652 +
9653 +
9654 + goto ruleTokensEx;
9655 + }
9656 +
9657 + }
9658 + break;
9659 + case '!':
9660 + {
9661 + alt12=6;
9662 + }
9663 + break;
9664 + case '=':
9665 + {
9666 + alt12=7;
9667 + }
9668 + break;
9669 + case 'i':
9670 + {
9671 + switch ( LA(2) )
9672 + {
9673 + case 'n':
9674 + {
9675 + switch ( LA(3) )
9676 + {
9677 + case 'c':
9678 + {
9679 + switch ( LA(4) )
9680 + {
9681 + case 'l':
9682 + {
9683 + switch ( LA(5) )
9684 + {
9685 + case 'u':
9686 + {
9687 + switch ( LA(6) )
9688 + {
9689 + case 'd':
9690 + {
9691 + switch ( LA(7) )
9692 + {
9693 + case 'e':
9694 + {
9695 + switch ( LA(8) )
9696 + {
9697 + case 's':
9698 + {
9699 + switch ( LA(9) )
9700 + {
9701 + case '_':
9702 + case 'a':
9703 + case 'b':
9704 + case 'c':
9705 + case 'd':
9706 + case 'e':
9707 + case 'f':
9708 + case 'g':
9709 + case 'h':
9710 + case 'i':
9711 + case 'j':
9712 + case 'k':
9713 + case 'l':
9714 + case 'm':
9715 + case 'n':
9716 + case 'o':
9717 + case 'p':
9718 + case 'q':
9719 + case 'r':
9720 + case 's':
9721 + case 't':
9722 + case 'u':
9723 + case 'v':
9724 + case 'w':
9725 + case 'x':
9726 + case 'y':
9727 + case 'z':
9728 + {
9729 + alt12=24;
9730 + }
9731 + break;
9732 +
9733 + default:
9734 + alt12=8;}
9735 +
9736 + }
9737 + break;
9738 +
9739 + default:
9740 + alt12=24;}
9741 +
9742 + }
9743 + break;
9744 +
9745 + default:
9746 + alt12=24;}
9747 +
9748 + }
9749 + break;
9750 +
9751 + default:
9752 + alt12=24;}
9753 +
9754 + }
9755 + break;
9756 +
9757 + default:
9758 + alt12=24;}
9759 +
9760 + }
9761 + break;
9762 +
9763 + default:
9764 + alt12=24;}
9765 +
9766 + }
9767 + break;
9768 +
9769 + default:
9770 + alt12=24;}
9771 +
9772 + }
9773 + break;
9774 + case '_':
9775 + case 'a':
9776 + case 'b':
9777 + case 'c':
9778 + case 'd':
9779 + case 'e':
9780 + case 'f':
9781 + case 'g':
9782 + case 'h':
9783 + case 'i':
9784 + case 'j':
9785 + case 'k':
9786 + case 'l':
9787 + case 'm':
9788 + case 'o':
9789 + case 'p':
9790 + case 'q':
9791 + case 'r':
9792 + case 's':
9793 + case 't':
9794 + case 'u':
9795 + case 'v':
9796 + case 'w':
9797 + case 'x':
9798 + case 'y':
9799 + case 'z':
9800 + {
9801 + alt12=24;
9802 + }
9803 + break;
9804 +
9805 + default:
9806 + CONSTRUCTEX();
9807 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
9808 + EXCEPTION->message = (void *)"";
9809 + EXCEPTION->decisionNum = 12;
9810 + EXCEPTION->state = 8;
9811 +
9812 +
9813 + goto ruleTokensEx;
9814 + }
9815 +
9816 + }
9817 + break;
9818 + case 's':
9819 + {
9820 + switch ( LA(2) )
9821 + {
9822 + case 't':
9823 + {
9824 + switch ( LA(3) )
9825 + {
9826 + case 'a':
9827 + {
9828 + switch ( LA(4) )
9829 + {
9830 + case 'r':
9831 + {
9832 + switch ( LA(5) )
9833 + {
9834 + case 't':
9835 + {
9836 + switch ( LA(6) )
9837 + {
9838 + case 's':
9839 + {
9840 + switch ( LA(7) )
9841 + {
9842 + case 'w':
9843 + {
9844 + switch ( LA(8) )
9845 + {
9846 + case 'i':
9847 + {
9848 + switch ( LA(9) )
9849 + {
9850 + case 't':
9851 + {
9852 + switch ( LA(10) )
9853 + {
9854 + case 'h':
9855 + {
9856 + switch ( LA(11) )
9857 + {
9858 + case '_':
9859 + case 'a':
9860 + case 'b':
9861 + case 'c':
9862 + case 'd':
9863 + case 'e':
9864 + case 'f':
9865 + case 'g':
9866 + case 'h':
9867 + case 'i':
9868 + case 'j':
9869 + case 'k':
9870 + case 'l':
9871 + case 'm':
9872 + case 'n':
9873 + case 'o':
9874 + case 'p':
9875 + case 'q':
9876 + case 'r':
9877 + case 's':
9878 + case 't':
9879 + case 'u':
9880 + case 'v':
9881 + case 'w':
9882 + case 'x':
9883 + case 'y':
9884 + case 'z':
9885 + {
9886 + alt12=24;
9887 + }
9888 + break;
9889 +
9890 + default:
9891 + alt12=9;}
9892 +
9893 + }
9894 + break;
9895 +
9896 + default:
9897 + alt12=24;}
9898 +
9899 + }
9900 + break;
9901 +
9902 + default:
9903 + alt12=24;}
9904 +
9905 + }
9906 + break;
9907 +
9908 + default:
9909 + alt12=24;}
9910 +
9911 + }
9912 + break;
9913 +
9914 + default:
9915 + alt12=24;}
9916 +
9917 + }
9918 + break;
9919 +
9920 + default:
9921 + alt12=24;}
9922 +
9923 + }
9924 + break;
9925 +
9926 + default:
9927 + alt12=24;}
9928 +
9929 + }
9930 + break;
9931 +
9932 + default:
9933 + alt12=24;}
9934 +
9935 + }
9936 + break;
9937 +
9938 + default:
9939 + alt12=24;}
9940 +
9941 + }
9942 + break;
9943 + case '_':
9944 + case 'a':
9945 + case 'b':
9946 + case 'c':
9947 + case 'd':
9948 + case 'e':
9949 + case 'f':
9950 + case 'g':
9951 + case 'h':
9952 + case 'i':
9953 + case 'j':
9954 + case 'k':
9955 + case 'l':
9956 + case 'm':
9957 + case 'n':
9958 + case 'o':
9959 + case 'p':
9960 + case 'q':
9961 + case 'r':
9962 + case 's':
9963 + case 'u':
9964 + case 'v':
9965 + case 'w':
9966 + case 'x':
9967 + case 'y':
9968 + case 'z':
9969 + {
9970 + alt12=24;
9971 + }
9972 + break;
9973 +
9974 + default:
9975 + CONSTRUCTEX();
9976 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
9977 + EXCEPTION->message = (void *)"";
9978 + EXCEPTION->decisionNum = 12;
9979 + EXCEPTION->state = 9;
9980 +
9981 +
9982 + goto ruleTokensEx;
9983 + }
9984 +
9985 + }
9986 + break;
9987 + case 'e':
9988 + {
9989 + switch ( LA(2) )
9990 + {
9991 + case 'n':
9992 + {
9993 + switch ( LA(3) )
9994 + {
9995 + case 'd':
9996 + {
9997 + switch ( LA(4) )
9998 + {
9999 + case 's':
10000 + {
10001 + switch ( LA(5) )
10002 + {
10003 + case 'w':
10004 + {
10005 + switch ( LA(6) )
10006 + {
10007 + case 'i':
10008 + {
10009 + switch ( LA(7) )
10010 + {
10011 + case 't':
10012 + {
10013 + switch ( LA(8) )
10014 + {
10015 + case 'h':
10016 + {
10017 + switch ( LA(9) )
10018 + {
10019 + case '_':
10020 + case 'a':
10021 + case 'b':
10022 + case 'c':
10023 + case 'd':
10024 + case 'e':
10025 + case 'f':
10026 + case 'g':
10027 + case 'h':
10028 + case 'i':
10029 + case 'j':
10030 + case 'k':
10031 + case 'l':
10032 + case 'm':
10033 + case 'n':
10034 + case 'o':
10035 + case 'p':
10036 + case 'q':
10037 + case 'r':
10038 + case 's':
10039 + case 't':
10040 + case 'u':
10041 + case 'v':
10042 + case 'w':
10043 + case 'x':
10044 + case 'y':
10045 + case 'z':
10046 + {
10047 + alt12=24;
10048 + }
10049 + break;
10050 +
10051 + default:
10052 + alt12=10;}
10053 +
10054 + }
10055 + break;
10056 +
10057 + default:
10058 + alt12=24;}
10059 +
10060 + }
10061 + break;
10062 +
10063 + default:
10064 + alt12=24;}
10065 +
10066 + }
10067 + break;
10068 +
10069 + default:
10070 + alt12=24;}
10071 +
10072 + }
10073 + break;
10074 +
10075 + default:
10076 + alt12=24;}
10077 +
10078 + }
10079 + break;
10080 +
10081 + default:
10082 + alt12=24;}
10083 +
10084 + }
10085 + break;
10086 +
10087 + default:
10088 + alt12=24;}
10089 +
10090 + }
10091 + break;
10092 + case '_':
10093 + case 'a':
10094 + case 'b':
10095 + case 'c':
10096 + case 'd':
10097 + case 'e':
10098 + case 'f':
10099 + case 'g':
10100 + case 'h':
10101 + case 'i':
10102 + case 'j':
10103 + case 'k':
10104 + case 'l':
10105 + case 'm':
10106 + case 'o':
10107 + case 'p':
10108 + case 'q':
10109 + case 'r':
10110 + case 's':
10111 + case 't':
10112 + case 'u':
10113 + case 'v':
10114 + case 'w':
10115 + case 'x':
10116 + case 'y':
10117 + case 'z':
10118 + {
10119 + alt12=24;
10120 + }
10121 + break;
10122 +
10123 + default:
10124 + CONSTRUCTEX();
10125 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10126 + EXCEPTION->message = (void *)"";
10127 + EXCEPTION->decisionNum = 12;
10128 + EXCEPTION->state = 10;
10129 +
10130 +
10131 + goto ruleTokensEx;
10132 + }
10133 +
10134 + }
10135 + break;
10136 + case '>':
10137 + {
10138 + switch ( LA(2) )
10139 + {
10140 + case '=':
10141 + {
10142 + alt12=13;
10143 + }
10144 + break;
10145 +
10146 + default:
10147 + alt12=11;}
10148 +
10149 + }
10150 + break;
10151 + case '<':
10152 + {
10153 + switch ( LA(2) )
10154 + {
10155 + case '=':
10156 + {
10157 + alt12=14;
10158 + }
10159 + break;
10160 +
10161 + default:
10162 + alt12=12;}
10163 +
10164 + }
10165 + break;
10166 + case 'b':
10167 + {
10168 + switch ( LA(2) )
10169 + {
10170 + case 'e':
10171 + {
10172 + switch ( LA(3) )
10173 + {
10174 + case 'f':
10175 + {
10176 + switch ( LA(4) )
10177 + {
10178 + case 'o':
10179 + {
10180 + switch ( LA(5) )
10181 + {
10182 + case 'r':
10183 + {
10184 + switch ( LA(6) )
10185 + {
10186 + case 'e':
10187 + {
10188 + switch ( LA(7) )
10189 + {
10190 + case '_':
10191 + case 'a':
10192 + case 'b':
10193 + case 'c':
10194 + case 'd':
10195 + case 'e':
10196 + case 'f':
10197 + case 'g':
10198 + case 'h':
10199 + case 'i':
10200 + case 'j':
10201 + case 'k':
10202 + case 'l':
10203 + case 'm':
10204 + case 'n':
10205 + case 'o':
10206 + case 'p':
10207 + case 'q':
10208 + case 'r':
10209 + case 's':
10210 + case 't':
10211 + case 'u':
10212 + case 'v':
10213 + case 'w':
10214 + case 'x':
10215 + case 'y':
10216 + case 'z':
10217 + {
10218 + alt12=24;
10219 + }
10220 + break;
10221 +
10222 + default:
10223 + alt12=15;}
10224 +
10225 + }
10226 + break;
10227 +
10228 + default:
10229 + alt12=24;}
10230 +
10231 + }
10232 + break;
10233 +
10234 + default:
10235 + alt12=24;}
10236 +
10237 + }
10238 + break;
10239 +
10240 + default:
10241 + alt12=24;}
10242 +
10243 + }
10244 + break;
10245 +
10246 + default:
10247 + alt12=24;}
10248 +
10249 + }
10250 + break;
10251 + case '_':
10252 + case 'a':
10253 + case 'b':
10254 + case 'c':
10255 + case 'd':
10256 + case 'f':
10257 + case 'g':
10258 + case 'h':
10259 + case 'i':
10260 + case 'j':
10261 + case 'k':
10262 + case 'l':
10263 + case 'm':
10264 + case 'n':
10265 + case 'o':
10266 + case 'p':
10267 + case 'q':
10268 + case 'r':
10269 + case 's':
10270 + case 't':
10271 + case 'u':
10272 + case 'v':
10273 + case 'w':
10274 + case 'x':
10275 + case 'y':
10276 + case 'z':
10277 + {
10278 + alt12=24;
10279 + }
10280 + break;
10281 +
10282 + default:
10283 + CONSTRUCTEX();
10284 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10285 + EXCEPTION->message = (void *)"";
10286 + EXCEPTION->decisionNum = 12;
10287 + EXCEPTION->state = 13;
10288 +
10289 +
10290 + goto ruleTokensEx;
10291 + }
10292 +
10293 + }
10294 + break;
10295 + case 'd':
10296 + {
10297 + switch ( LA(2) )
10298 + {
10299 + case 'a':
10300 + {
10301 + switch ( LA(3) )
10302 + {
10303 + case 'y':
10304 + {
10305 + switch ( LA(4) )
10306 + {
10307 + case 's':
10308 + {
10309 + switch ( LA(5) )
10310 + {
10311 + case '_':
10312 + case 'a':
10313 + case 'b':
10314 + case 'c':
10315 + case 'd':
10316 + case 'e':
10317 + case 'f':
10318 + case 'g':
10319 + case 'h':
10320 + case 'i':
10321 + case 'j':
10322 + case 'k':
10323 + case 'l':
10324 + case 'm':
10325 + case 'n':
10326 + case 'o':
10327 + case 'p':
10328 + case 'q':
10329 + case 'r':
10330 + case 's':
10331 + case 't':
10332 + case 'u':
10333 + case 'v':
10334 + case 'w':
10335 + case 'x':
10336 + case 'y':
10337 + case 'z':
10338 + {
10339 + alt12=24;
10340 + }
10341 + break;
10342 +
10343 + default:
10344 + alt12=17;}
10345 +
10346 + }
10347 + break;
10348 + case '_':
10349 + case 'a':
10350 + case 'b':
10351 + case 'c':
10352 + case 'd':
10353 + case 'e':
10354 + case 'f':
10355 + case 'g':
10356 + case 'h':
10357 + case 'i':
10358 + case 'j':
10359 + case 'k':
10360 + case 'l':
10361 + case 'm':
10362 + case 'n':
10363 + case 'o':
10364 + case 'p':
10365 + case 'q':
10366 + case 'r':
10367 + case 't':
10368 + case 'u':
10369 + case 'v':
10370 + case 'w':
10371 + case 'x':
10372 + case 'y':
10373 + case 'z':
10374 + {
10375 + alt12=24;
10376 + }
10377 + break;
10378 +
10379 + default:
10380 + alt12=17;}
10381 +
10382 + }
10383 + break;
10384 +
10385 + default:
10386 + alt12=24;}
10387 +
10388 + }
10389 + break;
10390 + case '_':
10391 + case 'b':
10392 + case 'c':
10393 + case 'd':
10394 + case 'e':
10395 + case 'f':
10396 + case 'g':
10397 + case 'h':
10398 + case 'i':
10399 + case 'j':
10400 + case 'k':
10401 + case 'l':
10402 + case 'm':
10403 + case 'n':
10404 + case 'o':
10405 + case 'p':
10406 + case 'q':
10407 + case 'r':
10408 + case 's':
10409 + case 't':
10410 + case 'u':
10411 + case 'v':
10412 + case 'w':
10413 + case 'x':
10414 + case 'y':
10415 + case 'z':
10416 + {
10417 + alt12=24;
10418 + }
10419 + break;
10420 +
10421 + default:
10422 + CONSTRUCTEX();
10423 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10424 + EXCEPTION->message = (void *)"";
10425 + EXCEPTION->decisionNum = 12;
10426 + EXCEPTION->state = 14;
10427 +
10428 +
10429 + goto ruleTokensEx;
10430 + }
10431 +
10432 + }
10433 + break;
10434 + case 'w':
10435 + {
10436 + switch ( LA(2) )
10437 + {
10438 + case 'e':
10439 + {
10440 + switch ( LA(3) )
10441 + {
10442 + case 'e':
10443 + {
10444 + switch ( LA(4) )
10445 + {
10446 + case 'k':
10447 + {
10448 + switch ( LA(5) )
10449 + {
10450 + case 's':
10451 + {
10452 + switch ( LA(6) )
10453 + {
10454 + case '_':
10455 + case 'a':
10456 + case 'b':
10457 + case 'c':
10458 + case 'd':
10459 + case 'e':
10460 + case 'f':
10461 + case 'g':
10462 + case 'h':
10463 + case 'i':
10464 + case 'j':
10465 + case 'k':
10466 + case 'l':
10467 + case 'm':
10468 + case 'n':
10469 + case 'o':
10470 + case 'p':
10471 + case 'q':
10472 + case 'r':
10473 + case 's':
10474 + case 't':
10475 + case 'u':
10476 + case 'v':
10477 + case 'w':
10478 + case 'x':
10479 + case 'y':
10480 + case 'z':
10481 + {
10482 + alt12=24;
10483 + }
10484 + break;
10485 +
10486 + default:
10487 + alt12=18;}
10488 +
10489 + }
10490 + break;
10491 + case '_':
10492 + case 'a':
10493 + case 'b':
10494 + case 'c':
10495 + case 'd':
10496 + case 'e':
10497 + case 'f':
10498 + case 'g':
10499 + case 'h':
10500 + case 'i':
10501 + case 'j':
10502 + case 'k':
10503 + case 'l':
10504 + case 'm':
10505 + case 'n':
10506 + case 'o':
10507 + case 'p':
10508 + case 'q':
10509 + case 'r':
10510 + case 't':
10511 + case 'u':
10512 + case 'v':
10513 + case 'w':
10514 + case 'x':
10515 + case 'y':
10516 + case 'z':
10517 + {
10518 + alt12=24;
10519 + }
10520 + break;
10521 +
10522 + default:
10523 + alt12=18;}
10524 +
10525 + }
10526 + break;
10527 +
10528 + default:
10529 + alt12=24;}
10530 +
10531 + }
10532 + break;
10533 +
10534 + default:
10535 + alt12=24;}
10536 +
10537 + }
10538 + break;
10539 + case '_':
10540 + case 'a':
10541 + case 'b':
10542 + case 'c':
10543 + case 'd':
10544 + case 'f':
10545 + case 'g':
10546 + case 'h':
10547 + case 'i':
10548 + case 'j':
10549 + case 'k':
10550 + case 'l':
10551 + case 'm':
10552 + case 'n':
10553 + case 'o':
10554 + case 'p':
10555 + case 'q':
10556 + case 'r':
10557 + case 's':
10558 + case 't':
10559 + case 'u':
10560 + case 'v':
10561 + case 'w':
10562 + case 'x':
10563 + case 'y':
10564 + case 'z':
10565 + {
10566 + alt12=24;
10567 + }
10568 + break;
10569 +
10570 + default:
10571 + CONSTRUCTEX();
10572 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10573 + EXCEPTION->message = (void *)"";
10574 + EXCEPTION->decisionNum = 12;
10575 + EXCEPTION->state = 15;
10576 +
10577 +
10578 + goto ruleTokensEx;
10579 + }
10580 +
10581 + }
10582 + break;
10583 + case 'm':
10584 + {
10585 + switch ( LA(2) )
10586 + {
10587 + case 'o':
10588 + {
10589 + switch ( LA(3) )
10590 + {
10591 + case 'n':
10592 + {
10593 + switch ( LA(4) )
10594 + {
10595 + case 't':
10596 + {
10597 + switch ( LA(5) )
10598 + {
10599 + case 'h':
10600 + {
10601 + switch ( LA(6) )
10602 + {
10603 + case 's':
10604 + {
10605 + switch ( LA(7) )
10606 + {
10607 + case '_':
10608 + case 'a':
10609 + case 'b':
10610 + case 'c':
10611 + case 'd':
10612 + case 'e':
10613 + case 'f':
10614 + case 'g':
10615 + case 'h':
10616 + case 'i':
10617 + case 'j':
10618 + case 'k':
10619 + case 'l':
10620 + case 'm':
10621 + case 'n':
10622 + case 'o':
10623 + case 'p':
10624 + case 'q':
10625 + case 'r':
10626 + case 's':
10627 + case 't':
10628 + case 'u':
10629 + case 'v':
10630 + case 'w':
10631 + case 'x':
10632 + case 'y':
10633 + case 'z':
10634 + {
10635 + alt12=24;
10636 + }
10637 + break;
10638 +
10639 + default:
10640 + alt12=19;}
10641 +
10642 + }
10643 + break;
10644 + case '_':
10645 + case 'a':
10646 + case 'b':
10647 + case 'c':
10648 + case 'd':
10649 + case 'e':
10650 + case 'f':
10651 + case 'g':
10652 + case 'h':
10653 + case 'i':
10654 + case 'j':
10655 + case 'k':
10656 + case 'l':
10657 + case 'm':
10658 + case 'n':
10659 + case 'o':
10660 + case 'p':
10661 + case 'q':
10662 + case 'r':
10663 + case 't':
10664 + case 'u':
10665 + case 'v':
10666 + case 'w':
10667 + case 'x':
10668 + case 'y':
10669 + case 'z':
10670 + {
10671 + alt12=24;
10672 + }
10673 + break;
10674 +
10675 + default:
10676 + alt12=19;}
10677 +
10678 + }
10679 + break;
10680 +
10681 + default:
10682 + alt12=24;}
10683 +
10684 + }
10685 + break;
10686 +
10687 + default:
10688 + alt12=24;}
10689 +
10690 + }
10691 + break;
10692 +
10693 + default:
10694 + alt12=24;}
10695 +
10696 + }
10697 + break;
10698 + case '_':
10699 + case 'a':
10700 + case 'b':
10701 + case 'c':
10702 + case 'd':
10703 + case 'e':
10704 + case 'f':
10705 + case 'g':
10706 + case 'h':
10707 + case 'i':
10708 + case 'j':
10709 + case 'k':
10710 + case 'l':
10711 + case 'm':
10712 + case 'n':
10713 + case 'p':
10714 + case 'q':
10715 + case 'r':
10716 + case 's':
10717 + case 't':
10718 + case 'u':
10719 + case 'v':
10720 + case 'w':
10721 + case 'x':
10722 + case 'y':
10723 + case 'z':
10724 + {
10725 + alt12=24;
10726 + }
10727 + break;
10728 +
10729 + default:
10730 + CONSTRUCTEX();
10731 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10732 + EXCEPTION->message = (void *)"";
10733 + EXCEPTION->decisionNum = 12;
10734 + EXCEPTION->state = 16;
10735 +
10736 +
10737 + goto ruleTokensEx;
10738 + }
10739 +
10740 + }
10741 + break;
10742 + case 'y':
10743 + {
10744 + switch ( LA(2) )
10745 + {
10746 + case 'e':
10747 + {
10748 + switch ( LA(3) )
10749 + {
10750 + case 'a':
10751 + {
10752 + switch ( LA(4) )
10753 + {
10754 + case 'r':
10755 + {
10756 + switch ( LA(5) )
10757 + {
10758 + case 's':
10759 + {
10760 + switch ( LA(6) )
10761 + {
10762 + case '_':
10763 + case 'a':
10764 + case 'b':
10765 + case 'c':
10766 + case 'd':
10767 + case 'e':
10768 + case 'f':
10769 + case 'g':
10770 + case 'h':
10771 + case 'i':
10772 + case 'j':
10773 + case 'k':
10774 + case 'l':
10775 + case 'm':
10776 + case 'n':
10777 + case 'o':
10778 + case 'p':
10779 + case 'q':
10780 + case 'r':
10781 + case 's':
10782 + case 't':
10783 + case 'u':
10784 + case 'v':
10785 + case 'w':
10786 + case 'x':
10787 + case 'y':
10788 + case 'z':
10789 + {
10790 + alt12=24;
10791 + }
10792 + break;
10793 +
10794 + default:
10795 + alt12=20;}
10796 +
10797 + }
10798 + break;
10799 + case '_':
10800 + case 'a':
10801 + case 'b':
10802 + case 'c':
10803 + case 'd':
10804 + case 'e':
10805 + case 'f':
10806 + case 'g':
10807 + case 'h':
10808 + case 'i':
10809 + case 'j':
10810 + case 'k':
10811 + case 'l':
10812 + case 'm':
10813 + case 'n':
10814 + case 'o':
10815 + case 'p':
10816 + case 'q':
10817 + case 'r':
10818 + case 't':
10819 + case 'u':
10820 + case 'v':
10821 + case 'w':
10822 + case 'x':
10823 + case 'y':
10824 + case 'z':
10825 + {
10826 + alt12=24;
10827 + }
10828 + break;
10829 +
10830 + default:
10831 + alt12=20;}
10832 +
10833 + }
10834 + break;
10835 +
10836 + default:
10837 + alt12=24;}
10838 +
10839 + }
10840 + break;
10841 +
10842 + default:
10843 + alt12=24;}
10844 +
10845 + }
10846 + break;
10847 + case '_':
10848 + case 'a':
10849 + case 'b':
10850 + case 'c':
10851 + case 'd':
10852 + case 'f':
10853 + case 'g':
10854 + case 'h':
10855 + case 'i':
10856 + case 'j':
10857 + case 'k':
10858 + case 'l':
10859 + case 'm':
10860 + case 'n':
10861 + case 'o':
10862 + case 'p':
10863 + case 'q':
10864 + case 'r':
10865 + case 's':
10866 + case 't':
10867 + case 'u':
10868 + case 'v':
10869 + case 'w':
10870 + case 'x':
10871 + case 'y':
10872 + case 'z':
10873 + {
10874 + alt12=24;
10875 + }
10876 + break;
10877 +
10878 + default:
10879 + CONSTRUCTEX();
10880 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
10881 + EXCEPTION->message = (void *)"";
10882 + EXCEPTION->decisionNum = 12;
10883 + EXCEPTION->state = 17;
10884 +
10885 +
10886 + goto ruleTokensEx;
10887 + }
10888 +
10889 + }
10890 + break;
10891 + case 't':
10892 + {
10893 + switch ( LA(2) )
10894 + {
10895 + case 'o':
10896 + {
10897 + switch ( LA(3) )
10898 + {
10899 + case 'd':
10900 + {
10901 + switch ( LA(4) )
10902 + {
10903 + case 'a':
10904 + {
10905 + switch ( LA(5) )
10906 + {
10907 + case 'y':
10908 + {
10909 + switch ( LA(6) )
10910 + {
10911 + case '_':
10912 + case 'a':
10913 + case 'b':
10914 + case 'c':
10915 + case 'd':
10916 + case 'e':
10917 + case 'f':
10918 + case 'g':
10919 + case 'h':
10920 + case 'i':
10921 + case 'j':
10922 + case 'k':
10923 + case 'l':
10924 + case 'm':
10925 + case 'n':
10926 + case 'o':
10927 + case 'p':
10928 + case 'q':
10929 + case 'r':
10930 + case 's':
10931 + case 't':
10932 + case 'u':
10933 + case 'v':
10934 + case 'w':
10935 + case 'x':
10936 + case 'y':
10937 + case 'z':
10938 + {
10939 + alt12=24;
10940 + }
10941 + break;
10942 +
10943 + default:
10944 + alt12=21;}
10945 +
10946 + }
10947 + break;
10948 +
10949 + default:
10950 + alt12=24;}
10951 +
10952 + }
10953 + break;
10954 +
10955 + default:
10956 + alt12=24;}
10957 +
10958 + }
10959 + break;
10960 +
10961 + default:
10962 + alt12=24;}
10963 +
10964 + }
10965 + break;
10966 + case '_':
10967 + case 'a':
10968 + case 'b':
10969 + case 'c':
10970 + case 'd':
10971 + case 'e':
10972 + case 'f':
10973 + case 'g':
10974 + case 'h':
10975 + case 'i':
10976 + case 'j':
10977 + case 'k':
10978 + case 'l':
10979 + case 'm':
10980 + case 'n':
10981 + case 'p':
10982 + case 'q':
10983 + case 'r':
10984 + case 's':
10985 + case 't':
10986 + case 'u':
10987 + case 'v':
10988 + case 'w':
10989 + case 'x':
10990 + case 'y':
10991 + case 'z':
10992 + {
10993 + alt12=24;
10994 + }
10995 + break;
10996 +
10997 + default:
10998 + CONSTRUCTEX();
10999 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
11000 + EXCEPTION->message = (void *)"";
11001 + EXCEPTION->decisionNum = 12;
11002 + EXCEPTION->state = 18;
11003 +
11004 +
11005 + goto ruleTokensEx;
11006 + }
11007 +
11008 + }
11009 + break;
11010 + case '\n':
11011 + case '\r':
11012 + {
11013 + alt12=22;
11014 + }
11015 + break;
11016 + case '\t':
11017 + case ' ':
11018 + {
11019 + alt12=23;
11020 + }
11021 + break;
11022 + case 'c':
11023 + case 'f':
11024 + case 'g':
11025 + case 'h':
11026 + case 'j':
11027 + case 'k':
11028 + case 'l':
11029 + case 'n':
11030 + case 'p':
11031 + case 'q':
11032 + case 'r':
11033 + case 'u':
11034 + case 'v':
11035 + case 'x':
11036 + case 'z':
11037 + {
11038 + alt12=24;
11039 + }
11040 + break;
11041 + case '1':
11042 + case '2':
11043 + case '3':
11044 + case '4':
11045 + case '5':
11046 + case '6':
11047 + case '7':
11048 + case '8':
11049 + case '9':
11050 + {
11051 + switch ( LA(2) )
11052 + {
11053 + case '0':
11054 + case '1':
11055 + case '2':
11056 + case '3':
11057 + case '4':
11058 + case '5':
11059 + case '6':
11060 + case '7':
11061 + case '8':
11062 + case '9':
11063 + {
11064 + switch ( LA(3) )
11065 + {
11066 + case '0':
11067 + case '1':
11068 + case '2':
11069 + case '3':
11070 + case '4':
11071 + case '5':
11072 + case '6':
11073 + case '7':
11074 + case '8':
11075 + case '9':
11076 + {
11077 + switch ( LA(4) )
11078 + {
11079 + case '0':
11080 + case '1':
11081 + case '2':
11082 + case '3':
11083 + case '4':
11084 + case '5':
11085 + case '6':
11086 + case '7':
11087 + case '8':
11088 + case '9':
11089 + {
11090 + switch ( LA(5) )
11091 + {
11092 + case '-':
11093 + {
11094 + alt12=26;
11095 + }
11096 + break;
11097 +
11098 + default:
11099 + alt12=25;}
11100 +
11101 + }
11102 + break;
11103 +
11104 + default:
11105 + alt12=25;}
11106 +
11107 + }
11108 + break;
11109 +
11110 + default:
11111 + alt12=25;}
11112 +
11113 + }
11114 + break;
11115 +
11116 + default:
11117 + alt12=25;}
11118 +
11119 + }
11120 + break;
11121 +
11122 + default:
11123 + CONSTRUCTEX();
11124 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
11125 + EXCEPTION->message = (void *)"";
11126 + EXCEPTION->decisionNum = 12;
11127 + EXCEPTION->state = 0;
11128 +
11129 +
11130 + goto ruleTokensEx;
11131 + }
11132 +
11133 + switch (alt12)
11134 + {
11135 + case 1:
11136 + // RSP.g:1:10: QUOTE
11137 + {
11138 + /* 1:10: QUOTE */
11139 + mQUOTE(ctx );
11140 + if (HASEXCEPTION())
11141 + {
11142 + goto ruleTokensEx;
11143 + }
11144 +
11145 +
11146 + }
11147 + break;
11148 + case 2:
11149 + // RSP.g:1:16: LPAR
11150 + {
11151 + /* 1:16: LPAR */
11152 + mLPAR(ctx );
11153 + if (HASEXCEPTION())
11154 + {
11155 + goto ruleTokensEx;
11156 + }
11157 +
11158 +
11159 + }
11160 + break;
11161 + case 3:
11162 + // RSP.g:1:21: RPAR
11163 + {
11164 + /* 1:21: RPAR */
11165 + mRPAR(ctx );
11166 + if (HASEXCEPTION())
11167 + {
11168 + goto ruleTokensEx;
11169 + }
11170 +
11171 +
11172 + }
11173 + break;
11174 + case 4:
11175 + // RSP.g:1:26: AND
11176 + {
11177 + /* 1:26: AND */
11178 + mAND(ctx );
11179 + if (HASEXCEPTION())
11180 + {
11181 + goto ruleTokensEx;
11182 + }
11183 +
11184 +
11185 + }
11186 + break;
11187 + case 5:
11188 + // RSP.g:1:30: OR
11189 + {
11190 + /* 1:30: OR */
11191 + mOR(ctx );
11192 + if (HASEXCEPTION())
11193 + {
11194 + goto ruleTokensEx;
11195 + }
11196 +
11197 +
11198 + }
11199 + break;
11200 + case 6:
11201 + // RSP.g:1:33: NOT
11202 + {
11203 + /* 1:33: NOT */
11204 + mNOT(ctx );
11205 + if (HASEXCEPTION())
11206 + {
11207 + goto ruleTokensEx;
11208 + }
11209 +
11210 +
11211 + }
11212 + break;
11213 + case 7:
11214 + // RSP.g:1:37: EQUAL
11215 + {
11216 + /* 1:37: EQUAL */
11217 + mEQUAL(ctx );
11218 + if (HASEXCEPTION())
11219 + {
11220 + goto ruleTokensEx;
11221 + }
11222 +
11223 +
11224 + }
11225 + break;
11226 + case 8:
11227 + // RSP.g:1:43: INCLUDES
11228 + {
11229 + /* 1:43: INCLUDES */
11230 + mINCLUDES(ctx );
11231 + if (HASEXCEPTION())
11232 + {
11233 + goto ruleTokensEx;
11234 + }
11235 +
11236 +
11237 + }
11238 + break;
11239 + case 9:
11240 + // RSP.g:1:52: STARTSW
11241 + {
11242 + /* 1:52: STARTSW */
11243 + mSTARTSW(ctx );
11244 + if (HASEXCEPTION())
11245 + {
11246 + goto ruleTokensEx;
11247 + }
11248 +
11249 +
11250 + }
11251 + break;
11252 + case 10:
11253 + // RSP.g:1:60: ENDSW
11254 + {
11255 + /* 1:60: ENDSW */
11256 + mENDSW(ctx );
11257 + if (HASEXCEPTION())
11258 + {
11259 + goto ruleTokensEx;
11260 + }
11261 +
11262 +
11263 + }
11264 + break;
11265 + case 11:
11266 + // RSP.g:1:66: GREATER
11267 + {
11268 + /* 1:66: GREATER */
11269 + mGREATER(ctx );
11270 + if (HASEXCEPTION())
11271 + {
11272 + goto ruleTokensEx;
11273 + }
11274 +
11275 +
11276 + }
11277 + break;
11278 + case 12:
11279 + // RSP.g:1:74: LESS
11280 + {
11281 + /* 1:74: LESS */
11282 + mLESS(ctx );
11283 + if (HASEXCEPTION())
11284 + {
11285 + goto ruleTokensEx;
11286 + }
11287 +
11288 +
11289 + }
11290 + break;
11291 + case 13:
11292 + // RSP.g:1:79: GTE
11293 + {
11294 + /* 1:79: GTE */
11295 + mGTE(ctx );
11296 + if (HASEXCEPTION())
11297 + {
11298 + goto ruleTokensEx;
11299 + }
11300 +
11301 +
11302 + }
11303 + break;
11304 + case 14:
11305 + // RSP.g:1:83: LTE
11306 + {
11307 + /* 1:83: LTE */
11308 + mLTE(ctx );
11309 + if (HASEXCEPTION())
11310 + {
11311 + goto ruleTokensEx;
11312 + }
11313 +
11314 +
11315 + }
11316 + break;
11317 + case 15:
11318 + // RSP.g:1:87: BEFORE
11319 + {
11320 + /* 1:87: BEFORE */
11321 + mBEFORE(ctx );
11322 + if (HASEXCEPTION())
11323 + {
11324 + goto ruleTokensEx;
11325 + }
11326 +
11327 +
11328 + }
11329 + break;
11330 + case 16:
11331 + // RSP.g:1:94: AFTER
11332 + {
11333 + /* 1:94: AFTER */
11334 + mAFTER(ctx );
11335 + if (HASEXCEPTION())
11336 + {
11337 + goto ruleTokensEx;
11338 + }
11339 +
11340 +
11341 + }
11342 + break;
11343 + case 17:
11344 + // RSP.g:1:100: DAY
11345 + {
11346 + /* 1:100: DAY */
11347 + mDAY(ctx );
11348 + if (HASEXCEPTION())
11349 + {
11350 + goto ruleTokensEx;
11351 + }
11352 +
11353 +
11354 + }
11355 + break;
11356 + case 18:
11357 + // RSP.g:1:104: WEEK
11358 + {
11359 + /* 1:104: WEEK */
11360 + mWEEK(ctx );
11361 + if (HASEXCEPTION())
11362 + {
11363 + goto ruleTokensEx;
11364 + }
11365 +
11366 +
11367 + }
11368 + break;
11369 + case 19:
11370 + // RSP.g:1:109: MONTH
11371 + {
11372 + /* 1:109: MONTH */
11373 + mMONTH(ctx );
11374 + if (HASEXCEPTION())
11375 + {
11376 + goto ruleTokensEx;
11377 + }
11378 +
11379 +
11380 + }
11381 + break;
11382 + case 20:
11383 + // RSP.g:1:115: YEAR
11384 + {
11385 + /* 1:115: YEAR */
11386 + mYEAR(ctx );
11387 + if (HASEXCEPTION())
11388 + {
11389 + goto ruleTokensEx;
11390 + }
11391 +
11392 +
11393 + }
11394 + break;
11395 + case 21:
11396 + // RSP.g:1:120: TODAY
11397 + {
11398 + /* 1:120: TODAY */
11399 + mTODAY(ctx );
11400 + if (HASEXCEPTION())
11401 + {
11402 + goto ruleTokensEx;
11403 + }
11404 +
11405 +
11406 + }
11407 + break;
11408 + case 22:
11409 + // RSP.g:1:126: NEWLINE
11410 + {
11411 + /* 1:126: NEWLINE */
11412 + mNEWLINE(ctx );
11413 + if (HASEXCEPTION())
11414 + {
11415 + goto ruleTokensEx;
11416 + }
11417 +
11418 +
11419 + }
11420 + break;
11421 + case 23:
11422 + // RSP.g:1:134: WS
11423 + {
11424 + /* 1:134: WS */
11425 + mWS(ctx );
11426 + if (HASEXCEPTION())
11427 + {
11428 + goto ruleTokensEx;
11429 + }
11430 +
11431 +
11432 + }
11433 + break;
11434 + case 24:
11435 + // RSP.g:1:137: FIELD
11436 + {
11437 + /* 1:137: FIELD */
11438 + mFIELD(ctx );
11439 + if (HASEXCEPTION())
11440 + {
11441 + goto ruleTokensEx;
11442 + }
11443 +
11444 +
11445 + }
11446 + break;
11447 + case 25:
11448 + // RSP.g:1:143: INT
11449 + {
11450 + /* 1:143: INT */
11451 + mINT(ctx );
11452 + if (HASEXCEPTION())
11453 + {
11454 + goto ruleTokensEx;
11455 + }
11456 +
11457 +
11458 + }
11459 + break;
11460 + case 26:
11461 + // RSP.g:1:147: DATE
11462 + {
11463 + /* 1:147: DATE */
11464 + mDATE(ctx );
11465 + if (HASEXCEPTION())
11466 + {
11467 + goto ruleTokensEx;
11468 + }
11469 +
11470 +
11471 + }
11472 + break;
11473 + case 27:
11474 + // RSP.g:1:152: STR
11475 + {
11476 + /* 1:152: STR */
11477 + mSTR(ctx );
11478 + if (HASEXCEPTION())
11479 + {
11480 + goto ruleTokensEx;
11481 + }
11482 +
11483 +
11484 + }
11485 + break;
11486 +
11487 + }
11488 + }
11489 +
11490 +
11491 + goto ruleTokensEx; /* Prevent compiler warnings */
11492 +ruleTokensEx: ;
11493 +}
11494 +
11495 +/* =========================================================================
11496 + * Lexer matching rules end.
11497 + * =========================================================================
11498 + */
11499 +/* End of Lexer code
11500 + * ================================================
11501 + * ================================================
11502 + */
11503 +
11504 +
11505 +/* End of code
11506 + * =============================================================================
11507 + */
11508 diff --git a/src/pregen/RSPLexer.h b/src/pregen/RSPLexer.h
11509 new file mode 100644
11510 index 0000000..27bc791
11511 --- /dev/null
11512 +++ b/src/pregen/RSPLexer.h
11513 @@ -0,0 +1,254 @@
11514 +/** \file
11515 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
11516 + *
11517 + * - From the grammar source file : RSP.g
11518 + * - On : 2016-01-01 12:23:42
11519 + * - for the lexer : RSPLexerLexer *
11520 + * Editing it, at least manually, is not wise.
11521 + *
11522 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
11523 + *
11524 + *
11525 + * The lexer RSPLexer has the callable functions (rules) shown below,
11526 + * which will invoke the code for the associated rule in the source grammar
11527 + * assuming that the input stream is pointing to a token/text stream that could begin
11528 + * this rule.
11529 + *
11530 + * For instance if you call the first (topmost) rule in a parser grammar, you will
11531 + * get the results of a full parse, but calling a rule half way through the grammar will
11532 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
11533 + * in editors and so on.
11534 + *
11535 + * The parser entry points are called indirectly (by function pointer to function) via
11536 + * a parser context typedef pRSPLexer, which is returned from a call to RSPLexerNew().
11537 + *
11538 + * As this is a generated lexer, it is unlikely you will call it 'manually'. However
11539 + * the methods are provided anyway.
11540 + * * The methods in pRSPLexer are as follows:
11541 + *
11542 + * - void pRSPLexer->QUOTE(pRSPLexer)
11543 + * - void pRSPLexer->LPAR(pRSPLexer)
11544 + * - void pRSPLexer->RPAR(pRSPLexer)
11545 + * - void pRSPLexer->AND(pRSPLexer)
11546 + * - void pRSPLexer->OR(pRSPLexer)
11547 + * - void pRSPLexer->NOT(pRSPLexer)
11548 + * - void pRSPLexer->EQUAL(pRSPLexer)
11549 + * - void pRSPLexer->INCLUDES(pRSPLexer)
11550 + * - void pRSPLexer->STARTSW(pRSPLexer)
11551 + * - void pRSPLexer->ENDSW(pRSPLexer)
11552 + * - void pRSPLexer->GREATER(pRSPLexer)
11553 + * - void pRSPLexer->LESS(pRSPLexer)
11554 + * - void pRSPLexer->GTE(pRSPLexer)
11555 + * - void pRSPLexer->LTE(pRSPLexer)
11556 + * - void pRSPLexer->BEFORE(pRSPLexer)
11557 + * - void pRSPLexer->AFTER(pRSPLexer)
11558 + * - void pRSPLexer->DAY(pRSPLexer)
11559 + * - void pRSPLexer->WEEK(pRSPLexer)
11560 + * - void pRSPLexer->MONTH(pRSPLexer)
11561 + * - void pRSPLexer->YEAR(pRSPLexer)
11562 + * - void pRSPLexer->TODAY(pRSPLexer)
11563 + * - void pRSPLexer->NEWLINE(pRSPLexer)
11564 + * - void pRSPLexer->WS(pRSPLexer)
11565 + * - void pRSPLexer->FIELD(pRSPLexer)
11566 + * - void pRSPLexer->INT(pRSPLexer)
11567 + * - void pRSPLexer->DATE(pRSPLexer)
11568 + * - void pRSPLexer->STR(pRSPLexer)
11569 + * - void pRSPLexer->ESCAPED(pRSPLexer)
11570 + * - void pRSPLexer->DIGIT09(pRSPLexer)
11571 + * - void pRSPLexer->DIGIT19(pRSPLexer)
11572 + * - void pRSPLexer->Tokens(pRSPLexer)
11573 + *
11574 + * The return type for any particular rule is of course determined by the source
11575 + * grammar file.
11576 + */
11577 +// [The "BSD licence"]
11578 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
11579 +// http://www.temporal-wave.com
11580 +// http://www.linkedin.com/in/jimidle
11581 +//
11582 +// All rights reserved.
11583 +//
11584 +// Redistribution and use in source and binary forms, with or without
11585 +// modification, are permitted provided that the following conditions
11586 +// are met:
11587 +// 1. Redistributions of source code must retain the above copyright
11588 +// notice, this list of conditions and the following disclaimer.
11589 +// 2. Redistributions in binary form must reproduce the above copyright
11590 +// notice, this list of conditions and the following disclaimer in the
11591 +// documentation and/or other materials provided with the distribution.
11592 +// 3. The name of the author may not be used to endorse or promote products
11593 +// derived from this software without specific prior written permission.
11594 +//
11595 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
11596 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
11597 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11598 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
11599 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
11600 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11601 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11602 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
11603 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
11604 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11605 +
11606 +#ifndef _RSPLexer_H
11607 +#define _RSPLexer_H
11608 +/* =============================================================================
11609 + * Standard antlr3 C runtime definitions
11610 + */
11611 +#include <antlr3.h>
11612 +
11613 +/* End of standard antlr 3 runtime definitions
11614 + * =============================================================================
11615 + */
11616 +
11617 +#ifdef __cplusplus
11618 +extern "C" {
11619 +#endif
11620 +
11621 +// Forward declare the context typedef so that we can use it before it is
11622 +// properly defined. Delegators and delegates (from import statements) are
11623 +// interdependent and their context structures contain pointers to each other
11624 +// C only allows such things to be declared if you pre-declare the typedef.
11625 +//
11626 +typedef struct RSPLexer_Ctx_struct RSPLexer, * pRSPLexer;
11627 +
11628 +
11629 +
11630 +#ifdef ANTLR3_WINDOWS
11631 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
11632 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
11633 +// initialized but unused variable - tree rewrite variables declared but not needed
11634 +// Unreferenced local variable - lexer rule declares but does not always use _type
11635 +// potentially unitialized variable used - retval always returned from a rule
11636 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
11637 +//
11638 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
11639 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
11640 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
11641 +// this is a matter of orthogonality hence I disable that one.
11642 +//
11643 +#pragma warning( disable : 4100 )
11644 +#pragma warning( disable : 4101 )
11645 +#pragma warning( disable : 4127 )
11646 +#pragma warning( disable : 4189 )
11647 +#pragma warning( disable : 4505 )
11648 +#pragma warning( disable : 4701 )
11649 +#endif
11650 +
11651 +/** Context tracking structure for RSPLexer
11652 + */
11653 +struct RSPLexer_Ctx_struct
11654 +{
11655 + /** Built in ANTLR3 context tracker contains all the generic elements
11656 + * required for context tracking.
11657 + */
11658 + pANTLR3_LEXER pLexer;
11659 +
11660 +
11661 + void (*mQUOTE) (struct RSPLexer_Ctx_struct * ctx);
11662 + void (*mLPAR) (struct RSPLexer_Ctx_struct * ctx);
11663 + void (*mRPAR) (struct RSPLexer_Ctx_struct * ctx);
11664 + void (*mAND) (struct RSPLexer_Ctx_struct * ctx);
11665 + void (*mOR) (struct RSPLexer_Ctx_struct * ctx);
11666 + void (*mNOT) (struct RSPLexer_Ctx_struct * ctx);
11667 + void (*mEQUAL) (struct RSPLexer_Ctx_struct * ctx);
11668 + void (*mINCLUDES) (struct RSPLexer_Ctx_struct * ctx);
11669 + void (*mSTARTSW) (struct RSPLexer_Ctx_struct * ctx);
11670 + void (*mENDSW) (struct RSPLexer_Ctx_struct * ctx);
11671 + void (*mGREATER) (struct RSPLexer_Ctx_struct * ctx);
11672 + void (*mLESS) (struct RSPLexer_Ctx_struct * ctx);
11673 + void (*mGTE) (struct RSPLexer_Ctx_struct * ctx);
11674 + void (*mLTE) (struct RSPLexer_Ctx_struct * ctx);
11675 + void (*mBEFORE) (struct RSPLexer_Ctx_struct * ctx);
11676 + void (*mAFTER) (struct RSPLexer_Ctx_struct * ctx);
11677 + void (*mDAY) (struct RSPLexer_Ctx_struct * ctx);
11678 + void (*mWEEK) (struct RSPLexer_Ctx_struct * ctx);
11679 + void (*mMONTH) (struct RSPLexer_Ctx_struct * ctx);
11680 + void (*mYEAR) (struct RSPLexer_Ctx_struct * ctx);
11681 + void (*mTODAY) (struct RSPLexer_Ctx_struct * ctx);
11682 + void (*mNEWLINE) (struct RSPLexer_Ctx_struct * ctx);
11683 + void (*mWS) (struct RSPLexer_Ctx_struct * ctx);
11684 + void (*mFIELD) (struct RSPLexer_Ctx_struct * ctx);
11685 + void (*mINT) (struct RSPLexer_Ctx_struct * ctx);
11686 + void (*mDATE) (struct RSPLexer_Ctx_struct * ctx);
11687 + void (*mSTR) (struct RSPLexer_Ctx_struct * ctx);
11688 + void (*mESCAPED) (struct RSPLexer_Ctx_struct * ctx);
11689 + void (*mDIGIT09) (struct RSPLexer_Ctx_struct * ctx);
11690 + void (*mDIGIT19) (struct RSPLexer_Ctx_struct * ctx);
11691 + void (*mTokens) (struct RSPLexer_Ctx_struct * ctx); const char * (*getGrammarFileName)();
11692 + void (*free) (struct RSPLexer_Ctx_struct * ctx);
11693 +
11694 +};
11695 +
11696 +// Function protoypes for the constructor functions that external translation units
11697 +// such as delegators and delegates may wish to call.
11698 +//
11699 +ANTLR3_API pRSPLexer RSPLexerNew (pANTLR3_INPUT_STREAM instream);
11700 +ANTLR3_API pRSPLexer RSPLexerNewSSD (pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
11701 +
11702 +/** Symbolic definitions of all the tokens that the lexer will work with.
11703 + * \{
11704 + *
11705 + * Antlr will define EOF, but we can't use that as it it is too common in
11706 + * in C header files and that would be confusing. There is no way to filter this out at the moment
11707 + * so we just undef it here for now. That isn't the value we get back from C recognizers
11708 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
11709 + */
11710 +#ifdef EOF
11711 +#undef EOF
11712 +#endif
11713 +#ifdef Tokens
11714 +#undef Tokens
11715 +#endif
11716 +#define STARTSW 14
11717 +#define WEEK 26
11718 +#define TODAY 24
11719 +#define YEAR 28
11720 +#define ENDSW 15
11721 +#define GTE 20
11722 +#define BEFORE 21
11723 +#define DAY 25
11724 +#define INT 16
11725 +#define NOT 11
11726 +#define AFTER 22
11727 +#define AND 6
11728 +#define EOF -1
11729 +#define LTE 19
11730 +#define MONTH 27
11731 +#define DIGIT19 31
11732 +#define INCLUDES 13
11733 +#define STR 10
11734 +#define QUOTE 29
11735 +#define GREATER 18
11736 +#define WS 30
11737 +#define LPAR 7
11738 +#define NEWLINE 4
11739 +#define EQUAL 12
11740 +#define OR 5
11741 +#define LESS 17
11742 +#define FIELD 9
11743 +#define RPAR 8
11744 +#define ESCAPED 33
11745 +#define DATE 23
11746 +#define DIGIT09 32
11747 +#ifdef EOF
11748 +#undef EOF
11749 +#define EOF ANTLR3_TOKEN_EOF
11750 +#endif
11751 +
11752 +#ifndef TOKENSOURCE
11753 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
11754 +#endif
11755 +
11756 +/* End of token definitions for RSPLexer
11757 + * =============================================================================
11758 + */
11759 +/** \} */
11760 +
11761 +#ifdef __cplusplus
11762 +}
11763 +#endif
11764 +
11765 +#endif
11766 +
11767 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
11768 diff --git a/src/pregen/RSPParser.c b/src/pregen/RSPParser.c
11769 new file mode 100644
11770 index 0000000..ba8a9d2
11771 --- /dev/null
11772 +++ b/src/pregen/RSPParser.c
11773 @@ -0,0 +1,3152 @@
11774 +/** \file
11775 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
11776 + *
11777 + * - From the grammar source file : RSP.g
11778 + * - On : 2016-01-01 12:23:42
11779 + * - for the parser : RSPParserParser *
11780 + * Editing it, at least manually, is not wise.
11781 + *
11782 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
11783 + *
11784 + *
11785 +*/
11786 +// [The "BSD licence"]
11787 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
11788 +// http://www.temporal-wave.com
11789 +// http://www.linkedin.com/in/jimidle
11790 +//
11791 +// All rights reserved.
11792 +//
11793 +// Redistribution and use in source and binary forms, with or without
11794 +// modification, are permitted provided that the following conditions
11795 +// are met:
11796 +// 1. Redistributions of source code must retain the above copyright
11797 +// notice, this list of conditions and the following disclaimer.
11798 +// 2. Redistributions in binary form must reproduce the above copyright
11799 +// notice, this list of conditions and the following disclaimer in the
11800 +// documentation and/or other materials provided with the distribution.
11801 +// 3. The name of the author may not be used to endorse or promote products
11802 +// derived from this software without specific prior written permission.
11803 +//
11804 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
11805 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
11806 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11807 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
11808 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
11809 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11810 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11811 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
11812 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
11813 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11814 +
11815 +/* -----------------------------------------
11816 + * Include the ANTLR3 generated header file.
11817 + */
11818 +#include "RSPParser.h"
11819 +/* ----------------------------------------- */
11820 +
11821 +
11822 +
11823 +
11824 +
11825 +/* MACROS that hide the C interface implementations from the
11826 + * generated code, which makes it a little more understandable to the human eye.
11827 + * I am very much against using C pre-processor macros for function calls and bits
11828 + * of code as you cannot see what is happening when single stepping in debuggers
11829 + * and so on. The exception (in my book at least) is for generated code, where you are
11830 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
11831 + * hides some indirect calls, but is always referring to the input stream. This is
11832 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
11833 + * the runtime interfaces without changing the generated code too often, without
11834 + * confusing the reader of the generated output, who may not wish to know the gory
11835 + * details of the interface inheritance.
11836 + */
11837 +
11838 +#define CTX ctx
11839 +
11840 +/* Aids in accessing scopes for grammar programmers
11841 + */
11842 +#undef SCOPE_TYPE
11843 +#undef SCOPE_STACK
11844 +#undef SCOPE_TOP
11845 +#define SCOPE_TYPE(scope) pRSPParser_##scope##_SCOPE
11846 +#define SCOPE_STACK(scope) pRSPParser_##scope##Stack
11847 +#define SCOPE_TOP(scope) ctx->pRSPParser_##scope##Top
11848 +#define SCOPE_SIZE(scope) ctx->pRSPParser_##scope##Stack_limit
11849 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
11850 +
11851 +/* Macros for accessing things in the parser
11852 + */
11853 +
11854 +#undef PARSER
11855 +#undef RECOGNIZER
11856 +#undef HAVEPARSEDRULE
11857 +#undef MEMOIZE
11858 +#undef INPUT
11859 +#undef STRSTREAM
11860 +#undef HASEXCEPTION
11861 +#undef EXCEPTION
11862 +#undef MATCHT
11863 +#undef MATCHANYT
11864 +#undef FOLLOWSTACK
11865 +#undef FOLLOWPUSH
11866 +#undef FOLLOWPOP
11867 +#undef PRECOVER
11868 +#undef PREPORTERROR
11869 +#undef LA
11870 +#undef LT
11871 +#undef CONSTRUCTEX
11872 +#undef CONSUME
11873 +#undef MARK
11874 +#undef REWIND
11875 +#undef REWINDLAST
11876 +#undef PERRORRECOVERY
11877 +#undef HASFAILED
11878 +#undef FAILEDFLAG
11879 +#undef RECOVERFROMMISMATCHEDSET
11880 +#undef RECOVERFROMMISMATCHEDELEMENT
11881 +#undef INDEX
11882 +#undef ADAPTOR
11883 +#undef SEEK
11884 +#undef RULEMEMO
11885 +#undef DBG
11886 +
11887 +#define PARSER ctx->pParser
11888 +#define RECOGNIZER PARSER->rec
11889 +#define PSRSTATE RECOGNIZER->state
11890 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
11891 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
11892 +#define INPUT PARSER->tstream
11893 +#define STRSTREAM INPUT
11894 +#define ISTREAM INPUT->istream
11895 +#define INDEX() ISTREAM->index(INPUT->istream)
11896 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
11897 +#define EXCEPTION PSRSTATE->exception
11898 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
11899 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
11900 +#define FOLLOWSTACK PSRSTATE->following
11901 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
11902 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
11903 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
11904 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
11905 +#define LA(n) INPUT->istream->_LA(ISTREAM, n)
11906 +#define LT(n) INPUT->_LT(INPUT, n)
11907 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
11908 +#define CONSUME() ISTREAM->consume(ISTREAM)
11909 +#define MARK() ISTREAM->mark(ISTREAM)
11910 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
11911 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
11912 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
11913 +#define PERRORRECOVERY PSRSTATE->errorRecovery
11914 +#define FAILEDFLAG PSRSTATE->failed
11915 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
11916 +#define BACKTRACKING PSRSTATE->backtracking
11917 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
11918 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
11919 +#define ADAPTOR ctx->adaptor
11920 +#define RULEMEMO PSRSTATE->ruleMemo
11921 +#define DBG RECOGNIZER->debugger
11922 +
11923 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
11924 +
11925 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
11926 + * then for the present you must use different names for your defines as these are hard coded
11927 + * in the code generator. It would be better not to use such names internally, and maybe
11928 + * we can change this in a forthcoming release. I deliberately do not #undef these
11929 + * here as this will at least give you a redefined error somewhere if they clash.
11930 + */
11931 +#define UP ANTLR3_TOKEN_UP
11932 +#define DOWN ANTLR3_TOKEN_DOWN
11933 +#define EOR ANTLR3_TOKEN_EOR
11934 +#define INVALID ANTLR3_TOKEN_INVALID
11935 +
11936 +
11937 +/* =============================================================================
11938 + * Functions to create and destroy scopes. First come the rule scopes, followed
11939 + * by the global declared scopes.
11940 + */
11941 +
11942 +
11943 +
11944 +/* ============================================================================= */
11945 +
11946 +/* =============================================================================
11947 + * Start of recognizer
11948 + */
11949 +
11950 +
11951 +
11952 +/** \brief Table of all token names in symbolic order, mainly used for
11953 + * error reporting.
11954 + */
11955 +pANTLR3_UINT8 RSPParserTokenNames[30+4]
11956 + = {
11957 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
11958 + (pANTLR3_UINT8) "<EOR>",
11959 + (pANTLR3_UINT8) "<DOWN>",
11960 + (pANTLR3_UINT8) "<UP>",
11961 + (pANTLR3_UINT8) "NEWLINE",
11962 + (pANTLR3_UINT8) "OR",
11963 + (pANTLR3_UINT8) "AND",
11964 + (pANTLR3_UINT8) "LPAR",
11965 + (pANTLR3_UINT8) "RPAR",
11966 + (pANTLR3_UINT8) "FIELD",
11967 + (pANTLR3_UINT8) "STR",
11968 + (pANTLR3_UINT8) "NOT",
11969 + (pANTLR3_UINT8) "EQUAL",
11970 + (pANTLR3_UINT8) "INCLUDES",
11971 + (pANTLR3_UINT8) "STARTSW",
11972 + (pANTLR3_UINT8) "ENDSW",
11973 + (pANTLR3_UINT8) "INT",
11974 + (pANTLR3_UINT8) "LESS",
11975 + (pANTLR3_UINT8) "GREATER",
11976 + (pANTLR3_UINT8) "LTE",
11977 + (pANTLR3_UINT8) "GTE",
11978 + (pANTLR3_UINT8) "BEFORE",
11979 + (pANTLR3_UINT8) "AFTER",
11980 + (pANTLR3_UINT8) "DATE",
11981 + (pANTLR3_UINT8) "TODAY",
11982 + (pANTLR3_UINT8) "DAY",
11983 + (pANTLR3_UINT8) "WEEK",
11984 + (pANTLR3_UINT8) "MONTH",
11985 + (pANTLR3_UINT8) "YEAR",
11986 + (pANTLR3_UINT8) "QUOTE",
11987 + (pANTLR3_UINT8) "WS",
11988 + (pANTLR3_UINT8) "DIGIT19",
11989 + (pANTLR3_UINT8) "DIGIT09",
11990 + (pANTLR3_UINT8) "ESCAPED"
11991 + };
11992 +
11993 +
11994 +
11995 +// Forward declare the locally static matching functions we have generated.
11996 +//
11997 +static RSPParser_query_return query (pRSPParser ctx);
11998 +static RSPParser_expr_return expr (pRSPParser ctx);
11999 +static RSPParser_aexpr_return aexpr (pRSPParser ctx);
12000 +static RSPParser_crit_return crit (pRSPParser ctx);
12001 +static RSPParser_strcrit_return strcrit (pRSPParser ctx);
12002 +static RSPParser_strop_return strop (pRSPParser ctx);
12003 +static RSPParser_intcrit_return intcrit (pRSPParser ctx);
12004 +static RSPParser_intop_return intop (pRSPParser ctx);
12005 +static RSPParser_datecrit_return datecrit (pRSPParser ctx);
12006 +static RSPParser_dateop_return dateop (pRSPParser ctx);
12007 +static RSPParser_datespec_return datespec (pRSPParser ctx);
12008 +static RSPParser_dateref_return dateref (pRSPParser ctx);
12009 +static RSPParser_dateintval_return dateintval (pRSPParser ctx);
12010 +static void RSPParserFree(pRSPParser ctx);
12011 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
12012 + * we need a function that knows how to free a return scope when the list is destroyed.
12013 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
12014 + */
12015 +static void ANTLR3_CDECL freeScope(void * scope)
12016 +{
12017 + ANTLR3_FREE(scope);
12018 +}
12019 +
12020 +/** \brief Name of the grammar file that generated this code
12021 + */
12022 +static const char fileName[] = "RSP.g";
12023 +
12024 +/** \brief Return the name of the grammar file that generated this code.
12025 + */
12026 +static const char * getGrammarFileName()
12027 +{
12028 + return fileName;
12029 +}
12030 +/** \brief Create a new RSPParser parser and return a context for it.
12031 + *
12032 + * \param[in] instream Pointer to an input stream interface.
12033 + *
12034 + * \return Pointer to new parser context upon success.
12035 + */
12036 +ANTLR3_API pRSPParser
12037 +RSPParserNew (pANTLR3_COMMON_TOKEN_STREAM instream)
12038 +{
12039 + // See if we can create a new parser with the standard constructor
12040 + //
12041 + return RSPParserNewSSD(instream, NULL);
12042 +}
12043 +
12044 +/** \brief Create a new RSPParser parser and return a context for it.
12045 + *
12046 + * \param[in] instream Pointer to an input stream interface.
12047 + *
12048 + * \return Pointer to new parser context upon success.
12049 + */
12050 +ANTLR3_API pRSPParser
12051 +RSPParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
12052 +{
12053 + pRSPParser ctx; /* Context structure we will build and return */
12054 +
12055 + ctx = (pRSPParser) ANTLR3_CALLOC(1, sizeof(RSPParser));
12056 +
12057 + if (ctx == NULL)
12058 + {
12059 + // Failed to allocate memory for parser context
12060 + //
12061 + return NULL;
12062 + }
12063 +
12064 + /* -------------------------------------------------------------------
12065 + * Memory for basic structure is allocated, now to fill in
12066 + * the base ANTLR3 structures. We initialize the function pointers
12067 + * for the standard ANTLR3 parser function set, but upon return
12068 + * from here, the programmer may set the pointers to provide custom
12069 + * implementations of each function.
12070 + *
12071 + * We don't use the macros defined in RSPParser.h here, in order that you can get a sense
12072 + * of what goes where.
12073 + */
12074 +
12075 + /* Create a base parser/recognizer, using the supplied token stream
12076 + */
12077 + ctx->pParser = antlr3ParserNewStream(ANTLR3_SIZE_HINT, instream->tstream, state);
12078 + /* Install the implementation of our RSPParser interface
12079 + */
12080 + ctx->query = query;
12081 + ctx->expr = expr;
12082 + ctx->aexpr = aexpr;
12083 + ctx->crit = crit;
12084 + ctx->strcrit = strcrit;
12085 + ctx->strop = strop;
12086 + ctx->intcrit = intcrit;
12087 + ctx->intop = intop;
12088 + ctx->datecrit = datecrit;
12089 + ctx->dateop = dateop;
12090 + ctx->datespec = datespec;
12091 + ctx->dateref = dateref;
12092 + ctx->dateintval = dateintval;
12093 + ctx->free = RSPParserFree;
12094 + ctx->getGrammarFileName = getGrammarFileName;
12095 +
12096 + /* Install the scope pushing methods.
12097 + */
12098 + ADAPTOR = ANTLR3_TREE_ADAPTORNew(instream->tstream->tokenSource->strFactory);
12099 + ctx->vectors = antlr3VectorFactoryNew(0);
12100 +
12101 +
12102 +
12103 + /* Install the token table
12104 + */
12105 + PSRSTATE->tokenNames = RSPParserTokenNames;
12106 +
12107 +
12108 + /* Return the newly built parser to the caller
12109 + */
12110 + return ctx;
12111 +}
12112 +
12113 +/** Free the parser resources
12114 + */
12115 + static void
12116 + RSPParserFree(pRSPParser ctx)
12117 + {
12118 + /* Free any scope memory
12119 + */
12120 +
12121 + ctx->vectors->close(ctx->vectors);
12122 + /* We created the adaptor so we must free it
12123 + */
12124 + ADAPTOR->free(ADAPTOR);
12125 + // Free this parser
12126 + //
12127 + ctx->pParser->free(ctx->pParser);
12128 + ANTLR3_FREE(ctx);
12129 +
12130 + /* Everything is released, so we can return
12131 + */
12132 + return;
12133 + }
12134 +
12135 +/** Return token names used by this parser
12136 + *
12137 + * The returned pointer is used as an index into the token names table (using the token
12138 + * number as the index).
12139 + *
12140 + * \return Pointer to first char * in the table.
12141 + */
12142 +static pANTLR3_UINT8 *getTokenNames()
12143 +{
12144 + return RSPParserTokenNames;
12145 +}
12146 +
12147 +
12148 +/* Declare the bitsets
12149 + */
12150 +
12151 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_query42 */
12152 +static ANTLR3_BITWORD FOLLOW_expr_in_query42_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000010) };
12153 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_query42 = { FOLLOW_expr_in_query42_bits, 1 };
12154 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NEWLINE_in_query44 */
12155 +static ANTLR3_BITWORD FOLLOW_NEWLINE_in_query44_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000000) };
12156 +static ANTLR3_BITSET_LIST FOLLOW_NEWLINE_in_query44 = { FOLLOW_NEWLINE_in_query44_bits, 1 };
12157 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EOF_in_query47 */
12158 +static ANTLR3_BITWORD FOLLOW_EOF_in_query47_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12159 +static ANTLR3_BITSET_LIST FOLLOW_EOF_in_query47 = { FOLLOW_EOF_in_query47_bits, 1 };
12160 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expr63 */
12161 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expr63_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
12162 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expr63 = { FOLLOW_aexpr_in_expr63_bits, 1 };
12163 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OR_in_expr66 */
12164 +static ANTLR3_BITWORD FOLLOW_OR_in_expr66_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
12165 +static ANTLR3_BITSET_LIST FOLLOW_OR_in_expr66 = { FOLLOW_OR_in_expr66_bits, 1 };
12166 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expr69 */
12167 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expr69_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
12168 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expr69 = { FOLLOW_aexpr_in_expr69_bits, 1 };
12169 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_aexpr81 */
12170 +static ANTLR3_BITWORD FOLLOW_crit_in_aexpr81_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
12171 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_aexpr81 = { FOLLOW_crit_in_aexpr81_bits, 1 };
12172 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AND_in_aexpr84 */
12173 +static ANTLR3_BITWORD FOLLOW_AND_in_aexpr84_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
12174 +static ANTLR3_BITSET_LIST FOLLOW_AND_in_aexpr84 = { FOLLOW_AND_in_aexpr84_bits, 1 };
12175 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_aexpr87 */
12176 +static ANTLR3_BITWORD FOLLOW_crit_in_aexpr87_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
12177 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_aexpr87 = { FOLLOW_crit_in_aexpr87_bits, 1 };
12178 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LPAR_in_crit99 */
12179 +static ANTLR3_BITWORD FOLLOW_LPAR_in_crit99_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000280) };
12180 +static ANTLR3_BITSET_LIST FOLLOW_LPAR_in_crit99 = { FOLLOW_LPAR_in_crit99_bits, 1 };
12181 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expr_in_crit101 */
12182 +static ANTLR3_BITWORD FOLLOW_expr_in_crit101_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000100) };
12183 +static ANTLR3_BITSET_LIST FOLLOW_expr_in_crit101 = { FOLLOW_expr_in_crit101_bits, 1 };
12184 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_RPAR_in_crit103 */
12185 +static ANTLR3_BITWORD FOLLOW_RPAR_in_crit103_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12186 +static ANTLR3_BITSET_LIST FOLLOW_RPAR_in_crit103 = { FOLLOW_RPAR_in_crit103_bits, 1 };
12187 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strcrit_in_crit114 */
12188 +static ANTLR3_BITWORD FOLLOW_strcrit_in_crit114_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12189 +static ANTLR3_BITSET_LIST FOLLOW_strcrit_in_crit114 = { FOLLOW_strcrit_in_crit114_bits, 1 };
12190 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intcrit_in_crit119 */
12191 +static ANTLR3_BITWORD FOLLOW_intcrit_in_crit119_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12192 +static ANTLR3_BITSET_LIST FOLLOW_intcrit_in_crit119 = { FOLLOW_intcrit_in_crit119_bits, 1 };
12193 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_datecrit_in_crit124 */
12194 +static ANTLR3_BITWORD FOLLOW_datecrit_in_crit124_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12195 +static ANTLR3_BITSET_LIST FOLLOW_datecrit_in_crit124 = { FOLLOW_datecrit_in_crit124_bits, 1 };
12196 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_strcrit134 */
12197 +static ANTLR3_BITWORD FOLLOW_FIELD_in_strcrit134_bits[] = { ANTLR3_UINT64_LIT(0x000000000000F000) };
12198 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_strcrit134 = { FOLLOW_FIELD_in_strcrit134_bits, 1 };
12199 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strop_in_strcrit136 */
12200 +static ANTLR3_BITWORD FOLLOW_strop_in_strcrit136_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000400) };
12201 +static ANTLR3_BITSET_LIST FOLLOW_strop_in_strcrit136 = { FOLLOW_strop_in_strcrit136_bits, 1 };
12202 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_strcrit138 */
12203 +static ANTLR3_BITWORD FOLLOW_STR_in_strcrit138_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12204 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_strcrit138 = { FOLLOW_STR_in_strcrit138_bits, 1 };
12205 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_strcrit155 */
12206 +static ANTLR3_BITWORD FOLLOW_FIELD_in_strcrit155_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000800) };
12207 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_strcrit155 = { FOLLOW_FIELD_in_strcrit155_bits, 1 };
12208 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_strcrit157 */
12209 +static ANTLR3_BITWORD FOLLOW_NOT_in_strcrit157_bits[] = { ANTLR3_UINT64_LIT(0x000000000000F000) };
12210 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_strcrit157 = { FOLLOW_NOT_in_strcrit157_bits, 1 };
12211 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_strop_in_strcrit159 */
12212 +static ANTLR3_BITWORD FOLLOW_strop_in_strcrit159_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000400) };
12213 +static ANTLR3_BITSET_LIST FOLLOW_strop_in_strcrit159 = { FOLLOW_strop_in_strcrit159_bits, 1 };
12214 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_strcrit161 */
12215 +static ANTLR3_BITWORD FOLLOW_STR_in_strcrit161_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12216 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_strcrit161 = { FOLLOW_STR_in_strcrit161_bits, 1 };
12217 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_strop188 */
12218 +static ANTLR3_BITWORD FOLLOW_EQUAL_in_strop188_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12219 +static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_strop188 = { FOLLOW_EQUAL_in_strop188_bits, 1 };
12220 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INCLUDES_in_strop195 */
12221 +static ANTLR3_BITWORD FOLLOW_INCLUDES_in_strop195_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12222 +static ANTLR3_BITSET_LIST FOLLOW_INCLUDES_in_strop195 = { FOLLOW_INCLUDES_in_strop195_bits, 1 };
12223 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STARTSW_in_strop202 */
12224 +static ANTLR3_BITWORD FOLLOW_STARTSW_in_strop202_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12225 +static ANTLR3_BITSET_LIST FOLLOW_STARTSW_in_strop202 = { FOLLOW_STARTSW_in_strop202_bits, 1 };
12226 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENDSW_in_strop209 */
12227 +static ANTLR3_BITWORD FOLLOW_ENDSW_in_strop209_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12228 +static ANTLR3_BITSET_LIST FOLLOW_ENDSW_in_strop209 = { FOLLOW_ENDSW_in_strop209_bits, 1 };
12229 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit219 */
12230 +static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit219_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
12231 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit219 = { FOLLOW_FIELD_in_intcrit219_bits, 1 };
12232 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit221 */
12233 +static ANTLR3_BITWORD FOLLOW_intop_in_intcrit221_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
12234 +static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit221 = { FOLLOW_intop_in_intcrit221_bits, 1 };
12235 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit223 */
12236 +static ANTLR3_BITWORD FOLLOW_INT_in_intcrit223_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12237 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit223 = { FOLLOW_INT_in_intcrit223_bits, 1 };
12238 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_intcrit240 */
12239 +static ANTLR3_BITWORD FOLLOW_FIELD_in_intcrit240_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000800) };
12240 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_intcrit240 = { FOLLOW_FIELD_in_intcrit240_bits, 1 };
12241 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_intcrit242 */
12242 +static ANTLR3_BITWORD FOLLOW_NOT_in_intcrit242_bits[] = { ANTLR3_UINT64_LIT(0x00000000001E1000) };
12243 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_intcrit242 = { FOLLOW_NOT_in_intcrit242_bits, 1 };
12244 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_intop_in_intcrit244 */
12245 +static ANTLR3_BITWORD FOLLOW_intop_in_intcrit244_bits[] = { ANTLR3_UINT64_LIT(0x0000000000010000) };
12246 +static ANTLR3_BITSET_LIST FOLLOW_intop_in_intcrit244 = { FOLLOW_intop_in_intcrit244_bits, 1 };
12247 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_intcrit246 */
12248 +static ANTLR3_BITWORD FOLLOW_INT_in_intcrit246_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12249 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_intcrit246 = { FOLLOW_INT_in_intcrit246_bits, 1 };
12250 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EQUAL_in_intop273 */
12251 +static ANTLR3_BITWORD FOLLOW_EQUAL_in_intop273_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12252 +static ANTLR3_BITSET_LIST FOLLOW_EQUAL_in_intop273 = { FOLLOW_EQUAL_in_intop273_bits, 1 };
12253 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LESS_in_intop280 */
12254 +static ANTLR3_BITWORD FOLLOW_LESS_in_intop280_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12255 +static ANTLR3_BITSET_LIST FOLLOW_LESS_in_intop280 = { FOLLOW_LESS_in_intop280_bits, 1 };
12256 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GREATER_in_intop287 */
12257 +static ANTLR3_BITWORD FOLLOW_GREATER_in_intop287_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12258 +static ANTLR3_BITSET_LIST FOLLOW_GREATER_in_intop287 = { FOLLOW_GREATER_in_intop287_bits, 1 };
12259 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LTE_in_intop294 */
12260 +static ANTLR3_BITWORD FOLLOW_LTE_in_intop294_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12261 +static ANTLR3_BITSET_LIST FOLLOW_LTE_in_intop294 = { FOLLOW_LTE_in_intop294_bits, 1 };
12262 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_GTE_in_intop301 */
12263 +static ANTLR3_BITWORD FOLLOW_GTE_in_intop301_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12264 +static ANTLR3_BITSET_LIST FOLLOW_GTE_in_intop301 = { FOLLOW_GTE_in_intop301_bits, 1 };
12265 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_FIELD_in_datecrit310 */
12266 +static ANTLR3_BITWORD FOLLOW_FIELD_in_datecrit310_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
12267 +static ANTLR3_BITSET_LIST FOLLOW_FIELD_in_datecrit310 = { FOLLOW_FIELD_in_datecrit310_bits, 1 };
12268 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datecrit312 */
12269 +static ANTLR3_BITWORD FOLLOW_dateop_in_datecrit312_bits[] = { ANTLR3_UINT64_LIT(0x0000000001810000) };
12270 +static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datecrit312 = { FOLLOW_dateop_in_datecrit312_bits, 1 };
12271 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_datespec_in_datecrit314 */
12272 +static ANTLR3_BITWORD FOLLOW_datespec_in_datecrit314_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12273 +static ANTLR3_BITSET_LIST FOLLOW_datespec_in_datecrit314 = { FOLLOW_datespec_in_datecrit314_bits, 1 };
12274 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_dateop337 */
12275 +static ANTLR3_BITWORD FOLLOW_BEFORE_in_dateop337_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12276 +static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_dateop337 = { FOLLOW_BEFORE_in_dateop337_bits, 1 };
12277 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_dateop344 */
12278 +static ANTLR3_BITWORD FOLLOW_AFTER_in_dateop344_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12279 +static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_dateop344 = { FOLLOW_AFTER_in_dateop344_bits, 1 };
12280 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec353 */
12281 +static ANTLR3_BITWORD FOLLOW_dateref_in_datespec353_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12282 +static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec353 = { FOLLOW_dateref_in_datespec353_bits, 1 };
12283 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_datespec358 */
12284 +static ANTLR3_BITWORD FOLLOW_INT_in_datespec358_bits[] = { ANTLR3_UINT64_LIT(0x000000001E000000) };
12285 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_datespec358 = { FOLLOW_INT_in_datespec358_bits, 1 };
12286 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateintval_in_datespec360 */
12287 +static ANTLR3_BITWORD FOLLOW_dateintval_in_datespec360_bits[] = { ANTLR3_UINT64_LIT(0x0000000000600000) };
12288 +static ANTLR3_BITSET_LIST FOLLOW_dateintval_in_datespec360 = { FOLLOW_dateintval_in_datespec360_bits, 1 };
12289 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateop_in_datespec362 */
12290 +static ANTLR3_BITWORD FOLLOW_dateop_in_datespec362_bits[] = { ANTLR3_UINT64_LIT(0x0000000001800000) };
12291 +static ANTLR3_BITSET_LIST FOLLOW_dateop_in_datespec362 = { FOLLOW_dateop_in_datespec362_bits, 1 };
12292 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateref_in_datespec364 */
12293 +static ANTLR3_BITWORD FOLLOW_dateref_in_datespec364_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12294 +static ANTLR3_BITSET_LIST FOLLOW_dateref_in_datespec364 = { FOLLOW_dateref_in_datespec364_bits, 1 };
12295 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateref388 */
12296 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateref388_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12297 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateref388 = { FOLLOW_DATE_in_dateref388_bits, 1 };
12298 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_TODAY_in_dateref395 */
12299 +static ANTLR3_BITWORD FOLLOW_TODAY_in_dateref395_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12300 +static ANTLR3_BITSET_LIST FOLLOW_TODAY_in_dateref395 = { FOLLOW_TODAY_in_dateref395_bits, 1 };
12301 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DAY_in_dateintval408 */
12302 +static ANTLR3_BITWORD FOLLOW_DAY_in_dateintval408_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12303 +static ANTLR3_BITSET_LIST FOLLOW_DAY_in_dateintval408 = { FOLLOW_DAY_in_dateintval408_bits, 1 };
12304 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_WEEK_in_dateintval415 */
12305 +static ANTLR3_BITWORD FOLLOW_WEEK_in_dateintval415_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12306 +static ANTLR3_BITSET_LIST FOLLOW_WEEK_in_dateintval415 = { FOLLOW_WEEK_in_dateintval415_bits, 1 };
12307 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_MONTH_in_dateintval422 */
12308 +static ANTLR3_BITWORD FOLLOW_MONTH_in_dateintval422_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12309 +static ANTLR3_BITSET_LIST FOLLOW_MONTH_in_dateintval422 = { FOLLOW_MONTH_in_dateintval422_bits, 1 };
12310 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_YEAR_in_dateintval429 */
12311 +static ANTLR3_BITWORD FOLLOW_YEAR_in_dateintval429_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
12312 +static ANTLR3_BITSET_LIST FOLLOW_YEAR_in_dateintval429 = { FOLLOW_YEAR_in_dateintval429_bits, 1 };
12313 +
12314 +
12315 +
12316 +
12317 +/* ==============================================
12318 + * Parsing rules
12319 + */
12320 +/**
12321 + * $ANTLR start query
12322 + * RSP.g:27:1: query : expr ( NEWLINE )? EOF -> expr ;
12323 + */
12324 +static RSPParser_query_return
12325 +query(pRSPParser ctx)
12326 +{
12327 + RSPParser_query_return retval;
12328 +
12329 + pANTLR3_BASE_TREE root_0;
12330 +
12331 + pANTLR3_COMMON_TOKEN NEWLINE2;
12332 + pANTLR3_COMMON_TOKEN EOF3;
12333 + RSPParser_expr_return expr1;
12334 + #undef RETURN_TYPE_expr1
12335 + #define RETURN_TYPE_expr1 RSPParser_expr_return
12336 +
12337 + pANTLR3_BASE_TREE NEWLINE2_tree;
12338 + pANTLR3_BASE_TREE EOF3_tree;
12339 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_NEWLINE;
12340 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_EOF;
12341 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expr;
12342 + /* Initialize rule variables
12343 + */
12344 +
12345 +
12346 + root_0 = NULL;
12347 +
12348 + NEWLINE2 = NULL;
12349 + EOF3 = NULL;
12350 + expr1.tree = NULL;
12351 +
12352 + retval.start = LT(1); retval.stop = retval.start;
12353 +
12354 + NEWLINE2_tree = NULL;
12355 + EOF3_tree = NULL;
12356 +
12357 + stream_NEWLINE = NULL;
12358 + #define CREATE_stream_NEWLINE if (stream_NEWLINE == NULL) {stream_NEWLINE = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token NEWLINE"); }
12359 + stream_EOF = NULL;
12360 + #define CREATE_stream_EOF if (stream_EOF == NULL) {stream_EOF = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token EOF"); }
12361 + stream_expr = NULL;
12362 + #define CREATE_stream_expr if (stream_expr == NULL) {stream_expr = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expr"); }
12363 +
12364 + retval.tree = NULL;
12365 + {
12366 + // RSP.g:27:7: ( expr ( NEWLINE )? EOF -> expr )
12367 + // RSP.g:27:9: expr ( NEWLINE )? EOF
12368 + {
12369 + FOLLOWPUSH(FOLLOW_expr_in_query42);
12370 + expr1=expr(ctx);
12371 +
12372 + FOLLOWPOP();
12373 + if (HASEXCEPTION())
12374 + {
12375 + goto rulequeryEx;
12376 + }
12377 +
12378 + CREATE_stream_expr; stream_expr->add(stream_expr, expr1.tree, NULL);
12379 +
12380 + // RSP.g:27:14: ( NEWLINE )?
12381 + {
12382 + int alt1=2;
12383 + switch ( LA(1) )
12384 + {
12385 + case NEWLINE:
12386 + {
12387 + alt1=1;
12388 + }
12389 + break;
12390 + }
12391 +
12392 + switch (alt1)
12393 + {
12394 + case 1:
12395 + // RSP.g:27:14: NEWLINE
12396 + {
12397 + NEWLINE2 = (pANTLR3_COMMON_TOKEN) MATCHT(NEWLINE, &FOLLOW_NEWLINE_in_query44);
12398 + if (HASEXCEPTION())
12399 + {
12400 + goto rulequeryEx;
12401 + }
12402 +
12403 + CREATE_stream_NEWLINE; stream_NEWLINE->add(stream_NEWLINE, NEWLINE2, NULL);
12404 +
12405 +
12406 + }
12407 + break;
12408 +
12409 + }
12410 + }
12411 + EOF3 = (pANTLR3_COMMON_TOKEN) MATCHT(EOF, &FOLLOW_EOF_in_query47);
12412 + if (HASEXCEPTION())
12413 + {
12414 + goto rulequeryEx;
12415 + }
12416 +
12417 + CREATE_stream_EOF; stream_EOF->add(stream_EOF, EOF3, NULL);
12418 +
12419 +
12420 +
12421 + /* AST REWRITE
12422 + * elements : expr
12423 + * token labels :
12424 + * rule labels : retval
12425 + * token list labels :
12426 + * rule list labels :
12427 + */
12428 + {
12429 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
12430 +
12431 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
12432 +
12433 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
12434 + retval.tree = root_0;
12435 + // 27:28: -> expr
12436 + {
12437 + ADAPTOR->addChild(ADAPTOR, root_0, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr));
12438 +
12439 + }
12440 +
12441 + retval.tree = root_0; // set result root
12442 + if (stream_retval != NULL) stream_retval->free(stream_retval);
12443 +
12444 +
12445 + }
12446 + }
12447 +
12448 + }
12449 +
12450 +
12451 + // This is where rules clean up and exit
12452 + //
12453 + goto rulequeryEx; /* Prevent compiler warnings */
12454 + rulequeryEx: ;
12455 + retval.stop = LT(-1);
12456 +
12457 + retval.stop = LT(-1);
12458 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
12459 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
12460 + if (stream_NEWLINE != NULL) stream_NEWLINE->free(stream_NEWLINE);
12461 + if (stream_EOF != NULL) stream_EOF->free(stream_EOF);
12462 + if (stream_expr != NULL) stream_expr->free(stream_expr);
12463 +
12464 + if (HASEXCEPTION())
12465 + {
12466 + PREPORTERROR();
12467 + PRECOVER();
12468 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
12469 + }
12470 +
12471 +
12472 + return retval;
12473 +}
12474 +/* $ANTLR end query */
12475 +
12476 +/**
12477 + * $ANTLR start expr
12478 + * RSP.g:30:1: expr : aexpr ( OR aexpr )* ;
12479 + */
12480 +static RSPParser_expr_return
12481 +expr(pRSPParser ctx)
12482 +{
12483 + RSPParser_expr_return retval;
12484 +
12485 + pANTLR3_BASE_TREE root_0;
12486 +
12487 + pANTLR3_COMMON_TOKEN OR5;
12488 + RSPParser_aexpr_return aexpr4;
12489 + #undef RETURN_TYPE_aexpr4
12490 + #define RETURN_TYPE_aexpr4 RSPParser_aexpr_return
12491 +
12492 + RSPParser_aexpr_return aexpr6;
12493 + #undef RETURN_TYPE_aexpr6
12494 + #define RETURN_TYPE_aexpr6 RSPParser_aexpr_return
12495 +
12496 + pANTLR3_BASE_TREE OR5_tree;
12497 +
12498 + /* Initialize rule variables
12499 + */
12500 +
12501 +
12502 + root_0 = NULL;
12503 +
12504 + OR5 = NULL;
12505 + aexpr4.tree = NULL;
12506 +
12507 + aexpr6.tree = NULL;
12508 +
12509 + retval.start = LT(1); retval.stop = retval.start;
12510 +
12511 + OR5_tree = NULL;
12512 +
12513 +
12514 + retval.tree = NULL;
12515 + {
12516 + // RSP.g:30:6: ( aexpr ( OR aexpr )* )
12517 + // RSP.g:30:8: aexpr ( OR aexpr )*
12518 + {
12519 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
12520 +
12521 + FOLLOWPUSH(FOLLOW_aexpr_in_expr63);
12522 + aexpr4=aexpr(ctx);
12523 +
12524 + FOLLOWPOP();
12525 + if (HASEXCEPTION())
12526 + {
12527 + goto ruleexprEx;
12528 + }
12529 +
12530 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr4.tree);
12531 +
12532 + // RSP.g:30:14: ( OR aexpr )*
12533 +
12534 + for (;;)
12535 + {
12536 + int alt2=2;
12537 + switch ( LA(1) )
12538 + {
12539 + case OR:
12540 + {
12541 + alt2=1;
12542 + }
12543 + break;
12544 +
12545 + }
12546 +
12547 + switch (alt2)
12548 + {
12549 + case 1:
12550 + // RSP.g:30:15: OR aexpr
12551 + {
12552 + OR5 = (pANTLR3_COMMON_TOKEN) MATCHT(OR, &FOLLOW_OR_in_expr66);
12553 + if (HASEXCEPTION())
12554 + {
12555 + goto ruleexprEx;
12556 + }
12557 +
12558 + OR5_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, OR5));
12559 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, OR5_tree, root_0));
12560 +
12561 + FOLLOWPUSH(FOLLOW_aexpr_in_expr69);
12562 + aexpr6=aexpr(ctx);
12563 +
12564 + FOLLOWPOP();
12565 + if (HASEXCEPTION())
12566 + {
12567 + goto ruleexprEx;
12568 + }
12569 +
12570 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr6.tree);
12571 +
12572 + }
12573 + break;
12574 +
12575 + default:
12576 + goto loop2; /* break out of the loop */
12577 + break;
12578 + }
12579 + }
12580 + loop2: ; /* Jump out to here if this rule does not match */
12581 +
12582 +
12583 + }
12584 +
12585 + }
12586 +
12587 +
12588 + // This is where rules clean up and exit
12589 + //
12590 + goto ruleexprEx; /* Prevent compiler warnings */
12591 + ruleexprEx: ;
12592 + retval.stop = LT(-1);
12593 +
12594 + retval.stop = LT(-1);
12595 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
12596 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
12597 +
12598 + if (HASEXCEPTION())
12599 + {
12600 + PREPORTERROR();
12601 + PRECOVER();
12602 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
12603 + }
12604 +
12605 +
12606 + return retval;
12607 +}
12608 +/* $ANTLR end expr */
12609 +
12610 +/**
12611 + * $ANTLR start aexpr
12612 + * RSP.g:33:1: aexpr : crit ( AND crit )* ;
12613 + */
12614 +static RSPParser_aexpr_return
12615 +aexpr(pRSPParser ctx)
12616 +{
12617 + RSPParser_aexpr_return retval;
12618 +
12619 + pANTLR3_BASE_TREE root_0;
12620 +
12621 + pANTLR3_COMMON_TOKEN AND8;
12622 + RSPParser_crit_return crit7;
12623 + #undef RETURN_TYPE_crit7
12624 + #define RETURN_TYPE_crit7 RSPParser_crit_return
12625 +
12626 + RSPParser_crit_return crit9;
12627 + #undef RETURN_TYPE_crit9
12628 + #define RETURN_TYPE_crit9 RSPParser_crit_return
12629 +
12630 + pANTLR3_BASE_TREE AND8_tree;
12631 +
12632 + /* Initialize rule variables
12633 + */
12634 +
12635 +
12636 + root_0 = NULL;
12637 +
12638 + AND8 = NULL;
12639 + crit7.tree = NULL;
12640 +
12641 + crit9.tree = NULL;
12642 +
12643 + retval.start = LT(1); retval.stop = retval.start;
12644 +
12645 + AND8_tree = NULL;
12646 +
12647 +
12648 + retval.tree = NULL;
12649 + {
12650 + // RSP.g:33:7: ( crit ( AND crit )* )
12651 + // RSP.g:33:9: crit ( AND crit )*
12652 + {
12653 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
12654 +
12655 + FOLLOWPUSH(FOLLOW_crit_in_aexpr81);
12656 + crit7=crit(ctx);
12657 +
12658 + FOLLOWPOP();
12659 + if (HASEXCEPTION())
12660 + {
12661 + goto ruleaexprEx;
12662 + }
12663 +
12664 + ADAPTOR->addChild(ADAPTOR, root_0, crit7.tree);
12665 +
12666 + // RSP.g:33:14: ( AND crit )*
12667 +
12668 + for (;;)
12669 + {
12670 + int alt3=2;
12671 + switch ( LA(1) )
12672 + {
12673 + case AND:
12674 + {
12675 + alt3=1;
12676 + }
12677 + break;
12678 +
12679 + }
12680 +
12681 + switch (alt3)
12682 + {
12683 + case 1:
12684 + // RSP.g:33:15: AND crit
12685 + {
12686 + AND8 = (pANTLR3_COMMON_TOKEN) MATCHT(AND, &FOLLOW_AND_in_aexpr84);
12687 + if (HASEXCEPTION())
12688 + {
12689 + goto ruleaexprEx;
12690 + }
12691 +
12692 + AND8_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, AND8));
12693 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, AND8_tree, root_0));
12694 +
12695 + FOLLOWPUSH(FOLLOW_crit_in_aexpr87);
12696 + crit9=crit(ctx);
12697 +
12698 + FOLLOWPOP();
12699 + if (HASEXCEPTION())
12700 + {
12701 + goto ruleaexprEx;
12702 + }
12703 +
12704 + ADAPTOR->addChild(ADAPTOR, root_0, crit9.tree);
12705 +
12706 + }
12707 + break;
12708 +
12709 + default:
12710 + goto loop3; /* break out of the loop */
12711 + break;
12712 + }
12713 + }
12714 + loop3: ; /* Jump out to here if this rule does not match */
12715 +
12716 +
12717 + }
12718 +
12719 + }
12720 +
12721 +
12722 + // This is where rules clean up and exit
12723 + //
12724 + goto ruleaexprEx; /* Prevent compiler warnings */
12725 + ruleaexprEx: ;
12726 + retval.stop = LT(-1);
12727 +
12728 + retval.stop = LT(-1);
12729 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
12730 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
12731 +
12732 + if (HASEXCEPTION())
12733 + {
12734 + PREPORTERROR();
12735 + PRECOVER();
12736 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
12737 + }
12738 +
12739 +
12740 + return retval;
12741 +}
12742 +/* $ANTLR end aexpr */
12743 +
12744 +/**
12745 + * $ANTLR start crit
12746 + * RSP.g:36:1: crit : ( LPAR expr RPAR -> expr | strcrit | intcrit | datecrit );
12747 + */
12748 +static RSPParser_crit_return
12749 +crit(pRSPParser ctx)
12750 +{
12751 + RSPParser_crit_return retval;
12752 +
12753 + pANTLR3_BASE_TREE root_0;
12754 +
12755 + pANTLR3_COMMON_TOKEN LPAR10;
12756 + pANTLR3_COMMON_TOKEN RPAR12;
12757 + RSPParser_expr_return expr11;
12758 + #undef RETURN_TYPE_expr11
12759 + #define RETURN_TYPE_expr11 RSPParser_expr_return
12760 +
12761 + RSPParser_strcrit_return strcrit13;
12762 + #undef RETURN_TYPE_strcrit13
12763 + #define RETURN_TYPE_strcrit13 RSPParser_strcrit_return
12764 +
12765 + RSPParser_intcrit_return intcrit14;
12766 + #undef RETURN_TYPE_intcrit14
12767 + #define RETURN_TYPE_intcrit14 RSPParser_intcrit_return
12768 +
12769 + RSPParser_datecrit_return datecrit15;
12770 + #undef RETURN_TYPE_datecrit15
12771 + #define RETURN_TYPE_datecrit15 RSPParser_datecrit_return
12772 +
12773 + pANTLR3_BASE_TREE LPAR10_tree;
12774 + pANTLR3_BASE_TREE RPAR12_tree;
12775 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_RPAR;
12776 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_LPAR;
12777 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expr;
12778 + /* Initialize rule variables
12779 + */
12780 +
12781 +
12782 + root_0 = NULL;
12783 +
12784 + LPAR10 = NULL;
12785 + RPAR12 = NULL;
12786 + expr11.tree = NULL;
12787 +
12788 + strcrit13.tree = NULL;
12789 +
12790 + intcrit14.tree = NULL;
12791 +
12792 + datecrit15.tree = NULL;
12793 +
12794 + retval.start = LT(1); retval.stop = retval.start;
12795 +
12796 + LPAR10_tree = NULL;
12797 + RPAR12_tree = NULL;
12798 +
12799 + stream_RPAR = NULL;
12800 + #define CREATE_stream_RPAR if (stream_RPAR == NULL) {stream_RPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token RPAR"); }
12801 + stream_LPAR = NULL;
12802 + #define CREATE_stream_LPAR if (stream_LPAR == NULL) {stream_LPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token LPAR"); }
12803 + stream_expr = NULL;
12804 + #define CREATE_stream_expr if (stream_expr == NULL) {stream_expr = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expr"); }
12805 +
12806 + retval.tree = NULL;
12807 + {
12808 + {
12809 + // RSP.g:36:6: ( LPAR expr RPAR -> expr | strcrit | intcrit | datecrit )
12810 +
12811 + ANTLR3_UINT32 alt4;
12812 +
12813 + alt4=4;
12814 +
12815 + switch ( LA(1) )
12816 + {
12817 + case LPAR:
12818 + {
12819 + alt4=1;
12820 + }
12821 + break;
12822 + case FIELD:
12823 + {
12824 + switch ( LA(2) )
12825 + {
12826 + case NOT:
12827 + {
12828 + switch ( LA(3) )
12829 + {
12830 + case EQUAL:
12831 + {
12832 + switch ( LA(4) )
12833 + {
12834 + case STR:
12835 + {
12836 + alt4=2;
12837 + }
12838 + break;
12839 + case INT:
12840 + {
12841 + alt4=3;
12842 + }
12843 + break;
12844 +
12845 + default:
12846 + CONSTRUCTEX();
12847 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
12848 + EXCEPTION->message = (void *)"";
12849 + EXCEPTION->decisionNum = 4;
12850 + EXCEPTION->state = 8;
12851 +
12852 +
12853 + goto rulecritEx;
12854 + }
12855 +
12856 + }
12857 + break;
12858 + case LESS:
12859 + case GREATER:
12860 + case LTE:
12861 + case GTE:
12862 + {
12863 + alt4=3;
12864 + }
12865 + break;
12866 + case INCLUDES:
12867 + case STARTSW:
12868 + case ENDSW:
12869 + {
12870 + alt4=2;
12871 + }
12872 + break;
12873 +
12874 + default:
12875 + CONSTRUCTEX();
12876 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
12877 + EXCEPTION->message = (void *)"";
12878 + EXCEPTION->decisionNum = 4;
12879 + EXCEPTION->state = 3;
12880 +
12881 +
12882 + goto rulecritEx;
12883 + }
12884 +
12885 + }
12886 + break;
12887 + case BEFORE:
12888 + case AFTER:
12889 + {
12890 + alt4=4;
12891 + }
12892 + break;
12893 + case EQUAL:
12894 + {
12895 + switch ( LA(3) )
12896 + {
12897 + case INT:
12898 + {
12899 + alt4=3;
12900 + }
12901 + break;
12902 + case STR:
12903 + {
12904 + alt4=2;
12905 + }
12906 + break;
12907 +
12908 + default:
12909 + CONSTRUCTEX();
12910 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
12911 + EXCEPTION->message = (void *)"";
12912 + EXCEPTION->decisionNum = 4;
12913 + EXCEPTION->state = 5;
12914 +
12915 +
12916 + goto rulecritEx;
12917 + }
12918 +
12919 + }
12920 + break;
12921 + case LESS:
12922 + case GREATER:
12923 + case LTE:
12924 + case GTE:
12925 + {
12926 + alt4=3;
12927 + }
12928 + break;
12929 + case INCLUDES:
12930 + case STARTSW:
12931 + case ENDSW:
12932 + {
12933 + alt4=2;
12934 + }
12935 + break;
12936 +
12937 + default:
12938 + CONSTRUCTEX();
12939 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
12940 + EXCEPTION->message = (void *)"";
12941 + EXCEPTION->decisionNum = 4;
12942 + EXCEPTION->state = 2;
12943 +
12944 +
12945 + goto rulecritEx;
12946 + }
12947 +
12948 + }
12949 + break;
12950 +
12951 + default:
12952 + CONSTRUCTEX();
12953 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
12954 + EXCEPTION->message = (void *)"";
12955 + EXCEPTION->decisionNum = 4;
12956 + EXCEPTION->state = 0;
12957 +
12958 +
12959 + goto rulecritEx;
12960 + }
12961 +
12962 + switch (alt4)
12963 + {
12964 + case 1:
12965 + // RSP.g:36:8: LPAR expr RPAR
12966 + {
12967 + LPAR10 = (pANTLR3_COMMON_TOKEN) MATCHT(LPAR, &FOLLOW_LPAR_in_crit99);
12968 + if (HASEXCEPTION())
12969 + {
12970 + goto rulecritEx;
12971 + }
12972 +
12973 + CREATE_stream_LPAR; stream_LPAR->add(stream_LPAR, LPAR10, NULL);
12974 +
12975 + FOLLOWPUSH(FOLLOW_expr_in_crit101);
12976 + expr11=expr(ctx);
12977 +
12978 + FOLLOWPOP();
12979 + if (HASEXCEPTION())
12980 + {
12981 + goto rulecritEx;
12982 + }
12983 +
12984 + CREATE_stream_expr; stream_expr->add(stream_expr, expr11.tree, NULL);
12985 + RPAR12 = (pANTLR3_COMMON_TOKEN) MATCHT(RPAR, &FOLLOW_RPAR_in_crit103);
12986 + if (HASEXCEPTION())
12987 + {
12988 + goto rulecritEx;
12989 + }
12990 +
12991 + CREATE_stream_RPAR; stream_RPAR->add(stream_RPAR, RPAR12, NULL);
12992 +
12993 +
12994 +
12995 + /* AST REWRITE
12996 + * elements : expr
12997 + * token labels :
12998 + * rule labels : retval
12999 + * token list labels :
13000 + * rule list labels :
13001 + */
13002 + {
13003 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
13004 +
13005 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
13006 +
13007 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13008 + retval.tree = root_0;
13009 + // 36:25: -> expr
13010 + {
13011 + ADAPTOR->addChild(ADAPTOR, root_0, stream_expr == NULL ? NULL : stream_expr->nextTree(stream_expr));
13012 +
13013 + }
13014 +
13015 + retval.tree = root_0; // set result root
13016 + if (stream_retval != NULL) stream_retval->free(stream_retval);
13017 +
13018 +
13019 + }
13020 + }
13021 + break;
13022 + case 2:
13023 + // RSP.g:37:4: strcrit
13024 + {
13025 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13026 +
13027 + FOLLOWPUSH(FOLLOW_strcrit_in_crit114);
13028 + strcrit13=strcrit(ctx);
13029 +
13030 + FOLLOWPOP();
13031 + if (HASEXCEPTION())
13032 + {
13033 + goto rulecritEx;
13034 + }
13035 +
13036 + ADAPTOR->addChild(ADAPTOR, root_0, strcrit13.tree);
13037 +
13038 + }
13039 + break;
13040 + case 3:
13041 + // RSP.g:38:4: intcrit
13042 + {
13043 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13044 +
13045 + FOLLOWPUSH(FOLLOW_intcrit_in_crit119);
13046 + intcrit14=intcrit(ctx);
13047 +
13048 + FOLLOWPOP();
13049 + if (HASEXCEPTION())
13050 + {
13051 + goto rulecritEx;
13052 + }
13053 +
13054 + ADAPTOR->addChild(ADAPTOR, root_0, intcrit14.tree);
13055 +
13056 + }
13057 + break;
13058 + case 4:
13059 + // RSP.g:39:4: datecrit
13060 + {
13061 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13062 +
13063 + FOLLOWPUSH(FOLLOW_datecrit_in_crit124);
13064 + datecrit15=datecrit(ctx);
13065 +
13066 + FOLLOWPOP();
13067 + if (HASEXCEPTION())
13068 + {
13069 + goto rulecritEx;
13070 + }
13071 +
13072 + ADAPTOR->addChild(ADAPTOR, root_0, datecrit15.tree);
13073 +
13074 + }
13075 + break;
13076 +
13077 + }
13078 + }
13079 + }
13080 +
13081 +
13082 + // This is where rules clean up and exit
13083 + //
13084 + goto rulecritEx; /* Prevent compiler warnings */
13085 + rulecritEx: ;
13086 + retval.stop = LT(-1);
13087 +
13088 + retval.stop = LT(-1);
13089 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
13090 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
13091 + if (stream_RPAR != NULL) stream_RPAR->free(stream_RPAR);
13092 + if (stream_LPAR != NULL) stream_LPAR->free(stream_LPAR);
13093 + if (stream_expr != NULL) stream_expr->free(stream_expr);
13094 +
13095 + if (HASEXCEPTION())
13096 + {
13097 + PREPORTERROR();
13098 + PRECOVER();
13099 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
13100 + }
13101 +
13102 +
13103 + return retval;
13104 +}
13105 +/* $ANTLR end crit */
13106 +
13107 +/**
13108 + * $ANTLR start strcrit
13109 + * RSP.g:42:1: strcrit : ( FIELD strop STR -> ^( strop FIELD STR ) | FIELD NOT strop STR -> ^( NOT ^( strop FIELD STR ) ) );
13110 + */
13111 +static RSPParser_strcrit_return
13112 +strcrit(pRSPParser ctx)
13113 +{
13114 + RSPParser_strcrit_return retval;
13115 +
13116 + pANTLR3_BASE_TREE root_0;
13117 +
13118 + pANTLR3_COMMON_TOKEN FIELD16;
13119 + pANTLR3_COMMON_TOKEN STR18;
13120 + pANTLR3_COMMON_TOKEN FIELD19;
13121 + pANTLR3_COMMON_TOKEN NOT20;
13122 + pANTLR3_COMMON_TOKEN STR22;
13123 + RSPParser_strop_return strop17;
13124 + #undef RETURN_TYPE_strop17
13125 + #define RETURN_TYPE_strop17 RSPParser_strop_return
13126 +
13127 + RSPParser_strop_return strop21;
13128 + #undef RETURN_TYPE_strop21
13129 + #define RETURN_TYPE_strop21 RSPParser_strop_return
13130 +
13131 + pANTLR3_BASE_TREE FIELD16_tree;
13132 + pANTLR3_BASE_TREE STR18_tree;
13133 + pANTLR3_BASE_TREE FIELD19_tree;
13134 + pANTLR3_BASE_TREE NOT20_tree;
13135 + pANTLR3_BASE_TREE STR22_tree;
13136 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_STR;
13137 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_FIELD;
13138 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_NOT;
13139 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_strop;
13140 + /* Initialize rule variables
13141 + */
13142 +
13143 +
13144 + root_0 = NULL;
13145 +
13146 + FIELD16 = NULL;
13147 + STR18 = NULL;
13148 + FIELD19 = NULL;
13149 + NOT20 = NULL;
13150 + STR22 = NULL;
13151 + strop17.tree = NULL;
13152 +
13153 + strop21.tree = NULL;
13154 +
13155 + retval.start = LT(1); retval.stop = retval.start;
13156 +
13157 + FIELD16_tree = NULL;
13158 + STR18_tree = NULL;
13159 + FIELD19_tree = NULL;
13160 + NOT20_tree = NULL;
13161 + STR22_tree = NULL;
13162 +
13163 + stream_STR = NULL;
13164 + #define CREATE_stream_STR if (stream_STR == NULL) {stream_STR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token STR"); }
13165 + stream_FIELD = NULL;
13166 + #define CREATE_stream_FIELD if (stream_FIELD == NULL) {stream_FIELD = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token FIELD"); }
13167 + stream_NOT = NULL;
13168 + #define CREATE_stream_NOT if (stream_NOT == NULL) {stream_NOT = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token NOT"); }
13169 + stream_strop = NULL;
13170 + #define CREATE_stream_strop if (stream_strop == NULL) {stream_strop = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule strop"); }
13171 +
13172 + retval.tree = NULL;
13173 + {
13174 + {
13175 + // RSP.g:42:9: ( FIELD strop STR -> ^( strop FIELD STR ) | FIELD NOT strop STR -> ^( NOT ^( strop FIELD STR ) ) )
13176 +
13177 + ANTLR3_UINT32 alt5;
13178 +
13179 + alt5=2;
13180 +
13181 + switch ( LA(1) )
13182 + {
13183 + case FIELD:
13184 + {
13185 + switch ( LA(2) )
13186 + {
13187 + case NOT:
13188 + {
13189 + alt5=2;
13190 + }
13191 + break;
13192 + case EQUAL:
13193 + case INCLUDES:
13194 + case STARTSW:
13195 + case ENDSW:
13196 + {
13197 + alt5=1;
13198 + }
13199 + break;
13200 +
13201 + default:
13202 + CONSTRUCTEX();
13203 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13204 + EXCEPTION->message = (void *)"";
13205 + EXCEPTION->decisionNum = 5;
13206 + EXCEPTION->state = 1;
13207 +
13208 +
13209 + goto rulestrcritEx;
13210 + }
13211 +
13212 + }
13213 + break;
13214 +
13215 + default:
13216 + CONSTRUCTEX();
13217 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13218 + EXCEPTION->message = (void *)"";
13219 + EXCEPTION->decisionNum = 5;
13220 + EXCEPTION->state = 0;
13221 +
13222 +
13223 + goto rulestrcritEx;
13224 + }
13225 +
13226 + switch (alt5)
13227 + {
13228 + case 1:
13229 + // RSP.g:42:11: FIELD strop STR
13230 + {
13231 + FIELD16 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_strcrit134);
13232 + if (HASEXCEPTION())
13233 + {
13234 + goto rulestrcritEx;
13235 + }
13236 +
13237 + CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD16, NULL);
13238 +
13239 + FOLLOWPUSH(FOLLOW_strop_in_strcrit136);
13240 + strop17=strop(ctx);
13241 +
13242 + FOLLOWPOP();
13243 + if (HASEXCEPTION())
13244 + {
13245 + goto rulestrcritEx;
13246 + }
13247 +
13248 + CREATE_stream_strop; stream_strop->add(stream_strop, strop17.tree, NULL);
13249 + STR18 = (pANTLR3_COMMON_TOKEN) MATCHT(STR, &FOLLOW_STR_in_strcrit138);
13250 + if (HASEXCEPTION())
13251 + {
13252 + goto rulestrcritEx;
13253 + }
13254 +
13255 + CREATE_stream_STR; stream_STR->add(stream_STR, STR18, NULL);
13256 +
13257 +
13258 +
13259 + /* AST REWRITE
13260 + * elements : FIELD, STR, strop
13261 + * token labels :
13262 + * rule labels : retval
13263 + * token list labels :
13264 + * rule list labels :
13265 + */
13266 + {
13267 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
13268 +
13269 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
13270 +
13271 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13272 + retval.tree = root_0;
13273 + // 42:29: -> ^( strop FIELD STR )
13274 + {
13275 + // RSP.g:42:32: ^( strop FIELD STR )
13276 + {
13277 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13278 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_strop == NULL ? NULL : stream_strop->nextNode(stream_strop), root_1));
13279 +
13280 + ADAPTOR->addChild(ADAPTOR, root_1, stream_FIELD == NULL ? NULL : stream_FIELD->nextNode(stream_FIELD));
13281 + ADAPTOR->addChild(ADAPTOR, root_1, stream_STR == NULL ? NULL : stream_STR->nextNode(stream_STR));
13282 +
13283 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
13284 + }
13285 +
13286 + }
13287 +
13288 + retval.tree = root_0; // set result root
13289 + if (stream_retval != NULL) stream_retval->free(stream_retval);
13290 +
13291 +
13292 + }
13293 + }
13294 + break;
13295 + case 2:
13296 + // RSP.g:43:4: FIELD NOT strop STR
13297 + {
13298 + FIELD19 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_strcrit155);
13299 + if (HASEXCEPTION())
13300 + {
13301 + goto rulestrcritEx;
13302 + }
13303 +
13304 + CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD19, NULL);
13305 +
13306 + NOT20 = (pANTLR3_COMMON_TOKEN) MATCHT(NOT, &FOLLOW_NOT_in_strcrit157);
13307 + if (HASEXCEPTION())
13308 + {
13309 + goto rulestrcritEx;
13310 + }
13311 +
13312 + CREATE_stream_NOT; stream_NOT->add(stream_NOT, NOT20, NULL);
13313 +
13314 + FOLLOWPUSH(FOLLOW_strop_in_strcrit159);
13315 + strop21=strop(ctx);
13316 +
13317 + FOLLOWPOP();
13318 + if (HASEXCEPTION())
13319 + {
13320 + goto rulestrcritEx;
13321 + }
13322 +
13323 + CREATE_stream_strop; stream_strop->add(stream_strop, strop21.tree, NULL);
13324 + STR22 = (pANTLR3_COMMON_TOKEN) MATCHT(STR, &FOLLOW_STR_in_strcrit161);
13325 + if (HASEXCEPTION())
13326 + {
13327 + goto rulestrcritEx;
13328 + }
13329 +
13330 + CREATE_stream_STR; stream_STR->add(stream_STR, STR22, NULL);
13331 +
13332 +
13333 +
13334 + /* AST REWRITE
13335 + * elements : STR, FIELD, strop, NOT
13336 + * token labels :
13337 + * rule labels : retval
13338 + * token list labels :
13339 + * rule list labels :
13340 + */
13341 + {
13342 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
13343 +
13344 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
13345 +
13346 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13347 + retval.tree = root_0;
13348 + // 43:25: -> ^( NOT ^( strop FIELD STR ) )
13349 + {
13350 + // RSP.g:43:28: ^( NOT ^( strop FIELD STR ) )
13351 + {
13352 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13353 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_NOT == NULL ? NULL : stream_NOT->nextNode(stream_NOT), root_1));
13354 +
13355 + // RSP.g:43:34: ^( strop FIELD STR )
13356 + {
13357 + pANTLR3_BASE_TREE root_2 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13358 + root_2 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_strop == NULL ? NULL : stream_strop->nextNode(stream_strop), root_2));
13359 +
13360 + ADAPTOR->addChild(ADAPTOR, root_2, stream_FIELD == NULL ? NULL : stream_FIELD->nextNode(stream_FIELD));
13361 + ADAPTOR->addChild(ADAPTOR, root_2, stream_STR == NULL ? NULL : stream_STR->nextNode(stream_STR));
13362 +
13363 + ADAPTOR->addChild(ADAPTOR, root_1, root_2);
13364 + }
13365 +
13366 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
13367 + }
13368 +
13369 + }
13370 +
13371 + retval.tree = root_0; // set result root
13372 + if (stream_retval != NULL) stream_retval->free(stream_retval);
13373 +
13374 +
13375 + }
13376 + }
13377 + break;
13378 +
13379 + }
13380 + }
13381 + }
13382 +
13383 +
13384 + // This is where rules clean up and exit
13385 + //
13386 + goto rulestrcritEx; /* Prevent compiler warnings */
13387 + rulestrcritEx: ;
13388 + retval.stop = LT(-1);
13389 +
13390 + retval.stop = LT(-1);
13391 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
13392 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
13393 + if (stream_STR != NULL) stream_STR->free(stream_STR);
13394 + if (stream_FIELD != NULL) stream_FIELD->free(stream_FIELD);
13395 + if (stream_NOT != NULL) stream_NOT->free(stream_NOT);
13396 + if (stream_strop != NULL) stream_strop->free(stream_strop);
13397 +
13398 + if (HASEXCEPTION())
13399 + {
13400 + PREPORTERROR();
13401 + PRECOVER();
13402 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
13403 + }
13404 +
13405 +
13406 + return retval;
13407 +}
13408 +/* $ANTLR end strcrit */
13409 +
13410 +/**
13411 + * $ANTLR start strop
13412 + * RSP.g:46:1: strop : (equal= EQUAL | includes= INCLUDES | startsw= STARTSW | endsw= ENDSW );
13413 + */
13414 +static RSPParser_strop_return
13415 +strop(pRSPParser ctx)
13416 +{
13417 + RSPParser_strop_return retval;
13418 +
13419 + pANTLR3_BASE_TREE root_0;
13420 +
13421 + pANTLR3_COMMON_TOKEN equal;
13422 + pANTLR3_COMMON_TOKEN includes;
13423 + pANTLR3_COMMON_TOKEN startsw;
13424 + pANTLR3_COMMON_TOKEN endsw;
13425 +
13426 + pANTLR3_BASE_TREE equal_tree;
13427 + pANTLR3_BASE_TREE includes_tree;
13428 + pANTLR3_BASE_TREE startsw_tree;
13429 + pANTLR3_BASE_TREE endsw_tree;
13430 +
13431 + /* Initialize rule variables
13432 + */
13433 +
13434 +
13435 + root_0 = NULL;
13436 +
13437 + equal = NULL;
13438 + includes = NULL;
13439 + startsw = NULL;
13440 + endsw = NULL;
13441 + retval.start = LT(1); retval.stop = retval.start;
13442 +
13443 + equal_tree = NULL;
13444 + includes_tree = NULL;
13445 + startsw_tree = NULL;
13446 + endsw_tree = NULL;
13447 +
13448 +
13449 + retval.tree = NULL;
13450 + {
13451 + {
13452 + // RSP.g:46:7: (equal= EQUAL | includes= INCLUDES | startsw= STARTSW | endsw= ENDSW )
13453 +
13454 + ANTLR3_UINT32 alt6;
13455 +
13456 + alt6=4;
13457 +
13458 + switch ( LA(1) )
13459 + {
13460 + case EQUAL:
13461 + {
13462 + alt6=1;
13463 + }
13464 + break;
13465 + case INCLUDES:
13466 + {
13467 + alt6=2;
13468 + }
13469 + break;
13470 + case STARTSW:
13471 + {
13472 + alt6=3;
13473 + }
13474 + break;
13475 + case ENDSW:
13476 + {
13477 + alt6=4;
13478 + }
13479 + break;
13480 +
13481 + default:
13482 + CONSTRUCTEX();
13483 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13484 + EXCEPTION->message = (void *)"";
13485 + EXCEPTION->decisionNum = 6;
13486 + EXCEPTION->state = 0;
13487 +
13488 +
13489 + goto rulestropEx;
13490 + }
13491 +
13492 + switch (alt6)
13493 + {
13494 + case 1:
13495 + // RSP.g:46:9: equal= EQUAL
13496 + {
13497 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13498 +
13499 + equal = (pANTLR3_COMMON_TOKEN) MATCHT(EQUAL, &FOLLOW_EQUAL_in_strop188);
13500 + if (HASEXCEPTION())
13501 + {
13502 + goto rulestropEx;
13503 + }
13504 +
13505 + equal_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, equal));
13506 + ADAPTOR->addChild(ADAPTOR, root_0, equal_tree);
13507 +
13508 +
13509 + }
13510 + break;
13511 + case 2:
13512 + // RSP.g:47:4: includes= INCLUDES
13513 + {
13514 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13515 +
13516 + includes = (pANTLR3_COMMON_TOKEN) MATCHT(INCLUDES, &FOLLOW_INCLUDES_in_strop195);
13517 + if (HASEXCEPTION())
13518 + {
13519 + goto rulestropEx;
13520 + }
13521 +
13522 + includes_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, includes));
13523 + ADAPTOR->addChild(ADAPTOR, root_0, includes_tree);
13524 +
13525 +
13526 + }
13527 + break;
13528 + case 3:
13529 + // RSP.g:48:4: startsw= STARTSW
13530 + {
13531 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13532 +
13533 + startsw = (pANTLR3_COMMON_TOKEN) MATCHT(STARTSW, &FOLLOW_STARTSW_in_strop202);
13534 + if (HASEXCEPTION())
13535 + {
13536 + goto rulestropEx;
13537 + }
13538 +
13539 + startsw_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, startsw));
13540 + ADAPTOR->addChild(ADAPTOR, root_0, startsw_tree);
13541 +
13542 +
13543 + }
13544 + break;
13545 + case 4:
13546 + // RSP.g:49:4: endsw= ENDSW
13547 + {
13548 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13549 +
13550 + endsw = (pANTLR3_COMMON_TOKEN) MATCHT(ENDSW, &FOLLOW_ENDSW_in_strop209);
13551 + if (HASEXCEPTION())
13552 + {
13553 + goto rulestropEx;
13554 + }
13555 +
13556 + endsw_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, endsw));
13557 + ADAPTOR->addChild(ADAPTOR, root_0, endsw_tree);
13558 +
13559 +
13560 + }
13561 + break;
13562 +
13563 + }
13564 + }
13565 + }
13566 +
13567 +
13568 + // This is where rules clean up and exit
13569 + //
13570 + goto rulestropEx; /* Prevent compiler warnings */
13571 + rulestropEx: ;
13572 + retval.stop = LT(-1);
13573 +
13574 + retval.stop = LT(-1);
13575 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
13576 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
13577 +
13578 + if (HASEXCEPTION())
13579 + {
13580 + PREPORTERROR();
13581 + PRECOVER();
13582 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
13583 + }
13584 +
13585 +
13586 + return retval;
13587 +}
13588 +/* $ANTLR end strop */
13589 +
13590 +/**
13591 + * $ANTLR start intcrit
13592 + * RSP.g:52:1: intcrit : ( FIELD intop INT -> ^( intop FIELD INT ) | FIELD NOT intop INT -> ^( NOT ^( intop FIELD INT ) ) );
13593 + */
13594 +static RSPParser_intcrit_return
13595 +intcrit(pRSPParser ctx)
13596 +{
13597 + RSPParser_intcrit_return retval;
13598 +
13599 + pANTLR3_BASE_TREE root_0;
13600 +
13601 + pANTLR3_COMMON_TOKEN FIELD23;
13602 + pANTLR3_COMMON_TOKEN INT25;
13603 + pANTLR3_COMMON_TOKEN FIELD26;
13604 + pANTLR3_COMMON_TOKEN NOT27;
13605 + pANTLR3_COMMON_TOKEN INT29;
13606 + RSPParser_intop_return intop24;
13607 + #undef RETURN_TYPE_intop24
13608 + #define RETURN_TYPE_intop24 RSPParser_intop_return
13609 +
13610 + RSPParser_intop_return intop28;
13611 + #undef RETURN_TYPE_intop28
13612 + #define RETURN_TYPE_intop28 RSPParser_intop_return
13613 +
13614 + pANTLR3_BASE_TREE FIELD23_tree;
13615 + pANTLR3_BASE_TREE INT25_tree;
13616 + pANTLR3_BASE_TREE FIELD26_tree;
13617 + pANTLR3_BASE_TREE NOT27_tree;
13618 + pANTLR3_BASE_TREE INT29_tree;
13619 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_FIELD;
13620 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_INT;
13621 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_NOT;
13622 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_intop;
13623 + /* Initialize rule variables
13624 + */
13625 +
13626 +
13627 + root_0 = NULL;
13628 +
13629 + FIELD23 = NULL;
13630 + INT25 = NULL;
13631 + FIELD26 = NULL;
13632 + NOT27 = NULL;
13633 + INT29 = NULL;
13634 + intop24.tree = NULL;
13635 +
13636 + intop28.tree = NULL;
13637 +
13638 + retval.start = LT(1); retval.stop = retval.start;
13639 +
13640 + FIELD23_tree = NULL;
13641 + INT25_tree = NULL;
13642 + FIELD26_tree = NULL;
13643 + NOT27_tree = NULL;
13644 + INT29_tree = NULL;
13645 +
13646 + stream_FIELD = NULL;
13647 + #define CREATE_stream_FIELD if (stream_FIELD == NULL) {stream_FIELD = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token FIELD"); }
13648 + stream_INT = NULL;
13649 + #define CREATE_stream_INT if (stream_INT == NULL) {stream_INT = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token INT"); }
13650 + stream_NOT = NULL;
13651 + #define CREATE_stream_NOT if (stream_NOT == NULL) {stream_NOT = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token NOT"); }
13652 + stream_intop = NULL;
13653 + #define CREATE_stream_intop if (stream_intop == NULL) {stream_intop = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule intop"); }
13654 +
13655 + retval.tree = NULL;
13656 + {
13657 + {
13658 + // RSP.g:52:9: ( FIELD intop INT -> ^( intop FIELD INT ) | FIELD NOT intop INT -> ^( NOT ^( intop FIELD INT ) ) )
13659 +
13660 + ANTLR3_UINT32 alt7;
13661 +
13662 + alt7=2;
13663 +
13664 + switch ( LA(1) )
13665 + {
13666 + case FIELD:
13667 + {
13668 + switch ( LA(2) )
13669 + {
13670 + case NOT:
13671 + {
13672 + alt7=2;
13673 + }
13674 + break;
13675 + case EQUAL:
13676 + case LESS:
13677 + case GREATER:
13678 + case LTE:
13679 + case GTE:
13680 + {
13681 + alt7=1;
13682 + }
13683 + break;
13684 +
13685 + default:
13686 + CONSTRUCTEX();
13687 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13688 + EXCEPTION->message = (void *)"";
13689 + EXCEPTION->decisionNum = 7;
13690 + EXCEPTION->state = 1;
13691 +
13692 +
13693 + goto ruleintcritEx;
13694 + }
13695 +
13696 + }
13697 + break;
13698 +
13699 + default:
13700 + CONSTRUCTEX();
13701 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13702 + EXCEPTION->message = (void *)"";
13703 + EXCEPTION->decisionNum = 7;
13704 + EXCEPTION->state = 0;
13705 +
13706 +
13707 + goto ruleintcritEx;
13708 + }
13709 +
13710 + switch (alt7)
13711 + {
13712 + case 1:
13713 + // RSP.g:52:11: FIELD intop INT
13714 + {
13715 + FIELD23 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit219);
13716 + if (HASEXCEPTION())
13717 + {
13718 + goto ruleintcritEx;
13719 + }
13720 +
13721 + CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD23, NULL);
13722 +
13723 + FOLLOWPUSH(FOLLOW_intop_in_intcrit221);
13724 + intop24=intop(ctx);
13725 +
13726 + FOLLOWPOP();
13727 + if (HASEXCEPTION())
13728 + {
13729 + goto ruleintcritEx;
13730 + }
13731 +
13732 + CREATE_stream_intop; stream_intop->add(stream_intop, intop24.tree, NULL);
13733 + INT25 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit223);
13734 + if (HASEXCEPTION())
13735 + {
13736 + goto ruleintcritEx;
13737 + }
13738 +
13739 + CREATE_stream_INT; stream_INT->add(stream_INT, INT25, NULL);
13740 +
13741 +
13742 +
13743 + /* AST REWRITE
13744 + * elements : FIELD, INT, intop
13745 + * token labels :
13746 + * rule labels : retval
13747 + * token list labels :
13748 + * rule list labels :
13749 + */
13750 + {
13751 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
13752 +
13753 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
13754 +
13755 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13756 + retval.tree = root_0;
13757 + // 52:29: -> ^( intop FIELD INT )
13758 + {
13759 + // RSP.g:52:32: ^( intop FIELD INT )
13760 + {
13761 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13762 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_intop == NULL ? NULL : stream_intop->nextNode(stream_intop), root_1));
13763 +
13764 + ADAPTOR->addChild(ADAPTOR, root_1, stream_FIELD == NULL ? NULL : stream_FIELD->nextNode(stream_FIELD));
13765 + ADAPTOR->addChild(ADAPTOR, root_1, stream_INT == NULL ? NULL : stream_INT->nextNode(stream_INT));
13766 +
13767 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
13768 + }
13769 +
13770 + }
13771 +
13772 + retval.tree = root_0; // set result root
13773 + if (stream_retval != NULL) stream_retval->free(stream_retval);
13774 +
13775 +
13776 + }
13777 + }
13778 + break;
13779 + case 2:
13780 + // RSP.g:53:4: FIELD NOT intop INT
13781 + {
13782 + FIELD26 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_intcrit240);
13783 + if (HASEXCEPTION())
13784 + {
13785 + goto ruleintcritEx;
13786 + }
13787 +
13788 + CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD26, NULL);
13789 +
13790 + NOT27 = (pANTLR3_COMMON_TOKEN) MATCHT(NOT, &FOLLOW_NOT_in_intcrit242);
13791 + if (HASEXCEPTION())
13792 + {
13793 + goto ruleintcritEx;
13794 + }
13795 +
13796 + CREATE_stream_NOT; stream_NOT->add(stream_NOT, NOT27, NULL);
13797 +
13798 + FOLLOWPUSH(FOLLOW_intop_in_intcrit244);
13799 + intop28=intop(ctx);
13800 +
13801 + FOLLOWPOP();
13802 + if (HASEXCEPTION())
13803 + {
13804 + goto ruleintcritEx;
13805 + }
13806 +
13807 + CREATE_stream_intop; stream_intop->add(stream_intop, intop28.tree, NULL);
13808 + INT29 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_intcrit246);
13809 + if (HASEXCEPTION())
13810 + {
13811 + goto ruleintcritEx;
13812 + }
13813 +
13814 + CREATE_stream_INT; stream_INT->add(stream_INT, INT29, NULL);
13815 +
13816 +
13817 +
13818 + /* AST REWRITE
13819 + * elements : intop, NOT, INT, FIELD
13820 + * token labels :
13821 + * rule labels : retval
13822 + * token list labels :
13823 + * rule list labels :
13824 + */
13825 + {
13826 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
13827 +
13828 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
13829 +
13830 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13831 + retval.tree = root_0;
13832 + // 53:25: -> ^( NOT ^( intop FIELD INT ) )
13833 + {
13834 + // RSP.g:53:28: ^( NOT ^( intop FIELD INT ) )
13835 + {
13836 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13837 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_NOT == NULL ? NULL : stream_NOT->nextNode(stream_NOT), root_1));
13838 +
13839 + // RSP.g:53:34: ^( intop FIELD INT )
13840 + {
13841 + pANTLR3_BASE_TREE root_2 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13842 + root_2 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_intop == NULL ? NULL : stream_intop->nextNode(stream_intop), root_2));
13843 +
13844 + ADAPTOR->addChild(ADAPTOR, root_2, stream_FIELD == NULL ? NULL : stream_FIELD->nextNode(stream_FIELD));
13845 + ADAPTOR->addChild(ADAPTOR, root_2, stream_INT == NULL ? NULL : stream_INT->nextNode(stream_INT));
13846 +
13847 + ADAPTOR->addChild(ADAPTOR, root_1, root_2);
13848 + }
13849 +
13850 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
13851 + }
13852 +
13853 + }
13854 +
13855 + retval.tree = root_0; // set result root
13856 + if (stream_retval != NULL) stream_retval->free(stream_retval);
13857 +
13858 +
13859 + }
13860 + }
13861 + break;
13862 +
13863 + }
13864 + }
13865 + }
13866 +
13867 +
13868 + // This is where rules clean up and exit
13869 + //
13870 + goto ruleintcritEx; /* Prevent compiler warnings */
13871 + ruleintcritEx: ;
13872 + retval.stop = LT(-1);
13873 +
13874 + retval.stop = LT(-1);
13875 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
13876 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
13877 + if (stream_FIELD != NULL) stream_FIELD->free(stream_FIELD);
13878 + if (stream_INT != NULL) stream_INT->free(stream_INT);
13879 + if (stream_NOT != NULL) stream_NOT->free(stream_NOT);
13880 + if (stream_intop != NULL) stream_intop->free(stream_intop);
13881 +
13882 + if (HASEXCEPTION())
13883 + {
13884 + PREPORTERROR();
13885 + PRECOVER();
13886 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
13887 + }
13888 +
13889 +
13890 + return retval;
13891 +}
13892 +/* $ANTLR end intcrit */
13893 +
13894 +/**
13895 + * $ANTLR start intop
13896 + * RSP.g:56:1: intop : (equal= EQUAL | less= LESS | greater= GREATER | lte= LTE | gte= GTE );
13897 + */
13898 +static RSPParser_intop_return
13899 +intop(pRSPParser ctx)
13900 +{
13901 + RSPParser_intop_return retval;
13902 +
13903 + pANTLR3_BASE_TREE root_0;
13904 +
13905 + pANTLR3_COMMON_TOKEN equal;
13906 + pANTLR3_COMMON_TOKEN less;
13907 + pANTLR3_COMMON_TOKEN greater;
13908 + pANTLR3_COMMON_TOKEN lte;
13909 + pANTLR3_COMMON_TOKEN gte;
13910 +
13911 + pANTLR3_BASE_TREE equal_tree;
13912 + pANTLR3_BASE_TREE less_tree;
13913 + pANTLR3_BASE_TREE greater_tree;
13914 + pANTLR3_BASE_TREE lte_tree;
13915 + pANTLR3_BASE_TREE gte_tree;
13916 +
13917 + /* Initialize rule variables
13918 + */
13919 +
13920 +
13921 + root_0 = NULL;
13922 +
13923 + equal = NULL;
13924 + less = NULL;
13925 + greater = NULL;
13926 + lte = NULL;
13927 + gte = NULL;
13928 + retval.start = LT(1); retval.stop = retval.start;
13929 +
13930 + equal_tree = NULL;
13931 + less_tree = NULL;
13932 + greater_tree = NULL;
13933 + lte_tree = NULL;
13934 + gte_tree = NULL;
13935 +
13936 +
13937 + retval.tree = NULL;
13938 + {
13939 + {
13940 + // RSP.g:56:7: (equal= EQUAL | less= LESS | greater= GREATER | lte= LTE | gte= GTE )
13941 +
13942 + ANTLR3_UINT32 alt8;
13943 +
13944 + alt8=5;
13945 +
13946 + switch ( LA(1) )
13947 + {
13948 + case EQUAL:
13949 + {
13950 + alt8=1;
13951 + }
13952 + break;
13953 + case LESS:
13954 + {
13955 + alt8=2;
13956 + }
13957 + break;
13958 + case GREATER:
13959 + {
13960 + alt8=3;
13961 + }
13962 + break;
13963 + case LTE:
13964 + {
13965 + alt8=4;
13966 + }
13967 + break;
13968 + case GTE:
13969 + {
13970 + alt8=5;
13971 + }
13972 + break;
13973 +
13974 + default:
13975 + CONSTRUCTEX();
13976 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
13977 + EXCEPTION->message = (void *)"";
13978 + EXCEPTION->decisionNum = 8;
13979 + EXCEPTION->state = 0;
13980 +
13981 +
13982 + goto ruleintopEx;
13983 + }
13984 +
13985 + switch (alt8)
13986 + {
13987 + case 1:
13988 + // RSP.g:56:9: equal= EQUAL
13989 + {
13990 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
13991 +
13992 + equal = (pANTLR3_COMMON_TOKEN) MATCHT(EQUAL, &FOLLOW_EQUAL_in_intop273);
13993 + if (HASEXCEPTION())
13994 + {
13995 + goto ruleintopEx;
13996 + }
13997 +
13998 + equal_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, equal));
13999 + ADAPTOR->addChild(ADAPTOR, root_0, equal_tree);
14000 +
14001 +
14002 + }
14003 + break;
14004 + case 2:
14005 + // RSP.g:57:4: less= LESS
14006 + {
14007 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14008 +
14009 + less = (pANTLR3_COMMON_TOKEN) MATCHT(LESS, &FOLLOW_LESS_in_intop280);
14010 + if (HASEXCEPTION())
14011 + {
14012 + goto ruleintopEx;
14013 + }
14014 +
14015 + less_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, less));
14016 + ADAPTOR->addChild(ADAPTOR, root_0, less_tree);
14017 +
14018 +
14019 + }
14020 + break;
14021 + case 3:
14022 + // RSP.g:58:4: greater= GREATER
14023 + {
14024 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14025 +
14026 + greater = (pANTLR3_COMMON_TOKEN) MATCHT(GREATER, &FOLLOW_GREATER_in_intop287);
14027 + if (HASEXCEPTION())
14028 + {
14029 + goto ruleintopEx;
14030 + }
14031 +
14032 + greater_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, greater));
14033 + ADAPTOR->addChild(ADAPTOR, root_0, greater_tree);
14034 +
14035 +
14036 + }
14037 + break;
14038 + case 4:
14039 + // RSP.g:59:4: lte= LTE
14040 + {
14041 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14042 +
14043 + lte = (pANTLR3_COMMON_TOKEN) MATCHT(LTE, &FOLLOW_LTE_in_intop294);
14044 + if (HASEXCEPTION())
14045 + {
14046 + goto ruleintopEx;
14047 + }
14048 +
14049 + lte_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, lte));
14050 + ADAPTOR->addChild(ADAPTOR, root_0, lte_tree);
14051 +
14052 +
14053 + }
14054 + break;
14055 + case 5:
14056 + // RSP.g:60:4: gte= GTE
14057 + {
14058 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14059 +
14060 + gte = (pANTLR3_COMMON_TOKEN) MATCHT(GTE, &FOLLOW_GTE_in_intop301);
14061 + if (HASEXCEPTION())
14062 + {
14063 + goto ruleintopEx;
14064 + }
14065 +
14066 + gte_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, gte));
14067 + ADAPTOR->addChild(ADAPTOR, root_0, gte_tree);
14068 +
14069 +
14070 + }
14071 + break;
14072 +
14073 + }
14074 + }
14075 + }
14076 +
14077 +
14078 + // This is where rules clean up and exit
14079 + //
14080 + goto ruleintopEx; /* Prevent compiler warnings */
14081 + ruleintopEx: ;
14082 + retval.stop = LT(-1);
14083 +
14084 + retval.stop = LT(-1);
14085 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14086 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14087 +
14088 + if (HASEXCEPTION())
14089 + {
14090 + PREPORTERROR();
14091 + PRECOVER();
14092 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14093 + }
14094 +
14095 +
14096 + return retval;
14097 +}
14098 +/* $ANTLR end intop */
14099 +
14100 +/**
14101 + * $ANTLR start datecrit
14102 + * RSP.g:63:1: datecrit : FIELD dateop datespec -> ^( dateop FIELD datespec ) ;
14103 + */
14104 +static RSPParser_datecrit_return
14105 +datecrit(pRSPParser ctx)
14106 +{
14107 + RSPParser_datecrit_return retval;
14108 +
14109 + pANTLR3_BASE_TREE root_0;
14110 +
14111 + pANTLR3_COMMON_TOKEN FIELD30;
14112 + RSPParser_dateop_return dateop31;
14113 + #undef RETURN_TYPE_dateop31
14114 + #define RETURN_TYPE_dateop31 RSPParser_dateop_return
14115 +
14116 + RSPParser_datespec_return datespec32;
14117 + #undef RETURN_TYPE_datespec32
14118 + #define RETURN_TYPE_datespec32 RSPParser_datespec_return
14119 +
14120 + pANTLR3_BASE_TREE FIELD30_tree;
14121 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_FIELD;
14122 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_datespec;
14123 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateop;
14124 + /* Initialize rule variables
14125 + */
14126 +
14127 +
14128 + root_0 = NULL;
14129 +
14130 + FIELD30 = NULL;
14131 + dateop31.tree = NULL;
14132 +
14133 + datespec32.tree = NULL;
14134 +
14135 + retval.start = LT(1); retval.stop = retval.start;
14136 +
14137 + FIELD30_tree = NULL;
14138 +
14139 + stream_FIELD = NULL;
14140 + #define CREATE_stream_FIELD if (stream_FIELD == NULL) {stream_FIELD = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token FIELD"); }
14141 + stream_datespec = NULL;
14142 + #define CREATE_stream_datespec if (stream_datespec == NULL) {stream_datespec = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule datespec"); }
14143 + stream_dateop = NULL;
14144 + #define CREATE_stream_dateop if (stream_dateop == NULL) {stream_dateop = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule dateop"); }
14145 +
14146 + retval.tree = NULL;
14147 + {
14148 + // RSP.g:63:9: ( FIELD dateop datespec -> ^( dateop FIELD datespec ) )
14149 + // RSP.g:63:11: FIELD dateop datespec
14150 + {
14151 + FIELD30 = (pANTLR3_COMMON_TOKEN) MATCHT(FIELD, &FOLLOW_FIELD_in_datecrit310);
14152 + if (HASEXCEPTION())
14153 + {
14154 + goto ruledatecritEx;
14155 + }
14156 +
14157 + CREATE_stream_FIELD; stream_FIELD->add(stream_FIELD, FIELD30, NULL);
14158 +
14159 + FOLLOWPUSH(FOLLOW_dateop_in_datecrit312);
14160 + dateop31=dateop(ctx);
14161 +
14162 + FOLLOWPOP();
14163 + if (HASEXCEPTION())
14164 + {
14165 + goto ruledatecritEx;
14166 + }
14167 +
14168 + CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop31.tree, NULL);
14169 + FOLLOWPUSH(FOLLOW_datespec_in_datecrit314);
14170 + datespec32=datespec(ctx);
14171 +
14172 + FOLLOWPOP();
14173 + if (HASEXCEPTION())
14174 + {
14175 + goto ruledatecritEx;
14176 + }
14177 +
14178 + CREATE_stream_datespec; stream_datespec->add(stream_datespec, datespec32.tree, NULL);
14179 +
14180 +
14181 + /* AST REWRITE
14182 + * elements : FIELD, dateop, datespec
14183 + * token labels :
14184 + * rule labels : retval
14185 + * token list labels :
14186 + * rule list labels :
14187 + */
14188 + {
14189 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
14190 +
14191 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
14192 +
14193 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14194 + retval.tree = root_0;
14195 + // 63:34: -> ^( dateop FIELD datespec )
14196 + {
14197 + // RSP.g:63:37: ^( dateop FIELD datespec )
14198 + {
14199 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14200 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_dateop == NULL ? NULL : stream_dateop->nextNode(stream_dateop), root_1));
14201 +
14202 + ADAPTOR->addChild(ADAPTOR, root_1, stream_FIELD == NULL ? NULL : stream_FIELD->nextNode(stream_FIELD));
14203 + ADAPTOR->addChild(ADAPTOR, root_1, stream_datespec == NULL ? NULL : stream_datespec->nextTree(stream_datespec));
14204 +
14205 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
14206 + }
14207 +
14208 + }
14209 +
14210 + retval.tree = root_0; // set result root
14211 + if (stream_retval != NULL) stream_retval->free(stream_retval);
14212 +
14213 +
14214 + }
14215 + }
14216 +
14217 + }
14218 +
14219 +
14220 + // This is where rules clean up and exit
14221 + //
14222 + goto ruledatecritEx; /* Prevent compiler warnings */
14223 + ruledatecritEx: ;
14224 + retval.stop = LT(-1);
14225 +
14226 + retval.stop = LT(-1);
14227 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14228 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14229 + if (stream_FIELD != NULL) stream_FIELD->free(stream_FIELD);
14230 + if (stream_datespec != NULL) stream_datespec->free(stream_datespec);
14231 + if (stream_dateop != NULL) stream_dateop->free(stream_dateop);
14232 +
14233 + if (HASEXCEPTION())
14234 + {
14235 + PREPORTERROR();
14236 + PRECOVER();
14237 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14238 + }
14239 +
14240 +
14241 + return retval;
14242 +}
14243 +/* $ANTLR end datecrit */
14244 +
14245 +/**
14246 + * $ANTLR start dateop
14247 + * RSP.g:66:1: dateop : (before= BEFORE | after= AFTER );
14248 + */
14249 +static RSPParser_dateop_return
14250 +dateop(pRSPParser ctx)
14251 +{
14252 + RSPParser_dateop_return retval;
14253 +
14254 + pANTLR3_BASE_TREE root_0;
14255 +
14256 + pANTLR3_COMMON_TOKEN before;
14257 + pANTLR3_COMMON_TOKEN after;
14258 +
14259 + pANTLR3_BASE_TREE before_tree;
14260 + pANTLR3_BASE_TREE after_tree;
14261 +
14262 + /* Initialize rule variables
14263 + */
14264 +
14265 +
14266 + root_0 = NULL;
14267 +
14268 + before = NULL;
14269 + after = NULL;
14270 + retval.start = LT(1); retval.stop = retval.start;
14271 +
14272 + before_tree = NULL;
14273 + after_tree = NULL;
14274 +
14275 +
14276 + retval.tree = NULL;
14277 + {
14278 + {
14279 + // RSP.g:66:8: (before= BEFORE | after= AFTER )
14280 +
14281 + ANTLR3_UINT32 alt9;
14282 +
14283 + alt9=2;
14284 +
14285 + switch ( LA(1) )
14286 + {
14287 + case BEFORE:
14288 + {
14289 + alt9=1;
14290 + }
14291 + break;
14292 + case AFTER:
14293 + {
14294 + alt9=2;
14295 + }
14296 + break;
14297 +
14298 + default:
14299 + CONSTRUCTEX();
14300 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
14301 + EXCEPTION->message = (void *)"";
14302 + EXCEPTION->decisionNum = 9;
14303 + EXCEPTION->state = 0;
14304 +
14305 +
14306 + goto ruledateopEx;
14307 + }
14308 +
14309 + switch (alt9)
14310 + {
14311 + case 1:
14312 + // RSP.g:66:10: before= BEFORE
14313 + {
14314 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14315 +
14316 + before = (pANTLR3_COMMON_TOKEN) MATCHT(BEFORE, &FOLLOW_BEFORE_in_dateop337);
14317 + if (HASEXCEPTION())
14318 + {
14319 + goto ruledateopEx;
14320 + }
14321 +
14322 + before_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, before));
14323 + ADAPTOR->addChild(ADAPTOR, root_0, before_tree);
14324 +
14325 +
14326 + }
14327 + break;
14328 + case 2:
14329 + // RSP.g:67:4: after= AFTER
14330 + {
14331 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14332 +
14333 + after = (pANTLR3_COMMON_TOKEN) MATCHT(AFTER, &FOLLOW_AFTER_in_dateop344);
14334 + if (HASEXCEPTION())
14335 + {
14336 + goto ruledateopEx;
14337 + }
14338 +
14339 + after_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, after));
14340 + ADAPTOR->addChild(ADAPTOR, root_0, after_tree);
14341 +
14342 +
14343 + }
14344 + break;
14345 +
14346 + }
14347 + }
14348 + }
14349 +
14350 +
14351 + // This is where rules clean up and exit
14352 + //
14353 + goto ruledateopEx; /* Prevent compiler warnings */
14354 + ruledateopEx: ;
14355 + retval.stop = LT(-1);
14356 +
14357 + retval.stop = LT(-1);
14358 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14359 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14360 +
14361 + if (HASEXCEPTION())
14362 + {
14363 + PREPORTERROR();
14364 + PRECOVER();
14365 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14366 + }
14367 +
14368 +
14369 + return retval;
14370 +}
14371 +/* $ANTLR end dateop */
14372 +
14373 +/**
14374 + * $ANTLR start datespec
14375 + * RSP.g:70:1: datespec : ( dateref | INT dateintval dateop dateref -> ^( dateop dateref INT dateintval ) );
14376 + */
14377 +static RSPParser_datespec_return
14378 +datespec(pRSPParser ctx)
14379 +{
14380 + RSPParser_datespec_return retval;
14381 +
14382 + pANTLR3_BASE_TREE root_0;
14383 +
14384 + pANTLR3_COMMON_TOKEN INT34;
14385 + RSPParser_dateref_return dateref33;
14386 + #undef RETURN_TYPE_dateref33
14387 + #define RETURN_TYPE_dateref33 RSPParser_dateref_return
14388 +
14389 + RSPParser_dateintval_return dateintval35;
14390 + #undef RETURN_TYPE_dateintval35
14391 + #define RETURN_TYPE_dateintval35 RSPParser_dateintval_return
14392 +
14393 + RSPParser_dateop_return dateop36;
14394 + #undef RETURN_TYPE_dateop36
14395 + #define RETURN_TYPE_dateop36 RSPParser_dateop_return
14396 +
14397 + RSPParser_dateref_return dateref37;
14398 + #undef RETURN_TYPE_dateref37
14399 + #define RETURN_TYPE_dateref37 RSPParser_dateref_return
14400 +
14401 + pANTLR3_BASE_TREE INT34_tree;
14402 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_INT;
14403 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateintval;
14404 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateref;
14405 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_dateop;
14406 + /* Initialize rule variables
14407 + */
14408 +
14409 +
14410 + root_0 = NULL;
14411 +
14412 + INT34 = NULL;
14413 + dateref33.tree = NULL;
14414 +
14415 + dateintval35.tree = NULL;
14416 +
14417 + dateop36.tree = NULL;
14418 +
14419 + dateref37.tree = NULL;
14420 +
14421 + retval.start = LT(1); retval.stop = retval.start;
14422 +
14423 + INT34_tree = NULL;
14424 +
14425 + stream_INT = NULL;
14426 + #define CREATE_stream_INT if (stream_INT == NULL) {stream_INT = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token INT"); }
14427 + stream_dateintval = NULL;
14428 + #define CREATE_stream_dateintval if (stream_dateintval == NULL) {stream_dateintval = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule dateintval"); }
14429 + stream_dateref = NULL;
14430 + #define CREATE_stream_dateref if (stream_dateref == NULL) {stream_dateref = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule dateref"); }
14431 + stream_dateop = NULL;
14432 + #define CREATE_stream_dateop if (stream_dateop == NULL) {stream_dateop = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule dateop"); }
14433 +
14434 + retval.tree = NULL;
14435 + {
14436 + {
14437 + // RSP.g:70:9: ( dateref | INT dateintval dateop dateref -> ^( dateop dateref INT dateintval ) )
14438 +
14439 + ANTLR3_UINT32 alt10;
14440 +
14441 + alt10=2;
14442 +
14443 + switch ( LA(1) )
14444 + {
14445 + case DATE:
14446 + case TODAY:
14447 + {
14448 + alt10=1;
14449 + }
14450 + break;
14451 + case INT:
14452 + {
14453 + alt10=2;
14454 + }
14455 + break;
14456 +
14457 + default:
14458 + CONSTRUCTEX();
14459 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
14460 + EXCEPTION->message = (void *)"";
14461 + EXCEPTION->decisionNum = 10;
14462 + EXCEPTION->state = 0;
14463 +
14464 +
14465 + goto ruledatespecEx;
14466 + }
14467 +
14468 + switch (alt10)
14469 + {
14470 + case 1:
14471 + // RSP.g:70:11: dateref
14472 + {
14473 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14474 +
14475 + FOLLOWPUSH(FOLLOW_dateref_in_datespec353);
14476 + dateref33=dateref(ctx);
14477 +
14478 + FOLLOWPOP();
14479 + if (HASEXCEPTION())
14480 + {
14481 + goto ruledatespecEx;
14482 + }
14483 +
14484 + ADAPTOR->addChild(ADAPTOR, root_0, dateref33.tree);
14485 +
14486 + }
14487 + break;
14488 + case 2:
14489 + // RSP.g:71:4: INT dateintval dateop dateref
14490 + {
14491 + INT34 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_datespec358);
14492 + if (HASEXCEPTION())
14493 + {
14494 + goto ruledatespecEx;
14495 + }
14496 +
14497 + CREATE_stream_INT; stream_INT->add(stream_INT, INT34, NULL);
14498 +
14499 + FOLLOWPUSH(FOLLOW_dateintval_in_datespec360);
14500 + dateintval35=dateintval(ctx);
14501 +
14502 + FOLLOWPOP();
14503 + if (HASEXCEPTION())
14504 + {
14505 + goto ruledatespecEx;
14506 + }
14507 +
14508 + CREATE_stream_dateintval; stream_dateintval->add(stream_dateintval, dateintval35.tree, NULL);
14509 + FOLLOWPUSH(FOLLOW_dateop_in_datespec362);
14510 + dateop36=dateop(ctx);
14511 +
14512 + FOLLOWPOP();
14513 + if (HASEXCEPTION())
14514 + {
14515 + goto ruledatespecEx;
14516 + }
14517 +
14518 + CREATE_stream_dateop; stream_dateop->add(stream_dateop, dateop36.tree, NULL);
14519 + FOLLOWPUSH(FOLLOW_dateref_in_datespec364);
14520 + dateref37=dateref(ctx);
14521 +
14522 + FOLLOWPOP();
14523 + if (HASEXCEPTION())
14524 + {
14525 + goto ruledatespecEx;
14526 + }
14527 +
14528 + CREATE_stream_dateref; stream_dateref->add(stream_dateref, dateref37.tree, NULL);
14529 +
14530 +
14531 + /* AST REWRITE
14532 + * elements : dateop, INT, dateintval, dateref
14533 + * token labels :
14534 + * rule labels : retval
14535 + * token list labels :
14536 + * rule list labels :
14537 + */
14538 + {
14539 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
14540 +
14541 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
14542 +
14543 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14544 + retval.tree = root_0;
14545 + // 71:34: -> ^( dateop dateref INT dateintval )
14546 + {
14547 + // RSP.g:71:37: ^( dateop dateref INT dateintval )
14548 + {
14549 + pANTLR3_BASE_TREE root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14550 + root_1 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, stream_dateop == NULL ? NULL : stream_dateop->nextNode(stream_dateop), root_1));
14551 +
14552 + ADAPTOR->addChild(ADAPTOR, root_1, stream_dateref == NULL ? NULL : stream_dateref->nextTree(stream_dateref));
14553 + ADAPTOR->addChild(ADAPTOR, root_1, stream_INT == NULL ? NULL : stream_INT->nextNode(stream_INT));
14554 + ADAPTOR->addChild(ADAPTOR, root_1, stream_dateintval == NULL ? NULL : stream_dateintval->nextTree(stream_dateintval));
14555 +
14556 + ADAPTOR->addChild(ADAPTOR, root_0, root_1);
14557 + }
14558 +
14559 + }
14560 +
14561 + retval.tree = root_0; // set result root
14562 + if (stream_retval != NULL) stream_retval->free(stream_retval);
14563 +
14564 +
14565 + }
14566 + }
14567 + break;
14568 +
14569 + }
14570 + }
14571 + }
14572 +
14573 +
14574 + // This is where rules clean up and exit
14575 + //
14576 + goto ruledatespecEx; /* Prevent compiler warnings */
14577 + ruledatespecEx: ;
14578 + retval.stop = LT(-1);
14579 +
14580 + retval.stop = LT(-1);
14581 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14582 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14583 + if (stream_INT != NULL) stream_INT->free(stream_INT);
14584 + if (stream_dateintval != NULL) stream_dateintval->free(stream_dateintval);
14585 + if (stream_dateref != NULL) stream_dateref->free(stream_dateref);
14586 + if (stream_dateop != NULL) stream_dateop->free(stream_dateop);
14587 +
14588 + if (HASEXCEPTION())
14589 + {
14590 + PREPORTERROR();
14591 + PRECOVER();
14592 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14593 + }
14594 +
14595 +
14596 + return retval;
14597 +}
14598 +/* $ANTLR end datespec */
14599 +
14600 +/**
14601 + * $ANTLR start dateref
14602 + * RSP.g:74:1: dateref : (date= DATE | today= TODAY );
14603 + */
14604 +static RSPParser_dateref_return
14605 +dateref(pRSPParser ctx)
14606 +{
14607 + RSPParser_dateref_return retval;
14608 +
14609 + pANTLR3_BASE_TREE root_0;
14610 +
14611 + pANTLR3_COMMON_TOKEN date;
14612 + pANTLR3_COMMON_TOKEN today;
14613 +
14614 + pANTLR3_BASE_TREE date_tree;
14615 + pANTLR3_BASE_TREE today_tree;
14616 +
14617 + /* Initialize rule variables
14618 + */
14619 +
14620 +
14621 + root_0 = NULL;
14622 +
14623 + date = NULL;
14624 + today = NULL;
14625 + retval.start = LT(1); retval.stop = retval.start;
14626 +
14627 + date_tree = NULL;
14628 + today_tree = NULL;
14629 +
14630 +
14631 + retval.tree = NULL;
14632 + {
14633 + {
14634 + // RSP.g:74:9: (date= DATE | today= TODAY )
14635 +
14636 + ANTLR3_UINT32 alt11;
14637 +
14638 + alt11=2;
14639 +
14640 + switch ( LA(1) )
14641 + {
14642 + case DATE:
14643 + {
14644 + alt11=1;
14645 + }
14646 + break;
14647 + case TODAY:
14648 + {
14649 + alt11=2;
14650 + }
14651 + break;
14652 +
14653 + default:
14654 + CONSTRUCTEX();
14655 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
14656 + EXCEPTION->message = (void *)"";
14657 + EXCEPTION->decisionNum = 11;
14658 + EXCEPTION->state = 0;
14659 +
14660 +
14661 + goto ruledaterefEx;
14662 + }
14663 +
14664 + switch (alt11)
14665 + {
14666 + case 1:
14667 + // RSP.g:74:11: date= DATE
14668 + {
14669 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14670 +
14671 + date = (pANTLR3_COMMON_TOKEN) MATCHT(DATE, &FOLLOW_DATE_in_dateref388);
14672 + if (HASEXCEPTION())
14673 + {
14674 + goto ruledaterefEx;
14675 + }
14676 +
14677 + date_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, date));
14678 + ADAPTOR->addChild(ADAPTOR, root_0, date_tree);
14679 +
14680 +
14681 + }
14682 + break;
14683 + case 2:
14684 + // RSP.g:75:4: today= TODAY
14685 + {
14686 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14687 +
14688 + today = (pANTLR3_COMMON_TOKEN) MATCHT(TODAY, &FOLLOW_TODAY_in_dateref395);
14689 + if (HASEXCEPTION())
14690 + {
14691 + goto ruledaterefEx;
14692 + }
14693 +
14694 + today_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, today));
14695 + ADAPTOR->addChild(ADAPTOR, root_0, today_tree);
14696 +
14697 +
14698 + }
14699 + break;
14700 +
14701 + }
14702 + }
14703 + }
14704 +
14705 +
14706 + // This is where rules clean up and exit
14707 + //
14708 + goto ruledaterefEx; /* Prevent compiler warnings */
14709 + ruledaterefEx: ;
14710 + retval.stop = LT(-1);
14711 +
14712 + retval.stop = LT(-1);
14713 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14714 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14715 +
14716 + if (HASEXCEPTION())
14717 + {
14718 + PREPORTERROR();
14719 + PRECOVER();
14720 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14721 + }
14722 +
14723 +
14724 + return retval;
14725 +}
14726 +/* $ANTLR end dateref */
14727 +
14728 +/**
14729 + * $ANTLR start dateintval
14730 + * RSP.g:78:1: dateintval : (day= DAY | week= WEEK | month= MONTH | year= YEAR );
14731 + */
14732 +static RSPParser_dateintval_return
14733 +dateintval(pRSPParser ctx)
14734 +{
14735 + RSPParser_dateintval_return retval;
14736 +
14737 + pANTLR3_BASE_TREE root_0;
14738 +
14739 + pANTLR3_COMMON_TOKEN day;
14740 + pANTLR3_COMMON_TOKEN week;
14741 + pANTLR3_COMMON_TOKEN month;
14742 + pANTLR3_COMMON_TOKEN year;
14743 +
14744 + pANTLR3_BASE_TREE day_tree;
14745 + pANTLR3_BASE_TREE week_tree;
14746 + pANTLR3_BASE_TREE month_tree;
14747 + pANTLR3_BASE_TREE year_tree;
14748 +
14749 + /* Initialize rule variables
14750 + */
14751 +
14752 +
14753 + root_0 = NULL;
14754 +
14755 + day = NULL;
14756 + week = NULL;
14757 + month = NULL;
14758 + year = NULL;
14759 + retval.start = LT(1); retval.stop = retval.start;
14760 +
14761 + day_tree = NULL;
14762 + week_tree = NULL;
14763 + month_tree = NULL;
14764 + year_tree = NULL;
14765 +
14766 +
14767 + retval.tree = NULL;
14768 + {
14769 + {
14770 + // RSP.g:79:2: (day= DAY | week= WEEK | month= MONTH | year= YEAR )
14771 +
14772 + ANTLR3_UINT32 alt12;
14773 +
14774 + alt12=4;
14775 +
14776 + switch ( LA(1) )
14777 + {
14778 + case DAY:
14779 + {
14780 + alt12=1;
14781 + }
14782 + break;
14783 + case WEEK:
14784 + {
14785 + alt12=2;
14786 + }
14787 + break;
14788 + case MONTH:
14789 + {
14790 + alt12=3;
14791 + }
14792 + break;
14793 + case YEAR:
14794 + {
14795 + alt12=4;
14796 + }
14797 + break;
14798 +
14799 + default:
14800 + CONSTRUCTEX();
14801 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
14802 + EXCEPTION->message = (void *)"";
14803 + EXCEPTION->decisionNum = 12;
14804 + EXCEPTION->state = 0;
14805 +
14806 +
14807 + goto ruledateintvalEx;
14808 + }
14809 +
14810 + switch (alt12)
14811 + {
14812 + case 1:
14813 + // RSP.g:79:4: day= DAY
14814 + {
14815 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14816 +
14817 + day = (pANTLR3_COMMON_TOKEN) MATCHT(DAY, &FOLLOW_DAY_in_dateintval408);
14818 + if (HASEXCEPTION())
14819 + {
14820 + goto ruledateintvalEx;
14821 + }
14822 +
14823 + day_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, day));
14824 + ADAPTOR->addChild(ADAPTOR, root_0, day_tree);
14825 +
14826 +
14827 + }
14828 + break;
14829 + case 2:
14830 + // RSP.g:80:4: week= WEEK
14831 + {
14832 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14833 +
14834 + week = (pANTLR3_COMMON_TOKEN) MATCHT(WEEK, &FOLLOW_WEEK_in_dateintval415);
14835 + if (HASEXCEPTION())
14836 + {
14837 + goto ruledateintvalEx;
14838 + }
14839 +
14840 + week_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, week));
14841 + ADAPTOR->addChild(ADAPTOR, root_0, week_tree);
14842 +
14843 +
14844 + }
14845 + break;
14846 + case 3:
14847 + // RSP.g:81:4: month= MONTH
14848 + {
14849 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14850 +
14851 + month = (pANTLR3_COMMON_TOKEN) MATCHT(MONTH, &FOLLOW_MONTH_in_dateintval422);
14852 + if (HASEXCEPTION())
14853 + {
14854 + goto ruledateintvalEx;
14855 + }
14856 +
14857 + month_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, month));
14858 + ADAPTOR->addChild(ADAPTOR, root_0, month_tree);
14859 +
14860 +
14861 + }
14862 + break;
14863 + case 4:
14864 + // RSP.g:82:4: year= YEAR
14865 + {
14866 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
14867 +
14868 + year = (pANTLR3_COMMON_TOKEN) MATCHT(YEAR, &FOLLOW_YEAR_in_dateintval429);
14869 + if (HASEXCEPTION())
14870 + {
14871 + goto ruledateintvalEx;
14872 + }
14873 +
14874 + year_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, year));
14875 + ADAPTOR->addChild(ADAPTOR, root_0, year_tree);
14876 +
14877 +
14878 + }
14879 + break;
14880 +
14881 + }
14882 + }
14883 + }
14884 +
14885 +
14886 + // This is where rules clean up and exit
14887 + //
14888 + goto ruledateintvalEx; /* Prevent compiler warnings */
14889 + ruledateintvalEx: ;
14890 + retval.stop = LT(-1);
14891 +
14892 + retval.stop = LT(-1);
14893 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
14894 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
14895 +
14896 + if (HASEXCEPTION())
14897 + {
14898 + PREPORTERROR();
14899 + PRECOVER();
14900 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
14901 + }
14902 +
14903 +
14904 + return retval;
14905 +}
14906 +/* $ANTLR end dateintval */
14907 +/* End of parsing rules
14908 + * ==============================================
14909 + */
14910 +
14911 +/* ==============================================
14912 + * Syntactic predicates
14913 + */
14914 +/* End of syntactic predicates
14915 + * ==============================================
14916 + */
14917 +
14918 +
14919 +
14920 +
14921 +
14922 +
14923 +/* End of code
14924 + * =============================================================================
14925 + */
14926 diff --git a/src/pregen/RSPParser.h b/src/pregen/RSPParser.h
14927 new file mode 100644
14928 index 0000000..1796c0a
14929 --- /dev/null
14930 +++ b/src/pregen/RSPParser.h
14931 @@ -0,0 +1,365 @@
14932 +/** \file
14933 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
14934 + *
14935 + * - From the grammar source file : RSP.g
14936 + * - On : 2016-01-01 12:23:42
14937 + * - for the parser : RSPParserParser *
14938 + * Editing it, at least manually, is not wise.
14939 + *
14940 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
14941 + *
14942 + *
14943 + * The parser RSPParser has the callable functions (rules) shown below,
14944 + * which will invoke the code for the associated rule in the source grammar
14945 + * assuming that the input stream is pointing to a token/text stream that could begin
14946 + * this rule.
14947 + *
14948 + * For instance if you call the first (topmost) rule in a parser grammar, you will
14949 + * get the results of a full parse, but calling a rule half way through the grammar will
14950 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
14951 + * in editors and so on.
14952 + *
14953 + * The parser entry points are called indirectly (by function pointer to function) via
14954 + * a parser context typedef pRSPParser, which is returned from a call to RSPParserNew().
14955 + *
14956 + * The methods in pRSPParser are as follows:
14957 + *
14958 + * - RSPParser_query_return pRSPParser->query(pRSPParser)
14959 + * - RSPParser_expr_return pRSPParser->expr(pRSPParser)
14960 + * - RSPParser_aexpr_return pRSPParser->aexpr(pRSPParser)
14961 + * - RSPParser_crit_return pRSPParser->crit(pRSPParser)
14962 + * - RSPParser_strcrit_return pRSPParser->strcrit(pRSPParser)
14963 + * - RSPParser_strop_return pRSPParser->strop(pRSPParser)
14964 + * - RSPParser_intcrit_return pRSPParser->intcrit(pRSPParser)
14965 + * - RSPParser_intop_return pRSPParser->intop(pRSPParser)
14966 + * - RSPParser_datecrit_return pRSPParser->datecrit(pRSPParser)
14967 + * - RSPParser_dateop_return pRSPParser->dateop(pRSPParser)
14968 + * - RSPParser_datespec_return pRSPParser->datespec(pRSPParser)
14969 + * - RSPParser_dateref_return pRSPParser->dateref(pRSPParser)
14970 + * - RSPParser_dateintval_return pRSPParser->dateintval(pRSPParser)
14971 + *
14972 + * The return type for any particular rule is of course determined by the source
14973 + * grammar file.
14974 + */
14975 +// [The "BSD licence"]
14976 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
14977 +// http://www.temporal-wave.com
14978 +// http://www.linkedin.com/in/jimidle
14979 +//
14980 +// All rights reserved.
14981 +//
14982 +// Redistribution and use in source and binary forms, with or without
14983 +// modification, are permitted provided that the following conditions
14984 +// are met:
14985 +// 1. Redistributions of source code must retain the above copyright
14986 +// notice, this list of conditions and the following disclaimer.
14987 +// 2. Redistributions in binary form must reproduce the above copyright
14988 +// notice, this list of conditions and the following disclaimer in the
14989 +// documentation and/or other materials provided with the distribution.
14990 +// 3. The name of the author may not be used to endorse or promote products
14991 +// derived from this software without specific prior written permission.
14992 +//
14993 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14994 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
14995 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
14996 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
14997 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
14998 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
14999 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
15000 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15001 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
15002 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15003 +
15004 +#ifndef _RSPParser_H
15005 +#define _RSPParser_H
15006 +/* =============================================================================
15007 + * Standard antlr3 C runtime definitions
15008 + */
15009 +#include <antlr3.h>
15010 +
15011 +/* End of standard antlr 3 runtime definitions
15012 + * =============================================================================
15013 + */
15014 +
15015 +#ifdef __cplusplus
15016 +extern "C" {
15017 +#endif
15018 +
15019 +// Forward declare the context typedef so that we can use it before it is
15020 +// properly defined. Delegators and delegates (from import statements) are
15021 +// interdependent and their context structures contain pointers to each other
15022 +// C only allows such things to be declared if you pre-declare the typedef.
15023 +//
15024 +typedef struct RSPParser_Ctx_struct RSPParser, * pRSPParser;
15025 +
15026 +
15027 +
15028 +#ifdef ANTLR3_WINDOWS
15029 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
15030 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
15031 +// initialized but unused variable - tree rewrite variables declared but not needed
15032 +// Unreferenced local variable - lexer rule declares but does not always use _type
15033 +// potentially unitialized variable used - retval always returned from a rule
15034 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
15035 +//
15036 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
15037 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
15038 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
15039 +// this is a matter of orthogonality hence I disable that one.
15040 +//
15041 +#pragma warning( disable : 4100 )
15042 +#pragma warning( disable : 4101 )
15043 +#pragma warning( disable : 4127 )
15044 +#pragma warning( disable : 4189 )
15045 +#pragma warning( disable : 4505 )
15046 +#pragma warning( disable : 4701 )
15047 +#endif
15048 +typedef struct RSPParser_query_return_struct
15049 +{
15050 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15051 + */
15052 + pANTLR3_COMMON_TOKEN start;
15053 + pANTLR3_COMMON_TOKEN stop;
15054 + pANTLR3_BASE_TREE tree;
15055 +
15056 +}
15057 + RSPParser_query_return;
15058 +
15059 +typedef struct RSPParser_expr_return_struct
15060 +{
15061 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15062 + */
15063 + pANTLR3_COMMON_TOKEN start;
15064 + pANTLR3_COMMON_TOKEN stop;
15065 + pANTLR3_BASE_TREE tree;
15066 +
15067 +}
15068 + RSPParser_expr_return;
15069 +
15070 +typedef struct RSPParser_aexpr_return_struct
15071 +{
15072 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15073 + */
15074 + pANTLR3_COMMON_TOKEN start;
15075 + pANTLR3_COMMON_TOKEN stop;
15076 + pANTLR3_BASE_TREE tree;
15077 +
15078 +}
15079 + RSPParser_aexpr_return;
15080 +
15081 +typedef struct RSPParser_crit_return_struct
15082 +{
15083 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15084 + */
15085 + pANTLR3_COMMON_TOKEN start;
15086 + pANTLR3_COMMON_TOKEN stop;
15087 + pANTLR3_BASE_TREE tree;
15088 +
15089 +}
15090 + RSPParser_crit_return;
15091 +
15092 +typedef struct RSPParser_strcrit_return_struct
15093 +{
15094 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15095 + */
15096 + pANTLR3_COMMON_TOKEN start;
15097 + pANTLR3_COMMON_TOKEN stop;
15098 + pANTLR3_BASE_TREE tree;
15099 +
15100 +}
15101 + RSPParser_strcrit_return;
15102 +
15103 +typedef struct RSPParser_strop_return_struct
15104 +{
15105 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15106 + */
15107 + pANTLR3_COMMON_TOKEN start;
15108 + pANTLR3_COMMON_TOKEN stop;
15109 + pANTLR3_BASE_TREE tree;
15110 +
15111 +}
15112 + RSPParser_strop_return;
15113 +
15114 +typedef struct RSPParser_intcrit_return_struct
15115 +{
15116 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15117 + */
15118 + pANTLR3_COMMON_TOKEN start;
15119 + pANTLR3_COMMON_TOKEN stop;
15120 + pANTLR3_BASE_TREE tree;
15121 +
15122 +}
15123 + RSPParser_intcrit_return;
15124 +
15125 +typedef struct RSPParser_intop_return_struct
15126 +{
15127 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15128 + */
15129 + pANTLR3_COMMON_TOKEN start;
15130 + pANTLR3_COMMON_TOKEN stop;
15131 + pANTLR3_BASE_TREE tree;
15132 +
15133 +}
15134 + RSPParser_intop_return;
15135 +
15136 +typedef struct RSPParser_datecrit_return_struct
15137 +{
15138 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15139 + */
15140 + pANTLR3_COMMON_TOKEN start;
15141 + pANTLR3_COMMON_TOKEN stop;
15142 + pANTLR3_BASE_TREE tree;
15143 +
15144 +}
15145 + RSPParser_datecrit_return;
15146 +
15147 +typedef struct RSPParser_dateop_return_struct
15148 +{
15149 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15150 + */
15151 + pANTLR3_COMMON_TOKEN start;
15152 + pANTLR3_COMMON_TOKEN stop;
15153 + pANTLR3_BASE_TREE tree;
15154 +
15155 +}
15156 + RSPParser_dateop_return;
15157 +
15158 +typedef struct RSPParser_datespec_return_struct
15159 +{
15160 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15161 + */
15162 + pANTLR3_COMMON_TOKEN start;
15163 + pANTLR3_COMMON_TOKEN stop;
15164 + pANTLR3_BASE_TREE tree;
15165 +
15166 +}
15167 + RSPParser_datespec_return;
15168 +
15169 +typedef struct RSPParser_dateref_return_struct
15170 +{
15171 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15172 + */
15173 + pANTLR3_COMMON_TOKEN start;
15174 + pANTLR3_COMMON_TOKEN stop;
15175 + pANTLR3_BASE_TREE tree;
15176 +
15177 +}
15178 + RSPParser_dateref_return;
15179 +
15180 +typedef struct RSPParser_dateintval_return_struct
15181 +{
15182 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
15183 + */
15184 + pANTLR3_COMMON_TOKEN start;
15185 + pANTLR3_COMMON_TOKEN stop;
15186 + pANTLR3_BASE_TREE tree;
15187 +
15188 +}
15189 + RSPParser_dateintval_return;
15190 +
15191 +
15192 +
15193 +/** Context tracking structure for RSPParser
15194 + */
15195 +struct RSPParser_Ctx_struct
15196 +{
15197 + /** Built in ANTLR3 context tracker contains all the generic elements
15198 + * required for context tracking.
15199 + */
15200 + pANTLR3_PARSER pParser;
15201 +
15202 +
15203 + RSPParser_query_return (*query) (struct RSPParser_Ctx_struct * ctx);
15204 + RSPParser_expr_return (*expr) (struct RSPParser_Ctx_struct * ctx);
15205 + RSPParser_aexpr_return (*aexpr) (struct RSPParser_Ctx_struct * ctx);
15206 + RSPParser_crit_return (*crit) (struct RSPParser_Ctx_struct * ctx);
15207 + RSPParser_strcrit_return (*strcrit) (struct RSPParser_Ctx_struct * ctx);
15208 + RSPParser_strop_return (*strop) (struct RSPParser_Ctx_struct * ctx);
15209 + RSPParser_intcrit_return (*intcrit) (struct RSPParser_Ctx_struct * ctx);
15210 + RSPParser_intop_return (*intop) (struct RSPParser_Ctx_struct * ctx);
15211 + RSPParser_datecrit_return (*datecrit) (struct RSPParser_Ctx_struct * ctx);
15212 + RSPParser_dateop_return (*dateop) (struct RSPParser_Ctx_struct * ctx);
15213 + RSPParser_datespec_return (*datespec) (struct RSPParser_Ctx_struct * ctx);
15214 + RSPParser_dateref_return (*dateref) (struct RSPParser_Ctx_struct * ctx);
15215 + RSPParser_dateintval_return (*dateintval) (struct RSPParser_Ctx_struct * ctx);
15216 + // Delegated rules
15217 + const char * (*getGrammarFileName)();
15218 + void (*free) (struct RSPParser_Ctx_struct * ctx);
15219 + /* @headerFile.members() */
15220 + pANTLR3_BASE_TREE_ADAPTOR adaptor;
15221 + pANTLR3_VECTOR_FACTORY vectors;
15222 + /* End @headerFile.members() */
15223 +};
15224 +
15225 +// Function protoypes for the constructor functions that external translation units
15226 +// such as delegators and delegates may wish to call.
15227 +//
15228 +ANTLR3_API pRSPParser RSPParserNew (pANTLR3_COMMON_TOKEN_STREAM instream);
15229 +ANTLR3_API pRSPParser RSPParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
15230 +
15231 +/** Symbolic definitions of all the tokens that the parser will work with.
15232 + * \{
15233 + *
15234 + * Antlr will define EOF, but we can't use that as it it is too common in
15235 + * in C header files and that would be confusing. There is no way to filter this out at the moment
15236 + * so we just undef it here for now. That isn't the value we get back from C recognizers
15237 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
15238 + */
15239 +#ifdef EOF
15240 +#undef EOF
15241 +#endif
15242 +#ifdef Tokens
15243 +#undef Tokens
15244 +#endif
15245 +#define STARTSW 14
15246 +#define WEEK 26
15247 +#define TODAY 24
15248 +#define YEAR 28
15249 +#define ENDSW 15
15250 +#define GTE 20
15251 +#define BEFORE 21
15252 +#define DAY 25
15253 +#define INT 16
15254 +#define NOT 11
15255 +#define AFTER 22
15256 +#define AND 6
15257 +#define EOF -1
15258 +#define LTE 19
15259 +#define MONTH 27
15260 +#define DIGIT19 31
15261 +#define INCLUDES 13
15262 +#define STR 10
15263 +#define QUOTE 29
15264 +#define WS 30
15265 +#define GREATER 18
15266 +#define NEWLINE 4
15267 +#define LPAR 7
15268 +#define EQUAL 12
15269 +#define OR 5
15270 +#define LESS 17
15271 +#define RPAR 8
15272 +#define FIELD 9
15273 +#define ESCAPED 33
15274 +#define DATE 23
15275 +#define DIGIT09 32
15276 +#ifdef EOF
15277 +#undef EOF
15278 +#define EOF ANTLR3_TOKEN_EOF
15279 +#endif
15280 +
15281 +#ifndef TOKENSOURCE
15282 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
15283 +#endif
15284 +
15285 +/* End of token definitions for RSPParser
15286 + * =============================================================================
15287 + */
15288 +/** \} */
15289 +
15290 +#ifdef __cplusplus
15291 +}
15292 +#endif
15293 +
15294 +#endif
15295 +
15296 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
15297 diff --git a/src/pregen/SMARTPL.u b/src/pregen/SMARTPL.u
15298 new file mode 100644
15299 index 0000000..2a66bf3
15300 --- /dev/null
15301 +++ b/src/pregen/SMARTPL.u
15302 @@ -0,0 +1,6 @@
15303 +SMARTPLParser.c : SMARTPL.g
15304 +./SMARTPL.tokens : SMARTPL.g
15305 +SMARTPLParser.h : SMARTPL.g
15306 +SMARTPLLexer.c : SMARTPL.g
15307 +SMARTPLLexer.h : SMARTPL.g
15308 +ANTLR_PRODUCTS += SMARTPLParser.c ./SMARTPL.tokens SMARTPLParser.h SMARTPLLexer.c SMARTPLLexer.h
15309 \ No newline at end of file
15310 diff --git a/src/pregen/SMARTPL2SQL.c b/src/pregen/SMARTPL2SQL.c
15311 new file mode 100644
15312 index 0000000..bd93752
15313 --- /dev/null
15314 +++ b/src/pregen/SMARTPL2SQL.c
15315 @@ -0,0 +1,1649 @@
15316 +/** \file
15317 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
15318 + *
15319 + * - From the grammar source file : SMARTPL2SQL.g
15320 + * - On : 2016-01-01 12:23:44
15321 + * - for the tree parser : SMARTPL2SQLTreeParser *
15322 + * Editing it, at least manually, is not wise.
15323 + *
15324 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
15325 + *
15326 + *
15327 +*/
15328 +// [The "BSD licence"]
15329 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
15330 +// http://www.temporal-wave.com
15331 +// http://www.linkedin.com/in/jimidle
15332 +//
15333 +// All rights reserved.
15334 +//
15335 +// Redistribution and use in source and binary forms, with or without
15336 +// modification, are permitted provided that the following conditions
15337 +// are met:
15338 +// 1. Redistributions of source code must retain the above copyright
15339 +// notice, this list of conditions and the following disclaimer.
15340 +// 2. Redistributions in binary form must reproduce the above copyright
15341 +// notice, this list of conditions and the following disclaimer in the
15342 +// documentation and/or other materials provided with the distribution.
15343 +// 3. The name of the author may not be used to endorse or promote products
15344 +// derived from this software without specific prior written permission.
15345 +//
15346 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15347 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15348 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
15349 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
15350 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
15351 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
15352 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
15353 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
15354 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
15355 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15356 +
15357 +
15358 +/* =============================================================================
15359 + * This is what the grammar programmer asked us to put at the top of every file.
15360 + */
15361 +
15362 + #include <stdio.h>
15363 + #include <stdlib.h>
15364 + #include <string.h>
15365 + #include <limits.h>
15366 + #include <errno.h>
15367 + #include <time.h>
15368 + #include <sqlite3.h>
15369 +
15370 + #include "logger.h"
15371 + #include "db.h"
15372 +
15373 +/* End of Header action.
15374 + * =============================================================================
15375 + */
15376 +/* -----------------------------------------
15377 + * Include the ANTLR3 generated header file.
15378 + */
15379 +#include "SMARTPL2SQL.h"
15380 +/* ----------------------------------------- */
15381 +
15382 +
15383 +
15384 +
15385 +
15386 +/* MACROS that hide the C interface implementations from the
15387 + * generated code, which makes it a little more understandable to the human eye.
15388 + * I am very much against using C pre-processor macros for function calls and bits
15389 + * of code as you cannot see what is happening when single stepping in debuggers
15390 + * and so on. The exception (in my book at least) is for generated code, where you are
15391 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
15392 + * hides some indirect calls, but is always referring to the input stream. This is
15393 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
15394 + * the runtime interfaces without changing the generated code too often, without
15395 + * confusing the reader of the generated output, who may not wish to know the gory
15396 + * details of the interface inheritance.
15397 + */
15398 +
15399 +#define CTX ctx
15400 +
15401 +/* Aids in accessing scopes for grammar programmers
15402 + */
15403 +#undef SCOPE_TYPE
15404 +#undef SCOPE_STACK
15405 +#undef SCOPE_TOP
15406 +#define SCOPE_TYPE(scope) pSMARTPL2SQL_##scope##_SCOPE
15407 +#define SCOPE_STACK(scope) pSMARTPL2SQL_##scope##Stack
15408 +#define SCOPE_TOP(scope) ctx->pSMARTPL2SQL_##scope##Top
15409 +#define SCOPE_SIZE(scope) ctx->pSMARTPL2SQL_##scope##Stack_limit
15410 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
15411 +
15412 +/* Macros for accessing things in the parser
15413 + */
15414 +
15415 +#undef PARSER
15416 +#undef RECOGNIZER
15417 +#undef HAVEPARSEDRULE
15418 +#undef INPUT
15419 +#undef STRSTREAM
15420 +#undef HASEXCEPTION
15421 +#undef EXCEPTION
15422 +#undef MATCHT
15423 +#undef MATCHANYT
15424 +#undef FOLLOWSTACK
15425 +#undef FOLLOWPUSH
15426 +#undef FOLLOWPOP
15427 +#undef PRECOVER
15428 +#undef PREPORTERROR
15429 +#undef LA
15430 +#undef LT
15431 +#undef CONSTRUCTEX
15432 +#undef CONSUME
15433 +#undef MARK
15434 +#undef REWIND
15435 +#undef REWINDLAST
15436 +#undef PERRORRECOVERY
15437 +#undef HASFAILED
15438 +#undef FAILEDFLAG
15439 +#undef RECOVERFROMMISMATCHEDSET
15440 +#undef RECOVERFROMMISMATCHEDELEMENT
15441 +#undef BACKTRACKING
15442 +#undef ADAPTOR
15443 +#undef RULEMEMO
15444 +#undef SEEK
15445 +#undef INDEX
15446 +#undef DBG
15447 +
15448 +#define PARSER ctx->pTreeParser
15449 +#define RECOGNIZER PARSER->rec
15450 +#define PSRSTATE RECOGNIZER->state
15451 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
15452 +#define INPUT PARSER->ctnstream
15453 +#define ISTREAM INPUT->tnstream->istream
15454 +#define STRSTREAM INPUT->tnstream
15455 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
15456 +#define EXCEPTION PSRSTATE->exception
15457 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
15458 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
15459 +#define FOLLOWSTACK PSRSTATE->following
15460 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
15461 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
15462 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
15463 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
15464 +#define LA(n) ISTREAM->_LA(ISTREAM, n)
15465 +#define LT(n) INPUT->tnstream->_LT(INPUT->tnstream, n)
15466 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
15467 +#define CONSUME() ISTREAM->consume(ISTREAM)
15468 +#define MARK() ISTREAM->mark(ISTREAM)
15469 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
15470 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
15471 +#define PERRORRECOVERY PSRSTATE->errorRecovery
15472 +#define FAILEDFLAG PSRSTATE->failed
15473 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
15474 +#define BACKTRACKING PSRSTATE->backtracking
15475 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
15476 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
15477 +#define ADAPTOR INPUT->adaptor
15478 +#define RULEMEMO PSRSTATE->ruleMemo
15479 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
15480 +#define INDEX() ISTREAM->index(ISTREAM)
15481 +#define DBG RECOGNIZER->debugger
15482 +
15483 +
15484 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
15485 +
15486 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
15487 + * then for the present you must use different names for your defines as these are hard coded
15488 + * in the code generator. It would be better not to use such names internally, and maybe
15489 + * we can change this in a forthcoming release. I deliberately do not #undef these
15490 + * here as this will at least give you a redefined error somewhere if they clash.
15491 + */
15492 +#define UP ANTLR3_TOKEN_UP
15493 +#define DOWN ANTLR3_TOKEN_DOWN
15494 +#define EOR ANTLR3_TOKEN_EOR
15495 +#define INVALID ANTLR3_TOKEN_INVALID
15496 +
15497 +
15498 +/* =============================================================================
15499 + * Functions to create and destroy scopes. First come the rule scopes, followed
15500 + * by the global declared scopes.
15501 + */
15502 +
15503 +
15504 +
15505 +/* ============================================================================= */
15506 +
15507 +/* =============================================================================
15508 + * Start of recognizer
15509 + */
15510 +
15511 +
15512 +
15513 +/** \brief Table of all token names in symbolic order, mainly used for
15514 + * error reporting.
15515 + */
15516 +pANTLR3_UINT8 SMARTPL2SQLTokenNames[28+4]
15517 + = {
15518 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
15519 + (pANTLR3_UINT8) "<EOR>",
15520 + (pANTLR3_UINT8) "<DOWN>",
15521 + (pANTLR3_UINT8) "<UP>",
15522 + (pANTLR3_UINT8) "STR",
15523 + (pANTLR3_UINT8) "OR",
15524 + (pANTLR3_UINT8) "AND",
15525 + (pANTLR3_UINT8) "NOT",
15526 + (pANTLR3_UINT8) "LPAR",
15527 + (pANTLR3_UINT8) "RPAR",
15528 + (pANTLR3_UINT8) "STRTAG",
15529 + (pANTLR3_UINT8) "INCLUDES",
15530 + (pANTLR3_UINT8) "IS",
15531 + (pANTLR3_UINT8) "INTTAG",
15532 + (pANTLR3_UINT8) "INTBOOL",
15533 + (pANTLR3_UINT8) "INT",
15534 + (pANTLR3_UINT8) "DATETAG",
15535 + (pANTLR3_UINT8) "AFTER",
15536 + (pANTLR3_UINT8) "BEFORE",
15537 + (pANTLR3_UINT8) "ENUMTAG",
15538 + (pANTLR3_UINT8) "ENUMVAL",
15539 + (pANTLR3_UINT8) "DATE",
15540 + (pANTLR3_UINT8) "AGO",
15541 + (pANTLR3_UINT8) "DATINTERVAL",
15542 + (pANTLR3_UINT8) "GREATER",
15543 + (pANTLR3_UINT8) "GREATEREQUAL",
15544 + (pANTLR3_UINT8) "LESS",
15545 + (pANTLR3_UINT8) "LESSEQUAL",
15546 + (pANTLR3_UINT8) "EQUAL",
15547 + (pANTLR3_UINT8) "WHITESPACE",
15548 + (pANTLR3_UINT8) "'{'",
15549 + (pANTLR3_UINT8) "'}'"
15550 + };
15551 +
15552 +
15553 +
15554 +// Forward declare the locally static matching functions we have generated.
15555 +//
15556 +static SMARTPL2SQL_playlist_return playlist (pSMARTPL2SQL ctx);
15557 +static pANTLR3_STRING expression (pSMARTPL2SQL ctx);
15558 +static int dateval (pSMARTPL2SQL ctx);
15559 +static int interval (pSMARTPL2SQL ctx);
15560 +static void SMARTPL2SQLFree(pSMARTPL2SQL ctx);
15561 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
15562 + * we need a function that knows how to free a return scope when the list is destroyed.
15563 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
15564 + */
15565 +static void ANTLR3_CDECL freeScope(void * scope)
15566 +{
15567 + ANTLR3_FREE(scope);
15568 +}
15569 +
15570 +/** \brief Name of the grammar file that generated this code
15571 + */
15572 +static const char fileName[] = "SMARTPL2SQL.g";
15573 +
15574 +/** \brief Return the name of the grammar file that generated this code.
15575 + */
15576 +static const char * getGrammarFileName()
15577 +{
15578 + return fileName;
15579 +}
15580 +/** \brief Create a new SMARTPL2SQL parser and return a context for it.
15581 + *
15582 + * \param[in] instream Pointer to an input stream interface.
15583 + *
15584 + * \return Pointer to new parser context upon success.
15585 + */
15586 +ANTLR3_API pSMARTPL2SQL
15587 +SMARTPL2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream)
15588 +{
15589 + // See if we can create a new parser with the standard constructor
15590 + //
15591 + return SMARTPL2SQLNewSSD(instream, NULL);
15592 +}
15593 +
15594 +/** \brief Create a new SMARTPL2SQL parser and return a context for it.
15595 + *
15596 + * \param[in] instream Pointer to an input stream interface.
15597 + *
15598 + * \return Pointer to new parser context upon success.
15599 + */
15600 +ANTLR3_API pSMARTPL2SQL
15601 +SMARTPL2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
15602 +{
15603 + pSMARTPL2SQL ctx; /* Context structure we will build and return */
15604 +
15605 + ctx = (pSMARTPL2SQL) ANTLR3_CALLOC(1, sizeof(SMARTPL2SQL));
15606 +
15607 + if (ctx == NULL)
15608 + {
15609 + // Failed to allocate memory for parser context
15610 + //
15611 + return NULL;
15612 + }
15613 +
15614 + /* -------------------------------------------------------------------
15615 + * Memory for basic structure is allocated, now to fill in
15616 + * the base ANTLR3 structures. We initialize the function pointers
15617 + * for the standard ANTLR3 parser function set, but upon return
15618 + * from here, the programmer may set the pointers to provide custom
15619 + * implementations of each function.
15620 + *
15621 + * We don't use the macros defined in SMARTPL2SQL.h here, in order that you can get a sense
15622 + * of what goes where.
15623 + */
15624 +
15625 + /* Create a base Tree parser/recognizer, using the supplied tree node stream
15626 + */
15627 + ctx->pTreeParser = antlr3TreeParserNewStream(ANTLR3_SIZE_HINT, instream, state);
15628 + /* Install the implementation of our SMARTPL2SQL interface
15629 + */
15630 + ctx->playlist = playlist;
15631 + ctx->expression = expression;
15632 + ctx->dateval = dateval;
15633 + ctx->interval = interval;
15634 + ctx->free = SMARTPL2SQLFree;
15635 + ctx->getGrammarFileName = getGrammarFileName;
15636 +
15637 + /* Install the scope pushing methods.
15638 + */
15639 +
15640 +
15641 +
15642 +
15643 +
15644 + /* Install the token table
15645 + */
15646 + PSRSTATE->tokenNames = SMARTPL2SQLTokenNames;
15647 +
15648 +
15649 + /* Return the newly built parser to the caller
15650 + */
15651 + return ctx;
15652 +}
15653 +
15654 +/** Free the parser resources
15655 + */
15656 + static void
15657 + SMARTPL2SQLFree(pSMARTPL2SQL ctx)
15658 + {
15659 + /* Free any scope memory
15660 + */
15661 +
15662 +
15663 + // Free this parser
15664 + //
15665 + ctx->pTreeParser->free(ctx->pTreeParser);
15666 + ANTLR3_FREE(ctx);
15667 +
15668 + /* Everything is released, so we can return
15669 + */
15670 + return;
15671 + }
15672 +
15673 +/** Return token names used by this tree parser
15674 + *
15675 + * The returned pointer is used as an index into the token names table (using the token
15676 + * number as the index).
15677 + *
15678 + * \return Pointer to first char * in the table.
15679 + */
15680 +static pANTLR3_UINT8 *getTokenNames()
15681 +{
15682 + return SMARTPL2SQLTokenNames;
15683 +}
15684 +
15685 +
15686 +
15687 +
15688 +/* Declare the bitsets
15689 + */
15690 +
15691 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_playlist66 */
15692 +static ANTLR3_BITWORD FOLLOW_STR_in_playlist66_bits[] = { ANTLR3_UINT64_LIT(0x0000000040000000) };
15693 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_playlist66 = { FOLLOW_STR_in_playlist66_bits, 1 };
15694 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_30_in_playlist68 */
15695 +static ANTLR3_BITWORD FOLLOW_30_in_playlist68_bits[] = { ANTLR3_UINT64_LIT(0x00000000000924E0) };
15696 +static ANTLR3_BITSET_LIST FOLLOW_30_in_playlist68 = { FOLLOW_30_in_playlist68_bits, 1 };
15697 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_playlist74 */
15698 +static ANTLR3_BITWORD FOLLOW_expression_in_playlist74_bits[] = { ANTLR3_UINT64_LIT(0x0000000080000000) };
15699 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_playlist74 = { FOLLOW_expression_in_playlist74_bits, 1 };
15700 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_31_in_playlist76 */
15701 +static ANTLR3_BITWORD FOLLOW_31_in_playlist76_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15702 +static ANTLR3_BITSET_LIST FOLLOW_31_in_playlist76 = { FOLLOW_31_in_playlist76_bits, 1 };
15703 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_expression101 */
15704 +static ANTLR3_BITWORD FOLLOW_NOT_in_expression101_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
15705 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_expression101 = { FOLLOW_NOT_in_expression101_bits, 1 };
15706 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_expression107 */
15707 +static ANTLR3_BITWORD FOLLOW_expression_in_expression107_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
15708 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_expression107 = { FOLLOW_expression_in_expression107_bits, 1 };
15709 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AND_in_expression118 */
15710 +static ANTLR3_BITWORD FOLLOW_AND_in_expression118_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
15711 +static ANTLR3_BITSET_LIST FOLLOW_AND_in_expression118 = { FOLLOW_AND_in_expression118_bits, 1 };
15712 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_expression124 */
15713 +static ANTLR3_BITWORD FOLLOW_expression_in_expression124_bits[] = { ANTLR3_UINT64_LIT(0x00000000000924E0) };
15714 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_expression124 = { FOLLOW_expression_in_expression124_bits, 1 };
15715 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_expression130 */
15716 +static ANTLR3_BITWORD FOLLOW_expression_in_expression130_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
15717 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_expression130 = { FOLLOW_expression_in_expression130_bits, 1 };
15718 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OR_in_expression141 */
15719 +static ANTLR3_BITWORD FOLLOW_OR_in_expression141_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000004) };
15720 +static ANTLR3_BITSET_LIST FOLLOW_OR_in_expression141 = { FOLLOW_OR_in_expression141_bits, 1 };
15721 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_expression147 */
15722 +static ANTLR3_BITWORD FOLLOW_expression_in_expression147_bits[] = { ANTLR3_UINT64_LIT(0x00000000000924E0) };
15723 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_expression147 = { FOLLOW_expression_in_expression147_bits, 1 };
15724 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_expression153 */
15725 +static ANTLR3_BITWORD FOLLOW_expression_in_expression153_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000008) };
15726 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_expression153 = { FOLLOW_expression_in_expression153_bits, 1 };
15727 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STRTAG_in_expression163 */
15728 +static ANTLR3_BITWORD FOLLOW_STRTAG_in_expression163_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000800) };
15729 +static ANTLR3_BITSET_LIST FOLLOW_STRTAG_in_expression163 = { FOLLOW_STRTAG_in_expression163_bits, 1 };
15730 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INCLUDES_in_expression165 */
15731 +static ANTLR3_BITWORD FOLLOW_INCLUDES_in_expression165_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000010) };
15732 +static ANTLR3_BITSET_LIST FOLLOW_INCLUDES_in_expression165 = { FOLLOW_INCLUDES_in_expression165_bits, 1 };
15733 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_expression167 */
15734 +static ANTLR3_BITWORD FOLLOW_STR_in_expression167_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15735 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_expression167 = { FOLLOW_STR_in_expression167_bits, 1 };
15736 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STRTAG_in_expression176 */
15737 +static ANTLR3_BITWORD FOLLOW_STRTAG_in_expression176_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001000) };
15738 +static ANTLR3_BITSET_LIST FOLLOW_STRTAG_in_expression176 = { FOLLOW_STRTAG_in_expression176_bits, 1 };
15739 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_IS_in_expression178 */
15740 +static ANTLR3_BITWORD FOLLOW_IS_in_expression178_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000010) };
15741 +static ANTLR3_BITSET_LIST FOLLOW_IS_in_expression178 = { FOLLOW_IS_in_expression178_bits, 1 };
15742 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_expression180 */
15743 +static ANTLR3_BITWORD FOLLOW_STR_in_expression180_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15744 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_expression180 = { FOLLOW_STR_in_expression180_bits, 1 };
15745 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INTTAG_in_expression189 */
15746 +static ANTLR3_BITWORD FOLLOW_INTTAG_in_expression189_bits[] = { ANTLR3_UINT64_LIT(0x0000000000004000) };
15747 +static ANTLR3_BITSET_LIST FOLLOW_INTTAG_in_expression189 = { FOLLOW_INTTAG_in_expression189_bits, 1 };
15748 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INTBOOL_in_expression191 */
15749 +static ANTLR3_BITWORD FOLLOW_INTBOOL_in_expression191_bits[] = { ANTLR3_UINT64_LIT(0x0000000000008000) };
15750 +static ANTLR3_BITSET_LIST FOLLOW_INTBOOL_in_expression191 = { FOLLOW_INTBOOL_in_expression191_bits, 1 };
15751 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_expression193 */
15752 +static ANTLR3_BITWORD FOLLOW_INT_in_expression193_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15753 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_expression193 = { FOLLOW_INT_in_expression193_bits, 1 };
15754 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATETAG_in_expression202 */
15755 +static ANTLR3_BITWORD FOLLOW_DATETAG_in_expression202_bits[] = { ANTLR3_UINT64_LIT(0x0000000000020000) };
15756 +static ANTLR3_BITSET_LIST FOLLOW_DATETAG_in_expression202 = { FOLLOW_DATETAG_in_expression202_bits, 1 };
15757 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_expression204 */
15758 +static ANTLR3_BITWORD FOLLOW_AFTER_in_expression204_bits[] = { ANTLR3_UINT64_LIT(0x0000000000208000) };
15759 +static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_expression204 = { FOLLOW_AFTER_in_expression204_bits, 1 };
15760 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateval_in_expression206 */
15761 +static ANTLR3_BITWORD FOLLOW_dateval_in_expression206_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15762 +static ANTLR3_BITSET_LIST FOLLOW_dateval_in_expression206 = { FOLLOW_dateval_in_expression206_bits, 1 };
15763 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATETAG_in_expression215 */
15764 +static ANTLR3_BITWORD FOLLOW_DATETAG_in_expression215_bits[] = { ANTLR3_UINT64_LIT(0x0000000000040000) };
15765 +static ANTLR3_BITSET_LIST FOLLOW_DATETAG_in_expression215 = { FOLLOW_DATETAG_in_expression215_bits, 1 };
15766 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_expression217 */
15767 +static ANTLR3_BITWORD FOLLOW_BEFORE_in_expression217_bits[] = { ANTLR3_UINT64_LIT(0x0000000000208000) };
15768 +static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_expression217 = { FOLLOW_BEFORE_in_expression217_bits, 1 };
15769 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateval_in_expression219 */
15770 +static ANTLR3_BITWORD FOLLOW_dateval_in_expression219_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15771 +static ANTLR3_BITSET_LIST FOLLOW_dateval_in_expression219 = { FOLLOW_dateval_in_expression219_bits, 1 };
15772 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENUMTAG_in_expression228 */
15773 +static ANTLR3_BITWORD FOLLOW_ENUMTAG_in_expression228_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001000) };
15774 +static ANTLR3_BITSET_LIST FOLLOW_ENUMTAG_in_expression228 = { FOLLOW_ENUMTAG_in_expression228_bits, 1 };
15775 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_IS_in_expression230 */
15776 +static ANTLR3_BITWORD FOLLOW_IS_in_expression230_bits[] = { ANTLR3_UINT64_LIT(0x0000000000100000) };
15777 +static ANTLR3_BITSET_LIST FOLLOW_IS_in_expression230 = { FOLLOW_IS_in_expression230_bits, 1 };
15778 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENUMVAL_in_expression232 */
15779 +static ANTLR3_BITWORD FOLLOW_ENUMVAL_in_expression232_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15780 +static ANTLR3_BITSET_LIST FOLLOW_ENUMVAL_in_expression232 = { FOLLOW_ENUMVAL_in_expression232_bits, 1 };
15781 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval257 */
15782 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval257_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15783 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval257 = { FOLLOW_DATE_in_dateval257_bits, 1 };
15784 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval266 */
15785 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval266_bits[] = { ANTLR3_UINT64_LIT(0x0000000000040000) };
15786 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval266 = { FOLLOW_interval_in_dateval266_bits, 1 };
15787 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_dateval268 */
15788 +static ANTLR3_BITWORD FOLLOW_BEFORE_in_dateval268_bits[] = { ANTLR3_UINT64_LIT(0x0000000000200000) };
15789 +static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_dateval268 = { FOLLOW_BEFORE_in_dateval268_bits, 1 };
15790 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval270 */
15791 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval270_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15792 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval270 = { FOLLOW_DATE_in_dateval270_bits, 1 };
15793 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval279 */
15794 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval279_bits[] = { ANTLR3_UINT64_LIT(0x0000000000020000) };
15795 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval279 = { FOLLOW_interval_in_dateval279_bits, 1 };
15796 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_dateval281 */
15797 +static ANTLR3_BITWORD FOLLOW_AFTER_in_dateval281_bits[] = { ANTLR3_UINT64_LIT(0x0000000000200000) };
15798 +static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_dateval281 = { FOLLOW_AFTER_in_dateval281_bits, 1 };
15799 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval283 */
15800 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval283_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15801 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval283 = { FOLLOW_DATE_in_dateval283_bits, 1 };
15802 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval292 */
15803 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval292_bits[] = { ANTLR3_UINT64_LIT(0x0000000000400000) };
15804 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval292 = { FOLLOW_interval_in_dateval292_bits, 1 };
15805 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AGO_in_dateval294 */
15806 +static ANTLR3_BITWORD FOLLOW_AGO_in_dateval294_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15807 +static ANTLR3_BITSET_LIST FOLLOW_AGO_in_dateval294 = { FOLLOW_AGO_in_dateval294_bits, 1 };
15808 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_interval318 */
15809 +static ANTLR3_BITWORD FOLLOW_INT_in_interval318_bits[] = { ANTLR3_UINT64_LIT(0x0000000000800000) };
15810 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_interval318 = { FOLLOW_INT_in_interval318_bits, 1 };
15811 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATINTERVAL_in_interval320 */
15812 +static ANTLR3_BITWORD FOLLOW_DATINTERVAL_in_interval320_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
15813 +static ANTLR3_BITSET_LIST FOLLOW_DATINTERVAL_in_interval320 = { FOLLOW_DATINTERVAL_in_interval320_bits, 1 };
15814 +
15815 +
15816 +
15817 +
15818 +/* ==============================================
15819 + * Parsing rules
15820 + */
15821 +/**
15822 + * $ANTLR start playlist
15823 + * SMARTPL2SQL.g:43:1: playlist returns [ pANTLR3_STRING title, pANTLR3_STRING query ] : STR '{' e= expression '}' ;
15824 + */
15825 +static SMARTPL2SQL_playlist_return
15826 +playlist(pSMARTPL2SQL ctx)
15827 +{
15828 + SMARTPL2SQL_playlist_return retval;
15829 +
15830 + pANTLR3_BASE_TREE STR1;
15831 + pANTLR3_STRING e;
15832 + #undef RETURN_TYPE_e
15833 + #define RETURN_TYPE_e pANTLR3_STRING
15834 +
15835 + /* Initialize rule variables
15836 + */
15837 +
15838 +
15839 + retval.title= NULL; retval.query= NULL;
15840 + STR1 = NULL;
15841 + e = NULL;
15842 + retval.start = LT(1); retval.stop = retval.start;
15843 +
15844 + {
15845 + // SMARTPL2SQL.g:45:2: ( STR '{' e= expression '}' )
15846 + // SMARTPL2SQL.g:45:4: STR '{' e= expression '}'
15847 + {
15848 + STR1 = (pANTLR3_BASE_TREE) MATCHT(STR, &FOLLOW_STR_in_playlist66);
15849 + if (HASEXCEPTION())
15850 + {
15851 + goto ruleplaylistEx;
15852 + }
15853 +
15854 + MATCHT(30, &FOLLOW_30_in_playlist68);
15855 + if (HASEXCEPTION())
15856 + {
15857 + goto ruleplaylistEx;
15858 + }
15859 +
15860 + FOLLOWPUSH(FOLLOW_expression_in_playlist74);
15861 + e=expression(ctx);
15862 +
15863 + FOLLOWPOP();
15864 + if (HASEXCEPTION())
15865 + {
15866 + goto ruleplaylistEx;
15867 + }
15868 +
15869 + MATCHT(31, &FOLLOW_31_in_playlist76);
15870 + if (HASEXCEPTION())
15871 + {
15872 + goto ruleplaylistEx;
15873 + }
15874 +
15875 + {
15876 +
15877 + pANTLR3_UINT8 val;
15878 + val = (STR1->getText(STR1))->toUTF8((STR1->getText(STR1)))->chars;
15879 + val++;
15880 + val[strlen((const char *)val) - 1] = '\0';
15881 +
15882 + retval.title= (STR1->getText(STR1))->factory->newRaw((STR1->getText(STR1))->factory);
15883 + retval.title->append8(retval.title, (const char *)val);
15884 +
15885 + retval.query= e->factory->newRaw(e->factory);
15886 + retval.query->append8(retval.query, "(");
15887 + retval.query->appendS(retval.query, e);
15888 + retval.query->append8(retval.query, ")");
15889 +
15890 + }
15891 +
15892 + }
15893 +
15894 + }
15895 +
15896 +
15897 + // This is where rules clean up and exit
15898 + //
15899 + goto ruleplaylistEx; /* Prevent compiler warnings */
15900 + ruleplaylistEx: ;
15901 +
15902 + if (HASEXCEPTION())
15903 + {
15904 + PREPORTERROR();
15905 + PRECOVER();
15906 + }
15907 +
15908 +
15909 + return retval;
15910 +}
15911 +/* $ANTLR end playlist */
15912 +
15913 +/**
15914 + * $ANTLR start expression
15915 + * SMARTPL2SQL.g:62:1: expression returns [ pANTLR3_STRING result ] : ( ^( NOT a= expression ) | ^( AND a= expression b= expression ) | ^( OR a= expression b= expression ) | STRTAG INCLUDES STR | STRTAG IS STR | INTTAG INTBOOL INT | DATETAG AFTER dateval | DATETAG BEFORE dateval | ENUMTAG IS ENUMVAL );
15916 + */
15917 +static pANTLR3_STRING
15918 +expression(pSMARTPL2SQL ctx)
15919 +{
15920 + pANTLR3_STRING result = NULL;
15921 +
15922 + pANTLR3_BASE_TREE STR2;
15923 + pANTLR3_BASE_TREE STRTAG3;
15924 + pANTLR3_BASE_TREE STR4;
15925 + pANTLR3_BASE_TREE STRTAG5;
15926 + pANTLR3_BASE_TREE INTTAG6;
15927 + pANTLR3_BASE_TREE INTBOOL7;
15928 + pANTLR3_BASE_TREE INT8;
15929 + pANTLR3_BASE_TREE DATETAG10;
15930 + pANTLR3_BASE_TREE DATETAG12;
15931 + pANTLR3_BASE_TREE ENUMTAG13;
15932 + pANTLR3_BASE_TREE ENUMVAL14;
15933 + pANTLR3_STRING a;
15934 + #undef RETURN_TYPE_a
15935 + #define RETURN_TYPE_a pANTLR3_STRING
15936 +
15937 + pANTLR3_STRING b;
15938 + #undef RETURN_TYPE_b
15939 + #define RETURN_TYPE_b pANTLR3_STRING
15940 +
15941 + int dateval9;
15942 + #undef RETURN_TYPE_dateval9
15943 + #define RETURN_TYPE_dateval9 int
15944 +
15945 + int dateval11;
15946 + #undef RETURN_TYPE_dateval11
15947 + #define RETURN_TYPE_dateval11 int
15948 +
15949 + /* Initialize rule variables
15950 + */
15951 +
15952 +
15953 + result= NULL;
15954 + STR2 = NULL;
15955 + STRTAG3 = NULL;
15956 + STR4 = NULL;
15957 + STRTAG5 = NULL;
15958 + INTTAG6 = NULL;
15959 + INTBOOL7 = NULL;
15960 + INT8 = NULL;
15961 + DATETAG10 = NULL;
15962 + DATETAG12 = NULL;
15963 + ENUMTAG13 = NULL;
15964 + ENUMVAL14 = NULL;
15965 + a = NULL;
15966 + b = NULL;
15967 + dateval9 = 0;
15968 + dateval11 = 0;
15969 +
15970 + {
15971 + {
15972 + // SMARTPL2SQL.g:64:2: ( ^( NOT a= expression ) | ^( AND a= expression b= expression ) | ^( OR a= expression b= expression ) | STRTAG INCLUDES STR | STRTAG IS STR | INTTAG INTBOOL INT | DATETAG AFTER dateval | DATETAG BEFORE dateval | ENUMTAG IS ENUMVAL )
15973 +
15974 + ANTLR3_UINT32 alt1;
15975 +
15976 + alt1=9;
15977 +
15978 + switch ( LA(1) )
15979 + {
15980 + case NOT:
15981 + {
15982 + alt1=1;
15983 + }
15984 + break;
15985 + case AND:
15986 + {
15987 + alt1=2;
15988 + }
15989 + break;
15990 + case OR:
15991 + {
15992 + alt1=3;
15993 + }
15994 + break;
15995 + case STRTAG:
15996 + {
15997 + switch ( LA(2) )
15998 + {
15999 + case INCLUDES:
16000 + {
16001 + alt1=4;
16002 + }
16003 + break;
16004 + case IS:
16005 + {
16006 + alt1=5;
16007 + }
16008 + break;
16009 +
16010 + default:
16011 + CONSTRUCTEX();
16012 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16013 + EXCEPTION->message = (void *)"";
16014 + EXCEPTION->decisionNum = 1;
16015 + EXCEPTION->state = 4;
16016 +
16017 +
16018 + goto ruleexpressionEx;
16019 + }
16020 +
16021 + }
16022 + break;
16023 + case INTTAG:
16024 + {
16025 + alt1=6;
16026 + }
16027 + break;
16028 + case DATETAG:
16029 + {
16030 + switch ( LA(2) )
16031 + {
16032 + case AFTER:
16033 + {
16034 + alt1=7;
16035 + }
16036 + break;
16037 + case BEFORE:
16038 + {
16039 + alt1=8;
16040 + }
16041 + break;
16042 +
16043 + default:
16044 + CONSTRUCTEX();
16045 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16046 + EXCEPTION->message = (void *)"";
16047 + EXCEPTION->decisionNum = 1;
16048 + EXCEPTION->state = 6;
16049 +
16050 +
16051 + goto ruleexpressionEx;
16052 + }
16053 +
16054 + }
16055 + break;
16056 + case ENUMTAG:
16057 + {
16058 + alt1=9;
16059 + }
16060 + break;
16061 +
16062 + default:
16063 + CONSTRUCTEX();
16064 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16065 + EXCEPTION->message = (void *)"";
16066 + EXCEPTION->decisionNum = 1;
16067 + EXCEPTION->state = 0;
16068 +
16069 +
16070 + goto ruleexpressionEx;
16071 + }
16072 +
16073 + switch (alt1)
16074 + {
16075 + case 1:
16076 + // SMARTPL2SQL.g:64:4: ^( NOT a= expression )
16077 + {
16078 + MATCHT(NOT, &FOLLOW_NOT_in_expression101);
16079 + if (HASEXCEPTION())
16080 + {
16081 + goto ruleexpressionEx;
16082 + }
16083 +
16084 +
16085 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
16086 + if (HASEXCEPTION())
16087 + {
16088 + goto ruleexpressionEx;
16089 + }
16090 +
16091 + FOLLOWPUSH(FOLLOW_expression_in_expression107);
16092 + a=expression(ctx);
16093 +
16094 + FOLLOWPOP();
16095 + if (HASEXCEPTION())
16096 + {
16097 + goto ruleexpressionEx;
16098 + }
16099 +
16100 +
16101 + MATCHT(ANTLR3_TOKEN_UP, NULL);
16102 + if (HASEXCEPTION())
16103 + {
16104 + goto ruleexpressionEx;
16105 + }
16106 +
16107 + {
16108 +
16109 + result= a->factory->newRaw(a->factory);
16110 + result->append8(result, "NOT(");
16111 + result->appendS(result, a);
16112 + result->append8(result, ")");
16113 +
16114 + }
16115 +
16116 + }
16117 + break;
16118 + case 2:
16119 + // SMARTPL2SQL.g:71:4: ^( AND a= expression b= expression )
16120 + {
16121 + MATCHT(AND, &FOLLOW_AND_in_expression118);
16122 + if (HASEXCEPTION())
16123 + {
16124 + goto ruleexpressionEx;
16125 + }
16126 +
16127 +
16128 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
16129 + if (HASEXCEPTION())
16130 + {
16131 + goto ruleexpressionEx;
16132 + }
16133 +
16134 + FOLLOWPUSH(FOLLOW_expression_in_expression124);
16135 + a=expression(ctx);
16136 +
16137 + FOLLOWPOP();
16138 + if (HASEXCEPTION())
16139 + {
16140 + goto ruleexpressionEx;
16141 + }
16142 +
16143 + FOLLOWPUSH(FOLLOW_expression_in_expression130);
16144 + b=expression(ctx);
16145 +
16146 + FOLLOWPOP();
16147 + if (HASEXCEPTION())
16148 + {
16149 + goto ruleexpressionEx;
16150 + }
16151 +
16152 +
16153 + MATCHT(ANTLR3_TOKEN_UP, NULL);
16154 + if (HASEXCEPTION())
16155 + {
16156 + goto ruleexpressionEx;
16157 + }
16158 +
16159 + {
16160 +
16161 + result= a->factory->newRaw(a->factory);
16162 + result->append8(result, "(");
16163 + result->appendS(result, a);
16164 + result->append8(result, " AND ");
16165 + result->appendS(result, b);
16166 + result->append8(result, ")");
16167 +
16168 + }
16169 +
16170 + }
16171 + break;
16172 + case 3:
16173 + // SMARTPL2SQL.g:80:4: ^( OR a= expression b= expression )
16174 + {
16175 + MATCHT(OR, &FOLLOW_OR_in_expression141);
16176 + if (HASEXCEPTION())
16177 + {
16178 + goto ruleexpressionEx;
16179 + }
16180 +
16181 +
16182 + MATCHT(ANTLR3_TOKEN_DOWN, NULL);
16183 + if (HASEXCEPTION())
16184 + {
16185 + goto ruleexpressionEx;
16186 + }
16187 +
16188 + FOLLOWPUSH(FOLLOW_expression_in_expression147);
16189 + a=expression(ctx);
16190 +
16191 + FOLLOWPOP();
16192 + if (HASEXCEPTION())
16193 + {
16194 + goto ruleexpressionEx;
16195 + }
16196 +
16197 + FOLLOWPUSH(FOLLOW_expression_in_expression153);
16198 + b=expression(ctx);
16199 +
16200 + FOLLOWPOP();
16201 + if (HASEXCEPTION())
16202 + {
16203 + goto ruleexpressionEx;
16204 + }
16205 +
16206 +
16207 + MATCHT(ANTLR3_TOKEN_UP, NULL);
16208 + if (HASEXCEPTION())
16209 + {
16210 + goto ruleexpressionEx;
16211 + }
16212 +
16213 + {
16214 +
16215 + result= a->factory->newRaw(a->factory);
16216 + result->append8(result, "(");
16217 + result->appendS(result, a);
16218 + result->append8(result, " OR ");
16219 + result->appendS(result, b);
16220 + result->append8(result, ")");
16221 +
16222 + }
16223 +
16224 + }
16225 + break;
16226 + case 4:
16227 + // SMARTPL2SQL.g:89:4: STRTAG INCLUDES STR
16228 + {
16229 + STRTAG3 = (pANTLR3_BASE_TREE) MATCHT(STRTAG, &FOLLOW_STRTAG_in_expression163);
16230 + if (HASEXCEPTION())
16231 + {
16232 + goto ruleexpressionEx;
16233 + }
16234 +
16235 + MATCHT(INCLUDES, &FOLLOW_INCLUDES_in_expression165);
16236 + if (HASEXCEPTION())
16237 + {
16238 + goto ruleexpressionEx;
16239 + }
16240 +
16241 + STR2 = (pANTLR3_BASE_TREE) MATCHT(STR, &FOLLOW_STR_in_expression167);
16242 + if (HASEXCEPTION())
16243 + {
16244 + goto ruleexpressionEx;
16245 + }
16246 +
16247 + {
16248 +
16249 + pANTLR3_UINT8 val;
16250 + val = (STR2->getText(STR2))->toUTF8((STR2->getText(STR2)))->chars;
16251 + val++;
16252 + val[strlen((const char *)val) - 1] = '\0';
16253 +
16254 + result= (STR2->getText(STR2))->factory->newRaw((STR2->getText(STR2))->factory);
16255 + result->append8(result, "f.");
16256 + result->appendS(result, (STRTAG3->getText(STRTAG3))->toUTF8((STRTAG3->getText(STRTAG3))));
16257 + result->append8(result, " LIKE '%");
16258 + result->append8(result, sqlite3_mprintf("%q", (const char *)val));
16259 + result->append8(result, "%'");
16260 +
16261 + }
16262 +
16263 + }
16264 + break;
16265 + case 5:
16266 + // SMARTPL2SQL.g:103:4: STRTAG IS STR
16267 + {
16268 + STRTAG5 = (pANTLR3_BASE_TREE) MATCHT(STRTAG, &FOLLOW_STRTAG_in_expression176);
16269 + if (HASEXCEPTION())
16270 + {
16271 + goto ruleexpressionEx;
16272 + }
16273 +
16274 + MATCHT(IS, &FOLLOW_IS_in_expression178);
16275 + if (HASEXCEPTION())
16276 + {
16277 + goto ruleexpressionEx;
16278 + }
16279 +
16280 + STR4 = (pANTLR3_BASE_TREE) MATCHT(STR, &FOLLOW_STR_in_expression180);
16281 + if (HASEXCEPTION())
16282 + {
16283 + goto ruleexpressionEx;
16284 + }
16285 +
16286 + {
16287 +
16288 + pANTLR3_UINT8 val;
16289 + val = (STR4->getText(STR4))->toUTF8((STR4->getText(STR4)))->chars;
16290 + val++;
16291 + val[strlen((const char *)val) - 1] = '\0';
16292 +
16293 + result= (STR4->getText(STR4))->factory->newRaw((STR4->getText(STR4))->factory);
16294 + result->append8(result, "f.");
16295 + result->appendS(result, (STRTAG5->getText(STRTAG5))->toUTF8((STRTAG5->getText(STRTAG5))));
16296 + result->append8(result, " LIKE '");
16297 + result->append8(result, sqlite3_mprintf("%q", (const char *)val));
16298 + result->append8(result, "'");
16299 +
16300 + }
16301 +
16302 + }
16303 + break;
16304 + case 6:
16305 + // SMARTPL2SQL.g:117:4: INTTAG INTBOOL INT
16306 + {
16307 + INTTAG6 = (pANTLR3_BASE_TREE) MATCHT(INTTAG, &FOLLOW_INTTAG_in_expression189);
16308 + if (HASEXCEPTION())
16309 + {
16310 + goto ruleexpressionEx;
16311 + }
16312 +
16313 + INTBOOL7 = (pANTLR3_BASE_TREE) MATCHT(INTBOOL, &FOLLOW_INTBOOL_in_expression191);
16314 + if (HASEXCEPTION())
16315 + {
16316 + goto ruleexpressionEx;
16317 + }
16318 +
16319 + INT8 = (pANTLR3_BASE_TREE) MATCHT(INT, &FOLLOW_INT_in_expression193);
16320 + if (HASEXCEPTION())
16321 + {
16322 + goto ruleexpressionEx;
16323 + }
16324 +
16325 + {
16326 +
16327 + result= (INTTAG6->getText(INTTAG6))->factory->newRaw((INTTAG6->getText(INTTAG6))->factory);
16328 + result->append8(result, "f.");
16329 + result->appendS(result, (INTTAG6->getText(INTTAG6))->toUTF8((INTTAG6->getText(INTTAG6))));
16330 + result->append8(result, " ");
16331 + result->appendS(result, (INTBOOL7->getText(INTBOOL7))->toUTF8((INTBOOL7->getText(INTBOOL7))));
16332 + result->append8(result, " ");
16333 + result->appendS(result, (INT8->getText(INT8))->toUTF8((INT8->getText(INT8))));
16334 +
16335 + }
16336 +
16337 + }
16338 + break;
16339 + case 7:
16340 + // SMARTPL2SQL.g:127:4: DATETAG AFTER dateval
16341 + {
16342 + DATETAG10 = (pANTLR3_BASE_TREE) MATCHT(DATETAG, &FOLLOW_DATETAG_in_expression202);
16343 + if (HASEXCEPTION())
16344 + {
16345 + goto ruleexpressionEx;
16346 + }
16347 +
16348 + MATCHT(AFTER, &FOLLOW_AFTER_in_expression204);
16349 + if (HASEXCEPTION())
16350 + {
16351 + goto ruleexpressionEx;
16352 + }
16353 +
16354 + FOLLOWPUSH(FOLLOW_dateval_in_expression206);
16355 + dateval9=dateval(ctx);
16356 +
16357 + FOLLOWPOP();
16358 + if (HASEXCEPTION())
16359 + {
16360 + goto ruleexpressionEx;
16361 + }
16362 +
16363 + {
16364 +
16365 + char str[15];
16366 + sprintf(str, "%d", dateval9);
16367 +
16368 + result= (DATETAG10->getText(DATETAG10))->factory->newRaw((DATETAG10->getText(DATETAG10))->factory);
16369 + result->append8(result, "f.");
16370 + result->appendS(result, (DATETAG10->getText(DATETAG10))->toUTF8((DATETAG10->getText(DATETAG10))));
16371 + result->append8(result, " > ");
16372 + result->append8(result, str);
16373 +
16374 + }
16375 +
16376 + }
16377 + break;
16378 + case 8:
16379 + // SMARTPL2SQL.g:138:4: DATETAG BEFORE dateval
16380 + {
16381 + DATETAG12 = (pANTLR3_BASE_TREE) MATCHT(DATETAG, &FOLLOW_DATETAG_in_expression215);
16382 + if (HASEXCEPTION())
16383 + {
16384 + goto ruleexpressionEx;
16385 + }
16386 +
16387 + MATCHT(BEFORE, &FOLLOW_BEFORE_in_expression217);
16388 + if (HASEXCEPTION())
16389 + {
16390 + goto ruleexpressionEx;
16391 + }
16392 +
16393 + FOLLOWPUSH(FOLLOW_dateval_in_expression219);
16394 + dateval11=dateval(ctx);
16395 +
16396 + FOLLOWPOP();
16397 + if (HASEXCEPTION())
16398 + {
16399 + goto ruleexpressionEx;
16400 + }
16401 +
16402 + {
16403 +
16404 + char str[15];
16405 + sprintf(str, "%d", dateval11);
16406 +
16407 + result= (DATETAG12->getText(DATETAG12))->factory->newRaw((DATETAG12->getText(DATETAG12))->factory);
16408 + result->append8(result, "f.");
16409 + result->appendS(result, (DATETAG12->getText(DATETAG12))->toUTF8((DATETAG12->getText(DATETAG12))));
16410 + result->append8(result, " > ");
16411 + result->append8(result, str);
16412 +
16413 + }
16414 +
16415 + }
16416 + break;
16417 + case 9:
16418 + // SMARTPL2SQL.g:149:4: ENUMTAG IS ENUMVAL
16419 + {
16420 + ENUMTAG13 = (pANTLR3_BASE_TREE) MATCHT(ENUMTAG, &FOLLOW_ENUMTAG_in_expression228);
16421 + if (HASEXCEPTION())
16422 + {
16423 + goto ruleexpressionEx;
16424 + }
16425 +
16426 + MATCHT(IS, &FOLLOW_IS_in_expression230);
16427 + if (HASEXCEPTION())
16428 + {
16429 + goto ruleexpressionEx;
16430 + }
16431 +
16432 + ENUMVAL14 = (pANTLR3_BASE_TREE) MATCHT(ENUMVAL, &FOLLOW_ENUMVAL_in_expression232);
16433 + if (HASEXCEPTION())
16434 + {
16435 + goto ruleexpressionEx;
16436 + }
16437 +
16438 + {
16439 +
16440 + pANTLR3_UINT8 tag;
16441 + pANTLR3_UINT8 val;
16442 + char str[20];
16443 +
16444 + sprintf(str, "1=1");
16445 +
16446 + tag = (ENUMTAG13->getText(ENUMTAG13))->chars;
16447 + val = (ENUMVAL14->getText(ENUMVAL14))->chars;
16448 + if (strcmp((char *)tag, "media_kind") == 0)
16449 + {
16450 + if (strcmp((char *)val, "music") == 0)
16451 + {
16452 + sprintf(str, "f.media_kind = %d", MEDIA_KIND_MUSIC);
16453 + }
16454 + else if (strcmp((char *)val, "movie") == 0)
16455 + {
16456 + sprintf(str, "f.media_kind = %d", MEDIA_KIND_MOVIE);
16457 + }
16458 + else if (strcmp((char *)val, "podcast") == 0)
16459 + {
16460 + sprintf(str, "f.media_kind = %d", MEDIA_KIND_PODCAST);
16461 + }
16462 + else if (strcmp((char *)val, "audiobook") == 0)
16463 + {
16464 + sprintf(str, "f.media_kind = %d", MEDIA_KIND_AUDIOBOOK);
16465 + }
16466 + else if (strcmp((char *)val, "tvshow") == 0)
16467 + {
16468 + sprintf(str, "f.media_kind = %d", MEDIA_KIND_TVSHOW);
16469 + }
16470 + }
16471 + else if (strcmp((char *)tag, "data_kind") == 0)
16472 + {
16473 + if (strcmp((char *)val, "file") == 0)
16474 + {
16475 + sprintf(str, "f.data_kind = %d", DATA_KIND_FILE);
16476 + }
16477 + else if (strcmp((char *)val, "url") == 0)
16478 + {
16479 + sprintf(str, "f.data_kind = %d", DATA_KIND_HTTP);
16480 + }
16481 + else if (strcmp((char *)val, "spotify") == 0)
16482 + {
16483 + sprintf(str, "f.data_kind = %d", DATA_KIND_SPOTIFY);
16484 + }
16485 + else if (strcmp((char *)val, "pipe") == 0)
16486 + {
16487 + sprintf(str, "f.data_kind = %d", DATA_KIND_PIPE);
16488 + }
16489 + }
16490 +
16491 + result= (ENUMTAG13->getText(ENUMTAG13))->factory->newRaw((ENUMTAG13->getText(ENUMTAG13))->factory);
16492 + result->append8(result, str);
16493 +
16494 + }
16495 +
16496 + }
16497 + break;
16498 +
16499 + }
16500 + }
16501 + }
16502 +
16503 +
16504 + // This is where rules clean up and exit
16505 + //
16506 + goto ruleexpressionEx; /* Prevent compiler warnings */
16507 + ruleexpressionEx: ;
16508 +
16509 + if (HASEXCEPTION())
16510 + {
16511 + PREPORTERROR();
16512 + PRECOVER();
16513 + }
16514 +
16515 +
16516 + return result;
16517 +}
16518 +/* $ANTLR end expression */
16519 +
16520 +/**
16521 + * $ANTLR start dateval
16522 + * SMARTPL2SQL.g:207:1: dateval returns [ int result ] : ( DATE | interval BEFORE DATE | interval AFTER DATE | interval AGO );
16523 + */
16524 +static int
16525 +dateval(pSMARTPL2SQL ctx)
16526 +{
16527 + int result = 0;
16528 +
16529 + pANTLR3_BASE_TREE DATE15;
16530 + pANTLR3_BASE_TREE DATE16;
16531 + pANTLR3_BASE_TREE DATE18;
16532 + int interval17;
16533 + #undef RETURN_TYPE_interval17
16534 + #define RETURN_TYPE_interval17 int
16535 +
16536 + int interval19;
16537 + #undef RETURN_TYPE_interval19
16538 + #define RETURN_TYPE_interval19 int
16539 +
16540 + int interval20;
16541 + #undef RETURN_TYPE_interval20
16542 + #define RETURN_TYPE_interval20 int
16543 +
16544 + /* Initialize rule variables
16545 + */
16546 +
16547 +
16548 + result= 0;
16549 + DATE15 = NULL;
16550 + DATE16 = NULL;
16551 + DATE18 = NULL;
16552 + interval17 = 0;
16553 + interval19 = 0;
16554 + interval20 = 0;
16555 +
16556 + {
16557 + {
16558 + // SMARTPL2SQL.g:209:2: ( DATE | interval BEFORE DATE | interval AFTER DATE | interval AGO )
16559 +
16560 + ANTLR3_UINT32 alt2;
16561 +
16562 + alt2=4;
16563 +
16564 + switch ( LA(1) )
16565 + {
16566 + case DATE:
16567 + {
16568 + alt2=1;
16569 + }
16570 + break;
16571 + case INT:
16572 + {
16573 + switch ( LA(2) )
16574 + {
16575 + case DATINTERVAL:
16576 + {
16577 + switch ( LA(3) )
16578 + {
16579 + case AGO:
16580 + {
16581 + alt2=4;
16582 + }
16583 + break;
16584 + case BEFORE:
16585 + {
16586 + alt2=2;
16587 + }
16588 + break;
16589 + case AFTER:
16590 + {
16591 + alt2=3;
16592 + }
16593 + break;
16594 +
16595 + default:
16596 + CONSTRUCTEX();
16597 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16598 + EXCEPTION->message = (void *)"";
16599 + EXCEPTION->decisionNum = 2;
16600 + EXCEPTION->state = 3;
16601 +
16602 +
16603 + goto ruledatevalEx;
16604 + }
16605 +
16606 + }
16607 + break;
16608 +
16609 + default:
16610 + CONSTRUCTEX();
16611 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16612 + EXCEPTION->message = (void *)"";
16613 + EXCEPTION->decisionNum = 2;
16614 + EXCEPTION->state = 2;
16615 +
16616 +
16617 + goto ruledatevalEx;
16618 + }
16619 +
16620 + }
16621 + break;
16622 +
16623 + default:
16624 + CONSTRUCTEX();
16625 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
16626 + EXCEPTION->message = (void *)"";
16627 + EXCEPTION->decisionNum = 2;
16628 + EXCEPTION->state = 0;
16629 +
16630 +
16631 + goto ruledatevalEx;
16632 + }
16633 +
16634 + switch (alt2)
16635 + {
16636 + case 1:
16637 + // SMARTPL2SQL.g:209:4: DATE
16638 + {
16639 + DATE15 = (pANTLR3_BASE_TREE) MATCHT(DATE, &FOLLOW_DATE_in_dateval257);
16640 + if (HASEXCEPTION())
16641 + {
16642 + goto ruledatevalEx;
16643 + }
16644 +
16645 + {
16646 +
16647 + pANTLR3_UINT8 datval;
16648 +
16649 + datval = (DATE15->getText(DATE15))->chars;
16650 +
16651 + if (strcmp((char *)datval, "today") == 0)
16652 + {
16653 + result= time(NULL);
16654 + }
16655 + else if (strcmp((char *)datval, "yesterday") == 0)
16656 + {
16657 + result= time(NULL) - 24 * 3600;
16658 + }
16659 + else if (strcmp((char *)datval, "last week") == 0)
16660 + {
16661 + result= time(NULL) - 24 * 3600 * 7;
16662 + }
16663 + else if (strcmp((char *)datval, "last month") == 0)
16664 + {
16665 + result= time(NULL) - 24 * 3600 * 30;
16666 + }
16667 + else if (strcmp((char *)datval, "last year") == 0)
16668 + {
16669 + result= time(NULL) - 24 * 3600 * 365;
16670 + }
16671 + else
16672 + {
16673 + struct tm tm;
16674 + char year[5];
16675 + char month[3];
16676 + char day[3];
16677 +
16678 + memset((void*)&tm,0,sizeof(tm));
16679 + memset(year, 0, sizeof(year));
16680 + memset(month, 0, sizeof(month));
16681 + memset(day, 0, sizeof(day));
16682 +
16683 + strncpy(year, (const char *)datval, 4);
16684 + strncpy(month, (const char *)datval + 5, 2);
16685 + strncpy(day, (const char *)datval + 8, 2);
16686 +
16687 + tm.tm_year = atoi(year) - 1900;
16688 + tm.tm_mon = atoi(month) - 1;
16689 + tm.tm_mday = atoi(day);
16690 +
16691 + result= mktime(&tm);
16692 + }
16693 +
16694 + }
16695 +
16696 + }
16697 + break;
16698 + case 2:
16699 + // SMARTPL2SQL.g:258:4: interval BEFORE DATE
16700 + {
16701 + FOLLOWPUSH(FOLLOW_interval_in_dateval266);
16702 + interval17=interval(ctx);
16703 +
16704 + FOLLOWPOP();
16705 + if (HASEXCEPTION())
16706 + {
16707 + goto ruledatevalEx;
16708 + }
16709 +
16710 + MATCHT(BEFORE, &FOLLOW_BEFORE_in_dateval268);
16711 + if (HASEXCEPTION())
16712 + {
16713 + goto ruledatevalEx;
16714 + }
16715 +
16716 + DATE16 = (pANTLR3_BASE_TREE) MATCHT(DATE, &FOLLOW_DATE_in_dateval270);
16717 + if (HASEXCEPTION())
16718 + {
16719 + goto ruledatevalEx;
16720 + }
16721 +
16722 + {
16723 +
16724 + pANTLR3_UINT8 datval;
16725 +
16726 + datval = (DATE16->getText(DATE16))->chars;
16727 +
16728 + if (strcmp((char *)datval, "yesterday") == 0)
16729 + {
16730 + result= time(NULL) - 24 * 3600;
16731 + }
16732 + else if (strcmp((char *)datval, "last week") == 0)
16733 + {
16734 + result= time(NULL) - 24 * 3600 * 7;
16735 + }
16736 + else if (strcmp((char *)datval, "last month") == 0)
16737 + {
16738 + result= time(NULL) - 24 * 3600 * 30;
16739 + }
16740 + else if (strcmp((char *)datval, "last year") == 0)
16741 + {
16742 + result= time(NULL) - 24 * 3600 * 365;
16743 + }
16744 + else
16745 + {
16746 + result= time(NULL);
16747 + }
16748 +
16749 + result= result - interval17;
16750 +
16751 + }
16752 +
16753 + }
16754 + break;
16755 + case 3:
16756 + // SMARTPL2SQL.g:287:4: interval AFTER DATE
16757 + {
16758 + FOLLOWPUSH(FOLLOW_interval_in_dateval279);
16759 + interval19=interval(ctx);
16760 +
16761 + FOLLOWPOP();
16762 + if (HASEXCEPTION())
16763 + {
16764 + goto ruledatevalEx;
16765 + }
16766 +
16767 + MATCHT(AFTER, &FOLLOW_AFTER_in_dateval281);
16768 + if (HASEXCEPTION())
16769 + {
16770 + goto ruledatevalEx;
16771 + }
16772 +
16773 + DATE18 = (pANTLR3_BASE_TREE) MATCHT(DATE, &FOLLOW_DATE_in_dateval283);
16774 + if (HASEXCEPTION())
16775 + {
16776 + goto ruledatevalEx;
16777 + }
16778 +
16779 + {
16780 +
16781 + pANTLR3_UINT8 datval;
16782 +
16783 + datval = (DATE18->getText(DATE18))->chars;
16784 +
16785 + if (strcmp((char *)datval, "yesterday") == 0)
16786 + {
16787 + result= time(NULL) - 24 * 3600;
16788 + }
16789 + else if (strcmp((char *)datval, "last week") == 0)
16790 + {
16791 + result= time(NULL) - 24 * 3600 * 7;
16792 + }
16793 + else if (strcmp((char *)datval, "last month") == 0)
16794 + {
16795 + result= time(NULL) - 24 * 3600 * 30;
16796 + }
16797 + else if (strcmp((char *)datval, "last year") == 0)
16798 + {
16799 + result= time(NULL) - 24 * 3600 * 365;
16800 + }
16801 + else
16802 + {
16803 + result= time(NULL);
16804 + }
16805 +
16806 + result= result + interval19;
16807 +
16808 + }
16809 +
16810 + }
16811 + break;
16812 + case 4:
16813 + // SMARTPL2SQL.g:316:4: interval AGO
16814 + {
16815 + FOLLOWPUSH(FOLLOW_interval_in_dateval292);
16816 + interval20=interval(ctx);
16817 +
16818 + FOLLOWPOP();
16819 + if (HASEXCEPTION())
16820 + {
16821 + goto ruledatevalEx;
16822 + }
16823 +
16824 + MATCHT(AGO, &FOLLOW_AGO_in_dateval294);
16825 + if (HASEXCEPTION())
16826 + {
16827 + goto ruledatevalEx;
16828 + }
16829 +
16830 + {
16831 +
16832 + result= time(NULL) - interval20;
16833 +
16834 + }
16835 +
16836 + }
16837 + break;
16838 +
16839 + }
16840 + }
16841 + }
16842 +
16843 +
16844 + // This is where rules clean up and exit
16845 + //
16846 + goto ruledatevalEx; /* Prevent compiler warnings */
16847 + ruledatevalEx: ;
16848 +
16849 + if (HASEXCEPTION())
16850 + {
16851 + PREPORTERROR();
16852 + PRECOVER();
16853 + }
16854 +
16855 +
16856 + return result;
16857 +}
16858 +/* $ANTLR end dateval */
16859 +
16860 +/**
16861 + * $ANTLR start interval
16862 + * SMARTPL2SQL.g:322:1: interval returns [ int result ] : INT DATINTERVAL ;
16863 + */
16864 +static int
16865 +interval(pSMARTPL2SQL ctx)
16866 +{
16867 + int result = 0;
16868 +
16869 + pANTLR3_BASE_TREE INT21;
16870 + pANTLR3_BASE_TREE DATINTERVAL22;
16871 +
16872 + /* Initialize rule variables
16873 + */
16874 +
16875 +
16876 + result= 0;
16877 + INT21 = NULL;
16878 + DATINTERVAL22 = NULL;
16879 +
16880 + {
16881 + // SMARTPL2SQL.g:324:2: ( INT DATINTERVAL )
16882 + // SMARTPL2SQL.g:324:4: INT DATINTERVAL
16883 + {
16884 + INT21 = (pANTLR3_BASE_TREE) MATCHT(INT, &FOLLOW_INT_in_interval318);
16885 + if (HASEXCEPTION())
16886 + {
16887 + goto ruleintervalEx;
16888 + }
16889 +
16890 + DATINTERVAL22 = (pANTLR3_BASE_TREE) MATCHT(DATINTERVAL, &FOLLOW_DATINTERVAL_in_interval320);
16891 + if (HASEXCEPTION())
16892 + {
16893 + goto ruleintervalEx;
16894 + }
16895 +
16896 + {
16897 +
16898 + pANTLR3_UINT8 interval;
16899 +
16900 + result= atoi((const char *)(INT21->getText(INT21))->chars);
16901 + interval = (DATINTERVAL22->getText(DATINTERVAL22))->chars;
16902 +
16903 + if (strcmp((char *)interval, "days") == 0)
16904 + {
16905 + result= result * 24 * 3600;
16906 + }
16907 + else if (strcmp((char *)interval, "weeks") == 0)
16908 + {
16909 + result= result * 24 * 3600 * 7;
16910 + }
16911 + else if (strcmp((char *)interval, "months") == 0)
16912 + {
16913 + result= result * 24 * 3600 * 30;
16914 + }
16915 + else if (strcmp((char *)interval, "weeks") == 0)
16916 + {
16917 + result= result * 24 * 3600 * 365;
16918 + }
16919 + else
16920 + {
16921 + result= 0;
16922 + }
16923 +
16924 + }
16925 +
16926 + }
16927 +
16928 + }
16929 +
16930 +
16931 + // This is where rules clean up and exit
16932 + //
16933 + goto ruleintervalEx; /* Prevent compiler warnings */
16934 + ruleintervalEx: ;
16935 +
16936 + if (HASEXCEPTION())
16937 + {
16938 + PREPORTERROR();
16939 + PRECOVER();
16940 + }
16941 +
16942 +
16943 + return result;
16944 +}
16945 +/* $ANTLR end interval */
16946 +/* End of parsing rules
16947 + * ==============================================
16948 + */
16949 +
16950 +/* ==============================================
16951 + * Syntactic predicates
16952 + */
16953 +/* End of syntactic predicates
16954 + * ==============================================
16955 + */
16956 +
16957 +
16958 +
16959 +
16960 +
16961 +
16962 +/* End of code
16963 + * =============================================================================
16964 + */
16965 diff --git a/src/pregen/SMARTPL2SQL.h b/src/pregen/SMARTPL2SQL.h
16966 new file mode 100644
16967 index 0000000..8e06de7
16968 --- /dev/null
16969 +++ b/src/pregen/SMARTPL2SQL.h
16970 @@ -0,0 +1,220 @@
16971 +/** \file
16972 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
16973 + *
16974 + * - From the grammar source file : SMARTPL2SQL.g
16975 + * - On : 2016-01-01 12:23:44
16976 + * - for the tree parser : SMARTPL2SQLTreeParser *
16977 + * Editing it, at least manually, is not wise.
16978 + *
16979 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
16980 + *
16981 + *
16982 + * The tree parser SMARTPL2SQL has the callable functions (rules) shown below,
16983 + * which will invoke the code for the associated rule in the source grammar
16984 + * assuming that the input stream is pointing to a token/text stream that could begin
16985 + * this rule.
16986 + *
16987 + * For instance if you call the first (topmost) rule in a parser grammar, you will
16988 + * get the results of a full parse, but calling a rule half way through the grammar will
16989 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
16990 + * in editors and so on.
16991 + *
16992 + * The parser entry points are called indirectly (by function pointer to function) via
16993 + * a parser context typedef pSMARTPL2SQL, which is returned from a call to SMARTPL2SQLNew().
16994 + *
16995 + * The methods in pSMARTPL2SQL are as follows:
16996 + *
16997 + * - SMARTPL2SQL_playlist_return pSMARTPL2SQL->playlist(pSMARTPL2SQL)
16998 + * - pANTLR3_STRING pSMARTPL2SQL->expression(pSMARTPL2SQL)
16999 + * - int pSMARTPL2SQL->dateval(pSMARTPL2SQL)
17000 + * - int pSMARTPL2SQL->interval(pSMARTPL2SQL)
17001 + *
17002 + * The return type for any particular rule is of course determined by the source
17003 + * grammar file.
17004 + */
17005 +// [The "BSD licence"]
17006 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
17007 +// http://www.temporal-wave.com
17008 +// http://www.linkedin.com/in/jimidle
17009 +//
17010 +// All rights reserved.
17011 +//
17012 +// Redistribution and use in source and binary forms, with or without
17013 +// modification, are permitted provided that the following conditions
17014 +// are met:
17015 +// 1. Redistributions of source code must retain the above copyright
17016 +// notice, this list of conditions and the following disclaimer.
17017 +// 2. Redistributions in binary form must reproduce the above copyright
17018 +// notice, this list of conditions and the following disclaimer in the
17019 +// documentation and/or other materials provided with the distribution.
17020 +// 3. The name of the author may not be used to endorse or promote products
17021 +// derived from this software without specific prior written permission.
17022 +//
17023 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17024 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17025 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17026 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17027 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17028 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
17029 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
17030 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
17031 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
17032 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17033 +
17034 +#ifndef _SMARTPL2SQL_H
17035 +#define _SMARTPL2SQL_H
17036 +/* =============================================================================
17037 + * Standard antlr3 C runtime definitions
17038 + */
17039 +#include <antlr3.h>
17040 +
17041 +/* End of standard antlr 3 runtime definitions
17042 + * =============================================================================
17043 + */
17044 +
17045 +#ifdef __cplusplus
17046 +extern "C" {
17047 +#endif
17048 +
17049 +// Forward declare the context typedef so that we can use it before it is
17050 +// properly defined. Delegators and delegates (from import statements) are
17051 +// interdependent and their context structures contain pointers to each other
17052 +// C only allows such things to be declared if you pre-declare the typedef.
17053 +//
17054 +typedef struct SMARTPL2SQL_Ctx_struct SMARTPL2SQL, * pSMARTPL2SQL;
17055 +
17056 +
17057 +
17058 + #include <stdio.h>
17059 + #include <stdlib.h>
17060 + #include <string.h>
17061 + #include <limits.h>
17062 + #include <errno.h>
17063 + #include <time.h>
17064 + #include <sqlite3.h>
17065 +
17066 + #include "logger.h"
17067 + #include "db.h"
17068 +
17069 +
17070 +#ifdef ANTLR3_WINDOWS
17071 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
17072 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
17073 +// initialized but unused variable - tree rewrite variables declared but not needed
17074 +// Unreferenced local variable - lexer rule declares but does not always use _type
17075 +// potentially unitialized variable used - retval always returned from a rule
17076 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
17077 +//
17078 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
17079 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
17080 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
17081 +// this is a matter of orthogonality hence I disable that one.
17082 +//
17083 +#pragma warning( disable : 4100 )
17084 +#pragma warning( disable : 4101 )
17085 +#pragma warning( disable : 4127 )
17086 +#pragma warning( disable : 4189 )
17087 +#pragma warning( disable : 4505 )
17088 +#pragma warning( disable : 4701 )
17089 +#endif
17090 +typedef struct SMARTPL2SQL_playlist_return_struct
17091 +{
17092 + pANTLR3_BASE_TREE start;
17093 + pANTLR3_BASE_TREE stop;
17094 + pANTLR3_STRING title;
17095 + pANTLR3_STRING query;
17096 +}
17097 + SMARTPL2SQL_playlist_return;
17098 +
17099 +
17100 +
17101 +/** Context tracking structure for SMARTPL2SQL
17102 + */
17103 +struct SMARTPL2SQL_Ctx_struct
17104 +{
17105 + /** Built in ANTLR3 context tracker contains all the generic elements
17106 + * required for context tracking.
17107 + */
17108 + pANTLR3_TREE_PARSER pTreeParser;
17109 +
17110 +
17111 + SMARTPL2SQL_playlist_return (*playlist) (struct SMARTPL2SQL_Ctx_struct * ctx);
17112 + pANTLR3_STRING (*expression) (struct SMARTPL2SQL_Ctx_struct * ctx);
17113 + int (*dateval) (struct SMARTPL2SQL_Ctx_struct * ctx);
17114 + int (*interval) (struct SMARTPL2SQL_Ctx_struct * ctx);
17115 + // Delegated rules
17116 + const char * (*getGrammarFileName)();
17117 + void (*free) (struct SMARTPL2SQL_Ctx_struct * ctx);
17118 +
17119 +};
17120 +
17121 +// Function protoypes for the constructor functions that external translation units
17122 +// such as delegators and delegates may wish to call.
17123 +//
17124 +ANTLR3_API pSMARTPL2SQL SMARTPL2SQLNew (pANTLR3_COMMON_TREE_NODE_STREAM instream);
17125 +ANTLR3_API pSMARTPL2SQL SMARTPL2SQLNewSSD (pANTLR3_COMMON_TREE_NODE_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
17126 +
17127 +/** Symbolic definitions of all the tokens that the tree parser will work with.
17128 + * \{
17129 + *
17130 + * Antlr will define EOF, but we can't use that as it it is too common in
17131 + * in C header files and that would be confusing. There is no way to filter this out at the moment
17132 + * so we just undef it here for now. That isn't the value we get back from C recognizers
17133 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
17134 + */
17135 +#ifdef EOF
17136 +#undef EOF
17137 +#endif
17138 +#ifdef Tokens
17139 +#undef Tokens
17140 +#endif
17141 +#define INTBOOL 14
17142 +#define STRTAG 10
17143 +#define AGO 22
17144 +#define WHITESPACE 29
17145 +#define GREATEREQUAL 25
17146 +#define BEFORE 18
17147 +#define DATETAG 16
17148 +#define INT 15
17149 +#define NOT 7
17150 +#define AFTER 17
17151 +#define AND 6
17152 +#define EOF -1
17153 +#define INCLUDES 11
17154 +#define STR 4
17155 +#define T__30 30
17156 +#define T__31 31
17157 +#define GREATER 24
17158 +#define LPAR 8
17159 +#define ENUMTAG 19
17160 +#define IS 12
17161 +#define ENUMVAL 20
17162 +#define EQUAL 28
17163 +#define OR 5
17164 +#define LESS 26
17165 +#define RPAR 9
17166 +#define DATE 21
17167 +#define LESSEQUAL 27
17168 +#define INTTAG 13
17169 +#define DATINTERVAL 23
17170 +#ifdef EOF
17171 +#undef EOF
17172 +#define EOF ANTLR3_TOKEN_EOF
17173 +#endif
17174 +
17175 +#ifndef TOKENSOURCE
17176 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
17177 +#endif
17178 +
17179 +/* End of token definitions for SMARTPL2SQL
17180 + * =============================================================================
17181 + */
17182 +/** \} */
17183 +
17184 +#ifdef __cplusplus
17185 +}
17186 +#endif
17187 +
17188 +#endif
17189 +
17190 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
17191 diff --git a/src/pregen/SMARTPL2SQL.u b/src/pregen/SMARTPL2SQL.u
17192 new file mode 100644
17193 index 0000000..85567d1
17194 --- /dev/null
17195 +++ b/src/pregen/SMARTPL2SQL.u
17196 @@ -0,0 +1,5 @@
17197 +SMARTPL2SQL.g: SMARTPL.tokens
17198 +SMARTPL2SQL.c : SMARTPL2SQL.g
17199 +./SMARTPL2SQL.tokens : SMARTPL2SQL.g
17200 +SMARTPL2SQL.h : SMARTPL2SQL.g
17201 +ANTLR_PRODUCTS += SMARTPL2SQL.c ./SMARTPL2SQL.tokens SMARTPL2SQL.h
17202 \ No newline at end of file
17203 diff --git a/src/pregen/SMARTPLLexer.c b/src/pregen/SMARTPLLexer.c
17204 new file mode 100644
17205 index 0000000..91d6e99
17206 --- /dev/null
17207 +++ b/src/pregen/SMARTPLLexer.c
17208 @@ -0,0 +1,4168 @@
17209 +/** \file
17210 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
17211 + *
17212 + * - From the grammar source file : SMARTPL.g
17213 + * - On : 2016-01-01 12:23:40
17214 + * - for the lexer : SMARTPLLexerLexer *
17215 + * Editing it, at least manually, is not wise.
17216 + *
17217 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
17218 + *
17219 + *
17220 +*/
17221 +// [The "BSD licence"]
17222 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
17223 +// http://www.temporal-wave.com
17224 +// http://www.linkedin.com/in/jimidle
17225 +//
17226 +// All rights reserved.
17227 +//
17228 +// Redistribution and use in source and binary forms, with or without
17229 +// modification, are permitted provided that the following conditions
17230 +// are met:
17231 +// 1. Redistributions of source code must retain the above copyright
17232 +// notice, this list of conditions and the following disclaimer.
17233 +// 2. Redistributions in binary form must reproduce the above copyright
17234 +// notice, this list of conditions and the following disclaimer in the
17235 +// documentation and/or other materials provided with the distribution.
17236 +// 3. The name of the author may not be used to endorse or promote products
17237 +// derived from this software without specific prior written permission.
17238 +//
17239 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17240 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17241 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17242 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17243 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
17244 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
17245 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
17246 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
17247 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
17248 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17249 +
17250 +/* -----------------------------------------
17251 + * Include the ANTLR3 generated header file.
17252 + */
17253 +#include "SMARTPLLexer.h"
17254 +/* ----------------------------------------- */
17255 +
17256 +
17257 +/** String literals used by SMARTPLLexer that we must do things like MATCHS() with.
17258 + * C will normally just lay down 8 bit characters, and you can use L"xxx" to
17259 + * get wchar_t, but wchar_t is 16 bits on Windows, which is not UTF32 and so
17260 + * we perform this little trick of defining the literals as arrays of UINT32
17261 + * and passing in the address of these.
17262 + */
17263 +static ANTLR3_UCHAR lit_1[] = { 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, ANTLR3_STRING_TERMINATOR};
17264 +static ANTLR3_UCHAR lit_2[] = { 0x61, 0x6C, 0x62, 0x75, 0x6D, 0x5F, 0x61, 0x72, 0x74, 0x69, 0x73, 0x74, ANTLR3_STRING_TERMINATOR};
17265 +static ANTLR3_UCHAR lit_3[] = { 0x61, 0x6C, 0x62, 0x75, 0x6D, ANTLR3_STRING_TERMINATOR};
17266 +static ANTLR3_UCHAR lit_4[] = { 0x74, 0x69, 0x74, 0x6C, 0x65, ANTLR3_STRING_TERMINATOR};
17267 +static ANTLR3_UCHAR lit_5[] = { 0x67, 0x65, 0x6E, 0x72, 0x65, ANTLR3_STRING_TERMINATOR};
17268 +static ANTLR3_UCHAR lit_6[] = { 0x63, 0x6F, 0x6D, 0x70, 0x6F, 0x73, 0x65, 0x72, ANTLR3_STRING_TERMINATOR};
17269 +static ANTLR3_UCHAR lit_7[] = { 0x70, 0x61, 0x74, 0x68, ANTLR3_STRING_TERMINATOR};
17270 +static ANTLR3_UCHAR lit_8[] = { 0x74, 0x79, 0x70, 0x65, ANTLR3_STRING_TERMINATOR};
17271 +static ANTLR3_UCHAR lit_9[] = { 0x67, 0x72, 0x6F, 0x75, 0x70, 0x69, 0x6E, 0x67, ANTLR3_STRING_TERMINATOR};
17272 +static ANTLR3_UCHAR lit_10[] = { 0x70, 0x6C, 0x61, 0x79, 0x5F, 0x63, 0x6F, 0x75, 0x6E, 0x74, ANTLR3_STRING_TERMINATOR};
17273 +static ANTLR3_UCHAR lit_11[] = { 0x72, 0x61, 0x74, 0x69, 0x6E, 0x67, ANTLR3_STRING_TERMINATOR};
17274 +static ANTLR3_UCHAR lit_12[] = { 0x79, 0x65, 0x61, 0x72, ANTLR3_STRING_TERMINATOR};
17275 +static ANTLR3_UCHAR lit_13[] = { 0x63, 0x6F, 0x6D, 0x70, 0x69, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, ANTLR3_STRING_TERMINATOR};
17276 +static ANTLR3_UCHAR lit_14[] = { 0x74, 0x69, 0x6D, 0x65, 0x5F, 0x61, 0x64, 0x64, 0x65, 0x64, ANTLR3_STRING_TERMINATOR};
17277 +static ANTLR3_UCHAR lit_15[] = { 0x74, 0x69, 0x6D, 0x65, 0x5F, 0x70, 0x6C, 0x61, 0x79, 0x65, 0x64, ANTLR3_STRING_TERMINATOR};
17278 +static ANTLR3_UCHAR lit_16[] = { 0x64, 0x61, 0x74, 0x61, 0x5F, 0x6B, 0x69, 0x6E, 0x64, ANTLR3_STRING_TERMINATOR};
17279 +static ANTLR3_UCHAR lit_17[] = { 0x6D, 0x65, 0x64, 0x69, 0x61, 0x5F, 0x6B, 0x69, 0x6E, 0x64, ANTLR3_STRING_TERMINATOR};
17280 +static ANTLR3_UCHAR lit_18[] = { 0x69, 0x6E, 0x63, 0x6C, 0x75, 0x64, 0x65, 0x73, ANTLR3_STRING_TERMINATOR};
17281 +static ANTLR3_UCHAR lit_19[] = { 0x69, 0x73, ANTLR3_STRING_TERMINATOR};
17282 +static ANTLR3_UCHAR lit_20[] = { 0x3E, 0x3D, ANTLR3_STRING_TERMINATOR};
17283 +static ANTLR3_UCHAR lit_21[] = { 0x3C, 0x3D, ANTLR3_STRING_TERMINATOR};
17284 +static ANTLR3_UCHAR lit_22[] = { 0x61, 0x66, 0x74, 0x65, 0x72, ANTLR3_STRING_TERMINATOR};
17285 +static ANTLR3_UCHAR lit_23[] = { 0x62, 0x65, 0x66, 0x6F, 0x72, 0x65, ANTLR3_STRING_TERMINATOR};
17286 +static ANTLR3_UCHAR lit_24[] = { 0x61, 0x67, 0x6F, ANTLR3_STRING_TERMINATOR};
17287 +static ANTLR3_UCHAR lit_25[] = { 0x41, 0x4E, 0x44, ANTLR3_STRING_TERMINATOR};
17288 +static ANTLR3_UCHAR lit_26[] = { 0x61, 0x6E, 0x64, ANTLR3_STRING_TERMINATOR};
17289 +static ANTLR3_UCHAR lit_27[] = { 0x4F, 0x52, ANTLR3_STRING_TERMINATOR};
17290 +static ANTLR3_UCHAR lit_28[] = { 0x6F, 0x72, ANTLR3_STRING_TERMINATOR};
17291 +static ANTLR3_UCHAR lit_29[] = { 0x4E, 0x4F, 0x54, ANTLR3_STRING_TERMINATOR};
17292 +static ANTLR3_UCHAR lit_30[] = { 0x6E, 0x6F, 0x74, ANTLR3_STRING_TERMINATOR};
17293 +static ANTLR3_UCHAR lit_31[] = { 0x74, 0x6F, 0x64, 0x61, 0x79, ANTLR3_STRING_TERMINATOR};
17294 +static ANTLR3_UCHAR lit_32[] = { 0x79, 0x65, 0x73, 0x74, 0x65, 0x72, 0x64, 0x61, 0x79, ANTLR3_STRING_TERMINATOR};
17295 +static ANTLR3_UCHAR lit_33[] = { 0x6C, 0x61, 0x73, 0x74, 0x20, 0x77, 0x65, 0x65, 0x6B, ANTLR3_STRING_TERMINATOR};
17296 +static ANTLR3_UCHAR lit_34[] = { 0x6C, 0x61, 0x73, 0x74, 0x20, 0x6D, 0x6F, 0x6E, 0x74, 0x68, ANTLR3_STRING_TERMINATOR};
17297 +static ANTLR3_UCHAR lit_35[] = { 0x6C, 0x61, 0x73, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, ANTLR3_STRING_TERMINATOR};
17298 +static ANTLR3_UCHAR lit_36[] = { 0x64, 0x61, 0x79, 0x73, ANTLR3_STRING_TERMINATOR};
17299 +static ANTLR3_UCHAR lit_37[] = { 0x77, 0x65, 0x65, 0x6B, 0x73, ANTLR3_STRING_TERMINATOR};
17300 +static ANTLR3_UCHAR lit_38[] = { 0x6D, 0x6F, 0x6E, 0x74, 0x68, 0x73, ANTLR3_STRING_TERMINATOR};
17301 +static ANTLR3_UCHAR lit_39[] = { 0x79, 0x65, 0x61, 0x72, 0x73, ANTLR3_STRING_TERMINATOR};
17302 +static ANTLR3_UCHAR lit_40[] = { 0x6D, 0x75, 0x73, 0x69, 0x63, ANTLR3_STRING_TERMINATOR};
17303 +static ANTLR3_UCHAR lit_41[] = { 0x6D, 0x6F, 0x76, 0x69, 0x65, ANTLR3_STRING_TERMINATOR};
17304 +static ANTLR3_UCHAR lit_42[] = { 0x70, 0x6F, 0x64, 0x63, 0x61, 0x73, 0x74, ANTLR3_STRING_TERMINATOR};
17305 +static ANTLR3_UCHAR lit_43[] = { 0x61, 0x75, 0x64, 0x69, 0x6F, 0x62, 0x6F, 0x6F, 0x6B, ANTLR3_STRING_TERMINATOR};
17306 +static ANTLR3_UCHAR lit_44[] = { 0x74, 0x76, 0x73, 0x68, 0x6F, 0x77, ANTLR3_STRING_TERMINATOR};
17307 +static ANTLR3_UCHAR lit_45[] = { 0x66, 0x69, 0x6C, 0x65, ANTLR3_STRING_TERMINATOR};
17308 +static ANTLR3_UCHAR lit_46[] = { 0x75, 0x72, 0x6C, ANTLR3_STRING_TERMINATOR};
17309 +static ANTLR3_UCHAR lit_47[] = { 0x73, 0x70, 0x6F, 0x74, 0x69, 0x66, 0x79, ANTLR3_STRING_TERMINATOR};
17310 +static ANTLR3_UCHAR lit_48[] = { 0x70, 0x69, 0x70, 0x65, ANTLR3_STRING_TERMINATOR};
17311 +
17312 +
17313 +
17314 +
17315 +/* MACROS that hide the C interface implementations from the
17316 + * generated code, which makes it a little more understandable to the human eye.
17317 + * I am very much against using C pre-processor macros for function calls and bits
17318 + * of code as you cannot see what is happening when single stepping in debuggers
17319 + * and so on. The exception (in my book at least) is for generated code, where you are
17320 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
17321 + * hides some indirect calls, but is always referring to the input stream. This is
17322 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
17323 + * the runtime interfaces without changing the generated code too often, without
17324 + * confusing the reader of the generated output, who may not wish to know the gory
17325 + * details of the interface inheritance.
17326 + */
17327 +
17328 +#define CTX ctx
17329 +
17330 +/* Aids in accessing scopes for grammar programmers
17331 + */
17332 +#undef SCOPE_TYPE
17333 +#undef SCOPE_STACK
17334 +#undef SCOPE_TOP
17335 +#define SCOPE_TYPE(scope) pSMARTPLLexer_##scope##_SCOPE
17336 +#define SCOPE_STACK(scope) pSMARTPLLexer_##scope##Stack
17337 +#define SCOPE_TOP(scope) ctx->pSMARTPLLexer_##scope##Top
17338 +#define SCOPE_SIZE(scope) ctx->pSMARTPLLexer_##scope##Stack_limit
17339 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
17340 +
17341 +
17342 +/* Macros for accessing things in a lexer
17343 + */
17344 +#undef LEXER
17345 +#undef RECOGNIZER
17346 +#undef RULEMEMO
17347 +#undef GETCHARINDEX
17348 +#undef GETLINE
17349 +#undef GETCHARPOSITIONINLINE
17350 +#undef EMIT
17351 +#undef EMITNEW
17352 +#undef MATCHC
17353 +#undef MATCHS
17354 +#undef MATCHRANGE
17355 +#undef LTOKEN
17356 +#undef HASFAILED
17357 +#undef FAILEDFLAG
17358 +#undef INPUT
17359 +#undef STRSTREAM
17360 +#undef LA
17361 +#undef HASEXCEPTION
17362 +#undef EXCEPTION
17363 +#undef CONSTRUCTEX
17364 +#undef CONSUME
17365 +#undef LRECOVER
17366 +#undef MARK
17367 +#undef REWIND
17368 +#undef REWINDLAST
17369 +#undef BACKTRACKING
17370 +#undef MATCHANY
17371 +#undef MEMOIZE
17372 +#undef HAVEPARSEDRULE
17373 +#undef GETTEXT
17374 +#undef INDEX
17375 +#undef SEEK
17376 +#undef PUSHSTREAM
17377 +#undef POPSTREAM
17378 +#undef SETTEXT
17379 +#undef SETTEXT8
17380 +
17381 +#define LEXER ctx->pLexer
17382 +#define RECOGNIZER LEXER->rec
17383 +#define LEXSTATE RECOGNIZER->state
17384 +#define TOKSOURCE LEXSTATE->tokSource
17385 +#define GETCHARINDEX() LEXER->getCharIndex(LEXER)
17386 +#define GETLINE() LEXER->getLine(LEXER)
17387 +#define GETTEXT() LEXER->getText(LEXER)
17388 +#define GETCHARPOSITIONINLINE() LEXER->getCharPositionInLine(LEXER)
17389 +#define EMIT() LEXSTATE->type = _type; LEXER->emit(LEXER)
17390 +#define EMITNEW(t) LEXER->emitNew(LEXER, t)
17391 +#define MATCHC(c) LEXER->matchc(LEXER, c)
17392 +#define MATCHS(s) LEXER->matchs(LEXER, s)
17393 +#define MATCHRANGE(c1,c2) LEXER->matchRange(LEXER, c1, c2)
17394 +#define MATCHANY() LEXER->matchAny(LEXER)
17395 +#define LTOKEN LEXSTATE->token
17396 +#define HASFAILED() (LEXSTATE->failed == ANTLR3_TRUE)
17397 +#define BACKTRACKING LEXSTATE->backtracking
17398 +#define FAILEDFLAG LEXSTATE->failed
17399 +#define INPUT LEXER->input
17400 +#define STRSTREAM INPUT
17401 +#define ISTREAM INPUT->istream
17402 +#define INDEX() ISTREAM->index(ISTREAM)
17403 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
17404 +#define EOF_TOKEN &(LEXSTATE->tokSource->eofToken)
17405 +#define HASEXCEPTION() (LEXSTATE->error == ANTLR3_TRUE)
17406 +#define EXCEPTION LEXSTATE->exception
17407 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
17408 +#define LRECOVER() LEXER->recover(LEXER)
17409 +#define MARK() ISTREAM->mark(ISTREAM)
17410 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
17411 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
17412 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
17413 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
17414 +#define PUSHSTREAM(str) LEXER->pushCharStream(LEXER, str)
17415 +#define POPSTREAM() LEXER->popCharStream(LEXER)
17416 +#define SETTEXT(str) LEXSTATE->text = str
17417 +#define SKIP() LEXSTATE->token = &(TOKSOURCE->skipToken)
17418 +#define USER1 LEXSTATE->user1
17419 +#define USER2 LEXSTATE->user2
17420 +#define USER3 LEXSTATE->user3
17421 +#define CUSTOM LEXSTATE->custom
17422 +#define RULEMEMO LEXSTATE->ruleMemo
17423 +#define DBG RECOGNIZER->debugger
17424 +
17425 +/* If we have been told we can rely on the standard 8 bit or 16 bit input
17426 + * stream, then we can define our macros to use the direct pointers
17427 + * in the input object, which is much faster than indirect calls. This
17428 + * is really only significant to lexers with a lot of fragment rules (which
17429 + * do not place LA(1) in a temporary at the moment) and even then
17430 + * only if there is a lot of input (order of say 1M or so).
17431 + */
17432 +#if defined(ANTLR3_INLINE_INPUT_ASCII) || defined(ANTLR3_INLINE_INPUT_UTF16)
17433 +
17434 +# ifdef ANTLR3_INLINE_INPUT_ASCII
17435 +
17436 +/* 8 bit "ASCII" (actually any 8 bit character set) */
17437 +
17438 +# define NEXTCHAR ((pANTLR3_UINT8)(INPUT->nextChar))
17439 +# define DATAP ((pANTLR3_UINT8)(INPUT->data))
17440 +
17441 +# else
17442 +
17443 +# define NEXTCHAR ((pANTLR3_UINT16)(INPUT->nextChar))
17444 +# define DATAP ((pANTLR3_UINT16)(INPUT->data))
17445 +
17446 +# endif
17447 +
17448 +# define LA(n) ((NEXTCHAR + n) > (DATAP + INPUT->sizeBuf) ? ANTLR3_CHARSTREAM_EOF : (ANTLR3_UCHAR)(*(NEXTCHAR + n - 1)))
17449 +# define CONSUME() \
17450 +{ \
17451 + if (NEXTCHAR < (DATAP + INPUT->sizeBuf)) \
17452 + { \
17453 + INPUT->charPositionInLine++; \
17454 + if ((ANTLR3_UCHAR)(*NEXTCHAR) == INPUT->newlineChar) \
17455 + { \
17456 + INPUT->line++; \
17457 + INPUT->charPositionInLine = 0; \
17458 + INPUT->currentLine = (void *)(NEXTCHAR + 1); \
17459 + } \
17460 + INPUT->nextChar = (void *)(NEXTCHAR + 1); \
17461 + } \
17462 +}
17463 +
17464 +#else
17465 +
17466 +// Pick up the input character by calling the input stream implementation.
17467 +//
17468 +#define CONSUME() INPUT->istream->consume(INPUT->istream)
17469 +#define LA(n) INPUT->istream->_LA(INPUT->istream, n)
17470 +
17471 +#endif
17472 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
17473 +
17474 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
17475 + * then for the present you must use different names for your defines as these are hard coded
17476 + * in the code generator. It would be better not to use such names internally, and maybe
17477 + * we can change this in a forthcoming release. I deliberately do not #undef these
17478 + * here as this will at least give you a redefined error somewhere if they clash.
17479 + */
17480 +#define UP ANTLR3_TOKEN_UP
17481 +#define DOWN ANTLR3_TOKEN_DOWN
17482 +#define EOR ANTLR3_TOKEN_EOR
17483 +#define INVALID ANTLR3_TOKEN_INVALID
17484 +
17485 +
17486 +/* =============================================================================
17487 + * Functions to create and destroy scopes. First come the rule scopes, followed
17488 + * by the global declared scopes.
17489 + */
17490 +
17491 +
17492 +
17493 +/* ============================================================================= */
17494 +
17495 +/* =============================================================================
17496 + * Start of recognizer
17497 + */
17498 +
17499 +
17500 +/* Forward declare the locally static matching functions we have generated and any predicate functions.
17501 + */
17502 +static ANTLR3_INLINE void mT__30 (pSMARTPLLexer ctx);
17503 +static ANTLR3_INLINE void mT__31 (pSMARTPLLexer ctx);
17504 +static ANTLR3_INLINE void mSTRTAG (pSMARTPLLexer ctx);
17505 +static ANTLR3_INLINE void mINTTAG (pSMARTPLLexer ctx);
17506 +static ANTLR3_INLINE void mDATETAG (pSMARTPLLexer ctx);
17507 +static ANTLR3_INLINE void mENUMTAG (pSMARTPLLexer ctx);
17508 +static ANTLR3_INLINE void mINCLUDES (pSMARTPLLexer ctx);
17509 +static ANTLR3_INLINE void mIS (pSMARTPLLexer ctx);
17510 +static ANTLR3_INLINE void mINTBOOL (pSMARTPLLexer ctx);
17511 +static ANTLR3_INLINE void mGREATER (pSMARTPLLexer ctx);
17512 +static ANTLR3_INLINE void mGREATEREQUAL (pSMARTPLLexer ctx);
17513 +static ANTLR3_INLINE void mLESS (pSMARTPLLexer ctx);
17514 +static ANTLR3_INLINE void mLESSEQUAL (pSMARTPLLexer ctx);
17515 +static ANTLR3_INLINE void mEQUAL (pSMARTPLLexer ctx);
17516 +static ANTLR3_INLINE void mAFTER (pSMARTPLLexer ctx);
17517 +static ANTLR3_INLINE void mBEFORE (pSMARTPLLexer ctx);
17518 +static ANTLR3_INLINE void mAGO (pSMARTPLLexer ctx);
17519 +static ANTLR3_INLINE void mAND (pSMARTPLLexer ctx);
17520 +static ANTLR3_INLINE void mOR (pSMARTPLLexer ctx);
17521 +static ANTLR3_INLINE void mNOT (pSMARTPLLexer ctx);
17522 +static ANTLR3_INLINE void mLPAR (pSMARTPLLexer ctx);
17523 +static ANTLR3_INLINE void mRPAR (pSMARTPLLexer ctx);
17524 +static ANTLR3_INLINE void mDATE (pSMARTPLLexer ctx);
17525 +static ANTLR3_INLINE void mDATINTERVAL (pSMARTPLLexer ctx);
17526 +static ANTLR3_INLINE void mENUMVAL (pSMARTPLLexer ctx);
17527 +static ANTLR3_INLINE void mSTR (pSMARTPLLexer ctx);
17528 +static ANTLR3_INLINE void mINT (pSMARTPLLexer ctx);
17529 +static ANTLR3_INLINE void mWHITESPACE (pSMARTPLLexer ctx);
17530 +static ANTLR3_INLINE void mTokens (pSMARTPLLexer ctx);
17531 +static void SMARTPLLexerFree(pSMARTPLLexer ctx);
17532 +
17533 +/* =========================================================================
17534 + * Lexer matching rules end.
17535 + * =========================================================================
17536 + */
17537 +
17538 +
17539 +
17540 +static void
17541 +SMARTPLLexerFree (pSMARTPLLexer ctx)
17542 +{
17543 + LEXER->free(LEXER);
17544 +
17545 + ANTLR3_FREE(ctx);
17546 +}
17547 +
17548 +/** \brief Name of the grammar file that generated this code
17549 + */
17550 +static const char fileName[] = "SMARTPL.g";
17551 +
17552 +/** \brief Return the name of the grammar file that generated this code.
17553 + */
17554 +static const char * getGrammarFileName()
17555 +{
17556 + return fileName;
17557 +}
17558 +
17559 +/** \brief Create a new lexer called SMARTPLLexer
17560 + *
17561 + * \param[in] instream Pointer to an initialized input stream
17562 + * \return
17563 + * - Success pSMARTPLLexer initialized for the lex start
17564 + * - Fail NULL
17565 + */
17566 +ANTLR3_API pSMARTPLLexer SMARTPLLexerNew
17567 +(pANTLR3_INPUT_STREAM instream)
17568 +{
17569 + // See if we can create a new lexer with the standard constructor
17570 + //
17571 + return SMARTPLLexerNewSSD(instream, NULL);
17572 +}
17573 +
17574 +/** \brief Create a new lexer called SMARTPLLexer
17575 + *
17576 + * \param[in] instream Pointer to an initialized input stream
17577 + * \param[state] state Previously created shared recognizer stat
17578 + * \return
17579 + * - Success pSMARTPLLexer initialized for the lex start
17580 + * - Fail NULL
17581 + */
17582 +ANTLR3_API pSMARTPLLexer SMARTPLLexerNewSSD
17583 +(pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
17584 +{
17585 + pSMARTPLLexer ctx; // Context structure we will build and return
17586 +
17587 + ctx = (pSMARTPLLexer) ANTLR3_CALLOC(1, sizeof(SMARTPLLexer));
17588 +
17589 + if (ctx == NULL)
17590 + {
17591 + // Failed to allocate memory for lexer context
17592 + return NULL;
17593 + }
17594 +
17595 + /* -------------------------------------------------------------------
17596 + * Memory for basic structure is allocated, now to fill in
17597 + * in base ANTLR3 structures. We initialize the function pointers
17598 + * for the standard ANTLR3 lexer function set, but upon return
17599 + * from here, the programmer may set the pointers to provide custom
17600 + * implementations of each function.
17601 + *
17602 + * We don't use the macros defined in SMARTPLLexer.h here so you can get a sense
17603 + * of what goes where.
17604 + */
17605 +
17606 + /* Create a base lexer, using the supplied input stream
17607 + */
17608 + ctx->pLexer = antlr3LexerNewStream(ANTLR3_SIZE_HINT, instream, state);
17609 +
17610 + /* Check that we allocated the memory correctly
17611 + */
17612 + if (ctx->pLexer == NULL)
17613 + {
17614 + ANTLR3_FREE(ctx);
17615 + return NULL;
17616 + }
17617 + /* Install the implementation of our SMARTPLLexer interface
17618 + */
17619 + ctx->mT__30 = mT__30;
17620 + ctx->mT__31 = mT__31;
17621 + ctx->mSTRTAG = mSTRTAG;
17622 + ctx->mINTTAG = mINTTAG;
17623 + ctx->mDATETAG = mDATETAG;
17624 + ctx->mENUMTAG = mENUMTAG;
17625 + ctx->mINCLUDES = mINCLUDES;
17626 + ctx->mIS = mIS;
17627 + ctx->mINTBOOL = mINTBOOL;
17628 + ctx->mGREATER = mGREATER;
17629 + ctx->mGREATEREQUAL = mGREATEREQUAL;
17630 + ctx->mLESS = mLESS;
17631 + ctx->mLESSEQUAL = mLESSEQUAL;
17632 + ctx->mEQUAL = mEQUAL;
17633 + ctx->mAFTER = mAFTER;
17634 + ctx->mBEFORE = mBEFORE;
17635 + ctx->mAGO = mAGO;
17636 + ctx->mAND = mAND;
17637 + ctx->mOR = mOR;
17638 + ctx->mNOT = mNOT;
17639 + ctx->mLPAR = mLPAR;
17640 + ctx->mRPAR = mRPAR;
17641 + ctx->mDATE = mDATE;
17642 + ctx->mDATINTERVAL = mDATINTERVAL;
17643 + ctx->mENUMVAL = mENUMVAL;
17644 + ctx->mSTR = mSTR;
17645 + ctx->mINT = mINT;
17646 + ctx->mWHITESPACE = mWHITESPACE;
17647 + ctx->mTokens = mTokens;
17648 +
17649 + /** When the nextToken() call is made to this lexer's pANTLR3_TOKEN_SOURCE
17650 + * it will call mTokens() in this generated code, and will pass it the ctx
17651 + * pointer of this lexer, not the context of the base lexer, so store that now.
17652 + */
17653 + ctx->pLexer->ctx = ctx;
17654 +
17655 + /**Install the token matching function
17656 + */
17657 + ctx->pLexer->mTokens = (void (*) (void *))(mTokens);
17658 +
17659 + ctx->getGrammarFileName = getGrammarFileName;
17660 + ctx->free = SMARTPLLexerFree;
17661 +
17662 +
17663 +
17664 +
17665 +
17666 + /* Return the newly built lexer to the caller
17667 + */
17668 + return ctx;
17669 +}
17670 +
17671 +
17672 +/* =========================================================================
17673 + * Functions to match the lexer grammar defined tokens from the input stream
17674 + */
17675 +
17676 +// Comes from: 7:7: ( '{' )
17677 +/** \brief Lexer rule generated by ANTLR3
17678 + *
17679 + * $ANTLR start T__30
17680 + *
17681 + * Looks to match the characters the constitute the token T__30
17682 + * from the attached input stream.
17683 + *
17684 + *
17685 + * \remark
17686 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
17687 + */
17688 +static ANTLR3_INLINE
17689 +void mT__30(pSMARTPLLexer ctx)
17690 +{
17691 + ANTLR3_UINT32 _type;
17692 +
17693 + _type = T__30;
17694 +
17695 +
17696 + // SMARTPL.g:7:7: ( '{' )
17697 + // SMARTPL.g:7:9: '{'
17698 + {
17699 + MATCHC('{');
17700 + if (HASEXCEPTION())
17701 + {
17702 + goto ruleT__30Ex;
17703 + }
17704 +
17705 +
17706 + }
17707 +
17708 + LEXSTATE->type = _type;
17709 +
17710 + // This is where rules clean up and exit
17711 + //
17712 + goto ruleT__30Ex; /* Prevent compiler warnings */
17713 + ruleT__30Ex: ;
17714 +
17715 +}
17716 +// $ANTLR end T__30
17717 +
17718 +// Comes from: 8:7: ( '}' )
17719 +/** \brief Lexer rule generated by ANTLR3
17720 + *
17721 + * $ANTLR start T__31
17722 + *
17723 + * Looks to match the characters the constitute the token T__31
17724 + * from the attached input stream.
17725 + *
17726 + *
17727 + * \remark
17728 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
17729 + */
17730 +static ANTLR3_INLINE
17731 +void mT__31(pSMARTPLLexer ctx)
17732 +{
17733 + ANTLR3_UINT32 _type;
17734 +
17735 + _type = T__31;
17736 +
17737 +
17738 + // SMARTPL.g:8:7: ( '}' )
17739 + // SMARTPL.g:8:9: '}'
17740 + {
17741 + MATCHC('}');
17742 + if (HASEXCEPTION())
17743 + {
17744 + goto ruleT__31Ex;
17745 + }
17746 +
17747 +
17748 + }
17749 +
17750 + LEXSTATE->type = _type;
17751 +
17752 + // This is where rules clean up and exit
17753 + //
17754 + goto ruleT__31Ex; /* Prevent compiler warnings */
17755 + ruleT__31Ex: ;
17756 +
17757 +}
17758 +// $ANTLR end T__31
17759 +
17760 +// Comes from: 56:9: ( 'artist' | 'album_artist' | 'album' | 'title' | 'genre' | 'composer' | 'path' | 'type' | 'grouping' )
17761 +/** \brief Lexer rule generated by ANTLR3
17762 + *
17763 + * $ANTLR start STRTAG
17764 + *
17765 + * Looks to match the characters the constitute the token STRTAG
17766 + * from the attached input stream.
17767 + *
17768 + *
17769 + * \remark
17770 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
17771 + */
17772 +static ANTLR3_INLINE
17773 +void mSTRTAG(pSMARTPLLexer ctx)
17774 +{
17775 + ANTLR3_UINT32 _type;
17776 +
17777 + _type = STRTAG;
17778 +
17779 +
17780 + {
17781 + // SMARTPL.g:56:9: ( 'artist' | 'album_artist' | 'album' | 'title' | 'genre' | 'composer' | 'path' | 'type' | 'grouping' )
17782 +
17783 + ANTLR3_UINT32 alt1;
17784 +
17785 + alt1=9;
17786 +
17787 + switch ( LA(1) )
17788 + {
17789 + case 'a':
17790 + {
17791 + switch ( LA(2) )
17792 + {
17793 + case 'r':
17794 + {
17795 + alt1=1;
17796 + }
17797 + break;
17798 + case 'l':
17799 + {
17800 + switch ( LA(3) )
17801 + {
17802 + case 'b':
17803 + {
17804 + switch ( LA(4) )
17805 + {
17806 + case 'u':
17807 + {
17808 + switch ( LA(5) )
17809 + {
17810 + case 'm':
17811 + {
17812 + switch ( LA(6) )
17813 + {
17814 + case '_':
17815 + {
17816 + alt1=2;
17817 + }
17818 + break;
17819 +
17820 + default:
17821 + alt1=3;}
17822 +
17823 + }
17824 + break;
17825 +
17826 + default:
17827 + CONSTRUCTEX();
17828 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17829 + EXCEPTION->message = (void *)"";
17830 + EXCEPTION->decisionNum = 1;
17831 + EXCEPTION->state = 13;
17832 +
17833 +
17834 + goto ruleSTRTAGEx;
17835 + }
17836 +
17837 + }
17838 + break;
17839 +
17840 + default:
17841 + CONSTRUCTEX();
17842 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17843 + EXCEPTION->message = (void *)"";
17844 + EXCEPTION->decisionNum = 1;
17845 + EXCEPTION->state = 12;
17846 +
17847 +
17848 + goto ruleSTRTAGEx;
17849 + }
17850 +
17851 + }
17852 + break;
17853 +
17854 + default:
17855 + CONSTRUCTEX();
17856 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17857 + EXCEPTION->message = (void *)"";
17858 + EXCEPTION->decisionNum = 1;
17859 + EXCEPTION->state = 7;
17860 +
17861 +
17862 + goto ruleSTRTAGEx;
17863 + }
17864 +
17865 + }
17866 + break;
17867 +
17868 + default:
17869 + CONSTRUCTEX();
17870 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17871 + EXCEPTION->message = (void *)"";
17872 + EXCEPTION->decisionNum = 1;
17873 + EXCEPTION->state = 1;
17874 +
17875 +
17876 + goto ruleSTRTAGEx;
17877 + }
17878 +
17879 + }
17880 + break;
17881 + case 't':
17882 + {
17883 + switch ( LA(2) )
17884 + {
17885 + case 'i':
17886 + {
17887 + alt1=4;
17888 + }
17889 + break;
17890 + case 'y':
17891 + {
17892 + alt1=8;
17893 + }
17894 + break;
17895 +
17896 + default:
17897 + CONSTRUCTEX();
17898 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17899 + EXCEPTION->message = (void *)"";
17900 + EXCEPTION->decisionNum = 1;
17901 + EXCEPTION->state = 2;
17902 +
17903 +
17904 + goto ruleSTRTAGEx;
17905 + }
17906 +
17907 + }
17908 + break;
17909 + case 'g':
17910 + {
17911 + switch ( LA(2) )
17912 + {
17913 + case 'e':
17914 + {
17915 + alt1=5;
17916 + }
17917 + break;
17918 + case 'r':
17919 + {
17920 + alt1=9;
17921 + }
17922 + break;
17923 +
17924 + default:
17925 + CONSTRUCTEX();
17926 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17927 + EXCEPTION->message = (void *)"";
17928 + EXCEPTION->decisionNum = 1;
17929 + EXCEPTION->state = 3;
17930 +
17931 +
17932 + goto ruleSTRTAGEx;
17933 + }
17934 +
17935 + }
17936 + break;
17937 + case 'c':
17938 + {
17939 + alt1=6;
17940 + }
17941 + break;
17942 + case 'p':
17943 + {
17944 + alt1=7;
17945 + }
17946 + break;
17947 +
17948 + default:
17949 + CONSTRUCTEX();
17950 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
17951 + EXCEPTION->message = (void *)"";
17952 + EXCEPTION->decisionNum = 1;
17953 + EXCEPTION->state = 0;
17954 +
17955 +
17956 + goto ruleSTRTAGEx;
17957 + }
17958 +
17959 + switch (alt1)
17960 + {
17961 + case 1:
17962 + // SMARTPL.g:56:11: 'artist'
17963 + {
17964 + MATCHS(lit_1);
17965 + if (HASEXCEPTION())
17966 + {
17967 + goto ruleSTRTAGEx;
17968 + }
17969 +
17970 +
17971 +
17972 + }
17973 + break;
17974 + case 2:
17975 + // SMARTPL.g:57:6: 'album_artist'
17976 + {
17977 + MATCHS(lit_2);
17978 + if (HASEXCEPTION())
17979 + {
17980 + goto ruleSTRTAGEx;
17981 + }
17982 +
17983 +
17984 +
17985 + }
17986 + break;
17987 + case 3:
17988 + // SMARTPL.g:58:6: 'album'
17989 + {
17990 + MATCHS(lit_3);
17991 + if (HASEXCEPTION())
17992 + {
17993 + goto ruleSTRTAGEx;
17994 + }
17995 +
17996 +
17997 +
17998 + }
17999 + break;
18000 + case 4:
18001 + // SMARTPL.g:59:6: 'title'
18002 + {
18003 + MATCHS(lit_4);
18004 + if (HASEXCEPTION())
18005 + {
18006 + goto ruleSTRTAGEx;
18007 + }
18008 +
18009 +
18010 +
18011 + }
18012 + break;
18013 + case 5:
18014 + // SMARTPL.g:60:6: 'genre'
18015 + {
18016 + MATCHS(lit_5);
18017 + if (HASEXCEPTION())
18018 + {
18019 + goto ruleSTRTAGEx;
18020 + }
18021 +
18022 +
18023 +
18024 + }
18025 + break;
18026 + case 6:
18027 + // SMARTPL.g:61:6: 'composer'
18028 + {
18029 + MATCHS(lit_6);
18030 + if (HASEXCEPTION())
18031 + {
18032 + goto ruleSTRTAGEx;
18033 + }
18034 +
18035 +
18036 +
18037 + }
18038 + break;
18039 + case 7:
18040 + // SMARTPL.g:62:6: 'path'
18041 + {
18042 + MATCHS(lit_7);
18043 + if (HASEXCEPTION())
18044 + {
18045 + goto ruleSTRTAGEx;
18046 + }
18047 +
18048 +
18049 +
18050 + }
18051 + break;
18052 + case 8:
18053 + // SMARTPL.g:63:6: 'type'
18054 + {
18055 + MATCHS(lit_8);
18056 + if (HASEXCEPTION())
18057 + {
18058 + goto ruleSTRTAGEx;
18059 + }
18060 +
18061 +
18062 +
18063 + }
18064 + break;
18065 + case 9:
18066 + // SMARTPL.g:64:6: 'grouping'
18067 + {
18068 + MATCHS(lit_9);
18069 + if (HASEXCEPTION())
18070 + {
18071 + goto ruleSTRTAGEx;
18072 + }
18073 +
18074 +
18075 +
18076 + }
18077 + break;
18078 +
18079 + }
18080 + }
18081 + LEXSTATE->type = _type;
18082 +
18083 + // This is where rules clean up and exit
18084 + //
18085 + goto ruleSTRTAGEx; /* Prevent compiler warnings */
18086 + ruleSTRTAGEx: ;
18087 +
18088 +}
18089 +// $ANTLR end STRTAG
18090 +
18091 +// Comes from: 67:9: ( 'play_count' | 'rating' | 'year' | 'compilation' )
18092 +/** \brief Lexer rule generated by ANTLR3
18093 + *
18094 + * $ANTLR start INTTAG
18095 + *
18096 + * Looks to match the characters the constitute the token INTTAG
18097 + * from the attached input stream.
18098 + *
18099 + *
18100 + * \remark
18101 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18102 + */
18103 +static ANTLR3_INLINE
18104 +void mINTTAG(pSMARTPLLexer ctx)
18105 +{
18106 + ANTLR3_UINT32 _type;
18107 +
18108 + _type = INTTAG;
18109 +
18110 +
18111 + {
18112 + // SMARTPL.g:67:9: ( 'play_count' | 'rating' | 'year' | 'compilation' )
18113 +
18114 + ANTLR3_UINT32 alt2;
18115 +
18116 + alt2=4;
18117 +
18118 + switch ( LA(1) )
18119 + {
18120 + case 'p':
18121 + {
18122 + alt2=1;
18123 + }
18124 + break;
18125 + case 'r':
18126 + {
18127 + alt2=2;
18128 + }
18129 + break;
18130 + case 'y':
18131 + {
18132 + alt2=3;
18133 + }
18134 + break;
18135 + case 'c':
18136 + {
18137 + alt2=4;
18138 + }
18139 + break;
18140 +
18141 + default:
18142 + CONSTRUCTEX();
18143 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18144 + EXCEPTION->message = (void *)"";
18145 + EXCEPTION->decisionNum = 2;
18146 + EXCEPTION->state = 0;
18147 +
18148 +
18149 + goto ruleINTTAGEx;
18150 + }
18151 +
18152 + switch (alt2)
18153 + {
18154 + case 1:
18155 + // SMARTPL.g:67:11: 'play_count'
18156 + {
18157 + MATCHS(lit_10);
18158 + if (HASEXCEPTION())
18159 + {
18160 + goto ruleINTTAGEx;
18161 + }
18162 +
18163 +
18164 +
18165 + }
18166 + break;
18167 + case 2:
18168 + // SMARTPL.g:68:6: 'rating'
18169 + {
18170 + MATCHS(lit_11);
18171 + if (HASEXCEPTION())
18172 + {
18173 + goto ruleINTTAGEx;
18174 + }
18175 +
18176 +
18177 +
18178 + }
18179 + break;
18180 + case 3:
18181 + // SMARTPL.g:69:6: 'year'
18182 + {
18183 + MATCHS(lit_12);
18184 + if (HASEXCEPTION())
18185 + {
18186 + goto ruleINTTAGEx;
18187 + }
18188 +
18189 +
18190 +
18191 + }
18192 + break;
18193 + case 4:
18194 + // SMARTPL.g:70:6: 'compilation'
18195 + {
18196 + MATCHS(lit_13);
18197 + if (HASEXCEPTION())
18198 + {
18199 + goto ruleINTTAGEx;
18200 + }
18201 +
18202 +
18203 +
18204 + }
18205 + break;
18206 +
18207 + }
18208 + }
18209 + LEXSTATE->type = _type;
18210 +
18211 + // This is where rules clean up and exit
18212 + //
18213 + goto ruleINTTAGEx; /* Prevent compiler warnings */
18214 + ruleINTTAGEx: ;
18215 +
18216 +}
18217 +// $ANTLR end INTTAG
18218 +
18219 +// Comes from: 73:10: ( 'time_added' | 'time_played' )
18220 +/** \brief Lexer rule generated by ANTLR3
18221 + *
18222 + * $ANTLR start DATETAG
18223 + *
18224 + * Looks to match the characters the constitute the token DATETAG
18225 + * from the attached input stream.
18226 + *
18227 + *
18228 + * \remark
18229 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18230 + */
18231 +static ANTLR3_INLINE
18232 +void mDATETAG(pSMARTPLLexer ctx)
18233 +{
18234 + ANTLR3_UINT32 _type;
18235 +
18236 + _type = DATETAG;
18237 +
18238 +
18239 + {
18240 + // SMARTPL.g:73:10: ( 'time_added' | 'time_played' )
18241 +
18242 + ANTLR3_UINT32 alt3;
18243 +
18244 + alt3=2;
18245 +
18246 + switch ( LA(1) )
18247 + {
18248 + case 't':
18249 + {
18250 + switch ( LA(2) )
18251 + {
18252 + case 'i':
18253 + {
18254 + switch ( LA(3) )
18255 + {
18256 + case 'm':
18257 + {
18258 + switch ( LA(4) )
18259 + {
18260 + case 'e':
18261 + {
18262 + switch ( LA(5) )
18263 + {
18264 + case '_':
18265 + {
18266 + switch ( LA(6) )
18267 + {
18268 + case 'a':
18269 + {
18270 + alt3=1;
18271 + }
18272 + break;
18273 + case 'p':
18274 + {
18275 + alt3=2;
18276 + }
18277 + break;
18278 +
18279 + default:
18280 + CONSTRUCTEX();
18281 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18282 + EXCEPTION->message = (void *)"";
18283 + EXCEPTION->decisionNum = 3;
18284 + EXCEPTION->state = 5;
18285 +
18286 +
18287 + goto ruleDATETAGEx;
18288 + }
18289 +
18290 + }
18291 + break;
18292 +
18293 + default:
18294 + CONSTRUCTEX();
18295 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18296 + EXCEPTION->message = (void *)"";
18297 + EXCEPTION->decisionNum = 3;
18298 + EXCEPTION->state = 4;
18299 +
18300 +
18301 + goto ruleDATETAGEx;
18302 + }
18303 +
18304 + }
18305 + break;
18306 +
18307 + default:
18308 + CONSTRUCTEX();
18309 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18310 + EXCEPTION->message = (void *)"";
18311 + EXCEPTION->decisionNum = 3;
18312 + EXCEPTION->state = 3;
18313 +
18314 +
18315 + goto ruleDATETAGEx;
18316 + }
18317 +
18318 + }
18319 + break;
18320 +
18321 + default:
18322 + CONSTRUCTEX();
18323 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18324 + EXCEPTION->message = (void *)"";
18325 + EXCEPTION->decisionNum = 3;
18326 + EXCEPTION->state = 2;
18327 +
18328 +
18329 + goto ruleDATETAGEx;
18330 + }
18331 +
18332 + }
18333 + break;
18334 +
18335 + default:
18336 + CONSTRUCTEX();
18337 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18338 + EXCEPTION->message = (void *)"";
18339 + EXCEPTION->decisionNum = 3;
18340 + EXCEPTION->state = 1;
18341 +
18342 +
18343 + goto ruleDATETAGEx;
18344 + }
18345 +
18346 + }
18347 + break;
18348 +
18349 + default:
18350 + CONSTRUCTEX();
18351 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18352 + EXCEPTION->message = (void *)"";
18353 + EXCEPTION->decisionNum = 3;
18354 + EXCEPTION->state = 0;
18355 +
18356 +
18357 + goto ruleDATETAGEx;
18358 + }
18359 +
18360 + switch (alt3)
18361 + {
18362 + case 1:
18363 + // SMARTPL.g:73:12: 'time_added'
18364 + {
18365 + MATCHS(lit_14);
18366 + if (HASEXCEPTION())
18367 + {
18368 + goto ruleDATETAGEx;
18369 + }
18370 +
18371 +
18372 +
18373 + }
18374 + break;
18375 + case 2:
18376 + // SMARTPL.g:74:6: 'time_played'
18377 + {
18378 + MATCHS(lit_15);
18379 + if (HASEXCEPTION())
18380 + {
18381 + goto ruleDATETAGEx;
18382 + }
18383 +
18384 +
18385 +
18386 + }
18387 + break;
18388 +
18389 + }
18390 + }
18391 + LEXSTATE->type = _type;
18392 +
18393 + // This is where rules clean up and exit
18394 + //
18395 + goto ruleDATETAGEx; /* Prevent compiler warnings */
18396 + ruleDATETAGEx: ;
18397 +
18398 +}
18399 +// $ANTLR end DATETAG
18400 +
18401 +// Comes from: 77:10: ( 'data_kind' | 'media_kind' )
18402 +/** \brief Lexer rule generated by ANTLR3
18403 + *
18404 + * $ANTLR start ENUMTAG
18405 + *
18406 + * Looks to match the characters the constitute the token ENUMTAG
18407 + * from the attached input stream.
18408 + *
18409 + *
18410 + * \remark
18411 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18412 + */
18413 +static ANTLR3_INLINE
18414 +void mENUMTAG(pSMARTPLLexer ctx)
18415 +{
18416 + ANTLR3_UINT32 _type;
18417 +
18418 + _type = ENUMTAG;
18419 +
18420 +
18421 + {
18422 + // SMARTPL.g:77:10: ( 'data_kind' | 'media_kind' )
18423 +
18424 + ANTLR3_UINT32 alt4;
18425 +
18426 + alt4=2;
18427 +
18428 + switch ( LA(1) )
18429 + {
18430 + case 'd':
18431 + {
18432 + alt4=1;
18433 + }
18434 + break;
18435 + case 'm':
18436 + {
18437 + alt4=2;
18438 + }
18439 + break;
18440 +
18441 + default:
18442 + CONSTRUCTEX();
18443 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18444 + EXCEPTION->message = (void *)"";
18445 + EXCEPTION->decisionNum = 4;
18446 + EXCEPTION->state = 0;
18447 +
18448 +
18449 + goto ruleENUMTAGEx;
18450 + }
18451 +
18452 + switch (alt4)
18453 + {
18454 + case 1:
18455 + // SMARTPL.g:77:12: 'data_kind'
18456 + {
18457 + MATCHS(lit_16);
18458 + if (HASEXCEPTION())
18459 + {
18460 + goto ruleENUMTAGEx;
18461 + }
18462 +
18463 +
18464 +
18465 + }
18466 + break;
18467 + case 2:
18468 + // SMARTPL.g:78:6: 'media_kind'
18469 + {
18470 + MATCHS(lit_17);
18471 + if (HASEXCEPTION())
18472 + {
18473 + goto ruleENUMTAGEx;
18474 + }
18475 +
18476 +
18477 +
18478 + }
18479 + break;
18480 +
18481 + }
18482 + }
18483 + LEXSTATE->type = _type;
18484 +
18485 + // This is where rules clean up and exit
18486 + //
18487 + goto ruleENUMTAGEx; /* Prevent compiler warnings */
18488 + ruleENUMTAGEx: ;
18489 +
18490 +}
18491 +// $ANTLR end ENUMTAG
18492 +
18493 +// Comes from: 81:10: ( 'includes' )
18494 +/** \brief Lexer rule generated by ANTLR3
18495 + *
18496 + * $ANTLR start INCLUDES
18497 + *
18498 + * Looks to match the characters the constitute the token INCLUDES
18499 + * from the attached input stream.
18500 + *
18501 + *
18502 + * \remark
18503 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18504 + */
18505 +static ANTLR3_INLINE
18506 +void mINCLUDES(pSMARTPLLexer ctx)
18507 +{
18508 + ANTLR3_UINT32 _type;
18509 +
18510 + _type = INCLUDES;
18511 +
18512 +
18513 + // SMARTPL.g:81:10: ( 'includes' )
18514 + // SMARTPL.g:81:12: 'includes'
18515 + {
18516 + MATCHS(lit_18);
18517 + if (HASEXCEPTION())
18518 + {
18519 + goto ruleINCLUDESEx;
18520 + }
18521 +
18522 +
18523 +
18524 + }
18525 +
18526 + LEXSTATE->type = _type;
18527 +
18528 + // This is where rules clean up and exit
18529 + //
18530 + goto ruleINCLUDESEx; /* Prevent compiler warnings */
18531 + ruleINCLUDESEx: ;
18532 +
18533 +}
18534 +// $ANTLR end INCLUDES
18535 +
18536 +// Comes from: 84:6: ( 'is' )
18537 +/** \brief Lexer rule generated by ANTLR3
18538 + *
18539 + * $ANTLR start IS
18540 + *
18541 + * Looks to match the characters the constitute the token IS
18542 + * from the attached input stream.
18543 + *
18544 + *
18545 + * \remark
18546 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18547 + */
18548 +static ANTLR3_INLINE
18549 +void mIS(pSMARTPLLexer ctx)
18550 +{
18551 + ANTLR3_UINT32 _type;
18552 +
18553 + _type = IS;
18554 +
18555 +
18556 + // SMARTPL.g:84:6: ( 'is' )
18557 + // SMARTPL.g:84:8: 'is'
18558 + {
18559 + MATCHS(lit_19);
18560 + if (HASEXCEPTION())
18561 + {
18562 + goto ruleISEx;
18563 + }
18564 +
18565 +
18566 +
18567 + }
18568 +
18569 + LEXSTATE->type = _type;
18570 +
18571 + // This is where rules clean up and exit
18572 + //
18573 + goto ruleISEx; /* Prevent compiler warnings */
18574 + ruleISEx: ;
18575 +
18576 +}
18577 +// $ANTLR end IS
18578 +
18579 +// Comes from: 87:10: ( ( GREATER | GREATEREQUAL | LESS | LESSEQUAL | EQUAL ) )
18580 +/** \brief Lexer rule generated by ANTLR3
18581 + *
18582 + * $ANTLR start INTBOOL
18583 + *
18584 + * Looks to match the characters the constitute the token INTBOOL
18585 + * from the attached input stream.
18586 + *
18587 + *
18588 + * \remark
18589 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18590 + */
18591 +static ANTLR3_INLINE
18592 +void mINTBOOL(pSMARTPLLexer ctx)
18593 +{
18594 + ANTLR3_UINT32 _type;
18595 +
18596 + _type = INTBOOL;
18597 +
18598 +
18599 + // SMARTPL.g:87:10: ( ( GREATER | GREATEREQUAL | LESS | LESSEQUAL | EQUAL ) )
18600 + // SMARTPL.g:87:12: ( GREATER | GREATEREQUAL | LESS | LESSEQUAL | EQUAL )
18601 + {
18602 +
18603 + // SMARTPL.g:87:12: ( GREATER | GREATEREQUAL | LESS | LESSEQUAL | EQUAL )
18604 + {
18605 + int alt5=5;
18606 + switch ( LA(1) )
18607 + {
18608 + case '>':
18609 + {
18610 + switch ( LA(2) )
18611 + {
18612 + case '=':
18613 + {
18614 + alt5=2;
18615 + }
18616 + break;
18617 +
18618 + default:
18619 + alt5=1;}
18620 +
18621 + }
18622 + break;
18623 + case '<':
18624 + {
18625 + switch ( LA(2) )
18626 + {
18627 + case '=':
18628 + {
18629 + alt5=4;
18630 + }
18631 + break;
18632 +
18633 + default:
18634 + alt5=3;}
18635 +
18636 + }
18637 + break;
18638 + case '=':
18639 + {
18640 + alt5=5;
18641 + }
18642 + break;
18643 +
18644 + default:
18645 + CONSTRUCTEX();
18646 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
18647 + EXCEPTION->message = (void *)"";
18648 + EXCEPTION->decisionNum = 5;
18649 + EXCEPTION->state = 0;
18650 +
18651 +
18652 + goto ruleINTBOOLEx;
18653 + }
18654 +
18655 + switch (alt5)
18656 + {
18657 + case 1:
18658 + // SMARTPL.g:87:13: GREATER
18659 + {
18660 + /* 87:13: GREATER */
18661 + mGREATER(ctx );
18662 + if (HASEXCEPTION())
18663 + {
18664 + goto ruleINTBOOLEx;
18665 + }
18666 +
18667 +
18668 + }
18669 + break;
18670 + case 2:
18671 + // SMARTPL.g:87:21: GREATEREQUAL
18672 + {
18673 + /* 87:21: GREATEREQUAL */
18674 + mGREATEREQUAL(ctx );
18675 + if (HASEXCEPTION())
18676 + {
18677 + goto ruleINTBOOLEx;
18678 + }
18679 +
18680 +
18681 + }
18682 + break;
18683 + case 3:
18684 + // SMARTPL.g:87:34: LESS
18685 + {
18686 + /* 87:34: LESS */
18687 + mLESS(ctx );
18688 + if (HASEXCEPTION())
18689 + {
18690 + goto ruleINTBOOLEx;
18691 + }
18692 +
18693 +
18694 + }
18695 + break;
18696 + case 4:
18697 + // SMARTPL.g:87:39: LESSEQUAL
18698 + {
18699 + /* 87:39: LESSEQUAL */
18700 + mLESSEQUAL(ctx );
18701 + if (HASEXCEPTION())
18702 + {
18703 + goto ruleINTBOOLEx;
18704 + }
18705 +
18706 +
18707 + }
18708 + break;
18709 + case 5:
18710 + // SMARTPL.g:87:49: EQUAL
18711 + {
18712 + /* 87:49: EQUAL */
18713 + mEQUAL(ctx );
18714 + if (HASEXCEPTION())
18715 + {
18716 + goto ruleINTBOOLEx;
18717 + }
18718 +
18719 +
18720 + }
18721 + break;
18722 +
18723 + }
18724 + }
18725 +
18726 + }
18727 +
18728 + LEXSTATE->type = _type;
18729 +
18730 + // This is where rules clean up and exit
18731 + //
18732 + goto ruleINTBOOLEx; /* Prevent compiler warnings */
18733 + ruleINTBOOLEx: ;
18734 +
18735 +}
18736 +// $ANTLR end INTBOOL
18737 +
18738 +// Comes from: 91:10: ( '>' )
18739 +/** \brief Lexer rule generated by ANTLR3
18740 + *
18741 + * $ANTLR start GREATER
18742 + *
18743 + * Looks to match the characters the constitute the token GREATER
18744 + * from the attached input stream.
18745 + *
18746 + *
18747 + * \remark
18748 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18749 + */
18750 +static ANTLR3_INLINE
18751 +void mGREATER(pSMARTPLLexer ctx)
18752 +{
18753 + ANTLR3_UINT32 _type;
18754 +
18755 +
18756 + // SMARTPL.g:91:10: ( '>' )
18757 + // SMARTPL.g:91:12: '>'
18758 + {
18759 + MATCHC('>');
18760 + if (HASEXCEPTION())
18761 + {
18762 + goto ruleGREATEREx;
18763 + }
18764 +
18765 +
18766 + }
18767 +
18768 +
18769 +
18770 + // This is where rules clean up and exit
18771 + //
18772 + goto ruleGREATEREx; /* Prevent compiler warnings */
18773 + ruleGREATEREx: ;
18774 +
18775 +}
18776 +// $ANTLR end GREATER
18777 +
18778 +// Comes from: 95:13: ( '>=' )
18779 +/** \brief Lexer rule generated by ANTLR3
18780 + *
18781 + * $ANTLR start GREATEREQUAL
18782 + *
18783 + * Looks to match the characters the constitute the token GREATEREQUAL
18784 + * from the attached input stream.
18785 + *
18786 + *
18787 + * \remark
18788 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18789 + */
18790 +static ANTLR3_INLINE
18791 +void mGREATEREQUAL(pSMARTPLLexer ctx)
18792 +{
18793 + ANTLR3_UINT32 _type;
18794 +
18795 +
18796 + // SMARTPL.g:95:13: ( '>=' )
18797 + // SMARTPL.g:95:15: '>='
18798 + {
18799 + MATCHS(lit_20);
18800 + if (HASEXCEPTION())
18801 + {
18802 + goto ruleGREATEREQUALEx;
18803 + }
18804 +
18805 +
18806 +
18807 + }
18808 +
18809 +
18810 +
18811 + // This is where rules clean up and exit
18812 + //
18813 + goto ruleGREATEREQUALEx; /* Prevent compiler warnings */
18814 + ruleGREATEREQUALEx: ;
18815 +
18816 +}
18817 +// $ANTLR end GREATEREQUAL
18818 +
18819 +// Comes from: 99:7: ( '<' )
18820 +/** \brief Lexer rule generated by ANTLR3
18821 + *
18822 + * $ANTLR start LESS
18823 + *
18824 + * Looks to match the characters the constitute the token LESS
18825 + * from the attached input stream.
18826 + *
18827 + *
18828 + * \remark
18829 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18830 + */
18831 +static ANTLR3_INLINE
18832 +void mLESS(pSMARTPLLexer ctx)
18833 +{
18834 + ANTLR3_UINT32 _type;
18835 +
18836 +
18837 + // SMARTPL.g:99:7: ( '<' )
18838 + // SMARTPL.g:99:9: '<'
18839 + {
18840 + MATCHC('<');
18841 + if (HASEXCEPTION())
18842 + {
18843 + goto ruleLESSEx;
18844 + }
18845 +
18846 +
18847 + }
18848 +
18849 +
18850 +
18851 + // This is where rules clean up and exit
18852 + //
18853 + goto ruleLESSEx; /* Prevent compiler warnings */
18854 + ruleLESSEx: ;
18855 +
18856 +}
18857 +// $ANTLR end LESS
18858 +
18859 +// Comes from: 103:11: ( '<=' )
18860 +/** \brief Lexer rule generated by ANTLR3
18861 + *
18862 + * $ANTLR start LESSEQUAL
18863 + *
18864 + * Looks to match the characters the constitute the token LESSEQUAL
18865 + * from the attached input stream.
18866 + *
18867 + *
18868 + * \remark
18869 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18870 + */
18871 +static ANTLR3_INLINE
18872 +void mLESSEQUAL(pSMARTPLLexer ctx)
18873 +{
18874 + ANTLR3_UINT32 _type;
18875 +
18876 +
18877 + // SMARTPL.g:103:11: ( '<=' )
18878 + // SMARTPL.g:103:13: '<='
18879 + {
18880 + MATCHS(lit_21);
18881 + if (HASEXCEPTION())
18882 + {
18883 + goto ruleLESSEQUALEx;
18884 + }
18885 +
18886 +
18887 +
18888 + }
18889 +
18890 +
18891 +
18892 + // This is where rules clean up and exit
18893 + //
18894 + goto ruleLESSEQUALEx; /* Prevent compiler warnings */
18895 + ruleLESSEQUALEx: ;
18896 +
18897 +}
18898 +// $ANTLR end LESSEQUAL
18899 +
18900 +// Comes from: 107:8: ( '=' )
18901 +/** \brief Lexer rule generated by ANTLR3
18902 + *
18903 + * $ANTLR start EQUAL
18904 + *
18905 + * Looks to match the characters the constitute the token EQUAL
18906 + * from the attached input stream.
18907 + *
18908 + *
18909 + * \remark
18910 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18911 + */
18912 +static ANTLR3_INLINE
18913 +void mEQUAL(pSMARTPLLexer ctx)
18914 +{
18915 + ANTLR3_UINT32 _type;
18916 +
18917 +
18918 + // SMARTPL.g:107:8: ( '=' )
18919 + // SMARTPL.g:107:10: '='
18920 + {
18921 + MATCHC('=');
18922 + if (HASEXCEPTION())
18923 + {
18924 + goto ruleEQUALEx;
18925 + }
18926 +
18927 +
18928 + }
18929 +
18930 +
18931 +
18932 + // This is where rules clean up and exit
18933 + //
18934 + goto ruleEQUALEx; /* Prevent compiler warnings */
18935 + ruleEQUALEx: ;
18936 +
18937 +}
18938 +// $ANTLR end EQUAL
18939 +
18940 +// Comes from: 110:8: ( 'after' )
18941 +/** \brief Lexer rule generated by ANTLR3
18942 + *
18943 + * $ANTLR start AFTER
18944 + *
18945 + * Looks to match the characters the constitute the token AFTER
18946 + * from the attached input stream.
18947 + *
18948 + *
18949 + * \remark
18950 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18951 + */
18952 +static ANTLR3_INLINE
18953 +void mAFTER(pSMARTPLLexer ctx)
18954 +{
18955 + ANTLR3_UINT32 _type;
18956 +
18957 + _type = AFTER;
18958 +
18959 +
18960 + // SMARTPL.g:110:8: ( 'after' )
18961 + // SMARTPL.g:110:10: 'after'
18962 + {
18963 + MATCHS(lit_22);
18964 + if (HASEXCEPTION())
18965 + {
18966 + goto ruleAFTEREx;
18967 + }
18968 +
18969 +
18970 +
18971 + }
18972 +
18973 + LEXSTATE->type = _type;
18974 +
18975 + // This is where rules clean up and exit
18976 + //
18977 + goto ruleAFTEREx; /* Prevent compiler warnings */
18978 + ruleAFTEREx: ;
18979 +
18980 +}
18981 +// $ANTLR end AFTER
18982 +
18983 +// Comes from: 113:9: ( 'before' )
18984 +/** \brief Lexer rule generated by ANTLR3
18985 + *
18986 + * $ANTLR start BEFORE
18987 + *
18988 + * Looks to match the characters the constitute the token BEFORE
18989 + * from the attached input stream.
18990 + *
18991 + *
18992 + * \remark
18993 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
18994 + */
18995 +static ANTLR3_INLINE
18996 +void mBEFORE(pSMARTPLLexer ctx)
18997 +{
18998 + ANTLR3_UINT32 _type;
18999 +
19000 + _type = BEFORE;
19001 +
19002 +
19003 + // SMARTPL.g:113:9: ( 'before' )
19004 + // SMARTPL.g:113:11: 'before'
19005 + {
19006 + MATCHS(lit_23);
19007 + if (HASEXCEPTION())
19008 + {
19009 + goto ruleBEFOREEx;
19010 + }
19011 +
19012 +
19013 +
19014 + }
19015 +
19016 + LEXSTATE->type = _type;
19017 +
19018 + // This is where rules clean up and exit
19019 + //
19020 + goto ruleBEFOREEx; /* Prevent compiler warnings */
19021 + ruleBEFOREEx: ;
19022 +
19023 +}
19024 +// $ANTLR end BEFORE
19025 +
19026 +// Comes from: 116:7: ( 'ago' )
19027 +/** \brief Lexer rule generated by ANTLR3
19028 + *
19029 + * $ANTLR start AGO
19030 + *
19031 + * Looks to match the characters the constitute the token AGO
19032 + * from the attached input stream.
19033 + *
19034 + *
19035 + * \remark
19036 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19037 + */
19038 +static ANTLR3_INLINE
19039 +void mAGO(pSMARTPLLexer ctx)
19040 +{
19041 + ANTLR3_UINT32 _type;
19042 +
19043 + _type = AGO;
19044 +
19045 +
19046 + // SMARTPL.g:116:7: ( 'ago' )
19047 + // SMARTPL.g:116:9: 'ago'
19048 + {
19049 + MATCHS(lit_24);
19050 + if (HASEXCEPTION())
19051 + {
19052 + goto ruleAGOEx;
19053 + }
19054 +
19055 +
19056 +
19057 + }
19058 +
19059 + LEXSTATE->type = _type;
19060 +
19061 + // This is where rules clean up and exit
19062 + //
19063 + goto ruleAGOEx; /* Prevent compiler warnings */
19064 + ruleAGOEx: ;
19065 +
19066 +}
19067 +// $ANTLR end AGO
19068 +
19069 +// Comes from: 119:7: ( 'AND' | 'and' )
19070 +/** \brief Lexer rule generated by ANTLR3
19071 + *
19072 + * $ANTLR start AND
19073 + *
19074 + * Looks to match the characters the constitute the token AND
19075 + * from the attached input stream.
19076 + *
19077 + *
19078 + * \remark
19079 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19080 + */
19081 +static ANTLR3_INLINE
19082 +void mAND(pSMARTPLLexer ctx)
19083 +{
19084 + ANTLR3_UINT32 _type;
19085 +
19086 + _type = AND;
19087 +
19088 +
19089 + {
19090 + // SMARTPL.g:119:7: ( 'AND' | 'and' )
19091 +
19092 + ANTLR3_UINT32 alt6;
19093 +
19094 + alt6=2;
19095 +
19096 + switch ( LA(1) )
19097 + {
19098 + case 'A':
19099 + {
19100 + alt6=1;
19101 + }
19102 + break;
19103 + case 'a':
19104 + {
19105 + alt6=2;
19106 + }
19107 + break;
19108 +
19109 + default:
19110 + CONSTRUCTEX();
19111 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19112 + EXCEPTION->message = (void *)"";
19113 + EXCEPTION->decisionNum = 6;
19114 + EXCEPTION->state = 0;
19115 +
19116 +
19117 + goto ruleANDEx;
19118 + }
19119 +
19120 + switch (alt6)
19121 + {
19122 + case 1:
19123 + // SMARTPL.g:119:9: 'AND'
19124 + {
19125 + MATCHS(lit_25);
19126 + if (HASEXCEPTION())
19127 + {
19128 + goto ruleANDEx;
19129 + }
19130 +
19131 +
19132 +
19133 + }
19134 + break;
19135 + case 2:
19136 + // SMARTPL.g:120:6: 'and'
19137 + {
19138 + MATCHS(lit_26);
19139 + if (HASEXCEPTION())
19140 + {
19141 + goto ruleANDEx;
19142 + }
19143 +
19144 +
19145 +
19146 + }
19147 + break;
19148 +
19149 + }
19150 + }
19151 + LEXSTATE->type = _type;
19152 +
19153 + // This is where rules clean up and exit
19154 + //
19155 + goto ruleANDEx; /* Prevent compiler warnings */
19156 + ruleANDEx: ;
19157 +
19158 +}
19159 +// $ANTLR end AND
19160 +
19161 +// Comes from: 123:6: ( 'OR' | 'or' )
19162 +/** \brief Lexer rule generated by ANTLR3
19163 + *
19164 + * $ANTLR start OR
19165 + *
19166 + * Looks to match the characters the constitute the token OR
19167 + * from the attached input stream.
19168 + *
19169 + *
19170 + * \remark
19171 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19172 + */
19173 +static ANTLR3_INLINE
19174 +void mOR(pSMARTPLLexer ctx)
19175 +{
19176 + ANTLR3_UINT32 _type;
19177 +
19178 + _type = OR;
19179 +
19180 +
19181 + {
19182 + // SMARTPL.g:123:6: ( 'OR' | 'or' )
19183 +
19184 + ANTLR3_UINT32 alt7;
19185 +
19186 + alt7=2;
19187 +
19188 + switch ( LA(1) )
19189 + {
19190 + case 'O':
19191 + {
19192 + alt7=1;
19193 + }
19194 + break;
19195 + case 'o':
19196 + {
19197 + alt7=2;
19198 + }
19199 + break;
19200 +
19201 + default:
19202 + CONSTRUCTEX();
19203 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19204 + EXCEPTION->message = (void *)"";
19205 + EXCEPTION->decisionNum = 7;
19206 + EXCEPTION->state = 0;
19207 +
19208 +
19209 + goto ruleOREx;
19210 + }
19211 +
19212 + switch (alt7)
19213 + {
19214 + case 1:
19215 + // SMARTPL.g:123:8: 'OR'
19216 + {
19217 + MATCHS(lit_27);
19218 + if (HASEXCEPTION())
19219 + {
19220 + goto ruleOREx;
19221 + }
19222 +
19223 +
19224 +
19225 + }
19226 + break;
19227 + case 2:
19228 + // SMARTPL.g:124:6: 'or'
19229 + {
19230 + MATCHS(lit_28);
19231 + if (HASEXCEPTION())
19232 + {
19233 + goto ruleOREx;
19234 + }
19235 +
19236 +
19237 +
19238 + }
19239 + break;
19240 +
19241 + }
19242 + }
19243 + LEXSTATE->type = _type;
19244 +
19245 + // This is where rules clean up and exit
19246 + //
19247 + goto ruleOREx; /* Prevent compiler warnings */
19248 + ruleOREx: ;
19249 +
19250 +}
19251 +// $ANTLR end OR
19252 +
19253 +// Comes from: 127:7: ( 'NOT' | 'not' )
19254 +/** \brief Lexer rule generated by ANTLR3
19255 + *
19256 + * $ANTLR start NOT
19257 + *
19258 + * Looks to match the characters the constitute the token NOT
19259 + * from the attached input stream.
19260 + *
19261 + *
19262 + * \remark
19263 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19264 + */
19265 +static ANTLR3_INLINE
19266 +void mNOT(pSMARTPLLexer ctx)
19267 +{
19268 + ANTLR3_UINT32 _type;
19269 +
19270 + _type = NOT;
19271 +
19272 +
19273 + {
19274 + // SMARTPL.g:127:7: ( 'NOT' | 'not' )
19275 +
19276 + ANTLR3_UINT32 alt8;
19277 +
19278 + alt8=2;
19279 +
19280 + switch ( LA(1) )
19281 + {
19282 + case 'N':
19283 + {
19284 + alt8=1;
19285 + }
19286 + break;
19287 + case 'n':
19288 + {
19289 + alt8=2;
19290 + }
19291 + break;
19292 +
19293 + default:
19294 + CONSTRUCTEX();
19295 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19296 + EXCEPTION->message = (void *)"";
19297 + EXCEPTION->decisionNum = 8;
19298 + EXCEPTION->state = 0;
19299 +
19300 +
19301 + goto ruleNOTEx;
19302 + }
19303 +
19304 + switch (alt8)
19305 + {
19306 + case 1:
19307 + // SMARTPL.g:127:9: 'NOT'
19308 + {
19309 + MATCHS(lit_29);
19310 + if (HASEXCEPTION())
19311 + {
19312 + goto ruleNOTEx;
19313 + }
19314 +
19315 +
19316 +
19317 + }
19318 + break;
19319 + case 2:
19320 + // SMARTPL.g:128:6: 'not'
19321 + {
19322 + MATCHS(lit_30);
19323 + if (HASEXCEPTION())
19324 + {
19325 + goto ruleNOTEx;
19326 + }
19327 +
19328 +
19329 +
19330 + }
19331 + break;
19332 +
19333 + }
19334 + }
19335 + LEXSTATE->type = _type;
19336 +
19337 + // This is where rules clean up and exit
19338 + //
19339 + goto ruleNOTEx; /* Prevent compiler warnings */
19340 + ruleNOTEx: ;
19341 +
19342 +}
19343 +// $ANTLR end NOT
19344 +
19345 +// Comes from: 131:7: ( '(' )
19346 +/** \brief Lexer rule generated by ANTLR3
19347 + *
19348 + * $ANTLR start LPAR
19349 + *
19350 + * Looks to match the characters the constitute the token LPAR
19351 + * from the attached input stream.
19352 + *
19353 + *
19354 + * \remark
19355 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19356 + */
19357 +static ANTLR3_INLINE
19358 +void mLPAR(pSMARTPLLexer ctx)
19359 +{
19360 + ANTLR3_UINT32 _type;
19361 +
19362 + _type = LPAR;
19363 +
19364 +
19365 + // SMARTPL.g:131:7: ( '(' )
19366 + // SMARTPL.g:131:9: '('
19367 + {
19368 + MATCHC('(');
19369 + if (HASEXCEPTION())
19370 + {
19371 + goto ruleLPAREx;
19372 + }
19373 +
19374 +
19375 + }
19376 +
19377 + LEXSTATE->type = _type;
19378 +
19379 + // This is where rules clean up and exit
19380 + //
19381 + goto ruleLPAREx; /* Prevent compiler warnings */
19382 + ruleLPAREx: ;
19383 +
19384 +}
19385 +// $ANTLR end LPAR
19386 +
19387 +// Comes from: 134:7: ( ')' )
19388 +/** \brief Lexer rule generated by ANTLR3
19389 + *
19390 + * $ANTLR start RPAR
19391 + *
19392 + * Looks to match the characters the constitute the token RPAR
19393 + * from the attached input stream.
19394 + *
19395 + *
19396 + * \remark
19397 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19398 + */
19399 +static ANTLR3_INLINE
19400 +void mRPAR(pSMARTPLLexer ctx)
19401 +{
19402 + ANTLR3_UINT32 _type;
19403 +
19404 + _type = RPAR;
19405 +
19406 +
19407 + // SMARTPL.g:134:7: ( ')' )
19408 + // SMARTPL.g:134:9: ')'
19409 + {
19410 + MATCHC(')');
19411 + if (HASEXCEPTION())
19412 + {
19413 + goto ruleRPAREx;
19414 + }
19415 +
19416 +
19417 + }
19418 +
19419 + LEXSTATE->type = _type;
19420 +
19421 + // This is where rules clean up and exit
19422 + //
19423 + goto ruleRPAREx; /* Prevent compiler warnings */
19424 + ruleRPAREx: ;
19425 +
19426 +}
19427 +// $ANTLR end RPAR
19428 +
19429 +// Comes from: 137:7: ( ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) '-' ( '0' .. '1' ) ( '0' .. '9' ) '-' ( '0' .. '3' ) ( '0' .. '9' ) | 'today' | 'yesterday' | 'last week' | 'last month' | 'last year' )
19430 +/** \brief Lexer rule generated by ANTLR3
19431 + *
19432 + * $ANTLR start DATE
19433 + *
19434 + * Looks to match the characters the constitute the token DATE
19435 + * from the attached input stream.
19436 + *
19437 + *
19438 + * \remark
19439 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19440 + */
19441 +static ANTLR3_INLINE
19442 +void mDATE(pSMARTPLLexer ctx)
19443 +{
19444 + ANTLR3_UINT32 _type;
19445 +
19446 + _type = DATE;
19447 +
19448 +
19449 + {
19450 + // SMARTPL.g:137:7: ( ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) '-' ( '0' .. '1' ) ( '0' .. '9' ) '-' ( '0' .. '3' ) ( '0' .. '9' ) | 'today' | 'yesterday' | 'last week' | 'last month' | 'last year' )
19451 +
19452 + ANTLR3_UINT32 alt9;
19453 +
19454 + alt9=6;
19455 +
19456 + switch ( LA(1) )
19457 + {
19458 + case '0':
19459 + case '1':
19460 + case '2':
19461 + case '3':
19462 + case '4':
19463 + case '5':
19464 + case '6':
19465 + case '7':
19466 + case '8':
19467 + case '9':
19468 + {
19469 + alt9=1;
19470 + }
19471 + break;
19472 + case 't':
19473 + {
19474 + alt9=2;
19475 + }
19476 + break;
19477 + case 'y':
19478 + {
19479 + alt9=3;
19480 + }
19481 + break;
19482 + case 'l':
19483 + {
19484 + switch ( LA(2) )
19485 + {
19486 + case 'a':
19487 + {
19488 + switch ( LA(3) )
19489 + {
19490 + case 's':
19491 + {
19492 + switch ( LA(4) )
19493 + {
19494 + case 't':
19495 + {
19496 + switch ( LA(5) )
19497 + {
19498 + case ' ':
19499 + {
19500 + switch ( LA(6) )
19501 + {
19502 + case 'w':
19503 + {
19504 + alt9=4;
19505 + }
19506 + break;
19507 + case 'm':
19508 + {
19509 + alt9=5;
19510 + }
19511 + break;
19512 + case 'y':
19513 + {
19514 + alt9=6;
19515 + }
19516 + break;
19517 +
19518 + default:
19519 + CONSTRUCTEX();
19520 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19521 + EXCEPTION->message = (void *)"";
19522 + EXCEPTION->decisionNum = 9;
19523 + EXCEPTION->state = 8;
19524 +
19525 +
19526 + goto ruleDATEEx;
19527 + }
19528 +
19529 + }
19530 + break;
19531 +
19532 + default:
19533 + CONSTRUCTEX();
19534 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19535 + EXCEPTION->message = (void *)"";
19536 + EXCEPTION->decisionNum = 9;
19537 + EXCEPTION->state = 7;
19538 +
19539 +
19540 + goto ruleDATEEx;
19541 + }
19542 +
19543 + }
19544 + break;
19545 +
19546 + default:
19547 + CONSTRUCTEX();
19548 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19549 + EXCEPTION->message = (void *)"";
19550 + EXCEPTION->decisionNum = 9;
19551 + EXCEPTION->state = 6;
19552 +
19553 +
19554 + goto ruleDATEEx;
19555 + }
19556 +
19557 + }
19558 + break;
19559 +
19560 + default:
19561 + CONSTRUCTEX();
19562 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19563 + EXCEPTION->message = (void *)"";
19564 + EXCEPTION->decisionNum = 9;
19565 + EXCEPTION->state = 5;
19566 +
19567 +
19568 + goto ruleDATEEx;
19569 + }
19570 +
19571 + }
19572 + break;
19573 +
19574 + default:
19575 + CONSTRUCTEX();
19576 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19577 + EXCEPTION->message = (void *)"";
19578 + EXCEPTION->decisionNum = 9;
19579 + EXCEPTION->state = 4;
19580 +
19581 +
19582 + goto ruleDATEEx;
19583 + }
19584 +
19585 + }
19586 + break;
19587 +
19588 + default:
19589 + CONSTRUCTEX();
19590 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19591 + EXCEPTION->message = (void *)"";
19592 + EXCEPTION->decisionNum = 9;
19593 + EXCEPTION->state = 0;
19594 +
19595 +
19596 + goto ruleDATEEx;
19597 + }
19598 +
19599 + switch (alt9)
19600 + {
19601 + case 1:
19602 + // SMARTPL.g:137:9: ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) ( '0' .. '9' ) '-' ( '0' .. '1' ) ( '0' .. '9' ) '-' ( '0' .. '3' ) ( '0' .. '9' )
19603 + {
19604 + // SMARTPL.g:137:9: ( '0' .. '9' )
19605 + // SMARTPL.g:137:10: '0' .. '9'
19606 + {
19607 + MATCHRANGE('0', '9');
19608 + if (HASEXCEPTION())
19609 + {
19610 + goto ruleDATEEx;
19611 + }
19612 +
19613 +
19614 + }
19615 +
19616 + // SMARTPL.g:137:19: ( '0' .. '9' )
19617 + // SMARTPL.g:137:20: '0' .. '9'
19618 + {
19619 + MATCHRANGE('0', '9');
19620 + if (HASEXCEPTION())
19621 + {
19622 + goto ruleDATEEx;
19623 + }
19624 +
19625 +
19626 + }
19627 +
19628 + // SMARTPL.g:137:29: ( '0' .. '9' )
19629 + // SMARTPL.g:137:30: '0' .. '9'
19630 + {
19631 + MATCHRANGE('0', '9');
19632 + if (HASEXCEPTION())
19633 + {
19634 + goto ruleDATEEx;
19635 + }
19636 +
19637 +
19638 + }
19639 +
19640 + // SMARTPL.g:137:39: ( '0' .. '9' )
19641 + // SMARTPL.g:137:40: '0' .. '9'
19642 + {
19643 + MATCHRANGE('0', '9');
19644 + if (HASEXCEPTION())
19645 + {
19646 + goto ruleDATEEx;
19647 + }
19648 +
19649 +
19650 + }
19651 +
19652 + MATCHC('-');
19653 + if (HASEXCEPTION())
19654 + {
19655 + goto ruleDATEEx;
19656 + }
19657 +
19658 + // SMARTPL.g:137:52: ( '0' .. '1' )
19659 + // SMARTPL.g:137:53: '0' .. '1'
19660 + {
19661 + MATCHRANGE('0', '1');
19662 + if (HASEXCEPTION())
19663 + {
19664 + goto ruleDATEEx;
19665 + }
19666 +
19667 +
19668 + }
19669 +
19670 + // SMARTPL.g:137:62: ( '0' .. '9' )
19671 + // SMARTPL.g:137:63: '0' .. '9'
19672 + {
19673 + MATCHRANGE('0', '9');
19674 + if (HASEXCEPTION())
19675 + {
19676 + goto ruleDATEEx;
19677 + }
19678 +
19679 +
19680 + }
19681 +
19682 + MATCHC('-');
19683 + if (HASEXCEPTION())
19684 + {
19685 + goto ruleDATEEx;
19686 + }
19687 +
19688 + // SMARTPL.g:137:75: ( '0' .. '3' )
19689 + // SMARTPL.g:137:76: '0' .. '3'
19690 + {
19691 + MATCHRANGE('0', '3');
19692 + if (HASEXCEPTION())
19693 + {
19694 + goto ruleDATEEx;
19695 + }
19696 +
19697 +
19698 + }
19699 +
19700 + // SMARTPL.g:137:85: ( '0' .. '9' )
19701 + // SMARTPL.g:137:86: '0' .. '9'
19702 + {
19703 + MATCHRANGE('0', '9');
19704 + if (HASEXCEPTION())
19705 + {
19706 + goto ruleDATEEx;
19707 + }
19708 +
19709 +
19710 + }
19711 +
19712 +
19713 + }
19714 + break;
19715 + case 2:
19716 + // SMARTPL.g:138:6: 'today'
19717 + {
19718 + MATCHS(lit_31);
19719 + if (HASEXCEPTION())
19720 + {
19721 + goto ruleDATEEx;
19722 + }
19723 +
19724 +
19725 +
19726 + }
19727 + break;
19728 + case 3:
19729 + // SMARTPL.g:139:6: 'yesterday'
19730 + {
19731 + MATCHS(lit_32);
19732 + if (HASEXCEPTION())
19733 + {
19734 + goto ruleDATEEx;
19735 + }
19736 +
19737 +
19738 +
19739 + }
19740 + break;
19741 + case 4:
19742 + // SMARTPL.g:140:6: 'last week'
19743 + {
19744 + MATCHS(lit_33);
19745 + if (HASEXCEPTION())
19746 + {
19747 + goto ruleDATEEx;
19748 + }
19749 +
19750 +
19751 +
19752 + }
19753 + break;
19754 + case 5:
19755 + // SMARTPL.g:141:6: 'last month'
19756 + {
19757 + MATCHS(lit_34);
19758 + if (HASEXCEPTION())
19759 + {
19760 + goto ruleDATEEx;
19761 + }
19762 +
19763 +
19764 +
19765 + }
19766 + break;
19767 + case 6:
19768 + // SMARTPL.g:142:6: 'last year'
19769 + {
19770 + MATCHS(lit_35);
19771 + if (HASEXCEPTION())
19772 + {
19773 + goto ruleDATEEx;
19774 + }
19775 +
19776 +
19777 +
19778 + }
19779 + break;
19780 +
19781 + }
19782 + }
19783 + LEXSTATE->type = _type;
19784 +
19785 + // This is where rules clean up and exit
19786 + //
19787 + goto ruleDATEEx; /* Prevent compiler warnings */
19788 + ruleDATEEx: ;
19789 +
19790 +}
19791 +// $ANTLR end DATE
19792 +
19793 +// Comes from: 145:13: ( 'days' | 'weeks' | 'months' | 'years' )
19794 +/** \brief Lexer rule generated by ANTLR3
19795 + *
19796 + * $ANTLR start DATINTERVAL
19797 + *
19798 + * Looks to match the characters the constitute the token DATINTERVAL
19799 + * from the attached input stream.
19800 + *
19801 + *
19802 + * \remark
19803 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19804 + */
19805 +static ANTLR3_INLINE
19806 +void mDATINTERVAL(pSMARTPLLexer ctx)
19807 +{
19808 + ANTLR3_UINT32 _type;
19809 +
19810 + _type = DATINTERVAL;
19811 +
19812 +
19813 + {
19814 + // SMARTPL.g:145:13: ( 'days' | 'weeks' | 'months' | 'years' )
19815 +
19816 + ANTLR3_UINT32 alt10;
19817 +
19818 + alt10=4;
19819 +
19820 + switch ( LA(1) )
19821 + {
19822 + case 'd':
19823 + {
19824 + alt10=1;
19825 + }
19826 + break;
19827 + case 'w':
19828 + {
19829 + alt10=2;
19830 + }
19831 + break;
19832 + case 'm':
19833 + {
19834 + alt10=3;
19835 + }
19836 + break;
19837 + case 'y':
19838 + {
19839 + alt10=4;
19840 + }
19841 + break;
19842 +
19843 + default:
19844 + CONSTRUCTEX();
19845 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19846 + EXCEPTION->message = (void *)"";
19847 + EXCEPTION->decisionNum = 10;
19848 + EXCEPTION->state = 0;
19849 +
19850 +
19851 + goto ruleDATINTERVALEx;
19852 + }
19853 +
19854 + switch (alt10)
19855 + {
19856 + case 1:
19857 + // SMARTPL.g:145:15: 'days'
19858 + {
19859 + MATCHS(lit_36);
19860 + if (HASEXCEPTION())
19861 + {
19862 + goto ruleDATINTERVALEx;
19863 + }
19864 +
19865 +
19866 +
19867 + }
19868 + break;
19869 + case 2:
19870 + // SMARTPL.g:146:6: 'weeks'
19871 + {
19872 + MATCHS(lit_37);
19873 + if (HASEXCEPTION())
19874 + {
19875 + goto ruleDATINTERVALEx;
19876 + }
19877 +
19878 +
19879 +
19880 + }
19881 + break;
19882 + case 3:
19883 + // SMARTPL.g:147:6: 'months'
19884 + {
19885 + MATCHS(lit_38);
19886 + if (HASEXCEPTION())
19887 + {
19888 + goto ruleDATINTERVALEx;
19889 + }
19890 +
19891 +
19892 +
19893 + }
19894 + break;
19895 + case 4:
19896 + // SMARTPL.g:148:6: 'years'
19897 + {
19898 + MATCHS(lit_39);
19899 + if (HASEXCEPTION())
19900 + {
19901 + goto ruleDATINTERVALEx;
19902 + }
19903 +
19904 +
19905 +
19906 + }
19907 + break;
19908 +
19909 + }
19910 + }
19911 + LEXSTATE->type = _type;
19912 +
19913 + // This is where rules clean up and exit
19914 + //
19915 + goto ruleDATINTERVALEx; /* Prevent compiler warnings */
19916 + ruleDATINTERVALEx: ;
19917 +
19918 +}
19919 +// $ANTLR end DATINTERVAL
19920 +
19921 +// Comes from: 151:10: ( 'music' | 'movie' | 'podcast' | 'audiobook' | 'tvshow' | 'file' | 'url' | 'spotify' | 'pipe' )
19922 +/** \brief Lexer rule generated by ANTLR3
19923 + *
19924 + * $ANTLR start ENUMVAL
19925 + *
19926 + * Looks to match the characters the constitute the token ENUMVAL
19927 + * from the attached input stream.
19928 + *
19929 + *
19930 + * \remark
19931 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
19932 + */
19933 +static ANTLR3_INLINE
19934 +void mENUMVAL(pSMARTPLLexer ctx)
19935 +{
19936 + ANTLR3_UINT32 _type;
19937 +
19938 + _type = ENUMVAL;
19939 +
19940 +
19941 + {
19942 + // SMARTPL.g:151:10: ( 'music' | 'movie' | 'podcast' | 'audiobook' | 'tvshow' | 'file' | 'url' | 'spotify' | 'pipe' )
19943 +
19944 + ANTLR3_UINT32 alt11;
19945 +
19946 + alt11=9;
19947 +
19948 + switch ( LA(1) )
19949 + {
19950 + case 'm':
19951 + {
19952 + switch ( LA(2) )
19953 + {
19954 + case 'u':
19955 + {
19956 + alt11=1;
19957 + }
19958 + break;
19959 + case 'o':
19960 + {
19961 + alt11=2;
19962 + }
19963 + break;
19964 +
19965 + default:
19966 + CONSTRUCTEX();
19967 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19968 + EXCEPTION->message = (void *)"";
19969 + EXCEPTION->decisionNum = 11;
19970 + EXCEPTION->state = 1;
19971 +
19972 +
19973 + goto ruleENUMVALEx;
19974 + }
19975 +
19976 + }
19977 + break;
19978 + case 'p':
19979 + {
19980 + switch ( LA(2) )
19981 + {
19982 + case 'o':
19983 + {
19984 + alt11=3;
19985 + }
19986 + break;
19987 + case 'i':
19988 + {
19989 + alt11=9;
19990 + }
19991 + break;
19992 +
19993 + default:
19994 + CONSTRUCTEX();
19995 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
19996 + EXCEPTION->message = (void *)"";
19997 + EXCEPTION->decisionNum = 11;
19998 + EXCEPTION->state = 2;
19999 +
20000 +
20001 + goto ruleENUMVALEx;
20002 + }
20003 +
20004 + }
20005 + break;
20006 + case 'a':
20007 + {
20008 + alt11=4;
20009 + }
20010 + break;
20011 + case 't':
20012 + {
20013 + alt11=5;
20014 + }
20015 + break;
20016 + case 'f':
20017 + {
20018 + alt11=6;
20019 + }
20020 + break;
20021 + case 'u':
20022 + {
20023 + alt11=7;
20024 + }
20025 + break;
20026 + case 's':
20027 + {
20028 + alt11=8;
20029 + }
20030 + break;
20031 +
20032 + default:
20033 + CONSTRUCTEX();
20034 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20035 + EXCEPTION->message = (void *)"";
20036 + EXCEPTION->decisionNum = 11;
20037 + EXCEPTION->state = 0;
20038 +
20039 +
20040 + goto ruleENUMVALEx;
20041 + }
20042 +
20043 + switch (alt11)
20044 + {
20045 + case 1:
20046 + // SMARTPL.g:151:12: 'music'
20047 + {
20048 + MATCHS(lit_40);
20049 + if (HASEXCEPTION())
20050 + {
20051 + goto ruleENUMVALEx;
20052 + }
20053 +
20054 +
20055 +
20056 + }
20057 + break;
20058 + case 2:
20059 + // SMARTPL.g:152:6: 'movie'
20060 + {
20061 + MATCHS(lit_41);
20062 + if (HASEXCEPTION())
20063 + {
20064 + goto ruleENUMVALEx;
20065 + }
20066 +
20067 +
20068 +
20069 + }
20070 + break;
20071 + case 3:
20072 + // SMARTPL.g:153:6: 'podcast'
20073 + {
20074 + MATCHS(lit_42);
20075 + if (HASEXCEPTION())
20076 + {
20077 + goto ruleENUMVALEx;
20078 + }
20079 +
20080 +
20081 +
20082 + }
20083 + break;
20084 + case 4:
20085 + // SMARTPL.g:154:6: 'audiobook'
20086 + {
20087 + MATCHS(lit_43);
20088 + if (HASEXCEPTION())
20089 + {
20090 + goto ruleENUMVALEx;
20091 + }
20092 +
20093 +
20094 +
20095 + }
20096 + break;
20097 + case 5:
20098 + // SMARTPL.g:155:6: 'tvshow'
20099 + {
20100 + MATCHS(lit_44);
20101 + if (HASEXCEPTION())
20102 + {
20103 + goto ruleENUMVALEx;
20104 + }
20105 +
20106 +
20107 +
20108 + }
20109 + break;
20110 + case 6:
20111 + // SMARTPL.g:156:6: 'file'
20112 + {
20113 + MATCHS(lit_45);
20114 + if (HASEXCEPTION())
20115 + {
20116 + goto ruleENUMVALEx;
20117 + }
20118 +
20119 +
20120 +
20121 + }
20122 + break;
20123 + case 7:
20124 + // SMARTPL.g:157:6: 'url'
20125 + {
20126 + MATCHS(lit_46);
20127 + if (HASEXCEPTION())
20128 + {
20129 + goto ruleENUMVALEx;
20130 + }
20131 +
20132 +
20133 +
20134 + }
20135 + break;
20136 + case 8:
20137 + // SMARTPL.g:158:6: 'spotify'
20138 + {
20139 + MATCHS(lit_47);
20140 + if (HASEXCEPTION())
20141 + {
20142 + goto ruleENUMVALEx;
20143 + }
20144 +
20145 +
20146 +
20147 + }
20148 + break;
20149 + case 9:
20150 + // SMARTPL.g:159:6: 'pipe'
20151 + {
20152 + MATCHS(lit_48);
20153 + if (HASEXCEPTION())
20154 + {
20155 + goto ruleENUMVALEx;
20156 + }
20157 +
20158 +
20159 +
20160 + }
20161 + break;
20162 +
20163 + }
20164 + }
20165 + LEXSTATE->type = _type;
20166 +
20167 + // This is where rules clean up and exit
20168 + //
20169 + goto ruleENUMVALEx; /* Prevent compiler warnings */
20170 + ruleENUMVALEx: ;
20171 +
20172 +}
20173 +// $ANTLR end ENUMVAL
20174 +
20175 +// Comes from: 162:7: ( '\"' (~ ( '\"' ) )+ '\"' )
20176 +/** \brief Lexer rule generated by ANTLR3
20177 + *
20178 + * $ANTLR start STR
20179 + *
20180 + * Looks to match the characters the constitute the token STR
20181 + * from the attached input stream.
20182 + *
20183 + *
20184 + * \remark
20185 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
20186 + */
20187 +static ANTLR3_INLINE
20188 +void mSTR(pSMARTPLLexer ctx)
20189 +{
20190 + ANTLR3_UINT32 _type;
20191 +
20192 + _type = STR;
20193 +
20194 +
20195 + // SMARTPL.g:162:7: ( '\"' (~ ( '\"' ) )+ '\"' )
20196 + // SMARTPL.g:162:9: '\"' (~ ( '\"' ) )+ '\"'
20197 + {
20198 + MATCHC('"');
20199 + if (HASEXCEPTION())
20200 + {
20201 + goto ruleSTREx;
20202 + }
20203 +
20204 + // SMARTPL.g:162:13: (~ ( '\"' ) )+
20205 + {
20206 + int cnt12=0;
20207 +
20208 + for (;;)
20209 + {
20210 + int alt12=2;
20211 + {
20212 + /* dfaLoopbackState(k,edges,eotPredictsAlt,description,stateNumber,semPredState)
20213 + */
20214 + int LA12_0 = LA(1);
20215 + if ( (((LA12_0 >= 0x0000) && (LA12_0 <= '!')) || ((LA12_0 >= '#') && (LA12_0 <= 0xFFFF))) )
20216 + {
20217 + alt12=1;
20218 + }
20219 +
20220 + }
20221 + switch (alt12)
20222 + {
20223 + case 1:
20224 + // SMARTPL.g:162:13: ~ ( '\"' )
20225 + {
20226 + if ( ((LA(1) >= 0x0000) && (LA(1) <= '!')) || ((LA(1) >= '#') && (LA(1) <= 0xFFFF)) )
20227 + {
20228 + CONSUME();
20229 +
20230 + }
20231 + else
20232 + {
20233 + CONSTRUCTEX();
20234 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
20235 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
20236 +
20237 + LRECOVER(); goto ruleSTREx;
20238 + }
20239 +
20240 +
20241 + }
20242 + break;
20243 +
20244 + default:
20245 +
20246 + if ( cnt12 >= 1 )
20247 + {
20248 + goto loop12;
20249 + }
20250 + /* mismatchedSetEx()
20251 + */
20252 + CONSTRUCTEX();
20253 + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;
20254 + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;
20255 +
20256 +
20257 + goto ruleSTREx;
20258 + }
20259 + cnt12++;
20260 + }
20261 + loop12: ; /* Jump to here if this rule does not match */
20262 + }
20263 + MATCHC('"');
20264 + if (HASEXCEPTION())
20265 + {
20266 + goto ruleSTREx;
20267 + }
20268 +
20269 +
20270 + }
20271 +
20272 + LEXSTATE->type = _type;
20273 +
20274 + // This is where rules clean up and exit
20275 + //
20276 + goto ruleSTREx; /* Prevent compiler warnings */
20277 + ruleSTREx: ;
20278 +
20279 +}
20280 +// $ANTLR end STR
20281 +
20282 +// Comes from: 165:7: ( ( '0' .. '9' )+ )
20283 +/** \brief Lexer rule generated by ANTLR3
20284 + *
20285 + * $ANTLR start INT
20286 + *
20287 + * Looks to match the characters the constitute the token INT
20288 + * from the attached input stream.
20289 + *
20290 + *
20291 + * \remark
20292 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
20293 + */
20294 +static ANTLR3_INLINE
20295 +void mINT(pSMARTPLLexer ctx)
20296 +{
20297 + ANTLR3_UINT32 _type;
20298 +
20299 + _type = INT;
20300 +
20301 +
20302 + // SMARTPL.g:165:7: ( ( '0' .. '9' )+ )
20303 + // SMARTPL.g:165:9: ( '0' .. '9' )+
20304 + {
20305 + // SMARTPL.g:165:9: ( '0' .. '9' )+
20306 + {
20307 + int cnt13=0;
20308 +
20309 + for (;;)
20310 + {
20311 + int alt13=2;
20312 + switch ( LA(1) )
20313 + {
20314 + case '0':
20315 + case '1':
20316 + case '2':
20317 + case '3':
20318 + case '4':
20319 + case '5':
20320 + case '6':
20321 + case '7':
20322 + case '8':
20323 + case '9':
20324 + {
20325 + alt13=1;
20326 + }
20327 + break;
20328 +
20329 + }
20330 +
20331 + switch (alt13)
20332 + {
20333 + case 1:
20334 + // SMARTPL.g:165:10: '0' .. '9'
20335 + {
20336 + MATCHRANGE('0', '9');
20337 + if (HASEXCEPTION())
20338 + {
20339 + goto ruleINTEx;
20340 + }
20341 +
20342 +
20343 + }
20344 + break;
20345 +
20346 + default:
20347 +
20348 + if ( cnt13 >= 1 )
20349 + {
20350 + goto loop13;
20351 + }
20352 + /* mismatchedSetEx()
20353 + */
20354 + CONSTRUCTEX();
20355 + EXCEPTION->type = ANTLR3_EARLY_EXIT_EXCEPTION;
20356 + EXCEPTION->name = (void *)ANTLR3_EARLY_EXIT_NAME;
20357 +
20358 +
20359 + goto ruleINTEx;
20360 + }
20361 + cnt13++;
20362 + }
20363 + loop13: ; /* Jump to here if this rule does not match */
20364 + }
20365 +
20366 + }
20367 +
20368 + LEXSTATE->type = _type;
20369 +
20370 + // This is where rules clean up and exit
20371 + //
20372 + goto ruleINTEx; /* Prevent compiler warnings */
20373 + ruleINTEx: ;
20374 +
20375 +}
20376 +// $ANTLR end INT
20377 +
20378 +// Comes from: 168:12: ( ( '\\t' | ' ' | '\\r' | '\\n' | '\\u000C' ) )
20379 +/** \brief Lexer rule generated by ANTLR3
20380 + *
20381 + * $ANTLR start WHITESPACE
20382 + *
20383 + * Looks to match the characters the constitute the token WHITESPACE
20384 + * from the attached input stream.
20385 + *
20386 + *
20387 + * \remark
20388 + * - lexer->error == ANTLR3_TRUE if an exception was thrown.
20389 + */
20390 +static ANTLR3_INLINE
20391 +void mWHITESPACE(pSMARTPLLexer ctx)
20392 +{
20393 + ANTLR3_UINT32 _type;
20394 +
20395 + _type = WHITESPACE;
20396 +
20397 +
20398 + // SMARTPL.g:168:12: ( ( '\\t' | ' ' | '\\r' | '\\n' | '\\u000C' ) )
20399 + // SMARTPL.g:168:14: ( '\\t' | ' ' | '\\r' | '\\n' | '\\u000C' )
20400 + {
20401 + if ( ((LA(1) >= '\t') && (LA(1) <= '\n')) || ((LA(1) >= '\f') && (LA(1) <= '\r')) || LA(1) == ' ' )
20402 + {
20403 + CONSUME();
20404 +
20405 + }
20406 + else
20407 + {
20408 + CONSTRUCTEX();
20409 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
20410 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
20411 +
20412 + LRECOVER(); goto ruleWHITESPACEEx;
20413 + }
20414 +
20415 + {
20416 + LEXSTATE->channel = HIDDEN;
20417 + }
20418 +
20419 + }
20420 +
20421 + LEXSTATE->type = _type;
20422 +
20423 + // This is where rules clean up and exit
20424 + //
20425 + goto ruleWHITESPACEEx; /* Prevent compiler warnings */
20426 + ruleWHITESPACEEx: ;
20427 +
20428 +}
20429 +// $ANTLR end WHITESPACE
20430 +
20431 +/** This is the entry point in to the lexer from an object that
20432 + * wants to generate the next token, such as a pCOMMON_TOKEN_STREAM
20433 + */
20434 +static void
20435 +mTokens(pSMARTPLLexer ctx)
20436 +{
20437 + {
20438 + // SMARTPL.g:1:8: ( T__30 | T__31 | STRTAG | INTTAG | DATETAG | ENUMTAG | INCLUDES | IS | INTBOOL | AFTER | BEFORE | AGO | AND | OR | NOT | LPAR | RPAR | DATE | DATINTERVAL | ENUMVAL | STR | INT | WHITESPACE )
20439 +
20440 + ANTLR3_UINT32 alt14;
20441 +
20442 + alt14=23;
20443 +
20444 + switch ( LA(1) )
20445 + {
20446 + case '{':
20447 + {
20448 + alt14=1;
20449 + }
20450 + break;
20451 + case '}':
20452 + {
20453 + alt14=2;
20454 + }
20455 + break;
20456 + case 'a':
20457 + {
20458 + switch ( LA(2) )
20459 + {
20460 + case 'l':
20461 + case 'r':
20462 + {
20463 + alt14=3;
20464 + }
20465 + break;
20466 + case 'f':
20467 + {
20468 + alt14=10;
20469 + }
20470 + break;
20471 + case 'g':
20472 + {
20473 + alt14=12;
20474 + }
20475 + break;
20476 + case 'n':
20477 + {
20478 + alt14=13;
20479 + }
20480 + break;
20481 + case 'u':
20482 + {
20483 + alt14=20;
20484 + }
20485 + break;
20486 +
20487 + default:
20488 + CONSTRUCTEX();
20489 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20490 + EXCEPTION->message = (void *)"";
20491 + EXCEPTION->decisionNum = 14;
20492 + EXCEPTION->state = 3;
20493 +
20494 +
20495 + goto ruleTokensEx;
20496 + }
20497 +
20498 + }
20499 + break;
20500 + case 't':
20501 + {
20502 + switch ( LA(2) )
20503 + {
20504 + case 'i':
20505 + {
20506 + switch ( LA(3) )
20507 + {
20508 + case 't':
20509 + {
20510 + alt14=3;
20511 + }
20512 + break;
20513 + case 'm':
20514 + {
20515 + alt14=5;
20516 + }
20517 + break;
20518 +
20519 + default:
20520 + CONSTRUCTEX();
20521 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20522 + EXCEPTION->message = (void *)"";
20523 + EXCEPTION->decisionNum = 14;
20524 + EXCEPTION->state = 28;
20525 +
20526 +
20527 + goto ruleTokensEx;
20528 + }
20529 +
20530 + }
20531 + break;
20532 + case 'y':
20533 + {
20534 + alt14=3;
20535 + }
20536 + break;
20537 + case 'o':
20538 + {
20539 + alt14=18;
20540 + }
20541 + break;
20542 + case 'v':
20543 + {
20544 + alt14=20;
20545 + }
20546 + break;
20547 +
20548 + default:
20549 + CONSTRUCTEX();
20550 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20551 + EXCEPTION->message = (void *)"";
20552 + EXCEPTION->decisionNum = 14;
20553 + EXCEPTION->state = 4;
20554 +
20555 +
20556 + goto ruleTokensEx;
20557 + }
20558 +
20559 + }
20560 + break;
20561 + case 'g':
20562 + {
20563 + alt14=3;
20564 + }
20565 + break;
20566 + case 'c':
20567 + {
20568 + switch ( LA(2) )
20569 + {
20570 + case 'o':
20571 + {
20572 + switch ( LA(3) )
20573 + {
20574 + case 'm':
20575 + {
20576 + switch ( LA(4) )
20577 + {
20578 + case 'p':
20579 + {
20580 + switch ( LA(5) )
20581 + {
20582 + case 'o':
20583 + {
20584 + alt14=3;
20585 + }
20586 + break;
20587 + case 'i':
20588 + {
20589 + alt14=4;
20590 + }
20591 + break;
20592 +
20593 + default:
20594 + CONSTRUCTEX();
20595 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20596 + EXCEPTION->message = (void *)"";
20597 + EXCEPTION->decisionNum = 14;
20598 + EXCEPTION->state = 42;
20599 +
20600 +
20601 + goto ruleTokensEx;
20602 + }
20603 +
20604 + }
20605 + break;
20606 +
20607 + default:
20608 + CONSTRUCTEX();
20609 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20610 + EXCEPTION->message = (void *)"";
20611 + EXCEPTION->decisionNum = 14;
20612 + EXCEPTION->state = 39;
20613 +
20614 +
20615 + goto ruleTokensEx;
20616 + }
20617 +
20618 + }
20619 + break;
20620 +
20621 + default:
20622 + CONSTRUCTEX();
20623 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20624 + EXCEPTION->message = (void *)"";
20625 + EXCEPTION->decisionNum = 14;
20626 + EXCEPTION->state = 29;
20627 +
20628 +
20629 + goto ruleTokensEx;
20630 + }
20631 +
20632 + }
20633 + break;
20634 +
20635 + default:
20636 + CONSTRUCTEX();
20637 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20638 + EXCEPTION->message = (void *)"";
20639 + EXCEPTION->decisionNum = 14;
20640 + EXCEPTION->state = 6;
20641 +
20642 +
20643 + goto ruleTokensEx;
20644 + }
20645 +
20646 + }
20647 + break;
20648 + case 'p':
20649 + {
20650 + switch ( LA(2) )
20651 + {
20652 + case 'a':
20653 + {
20654 + alt14=3;
20655 + }
20656 + break;
20657 + case 'l':
20658 + {
20659 + alt14=4;
20660 + }
20661 + break;
20662 + case 'i':
20663 + case 'o':
20664 + {
20665 + alt14=20;
20666 + }
20667 + break;
20668 +
20669 + default:
20670 + CONSTRUCTEX();
20671 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20672 + EXCEPTION->message = (void *)"";
20673 + EXCEPTION->decisionNum = 14;
20674 + EXCEPTION->state = 7;
20675 +
20676 +
20677 + goto ruleTokensEx;
20678 + }
20679 +
20680 + }
20681 + break;
20682 + case 'r':
20683 + {
20684 + alt14=4;
20685 + }
20686 + break;
20687 + case 'y':
20688 + {
20689 + switch ( LA(2) )
20690 + {
20691 + case 'e':
20692 + {
20693 + switch ( LA(3) )
20694 + {
20695 + case 'a':
20696 + {
20697 + switch ( LA(4) )
20698 + {
20699 + case 'r':
20700 + {
20701 + switch ( LA(5) )
20702 + {
20703 + case 's':
20704 + {
20705 + alt14=19;
20706 + }
20707 + break;
20708 +
20709 + default:
20710 + alt14=4;}
20711 +
20712 + }
20713 + break;
20714 +
20715 + default:
20716 + CONSTRUCTEX();
20717 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20718 + EXCEPTION->message = (void *)"";
20719 + EXCEPTION->decisionNum = 14;
20720 + EXCEPTION->state = 40;
20721 +
20722 +
20723 + goto ruleTokensEx;
20724 + }
20725 +
20726 + }
20727 + break;
20728 + case 's':
20729 + {
20730 + alt14=18;
20731 + }
20732 + break;
20733 +
20734 + default:
20735 + CONSTRUCTEX();
20736 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20737 + EXCEPTION->message = (void *)"";
20738 + EXCEPTION->decisionNum = 14;
20739 + EXCEPTION->state = 30;
20740 +
20741 +
20742 + goto ruleTokensEx;
20743 + }
20744 +
20745 + }
20746 + break;
20747 +
20748 + default:
20749 + CONSTRUCTEX();
20750 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20751 + EXCEPTION->message = (void *)"";
20752 + EXCEPTION->decisionNum = 14;
20753 + EXCEPTION->state = 9;
20754 +
20755 +
20756 + goto ruleTokensEx;
20757 + }
20758 +
20759 + }
20760 + break;
20761 + case 'd':
20762 + {
20763 + switch ( LA(2) )
20764 + {
20765 + case 'a':
20766 + {
20767 + switch ( LA(3) )
20768 + {
20769 + case 't':
20770 + {
20771 + alt14=6;
20772 + }
20773 + break;
20774 + case 'y':
20775 + {
20776 + alt14=19;
20777 + }
20778 + break;
20779 +
20780 + default:
20781 + CONSTRUCTEX();
20782 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20783 + EXCEPTION->message = (void *)"";
20784 + EXCEPTION->decisionNum = 14;
20785 + EXCEPTION->state = 31;
20786 +
20787 +
20788 + goto ruleTokensEx;
20789 + }
20790 +
20791 + }
20792 + break;
20793 +
20794 + default:
20795 + CONSTRUCTEX();
20796 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20797 + EXCEPTION->message = (void *)"";
20798 + EXCEPTION->decisionNum = 14;
20799 + EXCEPTION->state = 10;
20800 +
20801 +
20802 + goto ruleTokensEx;
20803 + }
20804 +
20805 + }
20806 + break;
20807 + case 'm':
20808 + {
20809 + switch ( LA(2) )
20810 + {
20811 + case 'e':
20812 + {
20813 + alt14=6;
20814 + }
20815 + break;
20816 + case 'o':
20817 + {
20818 + switch ( LA(3) )
20819 + {
20820 + case 'n':
20821 + {
20822 + alt14=19;
20823 + }
20824 + break;
20825 + case 'v':
20826 + {
20827 + alt14=20;
20828 + }
20829 + break;
20830 +
20831 + default:
20832 + CONSTRUCTEX();
20833 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20834 + EXCEPTION->message = (void *)"";
20835 + EXCEPTION->decisionNum = 14;
20836 + EXCEPTION->state = 33;
20837 +
20838 +
20839 + goto ruleTokensEx;
20840 + }
20841 +
20842 + }
20843 + break;
20844 + case 'u':
20845 + {
20846 + alt14=20;
20847 + }
20848 + break;
20849 +
20850 + default:
20851 + CONSTRUCTEX();
20852 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20853 + EXCEPTION->message = (void *)"";
20854 + EXCEPTION->decisionNum = 14;
20855 + EXCEPTION->state = 11;
20856 +
20857 +
20858 + goto ruleTokensEx;
20859 + }
20860 +
20861 + }
20862 + break;
20863 + case 'i':
20864 + {
20865 + switch ( LA(2) )
20866 + {
20867 + case 'n':
20868 + {
20869 + alt14=7;
20870 + }
20871 + break;
20872 + case 's':
20873 + {
20874 + alt14=8;
20875 + }
20876 + break;
20877 +
20878 + default:
20879 + CONSTRUCTEX();
20880 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
20881 + EXCEPTION->message = (void *)"";
20882 + EXCEPTION->decisionNum = 14;
20883 + EXCEPTION->state = 12;
20884 +
20885 +
20886 + goto ruleTokensEx;
20887 + }
20888 +
20889 + }
20890 + break;
20891 + case '<':
20892 + case '=':
20893 + case '>':
20894 + {
20895 + alt14=9;
20896 + }
20897 + break;
20898 + case 'b':
20899 + {
20900 + alt14=11;
20901 + }
20902 + break;
20903 + case 'A':
20904 + {
20905 + alt14=13;
20906 + }
20907 + break;
20908 + case 'O':
20909 + case 'o':
20910 + {
20911 + alt14=14;
20912 + }
20913 + break;
20914 + case 'N':
20915 + case 'n':
20916 + {
20917 + alt14=15;
20918 + }
20919 + break;
20920 + case '(':
20921 + {
20922 + alt14=16;
20923 + }
20924 + break;
20925 + case ')':
20926 + {
20927 + alt14=17;
20928 + }
20929 + break;
20930 + case '0':
20931 + case '1':
20932 + case '2':
20933 + case '3':
20934 + case '4':
20935 + case '5':
20936 + case '6':
20937 + case '7':
20938 + case '8':
20939 + case '9':
20940 + {
20941 + switch ( LA(2) )
20942 + {
20943 + case '0':
20944 + case '1':
20945 + case '2':
20946 + case '3':
20947 + case '4':
20948 + case '5':
20949 + case '6':
20950 + case '7':
20951 + case '8':
20952 + case '9':
20953 + {
20954 + switch ( LA(3) )
20955 + {
20956 + case '0':
20957 + case '1':
20958 + case '2':
20959 + case '3':
20960 + case '4':
20961 + case '5':
20962 + case '6':
20963 + case '7':
20964 + case '8':
20965 + case '9':
20966 + {
20967 + switch ( LA(4) )
20968 + {
20969 + case '0':
20970 + case '1':
20971 + case '2':
20972 + case '3':
20973 + case '4':
20974 + case '5':
20975 + case '6':
20976 + case '7':
20977 + case '8':
20978 + case '9':
20979 + {
20980 + switch ( LA(5) )
20981 + {
20982 + case '-':
20983 + {
20984 + alt14=18;
20985 + }
20986 + break;
20987 +
20988 + default:
20989 + alt14=22;}
20990 +
20991 + }
20992 + break;
20993 +
20994 + default:
20995 + alt14=22;}
20996 +
20997 + }
20998 + break;
20999 +
21000 + default:
21001 + alt14=22;}
21002 +
21003 + }
21004 + break;
21005 +
21006 + default:
21007 + alt14=22;}
21008 +
21009 + }
21010 + break;
21011 + case 'l':
21012 + {
21013 + alt14=18;
21014 + }
21015 + break;
21016 + case 'w':
21017 + {
21018 + alt14=19;
21019 + }
21020 + break;
21021 + case 'f':
21022 + case 's':
21023 + case 'u':
21024 + {
21025 + alt14=20;
21026 + }
21027 + break;
21028 + case '"':
21029 + {
21030 + alt14=21;
21031 + }
21032 + break;
21033 + case '\t':
21034 + case '\n':
21035 + case '\f':
21036 + case '\r':
21037 + case ' ':
21038 + {
21039 + alt14=23;
21040 + }
21041 + break;
21042 +
21043 + default:
21044 + CONSTRUCTEX();
21045 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
21046 + EXCEPTION->message = (void *)"";
21047 + EXCEPTION->decisionNum = 14;
21048 + EXCEPTION->state = 0;
21049 +
21050 +
21051 + goto ruleTokensEx;
21052 + }
21053 +
21054 + switch (alt14)
21055 + {
21056 + case 1:
21057 + // SMARTPL.g:1:10: T__30
21058 + {
21059 + /* 1:10: T__30 */
21060 + mT__30(ctx );
21061 + if (HASEXCEPTION())
21062 + {
21063 + goto ruleTokensEx;
21064 + }
21065 +
21066 +
21067 + }
21068 + break;
21069 + case 2:
21070 + // SMARTPL.g:1:16: T__31
21071 + {
21072 + /* 1:16: T__31 */
21073 + mT__31(ctx );
21074 + if (HASEXCEPTION())
21075 + {
21076 + goto ruleTokensEx;
21077 + }
21078 +
21079 +
21080 + }
21081 + break;
21082 + case 3:
21083 + // SMARTPL.g:1:22: STRTAG
21084 + {
21085 + /* 1:22: STRTAG */
21086 + mSTRTAG(ctx );
21087 + if (HASEXCEPTION())
21088 + {
21089 + goto ruleTokensEx;
21090 + }
21091 +
21092 +
21093 + }
21094 + break;
21095 + case 4:
21096 + // SMARTPL.g:1:29: INTTAG
21097 + {
21098 + /* 1:29: INTTAG */
21099 + mINTTAG(ctx );
21100 + if (HASEXCEPTION())
21101 + {
21102 + goto ruleTokensEx;
21103 + }
21104 +
21105 +
21106 + }
21107 + break;
21108 + case 5:
21109 + // SMARTPL.g:1:36: DATETAG
21110 + {
21111 + /* 1:36: DATETAG */
21112 + mDATETAG(ctx );
21113 + if (HASEXCEPTION())
21114 + {
21115 + goto ruleTokensEx;
21116 + }
21117 +
21118 +
21119 + }
21120 + break;
21121 + case 6:
21122 + // SMARTPL.g:1:44: ENUMTAG
21123 + {
21124 + /* 1:44: ENUMTAG */
21125 + mENUMTAG(ctx );
21126 + if (HASEXCEPTION())
21127 + {
21128 + goto ruleTokensEx;
21129 + }
21130 +
21131 +
21132 + }
21133 + break;
21134 + case 7:
21135 + // SMARTPL.g:1:52: INCLUDES
21136 + {
21137 + /* 1:52: INCLUDES */
21138 + mINCLUDES(ctx );
21139 + if (HASEXCEPTION())
21140 + {
21141 + goto ruleTokensEx;
21142 + }
21143 +
21144 +
21145 + }
21146 + break;
21147 + case 8:
21148 + // SMARTPL.g:1:61: IS
21149 + {
21150 + /* 1:61: IS */
21151 + mIS(ctx );
21152 + if (HASEXCEPTION())
21153 + {
21154 + goto ruleTokensEx;
21155 + }
21156 +
21157 +
21158 + }
21159 + break;
21160 + case 9:
21161 + // SMARTPL.g:1:64: INTBOOL
21162 + {
21163 + /* 1:64: INTBOOL */
21164 + mINTBOOL(ctx );
21165 + if (HASEXCEPTION())
21166 + {
21167 + goto ruleTokensEx;
21168 + }
21169 +
21170 +
21171 + }
21172 + break;
21173 + case 10:
21174 + // SMARTPL.g:1:72: AFTER
21175 + {
21176 + /* 1:72: AFTER */
21177 + mAFTER(ctx );
21178 + if (HASEXCEPTION())
21179 + {
21180 + goto ruleTokensEx;
21181 + }
21182 +
21183 +
21184 + }
21185 + break;
21186 + case 11:
21187 + // SMARTPL.g:1:78: BEFORE
21188 + {
21189 + /* 1:78: BEFORE */
21190 + mBEFORE(ctx );
21191 + if (HASEXCEPTION())
21192 + {
21193 + goto ruleTokensEx;
21194 + }
21195 +
21196 +
21197 + }
21198 + break;
21199 + case 12:
21200 + // SMARTPL.g:1:85: AGO
21201 + {
21202 + /* 1:85: AGO */
21203 + mAGO(ctx );
21204 + if (HASEXCEPTION())
21205 + {
21206 + goto ruleTokensEx;
21207 + }
21208 +
21209 +
21210 + }
21211 + break;
21212 + case 13:
21213 + // SMARTPL.g:1:89: AND
21214 + {
21215 + /* 1:89: AND */
21216 + mAND(ctx );
21217 + if (HASEXCEPTION())
21218 + {
21219 + goto ruleTokensEx;
21220 + }
21221 +
21222 +
21223 + }
21224 + break;
21225 + case 14:
21226 + // SMARTPL.g:1:93: OR
21227 + {
21228 + /* 1:93: OR */
21229 + mOR(ctx );
21230 + if (HASEXCEPTION())
21231 + {
21232 + goto ruleTokensEx;
21233 + }
21234 +
21235 +
21236 + }
21237 + break;
21238 + case 15:
21239 + // SMARTPL.g:1:96: NOT
21240 + {
21241 + /* 1:96: NOT */
21242 + mNOT(ctx );
21243 + if (HASEXCEPTION())
21244 + {
21245 + goto ruleTokensEx;
21246 + }
21247 +
21248 +
21249 + }
21250 + break;
21251 + case 16:
21252 + // SMARTPL.g:1:100: LPAR
21253 + {
21254 + /* 1:100: LPAR */
21255 + mLPAR(ctx );
21256 + if (HASEXCEPTION())
21257 + {
21258 + goto ruleTokensEx;
21259 + }
21260 +
21261 +
21262 + }
21263 + break;
21264 + case 17:
21265 + // SMARTPL.g:1:105: RPAR
21266 + {
21267 + /* 1:105: RPAR */
21268 + mRPAR(ctx );
21269 + if (HASEXCEPTION())
21270 + {
21271 + goto ruleTokensEx;
21272 + }
21273 +
21274 +
21275 + }
21276 + break;
21277 + case 18:
21278 + // SMARTPL.g:1:110: DATE
21279 + {
21280 + /* 1:110: DATE */
21281 + mDATE(ctx );
21282 + if (HASEXCEPTION())
21283 + {
21284 + goto ruleTokensEx;
21285 + }
21286 +
21287 +
21288 + }
21289 + break;
21290 + case 19:
21291 + // SMARTPL.g:1:115: DATINTERVAL
21292 + {
21293 + /* 1:115: DATINTERVAL */
21294 + mDATINTERVAL(ctx );
21295 + if (HASEXCEPTION())
21296 + {
21297 + goto ruleTokensEx;
21298 + }
21299 +
21300 +
21301 + }
21302 + break;
21303 + case 20:
21304 + // SMARTPL.g:1:127: ENUMVAL
21305 + {
21306 + /* 1:127: ENUMVAL */
21307 + mENUMVAL(ctx );
21308 + if (HASEXCEPTION())
21309 + {
21310 + goto ruleTokensEx;
21311 + }
21312 +
21313 +
21314 + }
21315 + break;
21316 + case 21:
21317 + // SMARTPL.g:1:135: STR
21318 + {
21319 + /* 1:135: STR */
21320 + mSTR(ctx );
21321 + if (HASEXCEPTION())
21322 + {
21323 + goto ruleTokensEx;
21324 + }
21325 +
21326 +
21327 + }
21328 + break;
21329 + case 22:
21330 + // SMARTPL.g:1:139: INT
21331 + {
21332 + /* 1:139: INT */
21333 + mINT(ctx );
21334 + if (HASEXCEPTION())
21335 + {
21336 + goto ruleTokensEx;
21337 + }
21338 +
21339 +
21340 + }
21341 + break;
21342 + case 23:
21343 + // SMARTPL.g:1:143: WHITESPACE
21344 + {
21345 + /* 1:143: WHITESPACE */
21346 + mWHITESPACE(ctx );
21347 + if (HASEXCEPTION())
21348 + {
21349 + goto ruleTokensEx;
21350 + }
21351 +
21352 +
21353 + }
21354 + break;
21355 +
21356 + }
21357 + }
21358 +
21359 +
21360 + goto ruleTokensEx; /* Prevent compiler warnings */
21361 +ruleTokensEx: ;
21362 +}
21363 +
21364 +/* =========================================================================
21365 + * Lexer matching rules end.
21366 + * =========================================================================
21367 + */
21368 +/* End of Lexer code
21369 + * ================================================
21370 + * ================================================
21371 + */
21372 +
21373 +
21374 +/* End of code
21375 + * =============================================================================
21376 + */
21377 diff --git a/src/pregen/SMARTPLLexer.h b/src/pregen/SMARTPLLexer.h
21378 new file mode 100644
21379 index 0000000..87e8c7e
21380 --- /dev/null
21381 +++ b/src/pregen/SMARTPLLexer.h
21382 @@ -0,0 +1,248 @@
21383 +/** \file
21384 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
21385 + *
21386 + * - From the grammar source file : SMARTPL.g
21387 + * - On : 2016-01-01 12:23:40
21388 + * - for the lexer : SMARTPLLexerLexer *
21389 + * Editing it, at least manually, is not wise.
21390 + *
21391 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
21392 + *
21393 + *
21394 + * The lexer SMARTPLLexer has the callable functions (rules) shown below,
21395 + * which will invoke the code for the associated rule in the source grammar
21396 + * assuming that the input stream is pointing to a token/text stream that could begin
21397 + * this rule.
21398 + *
21399 + * For instance if you call the first (topmost) rule in a parser grammar, you will
21400 + * get the results of a full parse, but calling a rule half way through the grammar will
21401 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
21402 + * in editors and so on.
21403 + *
21404 + * The parser entry points are called indirectly (by function pointer to function) via
21405 + * a parser context typedef pSMARTPLLexer, which is returned from a call to SMARTPLLexerNew().
21406 + *
21407 + * As this is a generated lexer, it is unlikely you will call it 'manually'. However
21408 + * the methods are provided anyway.
21409 + * * The methods in pSMARTPLLexer are as follows:
21410 + *
21411 + * - void pSMARTPLLexer->T__30(pSMARTPLLexer)
21412 + * - void pSMARTPLLexer->T__31(pSMARTPLLexer)
21413 + * - void pSMARTPLLexer->STRTAG(pSMARTPLLexer)
21414 + * - void pSMARTPLLexer->INTTAG(pSMARTPLLexer)
21415 + * - void pSMARTPLLexer->DATETAG(pSMARTPLLexer)
21416 + * - void pSMARTPLLexer->ENUMTAG(pSMARTPLLexer)
21417 + * - void pSMARTPLLexer->INCLUDES(pSMARTPLLexer)
21418 + * - void pSMARTPLLexer->IS(pSMARTPLLexer)
21419 + * - void pSMARTPLLexer->INTBOOL(pSMARTPLLexer)
21420 + * - void pSMARTPLLexer->GREATER(pSMARTPLLexer)
21421 + * - void pSMARTPLLexer->GREATEREQUAL(pSMARTPLLexer)
21422 + * - void pSMARTPLLexer->LESS(pSMARTPLLexer)
21423 + * - void pSMARTPLLexer->LESSEQUAL(pSMARTPLLexer)
21424 + * - void pSMARTPLLexer->EQUAL(pSMARTPLLexer)
21425 + * - void pSMARTPLLexer->AFTER(pSMARTPLLexer)
21426 + * - void pSMARTPLLexer->BEFORE(pSMARTPLLexer)
21427 + * - void pSMARTPLLexer->AGO(pSMARTPLLexer)
21428 + * - void pSMARTPLLexer->AND(pSMARTPLLexer)
21429 + * - void pSMARTPLLexer->OR(pSMARTPLLexer)
21430 + * - void pSMARTPLLexer->NOT(pSMARTPLLexer)
21431 + * - void pSMARTPLLexer->LPAR(pSMARTPLLexer)
21432 + * - void pSMARTPLLexer->RPAR(pSMARTPLLexer)
21433 + * - void pSMARTPLLexer->DATE(pSMARTPLLexer)
21434 + * - void pSMARTPLLexer->DATINTERVAL(pSMARTPLLexer)
21435 + * - void pSMARTPLLexer->ENUMVAL(pSMARTPLLexer)
21436 + * - void pSMARTPLLexer->STR(pSMARTPLLexer)
21437 + * - void pSMARTPLLexer->INT(pSMARTPLLexer)
21438 + * - void pSMARTPLLexer->WHITESPACE(pSMARTPLLexer)
21439 + * - void pSMARTPLLexer->Tokens(pSMARTPLLexer)
21440 + *
21441 + * The return type for any particular rule is of course determined by the source
21442 + * grammar file.
21443 + */
21444 +// [The "BSD licence"]
21445 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
21446 +// http://www.temporal-wave.com
21447 +// http://www.linkedin.com/in/jimidle
21448 +//
21449 +// All rights reserved.
21450 +//
21451 +// Redistribution and use in source and binary forms, with or without
21452 +// modification, are permitted provided that the following conditions
21453 +// are met:
21454 +// 1. Redistributions of source code must retain the above copyright
21455 +// notice, this list of conditions and the following disclaimer.
21456 +// 2. Redistributions in binary form must reproduce the above copyright
21457 +// notice, this list of conditions and the following disclaimer in the
21458 +// documentation and/or other materials provided with the distribution.
21459 +// 3. The name of the author may not be used to endorse or promote products
21460 +// derived from this software without specific prior written permission.
21461 +//
21462 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21463 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21464 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21465 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21466 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21467 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21468 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21469 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21470 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21471 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
21472 +
21473 +#ifndef _SMARTPLLexer_H
21474 +#define _SMARTPLLexer_H
21475 +/* =============================================================================
21476 + * Standard antlr3 C runtime definitions
21477 + */
21478 +#include <antlr3.h>
21479 +
21480 +/* End of standard antlr 3 runtime definitions
21481 + * =============================================================================
21482 + */
21483 +
21484 +#ifdef __cplusplus
21485 +extern "C" {
21486 +#endif
21487 +
21488 +// Forward declare the context typedef so that we can use it before it is
21489 +// properly defined. Delegators and delegates (from import statements) are
21490 +// interdependent and their context structures contain pointers to each other
21491 +// C only allows such things to be declared if you pre-declare the typedef.
21492 +//
21493 +typedef struct SMARTPLLexer_Ctx_struct SMARTPLLexer, * pSMARTPLLexer;
21494 +
21495 +
21496 +
21497 +#ifdef ANTLR3_WINDOWS
21498 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
21499 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
21500 +// initialized but unused variable - tree rewrite variables declared but not needed
21501 +// Unreferenced local variable - lexer rule declares but does not always use _type
21502 +// potentially unitialized variable used - retval always returned from a rule
21503 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
21504 +//
21505 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
21506 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
21507 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
21508 +// this is a matter of orthogonality hence I disable that one.
21509 +//
21510 +#pragma warning( disable : 4100 )
21511 +#pragma warning( disable : 4101 )
21512 +#pragma warning( disable : 4127 )
21513 +#pragma warning( disable : 4189 )
21514 +#pragma warning( disable : 4505 )
21515 +#pragma warning( disable : 4701 )
21516 +#endif
21517 +
21518 +/** Context tracking structure for SMARTPLLexer
21519 + */
21520 +struct SMARTPLLexer_Ctx_struct
21521 +{
21522 + /** Built in ANTLR3 context tracker contains all the generic elements
21523 + * required for context tracking.
21524 + */
21525 + pANTLR3_LEXER pLexer;
21526 +
21527 +
21528 + void (*mT__30) (struct SMARTPLLexer_Ctx_struct * ctx);
21529 + void (*mT__31) (struct SMARTPLLexer_Ctx_struct * ctx);
21530 + void (*mSTRTAG) (struct SMARTPLLexer_Ctx_struct * ctx);
21531 + void (*mINTTAG) (struct SMARTPLLexer_Ctx_struct * ctx);
21532 + void (*mDATETAG) (struct SMARTPLLexer_Ctx_struct * ctx);
21533 + void (*mENUMTAG) (struct SMARTPLLexer_Ctx_struct * ctx);
21534 + void (*mINCLUDES) (struct SMARTPLLexer_Ctx_struct * ctx);
21535 + void (*mIS) (struct SMARTPLLexer_Ctx_struct * ctx);
21536 + void (*mINTBOOL) (struct SMARTPLLexer_Ctx_struct * ctx);
21537 + void (*mGREATER) (struct SMARTPLLexer_Ctx_struct * ctx);
21538 + void (*mGREATEREQUAL) (struct SMARTPLLexer_Ctx_struct * ctx);
21539 + void (*mLESS) (struct SMARTPLLexer_Ctx_struct * ctx);
21540 + void (*mLESSEQUAL) (struct SMARTPLLexer_Ctx_struct * ctx);
21541 + void (*mEQUAL) (struct SMARTPLLexer_Ctx_struct * ctx);
21542 + void (*mAFTER) (struct SMARTPLLexer_Ctx_struct * ctx);
21543 + void (*mBEFORE) (struct SMARTPLLexer_Ctx_struct * ctx);
21544 + void (*mAGO) (struct SMARTPLLexer_Ctx_struct * ctx);
21545 + void (*mAND) (struct SMARTPLLexer_Ctx_struct * ctx);
21546 + void (*mOR) (struct SMARTPLLexer_Ctx_struct * ctx);
21547 + void (*mNOT) (struct SMARTPLLexer_Ctx_struct * ctx);
21548 + void (*mLPAR) (struct SMARTPLLexer_Ctx_struct * ctx);
21549 + void (*mRPAR) (struct SMARTPLLexer_Ctx_struct * ctx);
21550 + void (*mDATE) (struct SMARTPLLexer_Ctx_struct * ctx);
21551 + void (*mDATINTERVAL) (struct SMARTPLLexer_Ctx_struct * ctx);
21552 + void (*mENUMVAL) (struct SMARTPLLexer_Ctx_struct * ctx);
21553 + void (*mSTR) (struct SMARTPLLexer_Ctx_struct * ctx);
21554 + void (*mINT) (struct SMARTPLLexer_Ctx_struct * ctx);
21555 + void (*mWHITESPACE) (struct SMARTPLLexer_Ctx_struct * ctx);
21556 + void (*mTokens) (struct SMARTPLLexer_Ctx_struct * ctx); const char * (*getGrammarFileName)();
21557 + void (*free) (struct SMARTPLLexer_Ctx_struct * ctx);
21558 +
21559 +};
21560 +
21561 +// Function protoypes for the constructor functions that external translation units
21562 +// such as delegators and delegates may wish to call.
21563 +//
21564 +ANTLR3_API pSMARTPLLexer SMARTPLLexerNew (pANTLR3_INPUT_STREAM instream);
21565 +ANTLR3_API pSMARTPLLexer SMARTPLLexerNewSSD (pANTLR3_INPUT_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
21566 +
21567 +/** Symbolic definitions of all the tokens that the lexer will work with.
21568 + * \{
21569 + *
21570 + * Antlr will define EOF, but we can't use that as it it is too common in
21571 + * in C header files and that would be confusing. There is no way to filter this out at the moment
21572 + * so we just undef it here for now. That isn't the value we get back from C recognizers
21573 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
21574 + */
21575 +#ifdef EOF
21576 +#undef EOF
21577 +#endif
21578 +#ifdef Tokens
21579 +#undef Tokens
21580 +#endif
21581 +#define INTBOOL 14
21582 +#define STRTAG 10
21583 +#define AGO 22
21584 +#define WHITESPACE 29
21585 +#define GREATEREQUAL 25
21586 +#define BEFORE 18
21587 +#define DATETAG 16
21588 +#define INT 15
21589 +#define NOT 7
21590 +#define AFTER 17
21591 +#define AND 6
21592 +#define EOF -1
21593 +#define INCLUDES 11
21594 +#define STR 4
21595 +#define T__30 30
21596 +#define T__31 31
21597 +#define GREATER 24
21598 +#define LPAR 8
21599 +#define ENUMTAG 19
21600 +#define IS 12
21601 +#define ENUMVAL 20
21602 +#define EQUAL 28
21603 +#define OR 5
21604 +#define LESS 26
21605 +#define RPAR 9
21606 +#define DATE 21
21607 +#define LESSEQUAL 27
21608 +#define INTTAG 13
21609 +#define DATINTERVAL 23
21610 +#ifdef EOF
21611 +#undef EOF
21612 +#define EOF ANTLR3_TOKEN_EOF
21613 +#endif
21614 +
21615 +#ifndef TOKENSOURCE
21616 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
21617 +#endif
21618 +
21619 +/* End of token definitions for SMARTPLLexer
21620 + * =============================================================================
21621 + */
21622 +/** \} */
21623 +
21624 +#ifdef __cplusplus
21625 +}
21626 +#endif
21627 +
21628 +#endif
21629 +
21630 +/* END - Note:Keep extra line feed to satisfy UNIX systems */
21631 diff --git a/src/pregen/SMARTPLParser.c b/src/pregen/SMARTPLParser.c
21632 new file mode 100644
21633 index 0000000..f39e5ae
21634 --- /dev/null
21635 +++ b/src/pregen/SMARTPLParser.c
21636 @@ -0,0 +1,1812 @@
21637 +/** \file
21638 + * This C source file was generated by $ANTLR version 3.2 debian-7ubuntu3
21639 + *
21640 + * - From the grammar source file : SMARTPL.g
21641 + * - On : 2016-01-01 12:23:40
21642 + * - for the parser : SMARTPLParserParser *
21643 + * Editing it, at least manually, is not wise.
21644 + *
21645 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
21646 + *
21647 + *
21648 +*/
21649 +// [The "BSD licence"]
21650 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
21651 +// http://www.temporal-wave.com
21652 +// http://www.linkedin.com/in/jimidle
21653 +//
21654 +// All rights reserved.
21655 +//
21656 +// Redistribution and use in source and binary forms, with or without
21657 +// modification, are permitted provided that the following conditions
21658 +// are met:
21659 +// 1. Redistributions of source code must retain the above copyright
21660 +// notice, this list of conditions and the following disclaimer.
21661 +// 2. Redistributions in binary form must reproduce the above copyright
21662 +// notice, this list of conditions and the following disclaimer in the
21663 +// documentation and/or other materials provided with the distribution.
21664 +// 3. The name of the author may not be used to endorse or promote products
21665 +// derived from this software without specific prior written permission.
21666 +//
21667 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21668 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21669 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21670 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21671 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21672 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21673 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21674 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21675 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21676 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
21677 +
21678 +/* -----------------------------------------
21679 + * Include the ANTLR3 generated header file.
21680 + */
21681 +#include "SMARTPLParser.h"
21682 +/* ----------------------------------------- */
21683 +
21684 +
21685 +
21686 +
21687 +
21688 +/* MACROS that hide the C interface implementations from the
21689 + * generated code, which makes it a little more understandable to the human eye.
21690 + * I am very much against using C pre-processor macros for function calls and bits
21691 + * of code as you cannot see what is happening when single stepping in debuggers
21692 + * and so on. The exception (in my book at least) is for generated code, where you are
21693 + * not maintaining it, but may wish to read and understand it. If you single step it, you know that input()
21694 + * hides some indirect calls, but is always referring to the input stream. This is
21695 + * probably more readable than ctx->input->istream->input(snarfle0->blarg) and allows me to rejig
21696 + * the runtime interfaces without changing the generated code too often, without
21697 + * confusing the reader of the generated output, who may not wish to know the gory
21698 + * details of the interface inheritance.
21699 + */
21700 +
21701 +#define CTX ctx
21702 +
21703 +/* Aids in accessing scopes for grammar programmers
21704 + */
21705 +#undef SCOPE_TYPE
21706 +#undef SCOPE_STACK
21707 +#undef SCOPE_TOP
21708 +#define SCOPE_TYPE(scope) pSMARTPLParser_##scope##_SCOPE
21709 +#define SCOPE_STACK(scope) pSMARTPLParser_##scope##Stack
21710 +#define SCOPE_TOP(scope) ctx->pSMARTPLParser_##scope##Top
21711 +#define SCOPE_SIZE(scope) ctx->pSMARTPLParser_##scope##Stack_limit
21712 +#define SCOPE_INSTANCE(scope, i) (ctx->SCOPE_STACK(scope)->get(ctx->SCOPE_STACK(scope),i))
21713 +
21714 +/* Macros for accessing things in the parser
21715 + */
21716 +
21717 +#undef PARSER
21718 +#undef RECOGNIZER
21719 +#undef HAVEPARSEDRULE
21720 +#undef MEMOIZE
21721 +#undef INPUT
21722 +#undef STRSTREAM
21723 +#undef HASEXCEPTION
21724 +#undef EXCEPTION
21725 +#undef MATCHT
21726 +#undef MATCHANYT
21727 +#undef FOLLOWSTACK
21728 +#undef FOLLOWPUSH
21729 +#undef FOLLOWPOP
21730 +#undef PRECOVER
21731 +#undef PREPORTERROR
21732 +#undef LA
21733 +#undef LT
21734 +#undef CONSTRUCTEX
21735 +#undef CONSUME
21736 +#undef MARK
21737 +#undef REWIND
21738 +#undef REWINDLAST
21739 +#undef PERRORRECOVERY
21740 +#undef HASFAILED
21741 +#undef FAILEDFLAG
21742 +#undef RECOVERFROMMISMATCHEDSET
21743 +#undef RECOVERFROMMISMATCHEDELEMENT
21744 +#undef INDEX
21745 +#undef ADAPTOR
21746 +#undef SEEK
21747 +#undef RULEMEMO
21748 +#undef DBG
21749 +
21750 +#define PARSER ctx->pParser
21751 +#define RECOGNIZER PARSER->rec
21752 +#define PSRSTATE RECOGNIZER->state
21753 +#define HAVEPARSEDRULE(r) RECOGNIZER->alreadyParsedRule(RECOGNIZER, r)
21754 +#define MEMOIZE(ri,si) RECOGNIZER->memoize(RECOGNIZER, ri, si)
21755 +#define INPUT PARSER->tstream
21756 +#define STRSTREAM INPUT
21757 +#define ISTREAM INPUT->istream
21758 +#define INDEX() ISTREAM->index(INPUT->istream)
21759 +#define HASEXCEPTION() (PSRSTATE->error == ANTLR3_TRUE)
21760 +#define EXCEPTION PSRSTATE->exception
21761 +#define MATCHT(t, fs) RECOGNIZER->match(RECOGNIZER, t, fs)
21762 +#define MATCHANYT() RECOGNIZER->matchAny(RECOGNIZER)
21763 +#define FOLLOWSTACK PSRSTATE->following
21764 +#define FOLLOWPUSH(x) FOLLOWSTACK->push(FOLLOWSTACK, ((void *)(&(x))), NULL)
21765 +#define FOLLOWPOP() FOLLOWSTACK->pop(FOLLOWSTACK)
21766 +#define PRECOVER() RECOGNIZER->recover(RECOGNIZER)
21767 +#define PREPORTERROR() RECOGNIZER->reportError(RECOGNIZER)
21768 +#define LA(n) INPUT->istream->_LA(ISTREAM, n)
21769 +#define LT(n) INPUT->_LT(INPUT, n)
21770 +#define CONSTRUCTEX() RECOGNIZER->exConstruct(RECOGNIZER)
21771 +#define CONSUME() ISTREAM->consume(ISTREAM)
21772 +#define MARK() ISTREAM->mark(ISTREAM)
21773 +#define REWIND(m) ISTREAM->rewind(ISTREAM, m)
21774 +#define REWINDLAST() ISTREAM->rewindLast(ISTREAM)
21775 +#define SEEK(n) ISTREAM->seek(ISTREAM, n)
21776 +#define PERRORRECOVERY PSRSTATE->errorRecovery
21777 +#define FAILEDFLAG PSRSTATE->failed
21778 +#define HASFAILED() (FAILEDFLAG == ANTLR3_TRUE)
21779 +#define BACKTRACKING PSRSTATE->backtracking
21780 +#define RECOVERFROMMISMATCHEDSET(s) RECOGNIZER->recoverFromMismatchedSet(RECOGNIZER, s)
21781 +#define RECOVERFROMMISMATCHEDELEMENT(e) RECOGNIZER->recoverFromMismatchedElement(RECOGNIZER, s)
21782 +#define ADAPTOR ctx->adaptor
21783 +#define RULEMEMO PSRSTATE->ruleMemo
21784 +#define DBG RECOGNIZER->debugger
21785 +
21786 +#define TOKTEXT(tok, txt) tok, (pANTLR3_UINT8)txt
21787 +
21788 +/* The 4 tokens defined below may well clash with your own #defines or token types. If so
21789 + * then for the present you must use different names for your defines as these are hard coded
21790 + * in the code generator. It would be better not to use such names internally, and maybe
21791 + * we can change this in a forthcoming release. I deliberately do not #undef these
21792 + * here as this will at least give you a redefined error somewhere if they clash.
21793 + */
21794 +#define UP ANTLR3_TOKEN_UP
21795 +#define DOWN ANTLR3_TOKEN_DOWN
21796 +#define EOR ANTLR3_TOKEN_EOR
21797 +#define INVALID ANTLR3_TOKEN_INVALID
21798 +
21799 +
21800 +/* =============================================================================
21801 + * Functions to create and destroy scopes. First come the rule scopes, followed
21802 + * by the global declared scopes.
21803 + */
21804 +
21805 +
21806 +
21807 +/* ============================================================================= */
21808 +
21809 +/* =============================================================================
21810 + * Start of recognizer
21811 + */
21812 +
21813 +
21814 +
21815 +/** \brief Table of all token names in symbolic order, mainly used for
21816 + * error reporting.
21817 + */
21818 +pANTLR3_UINT8 SMARTPLParserTokenNames[28+4]
21819 + = {
21820 + (pANTLR3_UINT8) "<invalid>", /* String to print to indicate an invalid token */
21821 + (pANTLR3_UINT8) "<EOR>",
21822 + (pANTLR3_UINT8) "<DOWN>",
21823 + (pANTLR3_UINT8) "<UP>",
21824 + (pANTLR3_UINT8) "STR",
21825 + (pANTLR3_UINT8) "OR",
21826 + (pANTLR3_UINT8) "AND",
21827 + (pANTLR3_UINT8) "NOT",
21828 + (pANTLR3_UINT8) "LPAR",
21829 + (pANTLR3_UINT8) "RPAR",
21830 + (pANTLR3_UINT8) "STRTAG",
21831 + (pANTLR3_UINT8) "INCLUDES",
21832 + (pANTLR3_UINT8) "IS",
21833 + (pANTLR3_UINT8) "INTTAG",
21834 + (pANTLR3_UINT8) "INTBOOL",
21835 + (pANTLR3_UINT8) "INT",
21836 + (pANTLR3_UINT8) "DATETAG",
21837 + (pANTLR3_UINT8) "AFTER",
21838 + (pANTLR3_UINT8) "BEFORE",
21839 + (pANTLR3_UINT8) "ENUMTAG",
21840 + (pANTLR3_UINT8) "ENUMVAL",
21841 + (pANTLR3_UINT8) "DATE",
21842 + (pANTLR3_UINT8) "AGO",
21843 + (pANTLR3_UINT8) "DATINTERVAL",
21844 + (pANTLR3_UINT8) "GREATER",
21845 + (pANTLR3_UINT8) "GREATEREQUAL",
21846 + (pANTLR3_UINT8) "LESS",
21847 + (pANTLR3_UINT8) "LESSEQUAL",
21848 + (pANTLR3_UINT8) "EQUAL",
21849 + (pANTLR3_UINT8) "WHITESPACE",
21850 + (pANTLR3_UINT8) "'{'",
21851 + (pANTLR3_UINT8) "'}'"
21852 + };
21853 +
21854 +
21855 +
21856 +// Forward declare the locally static matching functions we have generated.
21857 +//
21858 +static SMARTPLParser_playlist_return playlist (pSMARTPLParser ctx);
21859 +static SMARTPLParser_expression_return expression (pSMARTPLParser ctx);
21860 +static SMARTPLParser_aexpr_return aexpr (pSMARTPLParser ctx);
21861 +static SMARTPLParser_nexpr_return nexpr (pSMARTPLParser ctx);
21862 +static SMARTPLParser_crit_return crit (pSMARTPLParser ctx);
21863 +static SMARTPLParser_dateval_return dateval (pSMARTPLParser ctx);
21864 +static SMARTPLParser_interval_return interval (pSMARTPLParser ctx);
21865 +static void SMARTPLParserFree(pSMARTPLParser ctx);
21866 +/* For use in tree output where we are accumulating rule labels via label += ruleRef
21867 + * we need a function that knows how to free a return scope when the list is destroyed.
21868 + * We cannot just use ANTLR3_FREE because in debug tracking mode, this is a macro.
21869 + */
21870 +static void ANTLR3_CDECL freeScope(void * scope)
21871 +{
21872 + ANTLR3_FREE(scope);
21873 +}
21874 +
21875 +/** \brief Name of the grammar file that generated this code
21876 + */
21877 +static const char fileName[] = "SMARTPL.g";
21878 +
21879 +/** \brief Return the name of the grammar file that generated this code.
21880 + */
21881 +static const char * getGrammarFileName()
21882 +{
21883 + return fileName;
21884 +}
21885 +/** \brief Create a new SMARTPLParser parser and return a context for it.
21886 + *
21887 + * \param[in] instream Pointer to an input stream interface.
21888 + *
21889 + * \return Pointer to new parser context upon success.
21890 + */
21891 +ANTLR3_API pSMARTPLParser
21892 +SMARTPLParserNew (pANTLR3_COMMON_TOKEN_STREAM instream)
21893 +{
21894 + // See if we can create a new parser with the standard constructor
21895 + //
21896 + return SMARTPLParserNewSSD(instream, NULL);
21897 +}
21898 +
21899 +/** \brief Create a new SMARTPLParser parser and return a context for it.
21900 + *
21901 + * \param[in] instream Pointer to an input stream interface.
21902 + *
21903 + * \return Pointer to new parser context upon success.
21904 + */
21905 +ANTLR3_API pSMARTPLParser
21906 +SMARTPLParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state)
21907 +{
21908 + pSMARTPLParser ctx; /* Context structure we will build and return */
21909 +
21910 + ctx = (pSMARTPLParser) ANTLR3_CALLOC(1, sizeof(SMARTPLParser));
21911 +
21912 + if (ctx == NULL)
21913 + {
21914 + // Failed to allocate memory for parser context
21915 + //
21916 + return NULL;
21917 + }
21918 +
21919 + /* -------------------------------------------------------------------
21920 + * Memory for basic structure is allocated, now to fill in
21921 + * the base ANTLR3 structures. We initialize the function pointers
21922 + * for the standard ANTLR3 parser function set, but upon return
21923 + * from here, the programmer may set the pointers to provide custom
21924 + * implementations of each function.
21925 + *
21926 + * We don't use the macros defined in SMARTPLParser.h here, in order that you can get a sense
21927 + * of what goes where.
21928 + */
21929 +
21930 + /* Create a base parser/recognizer, using the supplied token stream
21931 + */
21932 + ctx->pParser = antlr3ParserNewStream(ANTLR3_SIZE_HINT, instream->tstream, state);
21933 + /* Install the implementation of our SMARTPLParser interface
21934 + */
21935 + ctx->playlist = playlist;
21936 + ctx->expression = expression;
21937 + ctx->aexpr = aexpr;
21938 + ctx->nexpr = nexpr;
21939 + ctx->crit = crit;
21940 + ctx->dateval = dateval;
21941 + ctx->interval = interval;
21942 + ctx->free = SMARTPLParserFree;
21943 + ctx->getGrammarFileName = getGrammarFileName;
21944 +
21945 + /* Install the scope pushing methods.
21946 + */
21947 + ADAPTOR = ANTLR3_TREE_ADAPTORNew(instream->tstream->tokenSource->strFactory);
21948 + ctx->vectors = antlr3VectorFactoryNew(0);
21949 +
21950 +
21951 +
21952 + /* Install the token table
21953 + */
21954 + PSRSTATE->tokenNames = SMARTPLParserTokenNames;
21955 +
21956 +
21957 + /* Return the newly built parser to the caller
21958 + */
21959 + return ctx;
21960 +}
21961 +
21962 +/** Free the parser resources
21963 + */
21964 + static void
21965 + SMARTPLParserFree(pSMARTPLParser ctx)
21966 + {
21967 + /* Free any scope memory
21968 + */
21969 +
21970 + ctx->vectors->close(ctx->vectors);
21971 + /* We created the adaptor so we must free it
21972 + */
21973 + ADAPTOR->free(ADAPTOR);
21974 + // Free this parser
21975 + //
21976 + ctx->pParser->free(ctx->pParser);
21977 + ANTLR3_FREE(ctx);
21978 +
21979 + /* Everything is released, so we can return
21980 + */
21981 + return;
21982 + }
21983 +
21984 +/** Return token names used by this parser
21985 + *
21986 + * The returned pointer is used as an index into the token names table (using the token
21987 + * number as the index).
21988 + *
21989 + * \return Pointer to first char * in the table.
21990 + */
21991 +static pANTLR3_UINT8 *getTokenNames()
21992 +{
21993 + return SMARTPLParserTokenNames;
21994 +}
21995 +
21996 +
21997 +/* Declare the bitsets
21998 + */
21999 +
22000 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_playlist42 */
22001 +static ANTLR3_BITWORD FOLLOW_STR_in_playlist42_bits[] = { ANTLR3_UINT64_LIT(0x0000000040000000) };
22002 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_playlist42 = { FOLLOW_STR_in_playlist42_bits, 1 };
22003 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_30_in_playlist44 */
22004 +static ANTLR3_BITWORD FOLLOW_30_in_playlist44_bits[] = { ANTLR3_UINT64_LIT(0x0000000000092580) };
22005 +static ANTLR3_BITSET_LIST FOLLOW_30_in_playlist44 = { FOLLOW_30_in_playlist44_bits, 1 };
22006 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_playlist46 */
22007 +static ANTLR3_BITWORD FOLLOW_expression_in_playlist46_bits[] = { ANTLR3_UINT64_LIT(0x0000000080000000) };
22008 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_playlist46 = { FOLLOW_expression_in_playlist46_bits, 1 };
22009 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_31_in_playlist48 */
22010 +static ANTLR3_BITWORD FOLLOW_31_in_playlist48_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000000) };
22011 +static ANTLR3_BITSET_LIST FOLLOW_31_in_playlist48 = { FOLLOW_31_in_playlist48_bits, 1 };
22012 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_EOF_in_playlist50 */
22013 +static ANTLR3_BITWORD FOLLOW_EOF_in_playlist50_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22014 +static ANTLR3_BITSET_LIST FOLLOW_EOF_in_playlist50 = { FOLLOW_EOF_in_playlist50_bits, 1 };
22015 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expression62 */
22016 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expression62_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
22017 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expression62 = { FOLLOW_aexpr_in_expression62_bits, 1 };
22018 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_OR_in_expression65 */
22019 +static ANTLR3_BITWORD FOLLOW_OR_in_expression65_bits[] = { ANTLR3_UINT64_LIT(0x0000000000092580) };
22020 +static ANTLR3_BITSET_LIST FOLLOW_OR_in_expression65 = { FOLLOW_OR_in_expression65_bits, 1 };
22021 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_aexpr_in_expression68 */
22022 +static ANTLR3_BITWORD FOLLOW_aexpr_in_expression68_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000022) };
22023 +static ANTLR3_BITSET_LIST FOLLOW_aexpr_in_expression68 = { FOLLOW_aexpr_in_expression68_bits, 1 };
22024 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_nexpr_in_aexpr83 */
22025 +static ANTLR3_BITWORD FOLLOW_nexpr_in_aexpr83_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
22026 +static ANTLR3_BITSET_LIST FOLLOW_nexpr_in_aexpr83 = { FOLLOW_nexpr_in_aexpr83_bits, 1 };
22027 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AND_in_aexpr86 */
22028 +static ANTLR3_BITWORD FOLLOW_AND_in_aexpr86_bits[] = { ANTLR3_UINT64_LIT(0x0000000000092580) };
22029 +static ANTLR3_BITSET_LIST FOLLOW_AND_in_aexpr86 = { FOLLOW_AND_in_aexpr86_bits, 1 };
22030 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_nexpr_in_aexpr89 */
22031 +static ANTLR3_BITWORD FOLLOW_nexpr_in_aexpr89_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000042) };
22032 +static ANTLR3_BITSET_LIST FOLLOW_nexpr_in_aexpr89 = { FOLLOW_nexpr_in_aexpr89_bits, 1 };
22033 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_NOT_in_nexpr104 */
22034 +static ANTLR3_BITWORD FOLLOW_NOT_in_nexpr104_bits[] = { ANTLR3_UINT64_LIT(0x0000000000092580) };
22035 +static ANTLR3_BITSET_LIST FOLLOW_NOT_in_nexpr104 = { FOLLOW_NOT_in_nexpr104_bits, 1 };
22036 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_nexpr107 */
22037 +static ANTLR3_BITWORD FOLLOW_crit_in_nexpr107_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22038 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_nexpr107 = { FOLLOW_crit_in_nexpr107_bits, 1 };
22039 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_crit_in_nexpr114 */
22040 +static ANTLR3_BITWORD FOLLOW_crit_in_nexpr114_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22041 +static ANTLR3_BITSET_LIST FOLLOW_crit_in_nexpr114 = { FOLLOW_crit_in_nexpr114_bits, 1 };
22042 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_LPAR_in_crit127 */
22043 +static ANTLR3_BITWORD FOLLOW_LPAR_in_crit127_bits[] = { ANTLR3_UINT64_LIT(0x0000000000092580) };
22044 +static ANTLR3_BITSET_LIST FOLLOW_LPAR_in_crit127 = { FOLLOW_LPAR_in_crit127_bits, 1 };
22045 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_expression_in_crit129 */
22046 +static ANTLR3_BITWORD FOLLOW_expression_in_crit129_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000200) };
22047 +static ANTLR3_BITSET_LIST FOLLOW_expression_in_crit129 = { FOLLOW_expression_in_crit129_bits, 1 };
22048 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_RPAR_in_crit131 */
22049 +static ANTLR3_BITWORD FOLLOW_RPAR_in_crit131_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22050 +static ANTLR3_BITSET_LIST FOLLOW_RPAR_in_crit131 = { FOLLOW_RPAR_in_crit131_bits, 1 };
22051 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STRTAG_in_crit142 */
22052 +static ANTLR3_BITWORD FOLLOW_STRTAG_in_crit142_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001800) };
22053 +static ANTLR3_BITSET_LIST FOLLOW_STRTAG_in_crit142 = { FOLLOW_STRTAG_in_crit142_bits, 1 };
22054 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_crit144 */
22055 +static ANTLR3_BITWORD FOLLOW_set_in_crit144_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000010) };
22056 +static ANTLR3_BITSET_LIST FOLLOW_set_in_crit144 = { FOLLOW_set_in_crit144_bits, 1 };
22057 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_STR_in_crit150 */
22058 +static ANTLR3_BITWORD FOLLOW_STR_in_crit150_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22059 +static ANTLR3_BITSET_LIST FOLLOW_STR_in_crit150 = { FOLLOW_STR_in_crit150_bits, 1 };
22060 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INTTAG_in_crit157 */
22061 +static ANTLR3_BITWORD FOLLOW_INTTAG_in_crit157_bits[] = { ANTLR3_UINT64_LIT(0x0000000000004000) };
22062 +static ANTLR3_BITSET_LIST FOLLOW_INTTAG_in_crit157 = { FOLLOW_INTTAG_in_crit157_bits, 1 };
22063 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INTBOOL_in_crit159 */
22064 +static ANTLR3_BITWORD FOLLOW_INTBOOL_in_crit159_bits[] = { ANTLR3_UINT64_LIT(0x0000000000008000) };
22065 +static ANTLR3_BITSET_LIST FOLLOW_INTBOOL_in_crit159 = { FOLLOW_INTBOOL_in_crit159_bits, 1 };
22066 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_crit161 */
22067 +static ANTLR3_BITWORD FOLLOW_INT_in_crit161_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22068 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_crit161 = { FOLLOW_INT_in_crit161_bits, 1 };
22069 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATETAG_in_crit168 */
22070 +static ANTLR3_BITWORD FOLLOW_DATETAG_in_crit168_bits[] = { ANTLR3_UINT64_LIT(0x0000000000060000) };
22071 +static ANTLR3_BITSET_LIST FOLLOW_DATETAG_in_crit168 = { FOLLOW_DATETAG_in_crit168_bits, 1 };
22072 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_set_in_crit170 */
22073 +static ANTLR3_BITWORD FOLLOW_set_in_crit170_bits[] = { ANTLR3_UINT64_LIT(0x0000000000208000) };
22074 +static ANTLR3_BITSET_LIST FOLLOW_set_in_crit170 = { FOLLOW_set_in_crit170_bits, 1 };
22075 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_dateval_in_crit176 */
22076 +static ANTLR3_BITWORD FOLLOW_dateval_in_crit176_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22077 +static ANTLR3_BITSET_LIST FOLLOW_dateval_in_crit176 = { FOLLOW_dateval_in_crit176_bits, 1 };
22078 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENUMTAG_in_crit183 */
22079 +static ANTLR3_BITWORD FOLLOW_ENUMTAG_in_crit183_bits[] = { ANTLR3_UINT64_LIT(0x0000000000001000) };
22080 +static ANTLR3_BITSET_LIST FOLLOW_ENUMTAG_in_crit183 = { FOLLOW_ENUMTAG_in_crit183_bits, 1 };
22081 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_IS_in_crit185 */
22082 +static ANTLR3_BITWORD FOLLOW_IS_in_crit185_bits[] = { ANTLR3_UINT64_LIT(0x0000000000100000) };
22083 +static ANTLR3_BITSET_LIST FOLLOW_IS_in_crit185 = { FOLLOW_IS_in_crit185_bits, 1 };
22084 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_ENUMVAL_in_crit187 */
22085 +static ANTLR3_BITWORD FOLLOW_ENUMVAL_in_crit187_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22086 +static ANTLR3_BITSET_LIST FOLLOW_ENUMVAL_in_crit187 = { FOLLOW_ENUMVAL_in_crit187_bits, 1 };
22087 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval200 */
22088 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval200_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22089 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval200 = { FOLLOW_DATE_in_dateval200_bits, 1 };
22090 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval207 */
22091 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval207_bits[] = { ANTLR3_UINT64_LIT(0x0000000000040000) };
22092 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval207 = { FOLLOW_interval_in_dateval207_bits, 1 };
22093 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_BEFORE_in_dateval209 */
22094 +static ANTLR3_BITWORD FOLLOW_BEFORE_in_dateval209_bits[] = { ANTLR3_UINT64_LIT(0x0000000000200000) };
22095 +static ANTLR3_BITSET_LIST FOLLOW_BEFORE_in_dateval209 = { FOLLOW_BEFORE_in_dateval209_bits, 1 };
22096 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval211 */
22097 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval211_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22098 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval211 = { FOLLOW_DATE_in_dateval211_bits, 1 };
22099 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval218 */
22100 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval218_bits[] = { ANTLR3_UINT64_LIT(0x0000000000020000) };
22101 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval218 = { FOLLOW_interval_in_dateval218_bits, 1 };
22102 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AFTER_in_dateval220 */
22103 +static ANTLR3_BITWORD FOLLOW_AFTER_in_dateval220_bits[] = { ANTLR3_UINT64_LIT(0x0000000000200000) };
22104 +static ANTLR3_BITSET_LIST FOLLOW_AFTER_in_dateval220 = { FOLLOW_AFTER_in_dateval220_bits, 1 };
22105 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATE_in_dateval222 */
22106 +static ANTLR3_BITWORD FOLLOW_DATE_in_dateval222_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22107 +static ANTLR3_BITSET_LIST FOLLOW_DATE_in_dateval222 = { FOLLOW_DATE_in_dateval222_bits, 1 };
22108 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_interval_in_dateval229 */
22109 +static ANTLR3_BITWORD FOLLOW_interval_in_dateval229_bits[] = { ANTLR3_UINT64_LIT(0x0000000000400000) };
22110 +static ANTLR3_BITSET_LIST FOLLOW_interval_in_dateval229 = { FOLLOW_interval_in_dateval229_bits, 1 };
22111 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_AGO_in_dateval231 */
22112 +static ANTLR3_BITWORD FOLLOW_AGO_in_dateval231_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22113 +static ANTLR3_BITSET_LIST FOLLOW_AGO_in_dateval231 = { FOLLOW_AGO_in_dateval231_bits, 1 };
22114 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_INT_in_interval243 */
22115 +static ANTLR3_BITWORD FOLLOW_INT_in_interval243_bits[] = { ANTLR3_UINT64_LIT(0x0000000000800000) };
22116 +static ANTLR3_BITSET_LIST FOLLOW_INT_in_interval243 = { FOLLOW_INT_in_interval243_bits, 1 };
22117 +/** Bitset defining follow set for error recovery in rule state: FOLLOW_DATINTERVAL_in_interval245 */
22118 +static ANTLR3_BITWORD FOLLOW_DATINTERVAL_in_interval245_bits[] = { ANTLR3_UINT64_LIT(0x0000000000000002) };
22119 +static ANTLR3_BITSET_LIST FOLLOW_DATINTERVAL_in_interval245 = { FOLLOW_DATINTERVAL_in_interval245_bits, 1 };
22120 +
22121 +
22122 +
22123 +
22124 +/* ==============================================
22125 + * Parsing rules
22126 + */
22127 +/**
22128 + * $ANTLR start playlist
22129 + * SMARTPL.g:27:1: playlist : STR '{' expression '}' EOF ;
22130 + */
22131 +static SMARTPLParser_playlist_return
22132 +playlist(pSMARTPLParser ctx)
22133 +{
22134 + SMARTPLParser_playlist_return retval;
22135 +
22136 + pANTLR3_BASE_TREE root_0;
22137 +
22138 + pANTLR3_COMMON_TOKEN STR1;
22139 + pANTLR3_COMMON_TOKEN char_literal2;
22140 + pANTLR3_COMMON_TOKEN char_literal4;
22141 + pANTLR3_COMMON_TOKEN EOF5;
22142 + SMARTPLParser_expression_return expression3;
22143 + #undef RETURN_TYPE_expression3
22144 + #define RETURN_TYPE_expression3 SMARTPLParser_expression_return
22145 +
22146 + pANTLR3_BASE_TREE STR1_tree;
22147 + pANTLR3_BASE_TREE char_literal2_tree;
22148 + pANTLR3_BASE_TREE char_literal4_tree;
22149 + pANTLR3_BASE_TREE EOF5_tree;
22150 +
22151 + /* Initialize rule variables
22152 + */
22153 +
22154 +
22155 + root_0 = NULL;
22156 +
22157 + STR1 = NULL;
22158 + char_literal2 = NULL;
22159 + char_literal4 = NULL;
22160 + EOF5 = NULL;
22161 + expression3.tree = NULL;
22162 +
22163 + retval.start = LT(1); retval.stop = retval.start;
22164 +
22165 + STR1_tree = NULL;
22166 + char_literal2_tree = NULL;
22167 + char_literal4_tree = NULL;
22168 + EOF5_tree = NULL;
22169 +
22170 +
22171 + retval.tree = NULL;
22172 + {
22173 + // SMARTPL.g:27:10: ( STR '{' expression '}' EOF )
22174 + // SMARTPL.g:27:12: STR '{' expression '}' EOF
22175 + {
22176 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22177 +
22178 + STR1 = (pANTLR3_COMMON_TOKEN) MATCHT(STR, &FOLLOW_STR_in_playlist42);
22179 + if (HASEXCEPTION())
22180 + {
22181 + goto ruleplaylistEx;
22182 + }
22183 +
22184 + STR1_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, STR1));
22185 + ADAPTOR->addChild(ADAPTOR, root_0, STR1_tree);
22186 +
22187 + char_literal2 = (pANTLR3_COMMON_TOKEN) MATCHT(30, &FOLLOW_30_in_playlist44);
22188 + if (HASEXCEPTION())
22189 + {
22190 + goto ruleplaylistEx;
22191 + }
22192 +
22193 + char_literal2_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, char_literal2));
22194 + ADAPTOR->addChild(ADAPTOR, root_0, char_literal2_tree);
22195 +
22196 + FOLLOWPUSH(FOLLOW_expression_in_playlist46);
22197 + expression3=expression(ctx);
22198 +
22199 + FOLLOWPOP();
22200 + if (HASEXCEPTION())
22201 + {
22202 + goto ruleplaylistEx;
22203 + }
22204 +
22205 + ADAPTOR->addChild(ADAPTOR, root_0, expression3.tree);
22206 + char_literal4 = (pANTLR3_COMMON_TOKEN) MATCHT(31, &FOLLOW_31_in_playlist48);
22207 + if (HASEXCEPTION())
22208 + {
22209 + goto ruleplaylistEx;
22210 + }
22211 +
22212 + char_literal4_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, char_literal4));
22213 + ADAPTOR->addChild(ADAPTOR, root_0, char_literal4_tree);
22214 +
22215 + EOF5 = (pANTLR3_COMMON_TOKEN) MATCHT(EOF, &FOLLOW_EOF_in_playlist50);
22216 + if (HASEXCEPTION())
22217 + {
22218 + goto ruleplaylistEx;
22219 + }
22220 +
22221 + EOF5_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, EOF5));
22222 + ADAPTOR->addChild(ADAPTOR, root_0, EOF5_tree);
22223 +
22224 +
22225 + }
22226 +
22227 + }
22228 +
22229 +
22230 + // This is where rules clean up and exit
22231 + //
22232 + goto ruleplaylistEx; /* Prevent compiler warnings */
22233 + ruleplaylistEx: ;
22234 + retval.stop = LT(-1);
22235 +
22236 + retval.stop = LT(-1);
22237 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
22238 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
22239 +
22240 + if (HASEXCEPTION())
22241 + {
22242 + PREPORTERROR();
22243 + PRECOVER();
22244 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
22245 + }
22246 +
22247 +
22248 + return retval;
22249 +}
22250 +/* $ANTLR end playlist */
22251 +
22252 +/**
22253 + * $ANTLR start expression
22254 + * SMARTPL.g:30:1: expression : aexpr ( OR aexpr )* ;
22255 + */
22256 +static SMARTPLParser_expression_return
22257 +expression(pSMARTPLParser ctx)
22258 +{
22259 + SMARTPLParser_expression_return retval;
22260 +
22261 + pANTLR3_BASE_TREE root_0;
22262 +
22263 + pANTLR3_COMMON_TOKEN OR7;
22264 + SMARTPLParser_aexpr_return aexpr6;
22265 + #undef RETURN_TYPE_aexpr6
22266 + #define RETURN_TYPE_aexpr6 SMARTPLParser_aexpr_return
22267 +
22268 + SMARTPLParser_aexpr_return aexpr8;
22269 + #undef RETURN_TYPE_aexpr8
22270 + #define RETURN_TYPE_aexpr8 SMARTPLParser_aexpr_return
22271 +
22272 + pANTLR3_BASE_TREE OR7_tree;
22273 +
22274 + /* Initialize rule variables
22275 + */
22276 +
22277 +
22278 + root_0 = NULL;
22279 +
22280 + OR7 = NULL;
22281 + aexpr6.tree = NULL;
22282 +
22283 + aexpr8.tree = NULL;
22284 +
22285 + retval.start = LT(1); retval.stop = retval.start;
22286 +
22287 + OR7_tree = NULL;
22288 +
22289 +
22290 + retval.tree = NULL;
22291 + {
22292 + // SMARTPL.g:30:12: ( aexpr ( OR aexpr )* )
22293 + // SMARTPL.g:30:14: aexpr ( OR aexpr )*
22294 + {
22295 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22296 +
22297 + FOLLOWPUSH(FOLLOW_aexpr_in_expression62);
22298 + aexpr6=aexpr(ctx);
22299 +
22300 + FOLLOWPOP();
22301 + if (HASEXCEPTION())
22302 + {
22303 + goto ruleexpressionEx;
22304 + }
22305 +
22306 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr6.tree);
22307 +
22308 + // SMARTPL.g:30:20: ( OR aexpr )*
22309 +
22310 + for (;;)
22311 + {
22312 + int alt1=2;
22313 + switch ( LA(1) )
22314 + {
22315 + case OR:
22316 + {
22317 + alt1=1;
22318 + }
22319 + break;
22320 +
22321 + }
22322 +
22323 + switch (alt1)
22324 + {
22325 + case 1:
22326 + // SMARTPL.g:30:21: OR aexpr
22327 + {
22328 + OR7 = (pANTLR3_COMMON_TOKEN) MATCHT(OR, &FOLLOW_OR_in_expression65);
22329 + if (HASEXCEPTION())
22330 + {
22331 + goto ruleexpressionEx;
22332 + }
22333 +
22334 + OR7_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, OR7));
22335 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, OR7_tree, root_0));
22336 +
22337 + FOLLOWPUSH(FOLLOW_aexpr_in_expression68);
22338 + aexpr8=aexpr(ctx);
22339 +
22340 + FOLLOWPOP();
22341 + if (HASEXCEPTION())
22342 + {
22343 + goto ruleexpressionEx;
22344 + }
22345 +
22346 + ADAPTOR->addChild(ADAPTOR, root_0, aexpr8.tree);
22347 +
22348 + }
22349 + break;
22350 +
22351 + default:
22352 + goto loop1; /* break out of the loop */
22353 + break;
22354 + }
22355 + }
22356 + loop1: ; /* Jump out to here if this rule does not match */
22357 +
22358 +
22359 + }
22360 +
22361 + }
22362 +
22363 +
22364 + // This is where rules clean up and exit
22365 + //
22366 + goto ruleexpressionEx; /* Prevent compiler warnings */
22367 + ruleexpressionEx: ;
22368 + retval.stop = LT(-1);
22369 +
22370 + retval.stop = LT(-1);
22371 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
22372 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
22373 +
22374 + if (HASEXCEPTION())
22375 + {
22376 + PREPORTERROR();
22377 + PRECOVER();
22378 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
22379 + }
22380 +
22381 +
22382 + return retval;
22383 +}
22384 +/* $ANTLR end expression */
22385 +
22386 +/**
22387 + * $ANTLR start aexpr
22388 + * SMARTPL.g:33:1: aexpr : nexpr ( AND nexpr )* ;
22389 + */
22390 +static SMARTPLParser_aexpr_return
22391 +aexpr(pSMARTPLParser ctx)
22392 +{
22393 + SMARTPLParser_aexpr_return retval;
22394 +
22395 + pANTLR3_BASE_TREE root_0;
22396 +
22397 + pANTLR3_COMMON_TOKEN AND10;
22398 + SMARTPLParser_nexpr_return nexpr9;
22399 + #undef RETURN_TYPE_nexpr9
22400 + #define RETURN_TYPE_nexpr9 SMARTPLParser_nexpr_return
22401 +
22402 + SMARTPLParser_nexpr_return nexpr11;
22403 + #undef RETURN_TYPE_nexpr11
22404 + #define RETURN_TYPE_nexpr11 SMARTPLParser_nexpr_return
22405 +
22406 + pANTLR3_BASE_TREE AND10_tree;
22407 +
22408 + /* Initialize rule variables
22409 + */
22410 +
22411 +
22412 + root_0 = NULL;
22413 +
22414 + AND10 = NULL;
22415 + nexpr9.tree = NULL;
22416 +
22417 + nexpr11.tree = NULL;
22418 +
22419 + retval.start = LT(1); retval.stop = retval.start;
22420 +
22421 + AND10_tree = NULL;
22422 +
22423 +
22424 + retval.tree = NULL;
22425 + {
22426 + // SMARTPL.g:33:8: ( nexpr ( AND nexpr )* )
22427 + // SMARTPL.g:33:10: nexpr ( AND nexpr )*
22428 + {
22429 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22430 +
22431 + FOLLOWPUSH(FOLLOW_nexpr_in_aexpr83);
22432 + nexpr9=nexpr(ctx);
22433 +
22434 + FOLLOWPOP();
22435 + if (HASEXCEPTION())
22436 + {
22437 + goto ruleaexprEx;
22438 + }
22439 +
22440 + ADAPTOR->addChild(ADAPTOR, root_0, nexpr9.tree);
22441 +
22442 + // SMARTPL.g:33:16: ( AND nexpr )*
22443 +
22444 + for (;;)
22445 + {
22446 + int alt2=2;
22447 + switch ( LA(1) )
22448 + {
22449 + case AND:
22450 + {
22451 + alt2=1;
22452 + }
22453 + break;
22454 +
22455 + }
22456 +
22457 + switch (alt2)
22458 + {
22459 + case 1:
22460 + // SMARTPL.g:33:17: AND nexpr
22461 + {
22462 + AND10 = (pANTLR3_COMMON_TOKEN) MATCHT(AND, &FOLLOW_AND_in_aexpr86);
22463 + if (HASEXCEPTION())
22464 + {
22465 + goto ruleaexprEx;
22466 + }
22467 +
22468 + AND10_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, AND10));
22469 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, AND10_tree, root_0));
22470 +
22471 + FOLLOWPUSH(FOLLOW_nexpr_in_aexpr89);
22472 + nexpr11=nexpr(ctx);
22473 +
22474 + FOLLOWPOP();
22475 + if (HASEXCEPTION())
22476 + {
22477 + goto ruleaexprEx;
22478 + }
22479 +
22480 + ADAPTOR->addChild(ADAPTOR, root_0, nexpr11.tree);
22481 +
22482 + }
22483 + break;
22484 +
22485 + default:
22486 + goto loop2; /* break out of the loop */
22487 + break;
22488 + }
22489 + }
22490 + loop2: ; /* Jump out to here if this rule does not match */
22491 +
22492 +
22493 + }
22494 +
22495 + }
22496 +
22497 +
22498 + // This is where rules clean up and exit
22499 + //
22500 + goto ruleaexprEx; /* Prevent compiler warnings */
22501 + ruleaexprEx: ;
22502 + retval.stop = LT(-1);
22503 +
22504 + retval.stop = LT(-1);
22505 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
22506 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
22507 +
22508 + if (HASEXCEPTION())
22509 + {
22510 + PREPORTERROR();
22511 + PRECOVER();
22512 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
22513 + }
22514 +
22515 +
22516 + return retval;
22517 +}
22518 +/* $ANTLR end aexpr */
22519 +
22520 +/**
22521 + * $ANTLR start nexpr
22522 + * SMARTPL.g:36:1: nexpr : ( NOT crit | crit );
22523 + */
22524 +static SMARTPLParser_nexpr_return
22525 +nexpr(pSMARTPLParser ctx)
22526 +{
22527 + SMARTPLParser_nexpr_return retval;
22528 +
22529 + pANTLR3_BASE_TREE root_0;
22530 +
22531 + pANTLR3_COMMON_TOKEN NOT12;
22532 + SMARTPLParser_crit_return crit13;
22533 + #undef RETURN_TYPE_crit13
22534 + #define RETURN_TYPE_crit13 SMARTPLParser_crit_return
22535 +
22536 + SMARTPLParser_crit_return crit14;
22537 + #undef RETURN_TYPE_crit14
22538 + #define RETURN_TYPE_crit14 SMARTPLParser_crit_return
22539 +
22540 + pANTLR3_BASE_TREE NOT12_tree;
22541 +
22542 + /* Initialize rule variables
22543 + */
22544 +
22545 +
22546 + root_0 = NULL;
22547 +
22548 + NOT12 = NULL;
22549 + crit13.tree = NULL;
22550 +
22551 + crit14.tree = NULL;
22552 +
22553 + retval.start = LT(1); retval.stop = retval.start;
22554 +
22555 + NOT12_tree = NULL;
22556 +
22557 +
22558 + retval.tree = NULL;
22559 + {
22560 + {
22561 + // SMARTPL.g:36:8: ( NOT crit | crit )
22562 +
22563 + ANTLR3_UINT32 alt3;
22564 +
22565 + alt3=2;
22566 +
22567 + switch ( LA(1) )
22568 + {
22569 + case NOT:
22570 + {
22571 + alt3=1;
22572 + }
22573 + break;
22574 + case LPAR:
22575 + case STRTAG:
22576 + case INTTAG:
22577 + case DATETAG:
22578 + case ENUMTAG:
22579 + {
22580 + alt3=2;
22581 + }
22582 + break;
22583 +
22584 + default:
22585 + CONSTRUCTEX();
22586 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
22587 + EXCEPTION->message = (void *)"";
22588 + EXCEPTION->decisionNum = 3;
22589 + EXCEPTION->state = 0;
22590 +
22591 +
22592 + goto rulenexprEx;
22593 + }
22594 +
22595 + switch (alt3)
22596 + {
22597 + case 1:
22598 + // SMARTPL.g:36:10: NOT crit
22599 + {
22600 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22601 +
22602 + NOT12 = (pANTLR3_COMMON_TOKEN) MATCHT(NOT, &FOLLOW_NOT_in_nexpr104);
22603 + if (HASEXCEPTION())
22604 + {
22605 + goto rulenexprEx;
22606 + }
22607 +
22608 + NOT12_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, NOT12));
22609 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->becomeRoot(ADAPTOR, NOT12_tree, root_0));
22610 +
22611 + FOLLOWPUSH(FOLLOW_crit_in_nexpr107);
22612 + crit13=crit(ctx);
22613 +
22614 + FOLLOWPOP();
22615 + if (HASEXCEPTION())
22616 + {
22617 + goto rulenexprEx;
22618 + }
22619 +
22620 + ADAPTOR->addChild(ADAPTOR, root_0, crit13.tree);
22621 +
22622 + }
22623 + break;
22624 + case 2:
22625 + // SMARTPL.g:37:6: crit
22626 + {
22627 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22628 +
22629 + FOLLOWPUSH(FOLLOW_crit_in_nexpr114);
22630 + crit14=crit(ctx);
22631 +
22632 + FOLLOWPOP();
22633 + if (HASEXCEPTION())
22634 + {
22635 + goto rulenexprEx;
22636 + }
22637 +
22638 + ADAPTOR->addChild(ADAPTOR, root_0, crit14.tree);
22639 +
22640 + }
22641 + break;
22642 +
22643 + }
22644 + }
22645 + }
22646 +
22647 +
22648 + // This is where rules clean up and exit
22649 + //
22650 + goto rulenexprEx; /* Prevent compiler warnings */
22651 + rulenexprEx: ;
22652 + retval.stop = LT(-1);
22653 +
22654 + retval.stop = LT(-1);
22655 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
22656 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
22657 +
22658 + if (HASEXCEPTION())
22659 + {
22660 + PREPORTERROR();
22661 + PRECOVER();
22662 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
22663 + }
22664 +
22665 +
22666 + return retval;
22667 +}
22668 +/* $ANTLR end nexpr */
22669 +
22670 +/**
22671 + * $ANTLR start crit
22672 + * SMARTPL.g:40:1: crit : ( LPAR expression RPAR -> expression | STRTAG ( INCLUDES | IS ) STR | INTTAG INTBOOL INT | DATETAG ( AFTER | BEFORE ) dateval | ENUMTAG IS ENUMVAL );
22673 + */
22674 +static SMARTPLParser_crit_return
22675 +crit(pSMARTPLParser ctx)
22676 +{
22677 + SMARTPLParser_crit_return retval;
22678 +
22679 + pANTLR3_BASE_TREE root_0;
22680 +
22681 + pANTLR3_COMMON_TOKEN LPAR15;
22682 + pANTLR3_COMMON_TOKEN RPAR17;
22683 + pANTLR3_COMMON_TOKEN STRTAG18;
22684 + pANTLR3_COMMON_TOKEN set19;
22685 + pANTLR3_COMMON_TOKEN STR20;
22686 + pANTLR3_COMMON_TOKEN INTTAG21;
22687 + pANTLR3_COMMON_TOKEN INTBOOL22;
22688 + pANTLR3_COMMON_TOKEN INT23;
22689 + pANTLR3_COMMON_TOKEN DATETAG24;
22690 + pANTLR3_COMMON_TOKEN set25;
22691 + pANTLR3_COMMON_TOKEN ENUMTAG27;
22692 + pANTLR3_COMMON_TOKEN IS28;
22693 + pANTLR3_COMMON_TOKEN ENUMVAL29;
22694 + SMARTPLParser_expression_return expression16;
22695 + #undef RETURN_TYPE_expression16
22696 + #define RETURN_TYPE_expression16 SMARTPLParser_expression_return
22697 +
22698 + SMARTPLParser_dateval_return dateval26;
22699 + #undef RETURN_TYPE_dateval26
22700 + #define RETURN_TYPE_dateval26 SMARTPLParser_dateval_return
22701 +
22702 + pANTLR3_BASE_TREE LPAR15_tree;
22703 + pANTLR3_BASE_TREE RPAR17_tree;
22704 + pANTLR3_BASE_TREE STRTAG18_tree;
22705 + pANTLR3_BASE_TREE set19_tree;
22706 + pANTLR3_BASE_TREE STR20_tree;
22707 + pANTLR3_BASE_TREE INTTAG21_tree;
22708 + pANTLR3_BASE_TREE INTBOOL22_tree;
22709 + pANTLR3_BASE_TREE INT23_tree;
22710 + pANTLR3_BASE_TREE DATETAG24_tree;
22711 + pANTLR3_BASE_TREE set25_tree;
22712 + pANTLR3_BASE_TREE ENUMTAG27_tree;
22713 + pANTLR3_BASE_TREE IS28_tree;
22714 + pANTLR3_BASE_TREE ENUMVAL29_tree;
22715 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_RPAR;
22716 + pANTLR3_REWRITE_RULE_TOKEN_STREAM stream_LPAR;
22717 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_expression;
22718 + /* Initialize rule variables
22719 + */
22720 +
22721 +
22722 + root_0 = NULL;
22723 +
22724 + LPAR15 = NULL;
22725 + RPAR17 = NULL;
22726 + STRTAG18 = NULL;
22727 + set19 = NULL;
22728 + STR20 = NULL;
22729 + INTTAG21 = NULL;
22730 + INTBOOL22 = NULL;
22731 + INT23 = NULL;
22732 + DATETAG24 = NULL;
22733 + set25 = NULL;
22734 + ENUMTAG27 = NULL;
22735 + IS28 = NULL;
22736 + ENUMVAL29 = NULL;
22737 + expression16.tree = NULL;
22738 +
22739 + dateval26.tree = NULL;
22740 +
22741 + retval.start = LT(1); retval.stop = retval.start;
22742 +
22743 + LPAR15_tree = NULL;
22744 + RPAR17_tree = NULL;
22745 + STRTAG18_tree = NULL;
22746 + set19_tree = NULL;
22747 + STR20_tree = NULL;
22748 + INTTAG21_tree = NULL;
22749 + INTBOOL22_tree = NULL;
22750 + INT23_tree = NULL;
22751 + DATETAG24_tree = NULL;
22752 + set25_tree = NULL;
22753 + ENUMTAG27_tree = NULL;
22754 + IS28_tree = NULL;
22755 + ENUMVAL29_tree = NULL;
22756 +
22757 + stream_RPAR = NULL;
22758 + #define CREATE_stream_RPAR if (stream_RPAR == NULL) {stream_RPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token RPAR"); }
22759 + stream_LPAR = NULL;
22760 + #define CREATE_stream_LPAR if (stream_LPAR == NULL) {stream_LPAR = antlr3RewriteRuleTOKENStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token LPAR"); }
22761 + stream_expression = NULL;
22762 + #define CREATE_stream_expression if (stream_expression == NULL) {stream_expression = antlr3RewriteRuleSubtreeStreamNewAE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"rule expression"); }
22763 +
22764 + retval.tree = NULL;
22765 + {
22766 + {
22767 + // SMARTPL.g:40:7: ( LPAR expression RPAR -> expression | STRTAG ( INCLUDES | IS ) STR | INTTAG INTBOOL INT | DATETAG ( AFTER | BEFORE ) dateval | ENUMTAG IS ENUMVAL )
22768 +
22769 + ANTLR3_UINT32 alt4;
22770 +
22771 + alt4=5;
22772 +
22773 + switch ( LA(1) )
22774 + {
22775 + case LPAR:
22776 + {
22777 + alt4=1;
22778 + }
22779 + break;
22780 + case STRTAG:
22781 + {
22782 + alt4=2;
22783 + }
22784 + break;
22785 + case INTTAG:
22786 + {
22787 + alt4=3;
22788 + }
22789 + break;
22790 + case DATETAG:
22791 + {
22792 + alt4=4;
22793 + }
22794 + break;
22795 + case ENUMTAG:
22796 + {
22797 + alt4=5;
22798 + }
22799 + break;
22800 +
22801 + default:
22802 + CONSTRUCTEX();
22803 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
22804 + EXCEPTION->message = (void *)"";
22805 + EXCEPTION->decisionNum = 4;
22806 + EXCEPTION->state = 0;
22807 +
22808 +
22809 + goto rulecritEx;
22810 + }
22811 +
22812 + switch (alt4)
22813 + {
22814 + case 1:
22815 + // SMARTPL.g:40:9: LPAR expression RPAR
22816 + {
22817 + LPAR15 = (pANTLR3_COMMON_TOKEN) MATCHT(LPAR, &FOLLOW_LPAR_in_crit127);
22818 + if (HASEXCEPTION())
22819 + {
22820 + goto rulecritEx;
22821 + }
22822 +
22823 + CREATE_stream_LPAR; stream_LPAR->add(stream_LPAR, LPAR15, NULL);
22824 +
22825 + FOLLOWPUSH(FOLLOW_expression_in_crit129);
22826 + expression16=expression(ctx);
22827 +
22828 + FOLLOWPOP();
22829 + if (HASEXCEPTION())
22830 + {
22831 + goto rulecritEx;
22832 + }
22833 +
22834 + CREATE_stream_expression; stream_expression->add(stream_expression, expression16.tree, NULL);
22835 + RPAR17 = (pANTLR3_COMMON_TOKEN) MATCHT(RPAR, &FOLLOW_RPAR_in_crit131);
22836 + if (HASEXCEPTION())
22837 + {
22838 + goto rulecritEx;
22839 + }
22840 +
22841 + CREATE_stream_RPAR; stream_RPAR->add(stream_RPAR, RPAR17, NULL);
22842 +
22843 +
22844 +
22845 + /* AST REWRITE
22846 + * elements : expression
22847 + * token labels :
22848 + * rule labels : retval
22849 + * token list labels :
22850 + * rule list labels :
22851 + */
22852 + {
22853 + pANTLR3_REWRITE_RULE_SUBTREE_STREAM stream_retval;
22854 +
22855 + stream_retval=antlr3RewriteRuleSubtreeStreamNewAEE(ADAPTOR, RECOGNIZER, (pANTLR3_UINT8)"token retval", retval.tree != NULL ? retval.tree : NULL);
22856 +
22857 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22858 + retval.tree = root_0;
22859 + // 40:30: -> expression
22860 + {
22861 + ADAPTOR->addChild(ADAPTOR, root_0, stream_expression == NULL ? NULL : stream_expression->nextTree(stream_expression));
22862 +
22863 + }
22864 +
22865 + retval.tree = root_0; // set result root
22866 + if (stream_retval != NULL) stream_retval->free(stream_retval);
22867 +
22868 +
22869 + }
22870 + }
22871 + break;
22872 + case 2:
22873 + // SMARTPL.g:41:6: STRTAG ( INCLUDES | IS ) STR
22874 + {
22875 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22876 +
22877 + STRTAG18 = (pANTLR3_COMMON_TOKEN) MATCHT(STRTAG, &FOLLOW_STRTAG_in_crit142);
22878 + if (HASEXCEPTION())
22879 + {
22880 + goto rulecritEx;
22881 + }
22882 +
22883 + STRTAG18_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, STRTAG18));
22884 + ADAPTOR->addChild(ADAPTOR, root_0, STRTAG18_tree);
22885 +
22886 + set19=(pANTLR3_COMMON_TOKEN)LT(1);
22887 + if ( ((LA(1) >= INCLUDES) && (LA(1) <= IS)) )
22888 + {
22889 + CONSUME();
22890 + ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set19)));
22891 + PERRORRECOVERY=ANTLR3_FALSE;
22892 + }
22893 + else
22894 + {
22895 + CONSTRUCTEX();
22896 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
22897 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
22898 + EXCEPTION->expectingSet = &FOLLOW_set_in_crit144;
22899 + RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_crit144); goto rulecritEx;
22900 + }
22901 +
22902 + STR20 = (pANTLR3_COMMON_TOKEN) MATCHT(STR, &FOLLOW_STR_in_crit150);
22903 + if (HASEXCEPTION())
22904 + {
22905 + goto rulecritEx;
22906 + }
22907 +
22908 + STR20_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, STR20));
22909 + ADAPTOR->addChild(ADAPTOR, root_0, STR20_tree);
22910 +
22911 +
22912 + }
22913 + break;
22914 + case 3:
22915 + // SMARTPL.g:42:6: INTTAG INTBOOL INT
22916 + {
22917 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22918 +
22919 + INTTAG21 = (pANTLR3_COMMON_TOKEN) MATCHT(INTTAG, &FOLLOW_INTTAG_in_crit157);
22920 + if (HASEXCEPTION())
22921 + {
22922 + goto rulecritEx;
22923 + }
22924 +
22925 + INTTAG21_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, INTTAG21));
22926 + ADAPTOR->addChild(ADAPTOR, root_0, INTTAG21_tree);
22927 +
22928 + INTBOOL22 = (pANTLR3_COMMON_TOKEN) MATCHT(INTBOOL, &FOLLOW_INTBOOL_in_crit159);
22929 + if (HASEXCEPTION())
22930 + {
22931 + goto rulecritEx;
22932 + }
22933 +
22934 + INTBOOL22_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, INTBOOL22));
22935 + ADAPTOR->addChild(ADAPTOR, root_0, INTBOOL22_tree);
22936 +
22937 + INT23 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_crit161);
22938 + if (HASEXCEPTION())
22939 + {
22940 + goto rulecritEx;
22941 + }
22942 +
22943 + INT23_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, INT23));
22944 + ADAPTOR->addChild(ADAPTOR, root_0, INT23_tree);
22945 +
22946 +
22947 + }
22948 + break;
22949 + case 4:
22950 + // SMARTPL.g:43:6: DATETAG ( AFTER | BEFORE ) dateval
22951 + {
22952 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22953 +
22954 + DATETAG24 = (pANTLR3_COMMON_TOKEN) MATCHT(DATETAG, &FOLLOW_DATETAG_in_crit168);
22955 + if (HASEXCEPTION())
22956 + {
22957 + goto rulecritEx;
22958 + }
22959 +
22960 + DATETAG24_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, DATETAG24));
22961 + ADAPTOR->addChild(ADAPTOR, root_0, DATETAG24_tree);
22962 +
22963 + set25=(pANTLR3_COMMON_TOKEN)LT(1);
22964 + if ( ((LA(1) >= AFTER) && (LA(1) <= BEFORE)) )
22965 + {
22966 + CONSUME();
22967 + ADAPTOR->addChild(ADAPTOR, root_0, (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, set25)));
22968 + PERRORRECOVERY=ANTLR3_FALSE;
22969 + }
22970 + else
22971 + {
22972 + CONSTRUCTEX();
22973 + EXCEPTION->type = ANTLR3_MISMATCHED_SET_EXCEPTION;
22974 + EXCEPTION->name = (void *)ANTLR3_MISMATCHED_SET_NAME;
22975 + EXCEPTION->expectingSet = &FOLLOW_set_in_crit170;
22976 + RECOVERFROMMISMATCHEDSET(&FOLLOW_set_in_crit170); goto rulecritEx;
22977 + }
22978 +
22979 + FOLLOWPUSH(FOLLOW_dateval_in_crit176);
22980 + dateval26=dateval(ctx);
22981 +
22982 + FOLLOWPOP();
22983 + if (HASEXCEPTION())
22984 + {
22985 + goto rulecritEx;
22986 + }
22987 +
22988 + ADAPTOR->addChild(ADAPTOR, root_0, dateval26.tree);
22989 +
22990 + }
22991 + break;
22992 + case 5:
22993 + // SMARTPL.g:44:6: ENUMTAG IS ENUMVAL
22994 + {
22995 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
22996 +
22997 + ENUMTAG27 = (pANTLR3_COMMON_TOKEN) MATCHT(ENUMTAG, &FOLLOW_ENUMTAG_in_crit183);
22998 + if (HASEXCEPTION())
22999 + {
23000 + goto rulecritEx;
23001 + }
23002 +
23003 + ENUMTAG27_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, ENUMTAG27));
23004 + ADAPTOR->addChild(ADAPTOR, root_0, ENUMTAG27_tree);
23005 +
23006 + IS28 = (pANTLR3_COMMON_TOKEN) MATCHT(IS, &FOLLOW_IS_in_crit185);
23007 + if (HASEXCEPTION())
23008 + {
23009 + goto rulecritEx;
23010 + }
23011 +
23012 + IS28_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, IS28));
23013 + ADAPTOR->addChild(ADAPTOR, root_0, IS28_tree);
23014 +
23015 + ENUMVAL29 = (pANTLR3_COMMON_TOKEN) MATCHT(ENUMVAL, &FOLLOW_ENUMVAL_in_crit187);
23016 + if (HASEXCEPTION())
23017 + {
23018 + goto rulecritEx;
23019 + }
23020 +
23021 + ENUMVAL29_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, ENUMVAL29));
23022 + ADAPTOR->addChild(ADAPTOR, root_0, ENUMVAL29_tree);
23023 +
23024 +
23025 + }
23026 + break;
23027 +
23028 + }
23029 + }
23030 + }
23031 +
23032 +
23033 + // This is where rules clean up and exit
23034 + //
23035 + goto rulecritEx; /* Prevent compiler warnings */
23036 + rulecritEx: ;
23037 + retval.stop = LT(-1);
23038 +
23039 + retval.stop = LT(-1);
23040 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
23041 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
23042 + if (stream_RPAR != NULL) stream_RPAR->free(stream_RPAR);
23043 + if (stream_LPAR != NULL) stream_LPAR->free(stream_LPAR);
23044 + if (stream_expression != NULL) stream_expression->free(stream_expression);
23045 +
23046 + if (HASEXCEPTION())
23047 + {
23048 + PREPORTERROR();
23049 + PRECOVER();
23050 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
23051 + }
23052 +
23053 +
23054 + return retval;
23055 +}
23056 +/* $ANTLR end crit */
23057 +
23058 +/**
23059 + * $ANTLR start dateval
23060 + * SMARTPL.g:47:1: dateval : ( DATE | interval BEFORE DATE | interval AFTER DATE | interval AGO );
23061 + */
23062 +static SMARTPLParser_dateval_return
23063 +dateval(pSMARTPLParser ctx)
23064 +{
23065 + SMARTPLParser_dateval_return retval;
23066 +
23067 + pANTLR3_BASE_TREE root_0;
23068 +
23069 + pANTLR3_COMMON_TOKEN DATE30;
23070 + pANTLR3_COMMON_TOKEN BEFORE32;
23071 + pANTLR3_COMMON_TOKEN DATE33;
23072 + pANTLR3_COMMON_TOKEN AFTER35;
23073 + pANTLR3_COMMON_TOKEN DATE36;
23074 + pANTLR3_COMMON_TOKEN AGO38;
23075 + SMARTPLParser_interval_return interval31;
23076 + #undef RETURN_TYPE_interval31
23077 + #define RETURN_TYPE_interval31 SMARTPLParser_interval_return
23078 +
23079 + SMARTPLParser_interval_return interval34;
23080 + #undef RETURN_TYPE_interval34
23081 + #define RETURN_TYPE_interval34 SMARTPLParser_interval_return
23082 +
23083 + SMARTPLParser_interval_return interval37;
23084 + #undef RETURN_TYPE_interval37
23085 + #define RETURN_TYPE_interval37 SMARTPLParser_interval_return
23086 +
23087 + pANTLR3_BASE_TREE DATE30_tree;
23088 + pANTLR3_BASE_TREE BEFORE32_tree;
23089 + pANTLR3_BASE_TREE DATE33_tree;
23090 + pANTLR3_BASE_TREE AFTER35_tree;
23091 + pANTLR3_BASE_TREE DATE36_tree;
23092 + pANTLR3_BASE_TREE AGO38_tree;
23093 +
23094 + /* Initialize rule variables
23095 + */
23096 +
23097 +
23098 + root_0 = NULL;
23099 +
23100 + DATE30 = NULL;
23101 + BEFORE32 = NULL;
23102 + DATE33 = NULL;
23103 + AFTER35 = NULL;
23104 + DATE36 = NULL;
23105 + AGO38 = NULL;
23106 + interval31.tree = NULL;
23107 +
23108 + interval34.tree = NULL;
23109 +
23110 + interval37.tree = NULL;
23111 +
23112 + retval.start = LT(1); retval.stop = retval.start;
23113 +
23114 + DATE30_tree = NULL;
23115 + BEFORE32_tree = NULL;
23116 + DATE33_tree = NULL;
23117 + AFTER35_tree = NULL;
23118 + DATE36_tree = NULL;
23119 + AGO38_tree = NULL;
23120 +
23121 +
23122 + retval.tree = NULL;
23123 + {
23124 + {
23125 + // SMARTPL.g:47:10: ( DATE | interval BEFORE DATE | interval AFTER DATE | interval AGO )
23126 +
23127 + ANTLR3_UINT32 alt5;
23128 +
23129 + alt5=4;
23130 +
23131 + switch ( LA(1) )
23132 + {
23133 + case DATE:
23134 + {
23135 + alt5=1;
23136 + }
23137 + break;
23138 + case INT:
23139 + {
23140 + switch ( LA(2) )
23141 + {
23142 + case DATINTERVAL:
23143 + {
23144 + switch ( LA(3) )
23145 + {
23146 + case AGO:
23147 + {
23148 + alt5=4;
23149 + }
23150 + break;
23151 + case AFTER:
23152 + {
23153 + alt5=3;
23154 + }
23155 + break;
23156 + case BEFORE:
23157 + {
23158 + alt5=2;
23159 + }
23160 + break;
23161 +
23162 + default:
23163 + CONSTRUCTEX();
23164 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
23165 + EXCEPTION->message = (void *)"";
23166 + EXCEPTION->decisionNum = 5;
23167 + EXCEPTION->state = 3;
23168 +
23169 +
23170 + goto ruledatevalEx;
23171 + }
23172 +
23173 + }
23174 + break;
23175 +
23176 + default:
23177 + CONSTRUCTEX();
23178 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
23179 + EXCEPTION->message = (void *)"";
23180 + EXCEPTION->decisionNum = 5;
23181 + EXCEPTION->state = 2;
23182 +
23183 +
23184 + goto ruledatevalEx;
23185 + }
23186 +
23187 + }
23188 + break;
23189 +
23190 + default:
23191 + CONSTRUCTEX();
23192 + EXCEPTION->type = ANTLR3_NO_VIABLE_ALT_EXCEPTION;
23193 + EXCEPTION->message = (void *)"";
23194 + EXCEPTION->decisionNum = 5;
23195 + EXCEPTION->state = 0;
23196 +
23197 +
23198 + goto ruledatevalEx;
23199 + }
23200 +
23201 + switch (alt5)
23202 + {
23203 + case 1:
23204 + // SMARTPL.g:47:12: DATE
23205 + {
23206 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
23207 +
23208 + DATE30 = (pANTLR3_COMMON_TOKEN) MATCHT(DATE, &FOLLOW_DATE_in_dateval200);
23209 + if (HASEXCEPTION())
23210 + {
23211 + goto ruledatevalEx;
23212 + }
23213 +
23214 + DATE30_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, DATE30));
23215 + ADAPTOR->addChild(ADAPTOR, root_0, DATE30_tree);
23216 +
23217 +
23218 + }
23219 + break;
23220 + case 2:
23221 + // SMARTPL.g:48:6: interval BEFORE DATE
23222 + {
23223 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
23224 +
23225 + FOLLOWPUSH(FOLLOW_interval_in_dateval207);
23226 + interval31=interval(ctx);
23227 +
23228 + FOLLOWPOP();
23229 + if (HASEXCEPTION())
23230 + {
23231 + goto ruledatevalEx;
23232 + }
23233 +
23234 + ADAPTOR->addChild(ADAPTOR, root_0, interval31.tree);
23235 + BEFORE32 = (pANTLR3_COMMON_TOKEN) MATCHT(BEFORE, &FOLLOW_BEFORE_in_dateval209);
23236 + if (HASEXCEPTION())
23237 + {
23238 + goto ruledatevalEx;
23239 + }
23240 +
23241 + BEFORE32_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, BEFORE32));
23242 + ADAPTOR->addChild(ADAPTOR, root_0, BEFORE32_tree);
23243 +
23244 + DATE33 = (pANTLR3_COMMON_TOKEN) MATCHT(DATE, &FOLLOW_DATE_in_dateval211);
23245 + if (HASEXCEPTION())
23246 + {
23247 + goto ruledatevalEx;
23248 + }
23249 +
23250 + DATE33_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, DATE33));
23251 + ADAPTOR->addChild(ADAPTOR, root_0, DATE33_tree);
23252 +
23253 +
23254 + }
23255 + break;
23256 + case 3:
23257 + // SMARTPL.g:49:6: interval AFTER DATE
23258 + {
23259 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
23260 +
23261 + FOLLOWPUSH(FOLLOW_interval_in_dateval218);
23262 + interval34=interval(ctx);
23263 +
23264 + FOLLOWPOP();
23265 + if (HASEXCEPTION())
23266 + {
23267 + goto ruledatevalEx;
23268 + }
23269 +
23270 + ADAPTOR->addChild(ADAPTOR, root_0, interval34.tree);
23271 + AFTER35 = (pANTLR3_COMMON_TOKEN) MATCHT(AFTER, &FOLLOW_AFTER_in_dateval220);
23272 + if (HASEXCEPTION())
23273 + {
23274 + goto ruledatevalEx;
23275 + }
23276 +
23277 + AFTER35_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, AFTER35));
23278 + ADAPTOR->addChild(ADAPTOR, root_0, AFTER35_tree);
23279 +
23280 + DATE36 = (pANTLR3_COMMON_TOKEN) MATCHT(DATE, &FOLLOW_DATE_in_dateval222);
23281 + if (HASEXCEPTION())
23282 + {
23283 + goto ruledatevalEx;
23284 + }
23285 +
23286 + DATE36_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, DATE36));
23287 + ADAPTOR->addChild(ADAPTOR, root_0, DATE36_tree);
23288 +
23289 +
23290 + }
23291 + break;
23292 + case 4:
23293 + // SMARTPL.g:50:6: interval AGO
23294 + {
23295 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
23296 +
23297 + FOLLOWPUSH(FOLLOW_interval_in_dateval229);
23298 + interval37=interval(ctx);
23299 +
23300 + FOLLOWPOP();
23301 + if (HASEXCEPTION())
23302 + {
23303 + goto ruledatevalEx;
23304 + }
23305 +
23306 + ADAPTOR->addChild(ADAPTOR, root_0, interval37.tree);
23307 + AGO38 = (pANTLR3_COMMON_TOKEN) MATCHT(AGO, &FOLLOW_AGO_in_dateval231);
23308 + if (HASEXCEPTION())
23309 + {
23310 + goto ruledatevalEx;
23311 + }
23312 +
23313 + AGO38_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, AGO38));
23314 + ADAPTOR->addChild(ADAPTOR, root_0, AGO38_tree);
23315 +
23316 +
23317 + }
23318 + break;
23319 +
23320 + }
23321 + }
23322 + }
23323 +
23324 +
23325 + // This is where rules clean up and exit
23326 + //
23327 + goto ruledatevalEx; /* Prevent compiler warnings */
23328 + ruledatevalEx: ;
23329 + retval.stop = LT(-1);
23330 +
23331 + retval.stop = LT(-1);
23332 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
23333 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
23334 +
23335 + if (HASEXCEPTION())
23336 + {
23337 + PREPORTERROR();
23338 + PRECOVER();
23339 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
23340 + }
23341 +
23342 +
23343 + return retval;
23344 +}
23345 +/* $ANTLR end dateval */
23346 +
23347 +/**
23348 + * $ANTLR start interval
23349 + * SMARTPL.g:53:1: interval : INT DATINTERVAL ;
23350 + */
23351 +static SMARTPLParser_interval_return
23352 +interval(pSMARTPLParser ctx)
23353 +{
23354 + SMARTPLParser_interval_return retval;
23355 +
23356 + pANTLR3_BASE_TREE root_0;
23357 +
23358 + pANTLR3_COMMON_TOKEN INT39;
23359 + pANTLR3_COMMON_TOKEN DATINTERVAL40;
23360 +
23361 + pANTLR3_BASE_TREE INT39_tree;
23362 + pANTLR3_BASE_TREE DATINTERVAL40_tree;
23363 +
23364 + /* Initialize rule variables
23365 + */
23366 +
23367 +
23368 + root_0 = NULL;
23369 +
23370 + INT39 = NULL;
23371 + DATINTERVAL40 = NULL;
23372 + retval.start = LT(1); retval.stop = retval.start;
23373 +
23374 + INT39_tree = NULL;
23375 + DATINTERVAL40_tree = NULL;
23376 +
23377 +
23378 + retval.tree = NULL;
23379 + {
23380 + // SMARTPL.g:53:10: ( INT DATINTERVAL )
23381 + // SMARTPL.g:53:12: INT DATINTERVAL
23382 + {
23383 + root_0 = (pANTLR3_BASE_TREE)(ADAPTOR->nilNode(ADAPTOR));
23384 +
23385 + INT39 = (pANTLR3_COMMON_TOKEN) MATCHT(INT, &FOLLOW_INT_in_interval243);
23386 + if (HASEXCEPTION())
23387 + {
23388 + goto ruleintervalEx;
23389 + }
23390 +
23391 + INT39_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, INT39));
23392 + ADAPTOR->addChild(ADAPTOR, root_0, INT39_tree);
23393 +
23394 + DATINTERVAL40 = (pANTLR3_COMMON_TOKEN) MATCHT(DATINTERVAL, &FOLLOW_DATINTERVAL_in_interval245);
23395 + if (HASEXCEPTION())
23396 + {
23397 + goto ruleintervalEx;
23398 + }
23399 +
23400 + DATINTERVAL40_tree = (pANTLR3_BASE_TREE)(ADAPTOR->create(ADAPTOR, DATINTERVAL40));
23401 + ADAPTOR->addChild(ADAPTOR, root_0, DATINTERVAL40_tree);
23402 +
23403 +
23404 + }
23405 +
23406 + }
23407 +
23408 +
23409 + // This is where rules clean up and exit
23410 + //
23411 + goto ruleintervalEx; /* Prevent compiler warnings */
23412 + ruleintervalEx: ;
23413 + retval.stop = LT(-1);
23414 +
23415 + retval.stop = LT(-1);
23416 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->rulePostProcessing(ADAPTOR, root_0));
23417 + ADAPTOR->setTokenBoundaries(ADAPTOR, retval.tree, retval.start, retval.stop);
23418 +
23419 + if (HASEXCEPTION())
23420 + {
23421 + PREPORTERROR();
23422 + PRECOVER();
23423 + retval.tree = (pANTLR3_BASE_TREE)(ADAPTOR->errorNode(ADAPTOR, INPUT, retval.start, LT(-1), EXCEPTION));
23424 + }
23425 +
23426 +
23427 + return retval;
23428 +}
23429 +/* $ANTLR end interval */
23430 +/* End of parsing rules
23431 + * ==============================================
23432 + */
23433 +
23434 +/* ==============================================
23435 + * Syntactic predicates
23436 + */
23437 +/* End of syntactic predicates
23438 + * ==============================================
23439 + */
23440 +
23441 +
23442 +
23443 +
23444 +
23445 +
23446 +/* End of code
23447 + * =============================================================================
23448 + */
23449 diff --git a/src/pregen/SMARTPLParser.h b/src/pregen/SMARTPLParser.h
23450 new file mode 100644
23451 index 0000000..38ef500
23452 --- /dev/null
23453 +++ b/src/pregen/SMARTPLParser.h
23454 @@ -0,0 +1,285 @@
23455 +/** \file
23456 + * This C header file was generated by $ANTLR version 3.2 debian-7ubuntu3
23457 + *
23458 + * - From the grammar source file : SMARTPL.g
23459 + * - On : 2016-01-01 12:23:40
23460 + * - for the parser : SMARTPLParserParser *
23461 + * Editing it, at least manually, is not wise.
23462 + *
23463 + * C language generator and runtime by Jim Idle, jimi|hereisanat|idle|dotgoeshere|ws.
23464 + *
23465 + *
23466 + * The parser SMARTPLParser has the callable functions (rules) shown below,
23467 + * which will invoke the code for the associated rule in the source grammar
23468 + * assuming that the input stream is pointing to a token/text stream that could begin
23469 + * this rule.
23470 + *
23471 + * For instance if you call the first (topmost) rule in a parser grammar, you will
23472 + * get the results of a full parse, but calling a rule half way through the grammar will
23473 + * allow you to pass part of a full token stream to the parser, such as for syntax checking
23474 + * in editors and so on.
23475 + *
23476 + * The parser entry points are called indirectly (by function pointer to function) via
23477 + * a parser context typedef pSMARTPLParser, which is returned from a call to SMARTPLParserNew().
23478 + *
23479 + * The methods in pSMARTPLParser are as follows:
23480 + *
23481 + * - SMARTPLParser_playlist_return pSMARTPLParser->playlist(pSMARTPLParser)
23482 + * - SMARTPLParser_expression_return pSMARTPLParser->expression(pSMARTPLParser)
23483 + * - SMARTPLParser_aexpr_return pSMARTPLParser->aexpr(pSMARTPLParser)
23484 + * - SMARTPLParser_nexpr_return pSMARTPLParser->nexpr(pSMARTPLParser)
23485 + * - SMARTPLParser_crit_return pSMARTPLParser->crit(pSMARTPLParser)
23486 + * - SMARTPLParser_dateval_return pSMARTPLParser->dateval(pSMARTPLParser)
23487 + * - SMARTPLParser_interval_return pSMARTPLParser->interval(pSMARTPLParser)
23488 + *
23489 + * The return type for any particular rule is of course determined by the source
23490 + * grammar file.
23491 + */
23492 +// [The "BSD licence"]
23493 +// Copyright (c) 2005-2009 Jim Idle, Temporal Wave LLC
23494 +// http://www.temporal-wave.com
23495 +// http://www.linkedin.com/in/jimidle
23496 +//
23497 +// All rights reserved.
23498 +//
23499 +// Redistribution and use in source and binary forms, with or without
23500 +// modification, are permitted provided that the following conditions
23501 +// are met:
23502 +// 1. Redistributions of source code must retain the above copyright
23503 +// notice, this list of conditions and the following disclaimer.
23504 +// 2. Redistributions in binary form must reproduce the above copyright
23505 +// notice, this list of conditions and the following disclaimer in the
23506 +// documentation and/or other materials provided with the distribution.
23507 +// 3. The name of the author may not be used to endorse or promote products
23508 +// derived from this software without specific prior written permission.
23509 +//
23510 +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23511 +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23512 +// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23513 +// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23514 +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23515 +// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23516 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23517 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23518 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23519 +// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23520 +
23521 +#ifndef _SMARTPLParser_H
23522 +#define _SMARTPLParser_H
23523 +/* =============================================================================
23524 + * Standard antlr3 C runtime definitions
23525 + */
23526 +#include <antlr3.h>
23527 +
23528 +/* End of standard antlr 3 runtime definitions
23529 + * =============================================================================
23530 + */
23531 +
23532 +#ifdef __cplusplus
23533 +extern "C" {
23534 +#endif
23535 +
23536 +// Forward declare the context typedef so that we can use it before it is
23537 +// properly defined. Delegators and delegates (from import statements) are
23538 +// interdependent and their context structures contain pointers to each other
23539 +// C only allows such things to be declared if you pre-declare the typedef.
23540 +//
23541 +typedef struct SMARTPLParser_Ctx_struct SMARTPLParser, * pSMARTPLParser;
23542 +
23543 +
23544 +
23545 +#ifdef ANTLR3_WINDOWS
23546 +// Disable: Unreferenced parameter, - Rules with parameters that are not used
23547 +// constant conditional, - ANTLR realizes that a prediction is always true (synpred usually)
23548 +// initialized but unused variable - tree rewrite variables declared but not needed
23549 +// Unreferenced local variable - lexer rule declares but does not always use _type
23550 +// potentially unitialized variable used - retval always returned from a rule
23551 +// unreferenced local function has been removed - susually getTokenNames or freeScope, they can go without warnigns
23552 +//
23553 +// These are only really displayed at warning level /W4 but that is the code ideal I am aiming at
23554 +// and the codegen must generate some of these warnings by necessity, apart from 4100, which is
23555 +// usually generated when a parser rule is given a parameter that it does not use. Mostly though
23556 +// this is a matter of orthogonality hence I disable that one.
23557 +//
23558 +#pragma warning( disable : 4100 )
23559 +#pragma warning( disable : 4101 )
23560 +#pragma warning( disable : 4127 )
23561 +#pragma warning( disable : 4189 )
23562 +#pragma warning( disable : 4505 )
23563 +#pragma warning( disable : 4701 )
23564 +#endif
23565 +typedef struct SMARTPLParser_playlist_return_struct
23566 +{
23567 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23568 + */
23569 + pANTLR3_COMMON_TOKEN start;
23570 + pANTLR3_COMMON_TOKEN stop;
23571 + pANTLR3_BASE_TREE tree;
23572 +
23573 +}
23574 + SMARTPLParser_playlist_return;
23575 +
23576 +typedef struct SMARTPLParser_expression_return_struct
23577 +{
23578 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23579 + */
23580 + pANTLR3_COMMON_TOKEN start;
23581 + pANTLR3_COMMON_TOKEN stop;
23582 + pANTLR3_BASE_TREE tree;
23583 +
23584 +}
23585 + SMARTPLParser_expression_return;
23586 +
23587 +typedef struct SMARTPLParser_aexpr_return_struct
23588 +{
23589 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23590 + */
23591 + pANTLR3_COMMON_TOKEN start;
23592 + pANTLR3_COMMON_TOKEN stop;
23593 + pANTLR3_BASE_TREE tree;
23594 +
23595 +}
23596 + SMARTPLParser_aexpr_return;
23597 +
23598 +typedef struct SMARTPLParser_nexpr_return_struct
23599 +{
23600 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23601 + */
23602 + pANTLR3_COMMON_TOKEN start;
23603 + pANTLR3_COMMON_TOKEN stop;
23604 + pANTLR3_BASE_TREE tree;
23605 +
23606 +}
23607 + SMARTPLParser_nexpr_return;
23608 +
23609 +typedef struct SMARTPLParser_crit_return_struct
23610 +{
23611 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23612 + */
23613 + pANTLR3_COMMON_TOKEN start;
23614 + pANTLR3_COMMON_TOKEN stop;
23615 + pANTLR3_BASE_TREE tree;
23616 +
23617 +}
23618 + SMARTPLParser_crit_return;
23619 +
23620 +typedef struct SMARTPLParser_dateval_return_struct
23621 +{
23622 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23623 + */
23624 + pANTLR3_COMMON_TOKEN start;
23625 + pANTLR3_COMMON_TOKEN stop;
23626 + pANTLR3_BASE_TREE tree;
23627 +
23628 +}
23629 + SMARTPLParser_dateval_return;
23630 +
23631 +typedef struct SMARTPLParser_interval_return_struct
23632 +{
23633 + /** Generic return elements for ANTLR3 rules that are not in tree parsers or returning trees
23634 + */
23635 + pANTLR3_COMMON_TOKEN start;
23636 + pANTLR3_COMMON_TOKEN stop;
23637 + pANTLR3_BASE_TREE tree;
23638 +
23639 +}
23640 + SMARTPLParser_interval_return;
23641 +
23642 +
23643 +
23644 +/** Context tracking structure for SMARTPLParser
23645 + */
23646 +struct SMARTPLParser_Ctx_struct
23647 +{
23648 + /** Built in ANTLR3 context tracker contains all the generic elements
23649 + * required for context tracking.
23650 + */
23651 + pANTLR3_PARSER pParser;
23652 +
23653 +
23654 + SMARTPLParser_playlist_return (*playlist) (struct SMARTPLParser_Ctx_struct * ctx);
23655 + SMARTPLParser_expression_return (*expression) (struct SMARTPLParser_Ctx_struct * ctx);
23656 + SMARTPLParser_aexpr_return (*aexpr) (struct SMARTPLParser_Ctx_struct * ctx);
23657 + SMARTPLParser_nexpr_return (*nexpr) (struct SMARTPLParser_Ctx_struct * ctx);
23658 + SMARTPLParser_crit_return (*crit) (struct SMARTPLParser_Ctx_struct * ctx);
23659 + SMARTPLParser_dateval_return (*dateval) (struct SMARTPLParser_Ctx_struct * ctx);
23660 + SMARTPLParser_interval_return (*interval) (struct SMARTPLParser_Ctx_struct * ctx);
23661 + // Delegated rules
23662 + const char * (*getGrammarFileName)();
23663 + void (*free) (struct SMARTPLParser_Ctx_struct * ctx);
23664 + /* @headerFile.members() */
23665 + pANTLR3_BASE_TREE_ADAPTOR adaptor;
23666 + pANTLR3_VECTOR_FACTORY vectors;
23667 + /* End @headerFile.members() */
23668 +};
23669 +
23670 +// Function protoypes for the constructor functions that external translation units
23671 +// such as delegators and delegates may wish to call.
23672 +//
23673 +ANTLR3_API pSMARTPLParser SMARTPLParserNew (pANTLR3_COMMON_TOKEN_STREAM instream);
23674 +ANTLR3_API pSMARTPLParser SMARTPLParserNewSSD (pANTLR3_COMMON_TOKEN_STREAM instream, pANTLR3_RECOGNIZER_SHARED_STATE state);
23675 +
23676 +/** Symbolic definitions of all the tokens that the parser will work with.
23677 + * \{
23678 + *
23679 + * Antlr will define EOF, but we can't use that as it it is too common in
23680 + * in C header files and that would be confusing. There is no way to filter this out at the moment
23681 + * so we just undef it here for now. That isn't the value we get back from C recognizers
23682 + * anyway. We are looking for ANTLR3_TOKEN_EOF.
23683 + */
23684 +#ifdef EOF
23685 +#undef EOF
23686 +#endif
23687 +#ifdef Tokens
23688 +#undef Tokens
23689 +#endif
23690 +#define INTBOOL 14
23691 +#define STRTAG 10
23692 +#define AGO 22
23693 +#define WHITESPACE 29
23694 +#define GREATEREQUAL 25
23695 +#define BEFORE 18
23696 +#define DATETAG 16
23697 +#define INT 15
23698 +#define NOT 7
23699 +#define AFTER 17
23700 +#define AND 6
23701 +#define EOF -1
23702 +#define INCLUDES 11
23703 +#define STR 4
23704 +#define T__30 30
23705 +#define T__31 31
23706 +#define GREATER 24
23707 +#define LPAR 8
23708 +#define ENUMTAG 19
23709 +#define IS 12
23710 +#define ENUMVAL 20
23711 +#define EQUAL 28
23712 +#define OR 5
23713 +#define LESS 26
23714 +#define RPAR 9
23715 +#define DATE 21
23716 +#define LESSEQUAL 27
23717 +#define DATINTERVAL 23
23718 +#define INTTAG 13
23719 +#ifdef EOF
23720 +#undef EOF
23721 +#define EOF ANTLR3_TOKEN_EOF
23722 +#endif
23723 +
23724 +#ifndef TOKENSOURCE
23725 +#define TOKENSOURCE(lxr) lxr->pLexer->rec->state->tokSource
23726 +#endif
23727 +
23728 +/* End of token definitions for SMARTPLParser
23729 + * =============================================================================
23730 + */
23731 +/** \} */
23732 +
23733 +#ifdef __cplusplus
23734 +}
23735 +#endif
23736 +
23737 +#endif
23738 +
23739 +/* END - Note:Keep extra line feed to satisfy UNIX systems */