First Commit
[librecmc/package-feed.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 */