]> granicus.if.org Git - apache/blob - server/util_expr_scan.c
Merge r1741310, r1741461 from trunk:
[apache] / server / util_expr_scan.c
1 #line 2 "util_expr_scan.c"
2
3 #line 4 "util_expr_scan.c"
4
5 #define  YY_INT_ALIGNED short int
6
7 /* A lexical scanner generated by flex */
8
9 #define FLEX_SCANNER
10 #define YY_FLEX_MAJOR_VERSION 2
11 #define YY_FLEX_MINOR_VERSION 5
12 #define YY_FLEX_SUBMINOR_VERSION 35
13 #if YY_FLEX_SUBMINOR_VERSION > 0
14 #define FLEX_BETA
15 #endif
16
17 /* First, we deal with  platform-specific or compiler-specific issues. */
18
19 /* begin standard C headers. */
20 #include <stdio.h>
21 #include <string.h>
22 #include <errno.h>
23 #include <stdlib.h>
24
25 /* end standard C headers. */
26
27 /* flex integer type definitions */
28
29 #ifndef FLEXINT_H
30 #define FLEXINT_H
31
32 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
33
34 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
35
36 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
37  * if you want the limit (max/min) macros for int types. 
38  */
39 #ifndef __STDC_LIMIT_MACROS
40 #define __STDC_LIMIT_MACROS 1
41 #endif
42
43 #include <inttypes.h>
44 typedef int8_t flex_int8_t;
45 typedef uint8_t flex_uint8_t;
46 typedef int16_t flex_int16_t;
47 typedef uint16_t flex_uint16_t;
48 typedef int32_t flex_int32_t;
49 typedef uint32_t flex_uint32_t;
50 #else
51 typedef signed char flex_int8_t;
52 typedef short int flex_int16_t;
53 typedef int flex_int32_t;
54 typedef unsigned char flex_uint8_t; 
55 typedef unsigned short int flex_uint16_t;
56 typedef unsigned int flex_uint32_t;
57
58 /* Limits of integral types. */
59 #ifndef INT8_MIN
60 #define INT8_MIN               (-128)
61 #endif
62 #ifndef INT16_MIN
63 #define INT16_MIN              (-32767-1)
64 #endif
65 #ifndef INT32_MIN
66 #define INT32_MIN              (-2147483647-1)
67 #endif
68 #ifndef INT8_MAX
69 #define INT8_MAX               (127)
70 #endif
71 #ifndef INT16_MAX
72 #define INT16_MAX              (32767)
73 #endif
74 #ifndef INT32_MAX
75 #define INT32_MAX              (2147483647)
76 #endif
77 #ifndef UINT8_MAX
78 #define UINT8_MAX              (255U)
79 #endif
80 #ifndef UINT16_MAX
81 #define UINT16_MAX             (65535U)
82 #endif
83 #ifndef UINT32_MAX
84 #define UINT32_MAX             (4294967295U)
85 #endif
86
87 #endif /* ! C99 */
88
89 #endif /* ! FLEXINT_H */
90
91 #ifdef __cplusplus
92
93 /* The "const" storage-class-modifier is valid. */
94 #define YY_USE_CONST
95
96 #else   /* ! __cplusplus */
97
98 /* C99 requires __STDC__ to be defined as 1. */
99 #if defined (__STDC__)
100
101 #define YY_USE_CONST
102
103 #endif  /* defined (__STDC__) */
104 #endif  /* ! __cplusplus */
105
106 #ifdef YY_USE_CONST
107 #define yyconst const
108 #else
109 #define yyconst
110 #endif
111
112 /* Returned upon end-of-file. */
113 #define YY_NULL 0
114
115 /* Promotes a possibly negative, possibly signed char to an unsigned
116  * integer for use as an array index.  If the signed char is negative,
117  * we want to instead treat it as an 8-bit unsigned char, hence the
118  * double cast.
119  */
120 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
121
122 /* An opaque pointer. */
123 #ifndef YY_TYPEDEF_YY_SCANNER_T
124 #define YY_TYPEDEF_YY_SCANNER_T
125 typedef void* yyscan_t;
126 #endif
127
128 /* For convenience, these vars (plus the bison vars far below)
129    are macros in the reentrant scanner. */
130 #define yyin yyg->yyin_r
131 #define yyout yyg->yyout_r
132 #define yyextra yyg->yyextra_r
133 #define yyleng yyg->yyleng_r
134 #define yytext yyg->yytext_r
135 #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
136 #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
137 #define yy_flex_debug yyg->yy_flex_debug_r
138
139 /* Enter a start condition.  This macro really ought to take a parameter,
140  * but we do it the disgusting crufty way forced on us by the ()-less
141  * definition of BEGIN.
142  */
143 #define BEGIN yyg->yy_start = 1 + 2 *
144
145 /* Translate the current start state into a value that can be later handed
146  * to BEGIN to return to the state.  The YYSTATE alias is for lex
147  * compatibility.
148  */
149 #define YY_START ((yyg->yy_start - 1) / 2)
150 #define YYSTATE YY_START
151
152 /* Action number for EOF rule of a given start state. */
153 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
154
155 /* Special action meaning "start processing a new file". */
156 #define YY_NEW_FILE ap_expr_yyrestart(yyin ,yyscanner )
157
158 #define YY_END_OF_BUFFER_CHAR 0
159
160 /* Size of default input buffer. */
161 #ifndef YY_BUF_SIZE
162 #ifdef __ia64__
163 /* On IA-64, the buffer size is 16k, not 8k.
164  * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
165  * Ditto for the __ia64__ case accordingly.
166  */
167 #define YY_BUF_SIZE 32768
168 #else
169 #define YY_BUF_SIZE 16384
170 #endif /* __ia64__ */
171 #endif
172
173 /* The state buf must be large enough to hold one state per character in the main buffer.
174  */
175 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
176
177 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
178 #define YY_TYPEDEF_YY_BUFFER_STATE
179 typedef struct yy_buffer_state *YY_BUFFER_STATE;
180 #endif
181
182 #define EOB_ACT_CONTINUE_SCAN 0
183 #define EOB_ACT_END_OF_FILE 1
184 #define EOB_ACT_LAST_MATCH 2
185
186     #define YY_LESS_LINENO(n)
187     
188 /* Return all but the first "n" matched characters back to the input stream. */
189 #define yyless(n) \
190         do \
191                 { \
192                 /* Undo effects of setting up yytext. */ \
193         int yyless_macro_arg = (n); \
194         YY_LESS_LINENO(yyless_macro_arg);\
195                 *yy_cp = yyg->yy_hold_char; \
196                 YY_RESTORE_YY_MORE_OFFSET \
197                 yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
198                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
199                 } \
200         while ( 0 )
201
202 #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
203
204 #ifndef YY_TYPEDEF_YY_SIZE_T
205 #define YY_TYPEDEF_YY_SIZE_T
206 typedef size_t yy_size_t;
207 #endif
208
209 #ifndef YY_STRUCT_YY_BUFFER_STATE
210 #define YY_STRUCT_YY_BUFFER_STATE
211 struct yy_buffer_state
212         {
213         FILE *yy_input_file;
214
215         char *yy_ch_buf;                /* input buffer */
216         char *yy_buf_pos;               /* current position in input buffer */
217
218         /* Size of input buffer in bytes, not including room for EOB
219          * characters.
220          */
221         yy_size_t yy_buf_size;
222
223         /* Number of characters read into yy_ch_buf, not including EOB
224          * characters.
225          */
226         int yy_n_chars;
227
228         /* Whether we "own" the buffer - i.e., we know we created it,
229          * and can realloc() it to grow it, and should free() it to
230          * delete it.
231          */
232         int yy_is_our_buffer;
233
234         /* Whether this is an "interactive" input source; if so, and
235          * if we're using stdio for input, then we want to use getc()
236          * instead of fread(), to make sure we stop fetching input after
237          * each newline.
238          */
239         int yy_is_interactive;
240
241         /* Whether we're considered to be at the beginning of a line.
242          * If so, '^' rules will be active on the next match, otherwise
243          * not.
244          */
245         int yy_at_bol;
246
247     int yy_bs_lineno; /**< The line count. */
248     int yy_bs_column; /**< The column count. */
249     
250         /* Whether to try to fill the input buffer when we reach the
251          * end of it.
252          */
253         int yy_fill_buffer;
254
255         int yy_buffer_status;
256
257 #define YY_BUFFER_NEW 0
258 #define YY_BUFFER_NORMAL 1
259         /* When an EOF's been seen but there's still some text to process
260          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
261          * shouldn't try reading from the input source any more.  We might
262          * still have a bunch of tokens to match, though, because of
263          * possible backing-up.
264          *
265          * When we actually see the EOF, we change the status to "new"
266          * (via ap_expr_yyrestart()), so that the user can continue scanning by
267          * just pointing yyin at a new input file.
268          */
269 #define YY_BUFFER_EOF_PENDING 2
270
271         };
272 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
273
274 /* We provide macros for accessing buffer states in case in the
275  * future we want to put the buffer states in a more general
276  * "scanner state".
277  *
278  * Returns the top of the stack, or NULL.
279  */
280 #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
281                           ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
282                           : NULL)
283
284 /* Same as previous macro, but useful when we know that the buffer stack is not
285  * NULL or when we need an lvalue. For internal use only.
286  */
287 #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
288
289 void ap_expr_yyrestart (FILE *input_file ,yyscan_t yyscanner );
290 void ap_expr_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
291 YY_BUFFER_STATE ap_expr_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
292 void ap_expr_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
293 void ap_expr_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
294 void ap_expr_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
295 void ap_expr_yypop_buffer_state (yyscan_t yyscanner );
296
297 static void ap_expr_yyensure_buffer_stack (yyscan_t yyscanner );
298 static void ap_expr_yy_load_buffer_state (yyscan_t yyscanner );
299 static void ap_expr_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
300
301 #define YY_FLUSH_BUFFER ap_expr_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
302
303 YY_BUFFER_STATE ap_expr_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
304 YY_BUFFER_STATE ap_expr_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
305 YY_BUFFER_STATE ap_expr_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
306
307 void *ap_expr_yyalloc (yy_size_t ,yyscan_t yyscanner );
308 void *ap_expr_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
309 void ap_expr_yyfree (void * ,yyscan_t yyscanner );
310
311 #define yy_new_buffer ap_expr_yy_create_buffer
312
313 #define yy_set_interactive(is_interactive) \
314         { \
315         if ( ! YY_CURRENT_BUFFER ){ \
316         ap_expr_yyensure_buffer_stack (yyscanner); \
317                 YY_CURRENT_BUFFER_LVALUE =    \
318             ap_expr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
319         } \
320         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
321         }
322
323 #define yy_set_bol(at_bol) \
324         { \
325         if ( ! YY_CURRENT_BUFFER ){\
326         ap_expr_yyensure_buffer_stack (yyscanner); \
327                 YY_CURRENT_BUFFER_LVALUE =    \
328             ap_expr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
329         } \
330         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
331         }
332
333 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
334
335 /* Begin user sect3 */
336
337 #define ap_expr_yywrap(n) 1
338 #define YY_SKIP_YYWRAP
339
340 typedef unsigned char YY_CHAR;
341
342 typedef int yy_state_type;
343
344 #define yytext_ptr yytext_r
345
346 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
347 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
348 static int yy_get_next_buffer (yyscan_t yyscanner );
349 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
350
351 /* Done after the current pattern has been matched and before the
352  * corresponding action - sets up yytext.
353  */
354 #define YY_DO_BEFORE_ACTION \
355         yyg->yytext_ptr = yy_bp; \
356         yyleng = (size_t) (yy_cp - yy_bp); \
357         yyg->yy_hold_char = *yy_cp; \
358         *yy_cp = '\0'; \
359         yyg->yy_c_buf_p = yy_cp;
360
361 #define YY_NUM_RULES 67
362 #define YY_END_OF_BUFFER 68
363 /* This struct is not used in this scanner,
364    but its presence is necessary. */
365 struct yy_trans_info
366         {
367         flex_int32_t yy_verify;
368         flex_int32_t yy_nxt;
369         };
370 static yyconst flex_int16_t yy_accept[124] =
371     {   0,
372         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
373         0,    0,   68,   66,    1,   43,    2,   66,   66,   66,
374        65,   66,   44,   26,   63,   32,   30,   34,   64,   64,
375        64,   64,   64,   64,   64,   64,   64,   64,   64,   66,
376        14,    4,    3,   17,   17,   67,   17,   23,    4,   22,
377        20,   21,   67,   16,   16,   24,   27,   29,   28,    1,
378        31,   37,   19,   18,   39,   63,   59,   59,   59,   59,
379        59,   59,   33,   30,   36,   35,   64,   64,   57,   64,
380        55,   54,   58,   53,   52,   25,   25,   56,   64,   40,
381        64,   41,   14,   13,   15,   12,    5,    6,   10,   11,
382
383         7,    8,    9,   20,   60,   46,   48,   50,   45,   49,
384        51,   47,   38,   64,   42,   64,    5,    6,   64,   61,
385         5,   62,    0
386     } ;
387
388 static yyconst flex_int32_t yy_ec[256] =
389     {   0,
390         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
391         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
392         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
393         1,    2,    4,    5,    6,    7,    8,    9,    5,   10,
394        10,    1,    1,   11,   12,   13,   14,   15,   15,   15,
395        15,   15,   15,   15,   15,   16,   16,   17,    6,   18,
396        19,   20,    6,    1,   21,   21,   21,   21,   21,   21,
397        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
398        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
399         1,   22,    1,    6,   23,    1,   24,   25,   21,   26,
400
401        27,   28,   29,   21,   30,   21,   21,   31,   32,   33,
402        34,   21,   35,   36,   37,   38,   39,   21,   21,   21,
403        21,   21,   40,   41,   42,   43,    1,    1,    1,    1,
404         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
405         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
406         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
407         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
408         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
409         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
410         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
411
412         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
413         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
414         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
415         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
416         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
417         1,    1,    1,    1,    1
418     } ;
419
420 static yyconst flex_int32_t yy_meta[44] =
421     {   0,
422         1,    1,    2,    1,    2,    1,    2,    2,    1,    1,
423         1,    1,    1,    1,    3,    3,    1,    1,    1,    1,
424         3,    2,    3,    3,    3,    3,    3,    3,    3,    3,
425         3,    3,    3,    3,    3,    3,    3,    3,    3,    1,
426         1,    2,    1
427     } ;
428
429 static yyconst flex_int16_t yy_base[133] =
430     {   0,
431         0,    0,   41,   47,   89,    0,  130,  136,    0,    0,
432       147,  146,  175,  275,   54,   28,  275,   43,  134,  164,
433       275,  164,  275,  275,   45,  152,   32,  151,    0,  136,
434       133,  143,   26,  133,   35,  194,   38,  129,  128,  122,
435         0,  275,  275,   51,  122,  221,  275,  275,  275,  275,
436         0,  275,  275,   61,  121,  275,  275,  275,  275,   76,
437       275,  275,  275,  275,  275,   65,    0,  125,   47,  126,
438       107,  130,  275,  275,  275,  275,    0,  130,    0,  124,
439         0,    0,    0,    0,    0,  275,    0,    0,  104,    0,
440       101,  275,    0,  275,  275,  275,   71,  131,  275,  275,
441
442       275,  275,  275,    0,    0,    0,    0,    0,    0,    0,
443         0,    0,    0,   99,    0,   61,  133,  135,   57,    0,
444       138,    0,  275,  259,  262,  265,   79,   67,  268,  271,
445        65,   42
446     } ;
447
448 static yyconst flex_int16_t yy_def[133] =
449     {   0,
450       123,    1,  124,  124,  123,    5,  124,  124,  125,  125,
451       126,  126,  123,  123,  123,  123,  123,  123,  123,  123,
452       123,  127,  123,  123,  123,  123,  123,  123,  128,  128,
453       128,  128,  128,  128,  128,  128,  128,  128,  128,  123,
454       129,  123,  123,  123,  123,  130,  123,  123,  123,  123,
455       131,  123,  123,  123,  123,  123,  123,  123,  123,  123,
456       123,  123,  123,  123,  123,  123,  132,  132,  132,  132,
457       132,  132,  123,  123,  123,  123,  128,  128,  128,  128,
458       128,  128,  128,  128,  128,  123,  128,  128,  128,  128,
459       128,  123,  129,  123,  123,  123,  123,  123,  123,  123,
460
461       123,  123,  123,  131,  132,  132,  132,  132,  132,  132,
462       132,  132,  128,  128,  128,  128,  123,  123,  128,  128,
463       123,  128,    0,  123,  123,  123,  123,  123,  123,  123,
464       123,  123
465     } ;
466
467 static yyconst flex_int16_t yy_nxt[319] =
468     {   0,
469        14,   15,   15,   16,   17,   14,   18,   19,   20,   21,
470        21,   22,   23,   24,   25,   25,   21,   26,   27,   28,
471        29,   14,   14,   30,   29,   29,   31,   32,   33,   34,
472        35,   36,   37,   38,   29,   29,   29,   39,   29,   21,
473        40,   21,   14,   42,  105,   43,   61,   44,   45,   42,
474        74,   43,   81,   44,   45,   60,   60,   63,   63,   66,
475        66,   84,   46,   82,   88,   94,   94,  104,   46,   77,
476        62,   89,   85,  107,   75,   94,   94,   60,   60,   66,
477        66,   67,   47,  122,  108,  117,  118,  120,   47,   48,
478        48,   49,   48,   48,   48,   48,   48,   48,   48,   48,
479
480        48,   48,   48,   48,   48,   50,   48,   48,   48,   51,
481        48,   48,   51,   51,   51,   51,   51,   51,   51,   51,
482        51,   51,   51,   51,   51,   51,   51,   51,   48,   48,
483        52,   48,   42,  110,   53,  119,   54,   55,   42,  116,
484        53,  115,   54,   55,  111,  118,  118,  121,  118,  118,
485       118,   46,  118,  118,  114,  113,  112,   46,  109,  106,
486        95,   95,   92,   91,   90,   83,   80,   79,   78,   76,
487        73,   56,   65,   64,  123,   59,   59,   56,   66,   66,
488       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
489        68,  123,   69,   70,   71,  123,   72,   86,   86,   86,
490
491        86,   86,  123,  123,   86,   86,   86,   86,  123,  123,
492        86,  123,  123,  123,  123,  123,   87,  123,  123,  123,
493       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
494       123,  123,  123,  123,   86,   97,   98,  123,  123,  123,
495       123,  123,  123,  123,  123,   99,  123,  123,  100,  123,
496       123,  123,  123,  101,  123,  123,  102,  123,  103,   41,
497        41,   41,   57,   57,   57,   58,   58,   58,   93,  123,
498        93,   96,   96,   96,   13,  123,  123,  123,  123,  123,
499       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
500       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
501
502       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
503       123,  123,  123,  123,  123,  123,  123,  123
504     } ;
505
506 static yyconst flex_int16_t yy_chk[319] =
507     {   0,
508         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
509         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
510         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
511         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
512         1,    1,    1,    3,  132,    3,   16,    3,    3,    4,
513        27,    4,   33,    4,    4,   15,   15,   18,   18,   25,
514        25,   35,    3,   33,   37,   44,   44,  131,    4,  128,
515        16,   37,   35,   69,   27,   54,   54,   60,   60,   66,
516        66,  127,    3,  119,   69,   97,   97,  116,    4,    5,
517         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
518
519         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
520         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
521         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
522         5,    5,    7,   71,    7,  114,    7,    7,    8,   91,
523         8,   89,    8,    8,   71,   98,   98,  117,  117,  118,
524       118,    7,  121,  121,   80,   78,   72,    8,   70,   68,
525        55,   45,   40,   39,   38,   34,   32,   31,   30,   28,
526        26,    7,   20,   19,   13,   12,   11,    8,   22,   22,
527         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
528        22,    0,   22,   22,   22,    0,   22,   36,   36,   36,
529
530        36,   36,    0,    0,   36,   36,   36,   36,    0,    0,
531        36,    0,    0,    0,    0,    0,   36,    0,    0,    0,
532         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
533         0,    0,    0,    0,   36,   46,   46,    0,    0,    0,
534         0,    0,    0,    0,    0,   46,    0,    0,   46,    0,
535         0,    0,    0,   46,    0,    0,   46,    0,   46,  124,
536       124,  124,  125,  125,  125,  126,  126,  126,  129,    0,
537       129,  130,  130,  130,  123,  123,  123,  123,  123,  123,
538       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
539       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
540
541       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
542       123,  123,  123,  123,  123,  123,  123,  123
543     } ;
544
545 /* The intent behind this definition is that it'll catch
546  * any uses of REJECT which flex missed.
547  */
548 #define REJECT reject_used_but_not_detected
549 #define yymore() yymore_used_but_not_detected
550 #define YY_MORE_ADJ 0
551 #define YY_RESTORE_YY_MORE_OFFSET
552 #line 1 "util_expr_scan.l"
553 /* Licensed to the Apache Software Foundation (ASF) under one or more
554  * contributor license agreements.  See the NOTICE file distributed with
555  * this work for additional information regarding copyright ownership.
556  * The ASF licenses this file to You under the Apache License, Version 2.0
557  * (the "License"); you may not use this file except in compliance with
558  * the License.  You may obtain a copy of the License at
559  *
560  *     http://www.apache.org/licenses/LICENSE-2.0
561  *
562  * Unless required by applicable law or agreed to in writing, software
563  * distributed under the License is distributed on an "AS IS" BASIS,
564  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
565  * See the License for the specific language governing permissions and
566  * limitations under the License.
567  */
568 /*
569  *  ap_expr_scan.l, based on ssl_expr_scan.l from mod_ssl
570  */
571 /*  _________________________________________________________________
572 **
573 **  Expression Scanner
574 **  _________________________________________________________________
575 */
576 #define YY_NO_INPUT 1
577
578
579
580
581 #line 43 "util_expr_scan.l"
582 #include "util_expr_private.h"
583 #include "util_expr_parse.h"
584
585 #undef  YY_INPUT
586 #define YY_INPUT(buf,result,max_size)                       \
587 {                                                           \
588     if ((result = MIN(max_size, yyextra->inputbuf           \
589                               + yyextra->inputlen           \
590                               - yyextra->inputptr)) <= 0)   \
591     {                                                       \
592         result = YY_NULL;                                   \
593     }                                                       \
594     else {                                                  \
595         memcpy(buf, yyextra->inputptr, result);             \
596         yyextra->inputptr += result;                        \
597     }                                                       \
598 }
599
600 #define YY_EXTRA_TYPE ap_expr_parse_ctx_t*
601
602 #define PERROR(msg) do { yyextra->error2 = msg ; return T_ERROR; } while (0)
603
604 #define str_ptr     (yyextra->scan_ptr)
605 #define str_buf     (yyextra->scan_buf)
606 #define str_del     (yyextra->scan_del)
607
608 #define STR_APPEND(c) do {                          \
609         *str_ptr++ = (c);                           \
610         if (str_ptr >= str_buf + sizeof(str_buf))   \
611             PERROR("String too long");              \
612     } while (0)
613
614 #line 615 "util_expr_scan.c"
615
616 #define INITIAL 0
617 #define str 1
618 #define var 2
619 #define vararg 3
620 #define regex 4
621 #define regex_flags 5
622
623 #ifndef YY_NO_UNISTD_H
624 /* Special case for "unistd.h", since it is non-ANSI. We include it way
625  * down here because we want the user's section 1 to have been scanned first.
626  * The user has a chance to override it with an option.
627  */
628 #include <unistd.h>
629 #endif
630
631 #ifndef YY_EXTRA_TYPE
632 #define YY_EXTRA_TYPE void *
633 #endif
634
635 /* Holds the entire state of the reentrant scanner. */
636 struct yyguts_t
637     {
638
639     /* User-defined. Not touched by flex. */
640     YY_EXTRA_TYPE yyextra_r;
641
642     /* The rest are the same as the globals declared in the non-reentrant scanner. */
643     FILE *yyin_r, *yyout_r;
644     size_t yy_buffer_stack_top; /**< index of top of stack. */
645     size_t yy_buffer_stack_max; /**< capacity of stack. */
646     YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
647     char yy_hold_char;
648     int yy_n_chars;
649     int yyleng_r;
650     char *yy_c_buf_p;
651     int yy_init;
652     int yy_start;
653     int yy_did_buffer_switch_on_eof;
654     int yy_start_stack_ptr;
655     int yy_start_stack_depth;
656     int *yy_start_stack;
657     yy_state_type yy_last_accepting_state;
658     char* yy_last_accepting_cpos;
659
660     int yylineno_r;
661     int yy_flex_debug_r;
662
663     char *yytext_r;
664     int yy_more_flag;
665     int yy_more_len;
666
667     YYSTYPE * yylval_r;
668
669     }; /* end struct yyguts_t */
670
671 static int yy_init_globals (yyscan_t yyscanner );
672
673     /* This must go here because YYSTYPE and YYLTYPE are included
674      * from bison output in section 1.*/
675     #    define yylval yyg->yylval_r
676     
677 int ap_expr_yylex_init (yyscan_t* scanner);
678
679 int ap_expr_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
680
681 /* Accessor methods to globals.
682    These are made visible to non-reentrant scanners for convenience. */
683
684 int ap_expr_yylex_destroy (yyscan_t yyscanner );
685
686 int ap_expr_yyget_debug (yyscan_t yyscanner );
687
688 void ap_expr_yyset_debug (int debug_flag ,yyscan_t yyscanner );
689
690 YY_EXTRA_TYPE ap_expr_yyget_extra (yyscan_t yyscanner );
691
692 void ap_expr_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
693
694 FILE *ap_expr_yyget_in (yyscan_t yyscanner );
695
696 void ap_expr_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
697
698 FILE *ap_expr_yyget_out (yyscan_t yyscanner );
699
700 void ap_expr_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
701
702 int ap_expr_yyget_leng (yyscan_t yyscanner );
703
704 char *ap_expr_yyget_text (yyscan_t yyscanner );
705
706 int ap_expr_yyget_lineno (yyscan_t yyscanner );
707
708 void ap_expr_yyset_lineno (int line_number ,yyscan_t yyscanner );
709
710 YYSTYPE * ap_expr_yyget_lval (yyscan_t yyscanner );
711
712 void ap_expr_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
713
714 /* Macros after this point can all be overridden by user definitions in
715  * section 1.
716  */
717
718 #ifndef YY_SKIP_YYWRAP
719 #ifdef __cplusplus
720 extern "C" int ap_expr_yywrap (yyscan_t yyscanner );
721 #else
722 extern int ap_expr_yywrap (yyscan_t yyscanner );
723 #endif
724 #endif
725
726 #ifndef yytext_ptr
727 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
728 #endif
729
730 #ifdef YY_NEED_STRLEN
731 static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
732 #endif
733
734 #ifndef YY_NO_INPUT
735
736 #ifdef __cplusplus
737 static int yyinput (yyscan_t yyscanner );
738 #else
739 static int input (yyscan_t yyscanner );
740 #endif
741
742 #endif
743
744     static void yy_push_state (int new_state ,yyscan_t yyscanner);
745     
746     static void yy_pop_state (yyscan_t yyscanner );
747     
748 /* Amount of stuff to slurp up with each read. */
749 #ifndef YY_READ_BUF_SIZE
750 #ifdef __ia64__
751 /* On IA-64, the buffer size is 16k, not 8k */
752 #define YY_READ_BUF_SIZE 16384
753 #else
754 #define YY_READ_BUF_SIZE 8192
755 #endif /* __ia64__ */
756 #endif
757
758 /* Copy whatever the last rule matched to the standard output. */
759 #ifndef ECHO
760 /* This used to be an fputs(), but since the string might contain NUL's,
761  * we now use fwrite().
762  */
763 #define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
764 #endif
765
766 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
767  * is returned in "result".
768  */
769 #ifndef YY_INPUT
770 #define YY_INPUT(buf,result,max_size) \
771         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
772                 { \
773                 int c = '*'; \
774                 size_t n; \
775                 for ( n = 0; n < max_size && \
776                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
777                         buf[n] = (char) c; \
778                 if ( c == '\n' ) \
779                         buf[n++] = (char) c; \
780                 if ( c == EOF && ferror( yyin ) ) \
781                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
782                 result = n; \
783                 } \
784         else \
785                 { \
786                 errno=0; \
787                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
788                         { \
789                         if( errno != EINTR) \
790                                 { \
791                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
792                                 break; \
793                                 } \
794                         errno=0; \
795                         clearerr(yyin); \
796                         } \
797                 }\
798 \
799
800 #endif
801
802 /* No semi-colon after return; correct usage is to write "yyterminate();" -
803  * we don't want an extra ';' after the "return" because that will cause
804  * some compilers to complain about unreachable statements.
805  */
806 #ifndef yyterminate
807 #define yyterminate() return YY_NULL
808 #endif
809
810 /* Number of entries by which start-condition stack grows. */
811 #ifndef YY_START_STACK_INCR
812 #define YY_START_STACK_INCR 25
813 #endif
814
815 /* Report a fatal error. */
816 #ifndef YY_FATAL_ERROR
817 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
818 #endif
819
820 /* end tables serialization structures and prototypes */
821
822 /* Default declaration of generated scanner - a define so the user can
823  * easily add parameters.
824  */
825 #ifndef YY_DECL
826 #define YY_DECL_IS_OURS 1
827
828 extern int ap_expr_yylex \
829                (YYSTYPE * yylval_param ,yyscan_t yyscanner);
830
831 #define YY_DECL int ap_expr_yylex \
832                (YYSTYPE * yylval_param , yyscan_t yyscanner)
833 #endif /* !YY_DECL */
834
835 /* Code executed at the beginning of each rule, after yytext and yyleng
836  * have been set up.
837  */
838 #ifndef YY_USER_ACTION
839 #define YY_USER_ACTION
840 #endif
841
842 /* Code executed at the end of each rule. */
843 #ifndef YY_BREAK
844 #define YY_BREAK break;
845 #endif
846
847 #define YY_RULE_SETUP \
848         YY_USER_ACTION
849
850 /** The main scanner function which does all the work.
851  */
852 YY_DECL
853 {
854         register yy_state_type yy_current_state;
855         register char *yy_cp, *yy_bp;
856         register int yy_act;
857     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
858
859 #line 78 "util_expr_scan.l"
860
861
862   char  regex_buf[MAX_STRING_LEN];
863   char *regex_ptr = NULL;
864   char  regex_del = '\0';
865
866
867  /*
868   * Set initial state for string expressions
869   */
870   if (yyextra->at_start) {
871     yyextra->at_start = 0;
872     if (yyextra->flags & AP_EXPR_FLAG_STRING_RESULT) {
873         BEGIN(str);
874         return T_EXPR_STRING;
875     }
876     else {
877         return T_EXPR_BOOL;
878     }
879   }
880
881
882  /*
883   * Whitespaces
884   */
885 #line 886 "util_expr_scan.c"
886
887     yylval = yylval_param;
888
889         if ( !yyg->yy_init )
890                 {
891                 yyg->yy_init = 1;
892
893 #ifdef YY_USER_INIT
894                 YY_USER_INIT;
895 #endif
896
897                 if ( ! yyg->yy_start )
898                         yyg->yy_start = 1;      /* first start state */
899
900                 if ( ! yyin )
901                         yyin = stdin;
902
903                 if ( ! yyout )
904                         yyout = stdout;
905
906                 if ( ! YY_CURRENT_BUFFER ) {
907                         ap_expr_yyensure_buffer_stack (yyscanner);
908                         YY_CURRENT_BUFFER_LVALUE =
909                                 ap_expr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
910                 }
911
912                 ap_expr_yy_load_buffer_state(yyscanner );
913                 }
914
915         while ( 1 )             /* loops until end-of-file is reached */
916                 {
917                 yy_cp = yyg->yy_c_buf_p;
918
919                 /* Support of yytext. */
920                 *yy_cp = yyg->yy_hold_char;
921
922                 /* yy_bp points to the position in yy_ch_buf of the start of
923                  * the current run.
924                  */
925                 yy_bp = yy_cp;
926
927                 yy_current_state = yyg->yy_start;
928 yy_match:
929                 do
930                         {
931                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
932                         if ( yy_accept[yy_current_state] )
933                                 {
934                                 yyg->yy_last_accepting_state = yy_current_state;
935                                 yyg->yy_last_accepting_cpos = yy_cp;
936                                 }
937                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
938                                 {
939                                 yy_current_state = (int) yy_def[yy_current_state];
940                                 if ( yy_current_state >= 124 )
941                                         yy_c = yy_meta[(unsigned int) yy_c];
942                                 }
943                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
944                         ++yy_cp;
945                         }
946                 while ( yy_current_state != 123 );
947                 yy_cp = yyg->yy_last_accepting_cpos;
948                 yy_current_state = yyg->yy_last_accepting_state;
949
950 yy_find_action:
951                 yy_act = yy_accept[yy_current_state];
952
953                 YY_DO_BEFORE_ACTION;
954
955 do_action:      /* This label is used only to access EOF actions. */
956
957                 switch ( yy_act )
958         { /* beginning of action switch */
959                         case 0: /* must back up */
960                         /* undo the effects of YY_DO_BEFORE_ACTION */
961                         *yy_cp = yyg->yy_hold_char;
962                         yy_cp = yyg->yy_last_accepting_cpos;
963                         yy_current_state = yyg->yy_last_accepting_state;
964                         goto yy_find_action;
965
966 case 1:
967 /* rule 1 can match eol */
968 YY_RULE_SETUP
969 #line 103 "util_expr_scan.l"
970
971     /* NOP */
972 }
973         YY_BREAK
974 /*
975   * strings ("..." and '...')
976   */
977 case 2:
978 YY_RULE_SETUP
979 #line 110 "util_expr_scan.l"
980 {
981     str_ptr = str_buf;
982     str_del = yytext[0];
983     BEGIN(str);
984     return T_STR_BEGIN;
985 }
986         YY_BREAK
987 case 3:
988 YY_RULE_SETUP
989 #line 116 "util_expr_scan.l"
990 {
991     if (yytext[0] == str_del) {
992         if (YY_START == var) {
993             PERROR("Unterminated variable in string");
994         }
995         else if (str_ptr == str_buf) {
996             BEGIN(INITIAL);
997             return T_STR_END;
998         }
999         else {
1000             /* return what we have so far and scan delimiter again */
1001             *str_ptr = '\0';
1002             yylval->cpVal = apr_pstrdup(yyextra->pool, str_buf);
1003             yyless(0);
1004             str_ptr = str_buf;
1005             return T_STRING;
1006         }
1007     }
1008     else {
1009         STR_APPEND(yytext[0]);
1010     }
1011 }
1012         YY_BREAK
1013 case 4:
1014 /* rule 4 can match eol */
1015 YY_RULE_SETUP
1016 #line 138 "util_expr_scan.l"
1017 {
1018     PERROR("Unterminated string or variable");
1019 }
1020         YY_BREAK
1021 case YY_STATE_EOF(var):
1022 case YY_STATE_EOF(vararg):
1023 #line 141 "util_expr_scan.l"
1024 {
1025     PERROR("Unterminated string or variable");
1026 }
1027         YY_BREAK
1028 case YY_STATE_EOF(str):
1029 #line 144 "util_expr_scan.l"
1030 {
1031     if (!(yyextra->flags & AP_EXPR_FLAG_STRING_RESULT)) {
1032         PERROR("Unterminated string or variable");
1033     }
1034     else {
1035         *str_ptr = '\0';
1036         yylval->cpVal = apr_pstrdup(yyextra->pool, str_buf);
1037         str_ptr = str_buf;
1038         BEGIN(INITIAL);
1039         return T_STRING;
1040     }
1041 }
1042         YY_BREAK
1043 case 5:
1044 YY_RULE_SETUP
1045 #line 157 "util_expr_scan.l"
1046 {
1047     int result;
1048
1049     (void)sscanf(yytext+1, "%o", &result);
1050     if (result > 0xff) {
1051         PERROR("Escape sequence out of bound");
1052     }
1053     else {
1054         STR_APPEND(result);
1055     }
1056 }
1057         YY_BREAK
1058 case 6:
1059 YY_RULE_SETUP
1060 #line 168 "util_expr_scan.l"
1061 {
1062     PERROR("Bad escape sequence");
1063 }
1064         YY_BREAK
1065 case 7:
1066 YY_RULE_SETUP
1067 #line 171 "util_expr_scan.l"
1068 { STR_APPEND('\n'); }
1069         YY_BREAK
1070 case 8:
1071 YY_RULE_SETUP
1072 #line 172 "util_expr_scan.l"
1073 { STR_APPEND('\r'); }
1074         YY_BREAK
1075 case 9:
1076 YY_RULE_SETUP
1077 #line 173 "util_expr_scan.l"
1078 { STR_APPEND('\t'); }
1079         YY_BREAK
1080 case 10:
1081 YY_RULE_SETUP
1082 #line 174 "util_expr_scan.l"
1083 { STR_APPEND('\b'); }
1084         YY_BREAK
1085 case 11:
1086 YY_RULE_SETUP
1087 #line 175 "util_expr_scan.l"
1088 { STR_APPEND('\f'); }
1089         YY_BREAK
1090 case 12:
1091 /* rule 12 can match eol */
1092 YY_RULE_SETUP
1093 #line 176 "util_expr_scan.l"
1094 { STR_APPEND(yytext[1]); }
1095         YY_BREAK
1096 /* regexp backref inside string/arg */
1097 case 13:
1098 YY_RULE_SETUP
1099 #line 179 "util_expr_scan.l"
1100 {
1101     if (str_ptr != str_buf) {
1102         /* return what we have so far and scan '$x' again */
1103         *str_ptr = '\0';
1104         yylval->cpVal = apr_pstrdup(yyextra->pool, str_buf);
1105         str_ptr = str_buf;
1106         yyless(0);
1107         return T_STRING;
1108     }
1109     else {
1110         yylval->num = yytext[1] - '0';
1111         return T_REGEX_BACKREF;
1112     }
1113 }
1114         YY_BREAK
1115 case 14:
1116 YY_RULE_SETUP
1117 #line 194 "util_expr_scan.l"
1118 {
1119     char *cp = yytext;
1120     while (*cp != '\0') {
1121         STR_APPEND(*cp);
1122         cp++;
1123     }
1124 }
1125         YY_BREAK
1126 /* variable inside string/arg */
1127 case 15:
1128 YY_RULE_SETUP
1129 #line 203 "util_expr_scan.l"
1130 {
1131     if (str_ptr != str_buf) {
1132         /* return what we have so far and scan '%{' again */
1133         *str_ptr = '\0';
1134         yylval->cpVal = apr_pstrdup(yyextra->pool, str_buf);
1135         yyless(0);
1136         str_ptr = str_buf;
1137         return T_STRING;
1138     }
1139     else {
1140         yy_push_state(var, yyscanner);
1141         return T_VAR_BEGIN;
1142     }
1143 }
1144         YY_BREAK
1145 case 16:
1146 YY_RULE_SETUP
1147 #line 218 "util_expr_scan.l"
1148 {
1149      STR_APPEND(yytext[0]);
1150 }
1151         YY_BREAK
1152 case 17:
1153 YY_RULE_SETUP
1154 #line 222 "util_expr_scan.l"
1155 {
1156      STR_APPEND(yytext[0]);
1157 }
1158         YY_BREAK
1159 case 18:
1160 YY_RULE_SETUP
1161 #line 226 "util_expr_scan.l"
1162 {
1163     yy_push_state(var, yyscanner);
1164     return T_VAR_BEGIN;
1165 }
1166         YY_BREAK
1167 case 19:
1168 YY_RULE_SETUP
1169 #line 231 "util_expr_scan.l"
1170 {
1171     yylval->num = yytext[1] - '0';
1172     return T_REGEX_BACKREF;
1173 }
1174         YY_BREAK
1175 /*
1176   * fixed name variable expansion %{XXX} and function call in %{func:arg} syntax
1177   */
1178 case 20:
1179 YY_RULE_SETUP
1180 #line 239 "util_expr_scan.l"
1181 {
1182     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
1183     return T_ID;
1184 }
1185         YY_BREAK
1186 case 21:
1187 YY_RULE_SETUP
1188 #line 244 "util_expr_scan.l"
1189 {
1190     yy_pop_state(yyscanner);
1191     return T_VAR_END;
1192 }
1193         YY_BREAK
1194 case 22:
1195 YY_RULE_SETUP
1196 #line 249 "util_expr_scan.l"
1197 {
1198     BEGIN(vararg);
1199     return yytext[0];
1200 }
1201         YY_BREAK
1202 case 23:
1203 /* rule 23 can match eol */
1204 YY_RULE_SETUP
1205 #line 254 "util_expr_scan.l"
1206 {
1207     char *msg = apr_psprintf(yyextra->pool,
1208                              "Invalid character in variable name '%c'", yytext[0]);
1209     PERROR(msg);
1210 }
1211         YY_BREAK
1212 case 24:
1213 YY_RULE_SETUP
1214 #line 260 "util_expr_scan.l"
1215 {
1216     if (str_ptr != str_buf) {
1217         /* return what we have so far and scan '}' again */
1218         *str_ptr = '\0';
1219         yylval->cpVal = apr_pstrdup(yyextra->pool, str_buf);
1220         str_ptr = str_buf;
1221         yyless(0);
1222         return T_STRING;
1223     }
1224     else {
1225         yy_pop_state(yyscanner);
1226         return T_VAR_END;
1227     }
1228 }
1229         YY_BREAK
1230 /*
1231   * Regular Expression
1232   */
1233 case 25:
1234 YY_RULE_SETUP
1235 #line 278 "util_expr_scan.l"
1236 {
1237     regex_del = yytext[1];
1238     regex_ptr = regex_buf;
1239     BEGIN(regex);
1240 }
1241         YY_BREAK
1242 case 26:
1243 YY_RULE_SETUP
1244 #line 283 "util_expr_scan.l"
1245 {
1246     regex_del = yytext[0];
1247     regex_ptr = regex_buf;
1248     BEGIN(regex);
1249 }
1250         YY_BREAK
1251 case 27:
1252 /* rule 27 can match eol */
1253 YY_RULE_SETUP
1254 #line 288 "util_expr_scan.l"
1255 {
1256     if (yytext[0] == regex_del) {
1257         *regex_ptr = '\0';
1258         BEGIN(regex_flags);
1259     }
1260     else {
1261         *regex_ptr++ = yytext[0];
1262         if (regex_ptr >= regex_buf + sizeof(regex_buf))
1263             PERROR("Regexp too long");
1264     }
1265 }
1266         YY_BREAK
1267 case 28:
1268 YY_RULE_SETUP
1269 #line 299 "util_expr_scan.l"
1270 {
1271     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
1272     BEGIN(INITIAL);
1273     return T_REGEX_I;
1274 }
1275         YY_BREAK
1276 case 29:
1277 /* rule 29 can match eol */
1278 YY_RULE_SETUP
1279 #line 304 "util_expr_scan.l"
1280 {
1281     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
1282     yyless(0);
1283     BEGIN(INITIAL);
1284     return T_REGEX;
1285 }
1286         YY_BREAK
1287 case YY_STATE_EOF(regex_flags):
1288 #line 310 "util_expr_scan.l"
1289 {
1290     yylval->cpVal = apr_pstrdup(yyextra->pool, regex_buf);
1291     BEGIN(INITIAL);
1292     return T_REGEX;
1293 }
1294         YY_BREAK
1295 /*
1296   * Operators
1297   */
1298 case 30:
1299 YY_RULE_SETUP
1300 #line 319 "util_expr_scan.l"
1301 { return T_OP_STR_EQ; }
1302         YY_BREAK
1303 case 31:
1304 YY_RULE_SETUP
1305 #line 320 "util_expr_scan.l"
1306 { return T_OP_STR_NE; }
1307         YY_BREAK
1308 case 32:
1309 YY_RULE_SETUP
1310 #line 321 "util_expr_scan.l"
1311 { return T_OP_STR_LT; }
1312         YY_BREAK
1313 case 33:
1314 YY_RULE_SETUP
1315 #line 322 "util_expr_scan.l"
1316 { return T_OP_STR_LE; }
1317         YY_BREAK
1318 case 34:
1319 YY_RULE_SETUP
1320 #line 323 "util_expr_scan.l"
1321 { return T_OP_STR_GT; }
1322         YY_BREAK
1323 case 35:
1324 YY_RULE_SETUP
1325 #line 324 "util_expr_scan.l"
1326 { return T_OP_STR_GE; }
1327         YY_BREAK
1328 case 36:
1329 YY_RULE_SETUP
1330 #line 325 "util_expr_scan.l"
1331 { return T_OP_REG; }
1332         YY_BREAK
1333 case 37:
1334 YY_RULE_SETUP
1335 #line 326 "util_expr_scan.l"
1336 { return T_OP_NRE; }
1337         YY_BREAK
1338 case 38:
1339 YY_RULE_SETUP
1340 #line 327 "util_expr_scan.l"
1341 { return T_OP_AND; }
1342         YY_BREAK
1343 case 39:
1344 YY_RULE_SETUP
1345 #line 328 "util_expr_scan.l"
1346 { return T_OP_AND; }
1347         YY_BREAK
1348 case 40:
1349 YY_RULE_SETUP
1350 #line 329 "util_expr_scan.l"
1351 { return T_OP_OR; }
1352         YY_BREAK
1353 case 41:
1354 YY_RULE_SETUP
1355 #line 330 "util_expr_scan.l"
1356 { return T_OP_OR; }
1357         YY_BREAK
1358 case 42:
1359 YY_RULE_SETUP
1360 #line 331 "util_expr_scan.l"
1361 { return T_OP_NOT; }
1362         YY_BREAK
1363 case 43:
1364 YY_RULE_SETUP
1365 #line 332 "util_expr_scan.l"
1366 { return T_OP_NOT; }
1367         YY_BREAK
1368 case 44:
1369 YY_RULE_SETUP
1370 #line 333 "util_expr_scan.l"
1371 { return T_OP_CONCAT; }
1372         YY_BREAK
1373 case 45:
1374 YY_RULE_SETUP
1375 #line 334 "util_expr_scan.l"
1376 { return T_OP_IN; }
1377         YY_BREAK
1378 case 46:
1379 YY_RULE_SETUP
1380 #line 335 "util_expr_scan.l"
1381 { return T_OP_EQ; }
1382         YY_BREAK
1383 case 47:
1384 YY_RULE_SETUP
1385 #line 336 "util_expr_scan.l"
1386 { return T_OP_NE; }
1387         YY_BREAK
1388 case 48:
1389 YY_RULE_SETUP
1390 #line 337 "util_expr_scan.l"
1391 { return T_OP_GE; }
1392         YY_BREAK
1393 case 49:
1394 YY_RULE_SETUP
1395 #line 338 "util_expr_scan.l"
1396 { return T_OP_LE; }
1397         YY_BREAK
1398 case 50:
1399 YY_RULE_SETUP
1400 #line 339 "util_expr_scan.l"
1401 { return T_OP_GT; }
1402         YY_BREAK
1403 case 51:
1404 YY_RULE_SETUP
1405 #line 340 "util_expr_scan.l"
1406 { return T_OP_LT; }
1407         YY_BREAK
1408 /* for compatibility with ssl_expr */
1409 case 52:
1410 YY_RULE_SETUP
1411 #line 343 "util_expr_scan.l"
1412 { return T_OP_LT; }
1413         YY_BREAK
1414 case 53:
1415 YY_RULE_SETUP
1416 #line 344 "util_expr_scan.l"
1417 { return T_OP_LE; }
1418         YY_BREAK
1419 case 54:
1420 YY_RULE_SETUP
1421 #line 345 "util_expr_scan.l"
1422 { return T_OP_GT; }
1423         YY_BREAK
1424 case 55:
1425 YY_RULE_SETUP
1426 #line 346 "util_expr_scan.l"
1427 { return T_OP_GE; }
1428         YY_BREAK
1429 case 56:
1430 YY_RULE_SETUP
1431 #line 347 "util_expr_scan.l"
1432 { return T_OP_NE; }
1433         YY_BREAK
1434 case 57:
1435 YY_RULE_SETUP
1436 #line 348 "util_expr_scan.l"
1437 { return T_OP_EQ; }
1438         YY_BREAK
1439 case 58:
1440 YY_RULE_SETUP
1441 #line 349 "util_expr_scan.l"
1442 { return T_OP_IN; }
1443         YY_BREAK
1444 case 59:
1445 YY_RULE_SETUP
1446 #line 351 "util_expr_scan.l"
1447 {
1448     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
1449     return T_OP_UNARY;
1450 }
1451         YY_BREAK
1452 case 60:
1453 YY_RULE_SETUP
1454 #line 356 "util_expr_scan.l"
1455 {
1456     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
1457     return T_OP_BINARY;
1458 }
1459         YY_BREAK
1460 /*
1461   * Specials
1462   */
1463 case 61:
1464 YY_RULE_SETUP
1465 #line 364 "util_expr_scan.l"
1466 { return T_TRUE; }
1467         YY_BREAK
1468 case 62:
1469 YY_RULE_SETUP
1470 #line 365 "util_expr_scan.l"
1471 { return T_FALSE; }
1472         YY_BREAK
1473 /*
1474   * Digits
1475   */
1476 case 63:
1477 YY_RULE_SETUP
1478 #line 370 "util_expr_scan.l"
1479 {
1480     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
1481     return T_DIGIT;
1482 }
1483         YY_BREAK
1484 /*
1485   * Identifiers
1486   */
1487 case 64:
1488 YY_RULE_SETUP
1489 #line 378 "util_expr_scan.l"
1490 {
1491     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
1492     return T_ID;
1493 }
1494         YY_BREAK
1495 /*
1496   * These are parts of the grammar and are returned as is
1497   */
1498 case 65:
1499 YY_RULE_SETUP
1500 #line 386 "util_expr_scan.l"
1501 {
1502     return yytext[0];
1503 }
1504         YY_BREAK
1505 /*
1506   * Anything else is an error
1507   */
1508 case 66:
1509 /* rule 66 can match eol */
1510 YY_RULE_SETUP
1511 #line 393 "util_expr_scan.l"
1512 {
1513     char *msg = apr_psprintf(yyextra->pool, "Parse error near '%c'", yytext[0]);
1514     PERROR(msg);
1515 }
1516         YY_BREAK
1517 case 67:
1518 YY_RULE_SETUP
1519 #line 398 "util_expr_scan.l"
1520 YY_FATAL_ERROR( "flex scanner jammed" );
1521         YY_BREAK
1522 #line 1523 "util_expr_scan.c"
1523 case YY_STATE_EOF(INITIAL):
1524 case YY_STATE_EOF(regex):
1525         yyterminate();
1526
1527         case YY_END_OF_BUFFER:
1528                 {
1529                 /* Amount of text matched not including the EOB char. */
1530                 int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
1531
1532                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
1533                 *yy_cp = yyg->yy_hold_char;
1534                 YY_RESTORE_YY_MORE_OFFSET
1535
1536                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1537                         {
1538                         /* We're scanning a new file or input source.  It's
1539                          * possible that this happened because the user
1540                          * just pointed yyin at a new source and called
1541                          * ap_expr_yylex().  If so, then we have to assure
1542                          * consistency between YY_CURRENT_BUFFER and our
1543                          * globals.  Here is the right place to do so, because
1544                          * this is the first action (other than possibly a
1545                          * back-up) that will match for the new input source.
1546                          */
1547                         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1548                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
1549                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1550                         }
1551
1552                 /* Note that here we test for yy_c_buf_p "<=" to the position
1553                  * of the first EOB in the buffer, since yy_c_buf_p will
1554                  * already have been incremented past the NUL character
1555                  * (since all states make transitions on EOB to the
1556                  * end-of-buffer state).  Contrast this with the test
1557                  * in input().
1558                  */
1559                 if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
1560                         { /* This was really a NUL. */
1561                         yy_state_type yy_next_state;
1562
1563                         yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1564
1565                         yy_current_state = yy_get_previous_state( yyscanner );
1566
1567                         /* Okay, we're now positioned to make the NUL
1568                          * transition.  We couldn't have
1569                          * yy_get_previous_state() go ahead and do it
1570                          * for us because it doesn't know how to deal
1571                          * with the possibility of jamming (and we don't
1572                          * want to build jamming into it because then it
1573                          * will run more slowly).
1574                          */
1575
1576                         yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
1577
1578                         yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1579
1580                         if ( yy_next_state )
1581                                 {
1582                                 /* Consume the NUL. */
1583                                 yy_cp = ++yyg->yy_c_buf_p;
1584                                 yy_current_state = yy_next_state;
1585                                 goto yy_match;
1586                                 }
1587
1588                         else
1589                                 {
1590                                 yy_cp = yyg->yy_last_accepting_cpos;
1591                                 yy_current_state = yyg->yy_last_accepting_state;
1592                                 goto yy_find_action;
1593                                 }
1594                         }
1595
1596                 else switch ( yy_get_next_buffer( yyscanner ) )
1597                         {
1598                         case EOB_ACT_END_OF_FILE:
1599                                 {
1600                                 yyg->yy_did_buffer_switch_on_eof = 0;
1601
1602                                 if ( ap_expr_yywrap(yyscanner ) )
1603                                         {
1604                                         /* Note: because we've taken care in
1605                                          * yy_get_next_buffer() to have set up
1606                                          * yytext, we can now set up
1607                                          * yy_c_buf_p so that if some total
1608                                          * hoser (like flex itself) wants to
1609                                          * call the scanner after we return the
1610                                          * YY_NULL, it'll still work - another
1611                                          * YY_NULL will get returned.
1612                                          */
1613                                         yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
1614
1615                                         yy_act = YY_STATE_EOF(YY_START);
1616                                         goto do_action;
1617                                         }
1618
1619                                 else
1620                                         {
1621                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
1622                                                 YY_NEW_FILE;
1623                                         }
1624                                 break;
1625                                 }
1626
1627                         case EOB_ACT_CONTINUE_SCAN:
1628                                 yyg->yy_c_buf_p =
1629                                         yyg->yytext_ptr + yy_amount_of_matched_text;
1630
1631                                 yy_current_state = yy_get_previous_state( yyscanner );
1632
1633                                 yy_cp = yyg->yy_c_buf_p;
1634                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1635                                 goto yy_match;
1636
1637                         case EOB_ACT_LAST_MATCH:
1638                                 yyg->yy_c_buf_p =
1639                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
1640
1641                                 yy_current_state = yy_get_previous_state( yyscanner );
1642
1643                                 yy_cp = yyg->yy_c_buf_p;
1644                                 yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
1645                                 goto yy_find_action;
1646                         }
1647                 break;
1648                 }
1649
1650         default:
1651                 YY_FATAL_ERROR(
1652                         "fatal flex scanner internal error--no action found" );
1653         } /* end of action switch */
1654                 } /* end of scanning one token */
1655 } /* end of ap_expr_yylex */
1656
1657 /* yy_get_next_buffer - try to read in a new buffer
1658  *
1659  * Returns a code representing an action:
1660  *      EOB_ACT_LAST_MATCH -
1661  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1662  *      EOB_ACT_END_OF_FILE - end of file
1663  */
1664 static int yy_get_next_buffer (yyscan_t yyscanner)
1665 {
1666     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1667         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1668         register char *source = yyg->yytext_ptr;
1669         register int number_to_move, i;
1670         int ret_val;
1671
1672         if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
1673                 YY_FATAL_ERROR(
1674                 "fatal flex scanner internal error--end of buffer missed" );
1675
1676         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1677                 { /* Don't try to fill the buffer, so this is an EOF. */
1678                 if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
1679                         {
1680                         /* We matched a single character, the EOB, so
1681                          * treat this as a final EOF.
1682                          */
1683                         return EOB_ACT_END_OF_FILE;
1684                         }
1685
1686                 else
1687                         {
1688                         /* We matched some text prior to the EOB, first
1689                          * process it.
1690                          */
1691                         return EOB_ACT_LAST_MATCH;
1692                         }
1693                 }
1694
1695         /* Try to read more data. */
1696
1697         /* First move last chars to start of buffer. */
1698         number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
1699
1700         for ( i = 0; i < number_to_move; ++i )
1701                 *(dest++) = *(source++);
1702
1703         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1704                 /* don't do the read, it's not guaranteed to return an EOF,
1705                  * just force an EOF
1706                  */
1707                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
1708
1709         else
1710                 {
1711                         int num_to_read =
1712                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1713
1714                 while ( num_to_read <= 0 )
1715                         { /* Not enough room in the buffer - grow it. */
1716
1717                         /* just a shorter name for the current buffer */
1718                         YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
1719
1720                         int yy_c_buf_p_offset =
1721                                 (int) (yyg->yy_c_buf_p - b->yy_ch_buf);
1722
1723                         if ( b->yy_is_our_buffer )
1724                                 {
1725                                 int new_size = b->yy_buf_size * 2;
1726
1727                                 if ( new_size <= 0 )
1728                                         b->yy_buf_size += b->yy_buf_size / 8;
1729                                 else
1730                                         b->yy_buf_size *= 2;
1731
1732                                 b->yy_ch_buf = (char *)
1733                                         /* Include room in for 2 EOB chars. */
1734                                         ap_expr_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
1735                                 }
1736                         else
1737                                 /* Can't grow it, we don't own it. */
1738                                 b->yy_ch_buf = 0;
1739
1740                         if ( ! b->yy_ch_buf )
1741                                 YY_FATAL_ERROR(
1742                                 "fatal error - scanner input buffer overflow" );
1743
1744                         yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
1745
1746                         num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1747                                                 number_to_move - 1;
1748
1749                         }
1750
1751                 if ( num_to_read > YY_READ_BUF_SIZE )
1752                         num_to_read = YY_READ_BUF_SIZE;
1753
1754                 /* Read in more data. */
1755                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1756                         yyg->yy_n_chars, (size_t) num_to_read );
1757
1758                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1759                 }
1760
1761         if ( yyg->yy_n_chars == 0 )
1762                 {
1763                 if ( number_to_move == YY_MORE_ADJ )
1764                         {
1765                         ret_val = EOB_ACT_END_OF_FILE;
1766                         ap_expr_yyrestart(yyin  ,yyscanner);
1767                         }
1768
1769                 else
1770                         {
1771                         ret_val = EOB_ACT_LAST_MATCH;
1772                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1773                                 YY_BUFFER_EOF_PENDING;
1774                         }
1775                 }
1776
1777         else
1778                 ret_val = EOB_ACT_CONTINUE_SCAN;
1779
1780         if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1781                 /* Extend the array by 50%, plus the number we really need. */
1782                 yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
1783                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ap_expr_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
1784                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1785                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1786         }
1787
1788         yyg->yy_n_chars += number_to_move;
1789         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
1790         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
1791
1792         yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1793
1794         return ret_val;
1795 }
1796
1797 /* yy_get_previous_state - get the state just before the EOB char was reached */
1798
1799     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
1800 {
1801         register yy_state_type yy_current_state;
1802         register char *yy_cp;
1803     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1804
1805         yy_current_state = yyg->yy_start;
1806
1807         for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
1808                 {
1809                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
1810                 if ( yy_accept[yy_current_state] )
1811                         {
1812                         yyg->yy_last_accepting_state = yy_current_state;
1813                         yyg->yy_last_accepting_cpos = yy_cp;
1814                         }
1815                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1816                         {
1817                         yy_current_state = (int) yy_def[yy_current_state];
1818                         if ( yy_current_state >= 124 )
1819                                 yy_c = yy_meta[(unsigned int) yy_c];
1820                         }
1821                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1822                 }
1823
1824         return yy_current_state;
1825 }
1826
1827 /* yy_try_NUL_trans - try to make a transition on the NUL character
1828  *
1829  * synopsis
1830  *      next_state = yy_try_NUL_trans( current_state );
1831  */
1832     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
1833 {
1834         register int yy_is_jam;
1835     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
1836         register char *yy_cp = yyg->yy_c_buf_p;
1837
1838         register YY_CHAR yy_c = 1;
1839         if ( yy_accept[yy_current_state] )
1840                 {
1841                 yyg->yy_last_accepting_state = yy_current_state;
1842                 yyg->yy_last_accepting_cpos = yy_cp;
1843                 }
1844         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1845                 {
1846                 yy_current_state = (int) yy_def[yy_current_state];
1847                 if ( yy_current_state >= 124 )
1848                         yy_c = yy_meta[(unsigned int) yy_c];
1849                 }
1850         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1851         yy_is_jam = (yy_current_state == 123);
1852
1853         return yy_is_jam ? 0 : yy_current_state;
1854 }
1855
1856 #ifndef YY_NO_INPUT
1857 #ifdef __cplusplus
1858     static int yyinput (yyscan_t yyscanner)
1859 #else
1860     static int input  (yyscan_t yyscanner)
1861 #endif
1862
1863 {
1864         int c;
1865     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1866
1867         *yyg->yy_c_buf_p = yyg->yy_hold_char;
1868
1869         if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
1870                 {
1871                 /* yy_c_buf_p now points to the character we want to return.
1872                  * If this occurs *before* the EOB characters, then it's a
1873                  * valid NUL; if not, then we've hit the end of the buffer.
1874                  */
1875                 if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
1876                         /* This was really a NUL. */
1877                         *yyg->yy_c_buf_p = '\0';
1878
1879                 else
1880                         { /* need more input */
1881                         int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
1882                         ++yyg->yy_c_buf_p;
1883
1884                         switch ( yy_get_next_buffer( yyscanner ) )
1885                                 {
1886                                 case EOB_ACT_LAST_MATCH:
1887                                         /* This happens because yy_g_n_b()
1888                                          * sees that we've accumulated a
1889                                          * token and flags that we need to
1890                                          * try matching the token before
1891                                          * proceeding.  But for input(),
1892                                          * there's no matching to consider.
1893                                          * So convert the EOB_ACT_LAST_MATCH
1894                                          * to EOB_ACT_END_OF_FILE.
1895                                          */
1896
1897                                         /* Reset buffer status. */
1898                                         ap_expr_yyrestart(yyin ,yyscanner);
1899
1900                                         /*FALLTHROUGH*/
1901
1902                                 case EOB_ACT_END_OF_FILE:
1903                                         {
1904                                         if ( ap_expr_yywrap(yyscanner ) )
1905                                                 return EOF;
1906
1907                                         if ( ! yyg->yy_did_buffer_switch_on_eof )
1908                                                 YY_NEW_FILE;
1909 #ifdef __cplusplus
1910                                         return yyinput(yyscanner);
1911 #else
1912                                         return input(yyscanner);
1913 #endif
1914                                         }
1915
1916                                 case EOB_ACT_CONTINUE_SCAN:
1917                                         yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
1918                                         break;
1919                                 }
1920                         }
1921                 }
1922
1923         c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */
1924         *yyg->yy_c_buf_p = '\0';        /* preserve yytext */
1925         yyg->yy_hold_char = *++yyg->yy_c_buf_p;
1926
1927         return c;
1928 }
1929 #endif  /* ifndef YY_NO_INPUT */
1930
1931 /** Immediately switch to a different input stream.
1932  * @param input_file A readable stream.
1933  * @param yyscanner The scanner object.
1934  * @note This function does not reset the start condition to @c INITIAL .
1935  */
1936     void ap_expr_yyrestart  (FILE * input_file , yyscan_t yyscanner)
1937 {
1938     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1939
1940         if ( ! YY_CURRENT_BUFFER ){
1941         ap_expr_yyensure_buffer_stack (yyscanner);
1942                 YY_CURRENT_BUFFER_LVALUE =
1943             ap_expr_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
1944         }
1945
1946         ap_expr_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
1947         ap_expr_yy_load_buffer_state(yyscanner );
1948 }
1949
1950 /** Switch to a different input buffer.
1951  * @param new_buffer The new input buffer.
1952  * @param yyscanner The scanner object.
1953  */
1954     void ap_expr_yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
1955 {
1956     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1957
1958         /* TODO. We should be able to replace this entire function body
1959          * with
1960          *              ap_expr_yypop_buffer_state();
1961          *              ap_expr_yypush_buffer_state(new_buffer);
1962      */
1963         ap_expr_yyensure_buffer_stack (yyscanner);
1964         if ( YY_CURRENT_BUFFER == new_buffer )
1965                 return;
1966
1967         if ( YY_CURRENT_BUFFER )
1968                 {
1969                 /* Flush out information for old buffer. */
1970                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
1971                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
1972                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
1973                 }
1974
1975         YY_CURRENT_BUFFER_LVALUE = new_buffer;
1976         ap_expr_yy_load_buffer_state(yyscanner );
1977
1978         /* We don't actually know whether we did this switch during
1979          * EOF (ap_expr_yywrap()) processing, but the only time this flag
1980          * is looked at is after ap_expr_yywrap() is called, so it's safe
1981          * to go ahead and always set it.
1982          */
1983         yyg->yy_did_buffer_switch_on_eof = 1;
1984 }
1985
1986 static void ap_expr_yy_load_buffer_state  (yyscan_t yyscanner)
1987 {
1988     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1989         yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1990         yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1991         yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1992         yyg->yy_hold_char = *yyg->yy_c_buf_p;
1993 }
1994
1995 /** Allocate and initialize an input buffer state.
1996  * @param file A readable stream.
1997  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1998  * @param yyscanner The scanner object.
1999  * @return the allocated buffer state.
2000  */
2001     YY_BUFFER_STATE ap_expr_yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
2002 {
2003         YY_BUFFER_STATE b;
2004     
2005         b = (YY_BUFFER_STATE) ap_expr_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2006         if ( ! b )
2007                 YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yy_create_buffer()" );
2008
2009         b->yy_buf_size = size;
2010
2011         /* yy_ch_buf has to be 2 characters longer than the size given because
2012          * we need to put in 2 end-of-buffer characters.
2013          */
2014         b->yy_ch_buf = (char *) ap_expr_yyalloc(b->yy_buf_size + 2 ,yyscanner );
2015         if ( ! b->yy_ch_buf )
2016                 YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yy_create_buffer()" );
2017
2018         b->yy_is_our_buffer = 1;
2019
2020         ap_expr_yy_init_buffer(b,file ,yyscanner);
2021
2022         return b;
2023 }
2024
2025 /** Destroy the buffer.
2026  * @param b a buffer created with ap_expr_yy_create_buffer()
2027  * @param yyscanner The scanner object.
2028  */
2029     void ap_expr_yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2030 {
2031     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2032
2033         if ( ! b )
2034                 return;
2035
2036         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
2037                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
2038
2039         if ( b->yy_is_our_buffer )
2040                 ap_expr_yyfree((void *) b->yy_ch_buf ,yyscanner );
2041
2042         ap_expr_yyfree((void *) b ,yyscanner );
2043 }
2044
2045 /* Initializes or reinitializes a buffer.
2046  * This function is sometimes called more than once on the same buffer,
2047  * such as during a ap_expr_yyrestart() or at EOF.
2048  */
2049     static void ap_expr_yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
2050
2051 {
2052         int oerrno = errno;
2053     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2054
2055         ap_expr_yy_flush_buffer(b ,yyscanner);
2056
2057         b->yy_input_file = file;
2058         b->yy_fill_buffer = 1;
2059
2060     /* If b is the current buffer, then ap_expr_yy_init_buffer was _probably_
2061      * called from ap_expr_yyrestart() or through yy_get_next_buffer.
2062      * In that case, we don't want to reset the lineno or column.
2063      */
2064     if (b != YY_CURRENT_BUFFER){
2065         b->yy_bs_lineno = 1;
2066         b->yy_bs_column = 0;
2067     }
2068
2069         b->yy_is_interactive = 0;
2070     
2071         errno = oerrno;
2072 }
2073
2074 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2075  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2076  * @param yyscanner The scanner object.
2077  */
2078     void ap_expr_yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
2079 {
2080     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2081         if ( ! b )
2082                 return;
2083
2084         b->yy_n_chars = 0;
2085
2086         /* We always need two end-of-buffer characters.  The first causes
2087          * a transition to the end-of-buffer state.  The second causes
2088          * a jam in that state.
2089          */
2090         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2091         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2092
2093         b->yy_buf_pos = &b->yy_ch_buf[0];
2094
2095         b->yy_at_bol = 1;
2096         b->yy_buffer_status = YY_BUFFER_NEW;
2097
2098         if ( b == YY_CURRENT_BUFFER )
2099                 ap_expr_yy_load_buffer_state(yyscanner );
2100 }
2101
2102 /** Pushes the new state onto the stack. The new state becomes
2103  *  the current state. This function will allocate the stack
2104  *  if necessary.
2105  *  @param new_buffer The new state.
2106  *  @param yyscanner The scanner object.
2107  */
2108 void ap_expr_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
2109 {
2110     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2111         if (new_buffer == NULL)
2112                 return;
2113
2114         ap_expr_yyensure_buffer_stack(yyscanner);
2115
2116         /* This block is copied from ap_expr_yy_switch_to_buffer. */
2117         if ( YY_CURRENT_BUFFER )
2118                 {
2119                 /* Flush out information for old buffer. */
2120                 *yyg->yy_c_buf_p = yyg->yy_hold_char;
2121                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
2122                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
2123                 }
2124
2125         /* Only push if top exists. Otherwise, replace top. */
2126         if (YY_CURRENT_BUFFER)
2127                 yyg->yy_buffer_stack_top++;
2128         YY_CURRENT_BUFFER_LVALUE = new_buffer;
2129
2130         /* copied from ap_expr_yy_switch_to_buffer. */
2131         ap_expr_yy_load_buffer_state(yyscanner );
2132         yyg->yy_did_buffer_switch_on_eof = 1;
2133 }
2134
2135 /** Removes and deletes the top of the stack, if present.
2136  *  The next element becomes the new top.
2137  *  @param yyscanner The scanner object.
2138  */
2139 void ap_expr_yypop_buffer_state (yyscan_t yyscanner)
2140 {
2141     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2142         if (!YY_CURRENT_BUFFER)
2143                 return;
2144
2145         ap_expr_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
2146         YY_CURRENT_BUFFER_LVALUE = NULL;
2147         if (yyg->yy_buffer_stack_top > 0)
2148                 --yyg->yy_buffer_stack_top;
2149
2150         if (YY_CURRENT_BUFFER) {
2151                 ap_expr_yy_load_buffer_state(yyscanner );
2152                 yyg->yy_did_buffer_switch_on_eof = 1;
2153         }
2154 }
2155
2156 /* Allocates the stack if it does not exist.
2157  *  Guarantees space for at least one push.
2158  */
2159 static void ap_expr_yyensure_buffer_stack (yyscan_t yyscanner)
2160 {
2161         int num_to_alloc;
2162     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2163
2164         if (!yyg->yy_buffer_stack) {
2165
2166                 /* First allocation is just for 2 elements, since we don't know if this
2167                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
2168                  * immediate realloc on the next call.
2169          */
2170                 num_to_alloc = 1;
2171                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ap_expr_yyalloc
2172                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
2173                                                                 , yyscanner);
2174                 if ( ! yyg->yy_buffer_stack )
2175                         YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yyensure_buffer_stack()" );
2176                                                                   
2177                 memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2178                                 
2179                 yyg->yy_buffer_stack_max = num_to_alloc;
2180                 yyg->yy_buffer_stack_top = 0;
2181                 return;
2182         }
2183
2184         if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
2185
2186                 /* Increase the buffer to prepare for a possible push. */
2187                 int grow_size = 8 /* arbitrary grow size */;
2188
2189                 num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
2190                 yyg->yy_buffer_stack = (struct yy_buffer_state**)ap_expr_yyrealloc
2191                                                                 (yyg->yy_buffer_stack,
2192                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
2193                                                                 , yyscanner);
2194                 if ( ! yyg->yy_buffer_stack )
2195                         YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yyensure_buffer_stack()" );
2196
2197                 /* zero only the new slots.*/
2198                 memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
2199                 yyg->yy_buffer_stack_max = num_to_alloc;
2200         }
2201 }
2202
2203 /** Setup the input buffer state to scan directly from a user-specified character buffer.
2204  * @param base the character buffer
2205  * @param size the size in bytes of the character buffer
2206  * @param yyscanner The scanner object.
2207  * @return the newly allocated buffer state object. 
2208  */
2209 YY_BUFFER_STATE ap_expr_yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
2210 {
2211         YY_BUFFER_STATE b;
2212     
2213         if ( size < 2 ||
2214              base[size-2] != YY_END_OF_BUFFER_CHAR ||
2215              base[size-1] != YY_END_OF_BUFFER_CHAR )
2216                 /* They forgot to leave room for the EOB's. */
2217                 return 0;
2218
2219         b = (YY_BUFFER_STATE) ap_expr_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
2220         if ( ! b )
2221                 YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yy_scan_buffer()" );
2222
2223         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
2224         b->yy_buf_pos = b->yy_ch_buf = base;
2225         b->yy_is_our_buffer = 0;
2226         b->yy_input_file = 0;
2227         b->yy_n_chars = b->yy_buf_size;
2228         b->yy_is_interactive = 0;
2229         b->yy_at_bol = 1;
2230         b->yy_fill_buffer = 0;
2231         b->yy_buffer_status = YY_BUFFER_NEW;
2232
2233         ap_expr_yy_switch_to_buffer(b ,yyscanner );
2234
2235         return b;
2236 }
2237
2238 /** Setup the input buffer state to scan a string. The next call to ap_expr_yylex() will
2239  * scan from a @e copy of @a str.
2240  * @param yystr a NUL-terminated string to scan
2241  * @param yyscanner The scanner object.
2242  * @return the newly allocated buffer state object.
2243  * @note If you want to scan bytes that may contain NUL values, then use
2244  *       ap_expr_yy_scan_bytes() instead.
2245  */
2246 YY_BUFFER_STATE ap_expr_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
2247 {
2248     
2249         return ap_expr_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
2250 }
2251
2252 /** Setup the input buffer state to scan the given bytes. The next call to ap_expr_yylex() will
2253  * scan from a @e copy of @a bytes.
2254  * @param yybytes the byte buffer to scan
2255  * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2256  * @param yyscanner The scanner object.
2257  * @return the newly allocated buffer state object.
2258  */
2259 YY_BUFFER_STATE ap_expr_yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
2260 {
2261         YY_BUFFER_STATE b;
2262         char *buf;
2263         yy_size_t n;
2264         int i;
2265     
2266         /* Get memory for full buffer, including space for trailing EOB's. */
2267         n = _yybytes_len + 2;
2268         buf = (char *) ap_expr_yyalloc(n ,yyscanner );
2269         if ( ! buf )
2270                 YY_FATAL_ERROR( "out of dynamic memory in ap_expr_yy_scan_bytes()" );
2271
2272         for ( i = 0; i < _yybytes_len; ++i )
2273                 buf[i] = yybytes[i];
2274
2275         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2276
2277         b = ap_expr_yy_scan_buffer(buf,n ,yyscanner);
2278         if ( ! b )
2279                 YY_FATAL_ERROR( "bad buffer in ap_expr_yy_scan_bytes()" );
2280
2281         /* It's okay to grow etc. this buffer, and we should throw it
2282          * away when we're done.
2283          */
2284         b->yy_is_our_buffer = 1;
2285
2286         return b;
2287 }
2288
2289     static void yy_push_state (int  new_state , yyscan_t yyscanner)
2290 {
2291     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2292         if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
2293                 {
2294                 yy_size_t new_size;
2295
2296                 yyg->yy_start_stack_depth += YY_START_STACK_INCR;
2297                 new_size = yyg->yy_start_stack_depth * sizeof( int );
2298
2299                 if ( ! yyg->yy_start_stack )
2300                         yyg->yy_start_stack = (int *) ap_expr_yyalloc(new_size ,yyscanner );
2301
2302                 else
2303                         yyg->yy_start_stack = (int *) ap_expr_yyrealloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
2304
2305                 if ( ! yyg->yy_start_stack )
2306                         YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
2307                 }
2308
2309         yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
2310
2311         BEGIN(new_state);
2312 }
2313
2314     static void yy_pop_state  (yyscan_t yyscanner)
2315 {
2316     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2317         if ( --yyg->yy_start_stack_ptr < 0 )
2318                 YY_FATAL_ERROR( "start-condition stack underflow" );
2319
2320         BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
2321 }
2322
2323 #ifndef YY_EXIT_FAILURE
2324 #define YY_EXIT_FAILURE 2
2325 #endif
2326
2327 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
2328 {
2329         (void) fprintf( stderr, "%s\n", msg );
2330         exit( YY_EXIT_FAILURE );
2331 }
2332
2333 /* Redefine yyless() so it works in section 3 code. */
2334
2335 #undef yyless
2336 #define yyless(n) \
2337         do \
2338                 { \
2339                 /* Undo effects of setting up yytext. */ \
2340         int yyless_macro_arg = (n); \
2341         YY_LESS_LINENO(yyless_macro_arg);\
2342                 yytext[yyleng] = yyg->yy_hold_char; \
2343                 yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
2344                 yyg->yy_hold_char = *yyg->yy_c_buf_p; \
2345                 *yyg->yy_c_buf_p = '\0'; \
2346                 yyleng = yyless_macro_arg; \
2347                 } \
2348         while ( 0 )
2349
2350 /* Accessor  methods (get/set functions) to struct members. */
2351
2352 /** Get the user-defined data for this scanner.
2353  * @param yyscanner The scanner object.
2354  */
2355 YY_EXTRA_TYPE ap_expr_yyget_extra  (yyscan_t yyscanner)
2356 {
2357     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2358     return yyextra;
2359 }
2360
2361 /** Get the current line number.
2362  * @param yyscanner The scanner object.
2363  */
2364 int ap_expr_yyget_lineno  (yyscan_t yyscanner)
2365 {
2366     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2367     
2368         if (! YY_CURRENT_BUFFER)
2369             return 0;
2370     
2371     return yylineno;
2372 }
2373
2374 /** Get the current column number.
2375  * @param yyscanner The scanner object.
2376  */
2377
2378 /** Get the input stream.
2379  * @param yyscanner The scanner object.
2380  */
2381 FILE *ap_expr_yyget_in  (yyscan_t yyscanner)
2382 {
2383     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2384     return yyin;
2385 }
2386
2387 /** Get the output stream.
2388  * @param yyscanner The scanner object.
2389  */
2390 FILE *ap_expr_yyget_out  (yyscan_t yyscanner)
2391 {
2392     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2393     return yyout;
2394 }
2395
2396 /** Get the length of the current token.
2397  * @param yyscanner The scanner object.
2398  */
2399 int ap_expr_yyget_leng  (yyscan_t yyscanner)
2400 {
2401     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2402     return yyleng;
2403 }
2404
2405 /** Get the current token.
2406  * @param yyscanner The scanner object.
2407  */
2408
2409 char *ap_expr_yyget_text  (yyscan_t yyscanner)
2410 {
2411     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2412     return yytext;
2413 }
2414
2415 /** Set the user-defined data. This data is never touched by the scanner.
2416  * @param user_defined The data to be associated with this scanner.
2417  * @param yyscanner The scanner object.
2418  */
2419 void ap_expr_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
2420 {
2421     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2422     yyextra = user_defined ;
2423 }
2424
2425 /** Set the current line number.
2426  * @param line_number
2427  * @param yyscanner The scanner object.
2428  */
2429 void ap_expr_yyset_lineno (int  line_number , yyscan_t yyscanner)
2430 {
2431     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2432
2433         /* lineno is only valid if an input buffer exists. */
2434         if (! YY_CURRENT_BUFFER )
2435            yy_fatal_error( "ap_expr_yyset_lineno called with no buffer" , yyscanner); 
2436     
2437     yylineno = line_number;
2438 }
2439
2440 /** Set the current column.
2441  * @param line_number
2442  * @param yyscanner The scanner object.
2443  */
2444
2445 /** Set the input stream. This does not discard the current
2446  * input buffer.
2447  * @param in_str A readable stream.
2448  * @param yyscanner The scanner object.
2449  * @see ap_expr_yy_switch_to_buffer
2450  */
2451 void ap_expr_yyset_in (FILE *  in_str , yyscan_t yyscanner)
2452 {
2453     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2454     yyin = in_str ;
2455 }
2456
2457 void ap_expr_yyset_out (FILE *  out_str , yyscan_t yyscanner)
2458 {
2459     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2460     yyout = out_str ;
2461 }
2462
2463 int ap_expr_yyget_debug  (yyscan_t yyscanner)
2464 {
2465     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2466     return yy_flex_debug;
2467 }
2468
2469 void ap_expr_yyset_debug (int  bdebug , yyscan_t yyscanner)
2470 {
2471     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2472     yy_flex_debug = bdebug ;
2473 }
2474
2475 /* Accessor methods for yylval and yylloc */
2476
2477 YYSTYPE * ap_expr_yyget_lval  (yyscan_t yyscanner)
2478 {
2479     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2480     return yylval;
2481 }
2482
2483 void ap_expr_yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
2484 {
2485     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2486     yylval = yylval_param;
2487 }
2488
2489 /* User-visible API */
2490
2491 /* ap_expr_yylex_init is special because it creates the scanner itself, so it is
2492  * the ONLY reentrant function that doesn't take the scanner as the last argument.
2493  * That's why we explicitly handle the declaration, instead of using our macros.
2494  */
2495
2496 int ap_expr_yylex_init(yyscan_t* ptr_yy_globals)
2497
2498 {
2499     if (ptr_yy_globals == NULL){
2500         errno = EINVAL;
2501         return 1;
2502     }
2503
2504     *ptr_yy_globals = (yyscan_t) ap_expr_yyalloc ( sizeof( struct yyguts_t ), NULL );
2505
2506     if (*ptr_yy_globals == NULL){
2507         errno = ENOMEM;
2508         return 1;
2509     }
2510
2511     /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
2512     memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
2513
2514     return yy_init_globals ( *ptr_yy_globals );
2515 }
2516
2517 /* ap_expr_yylex_init_extra has the same functionality as ap_expr_yylex_init, but follows the
2518  * convention of taking the scanner as the last argument. Note however, that
2519  * this is a *pointer* to a scanner, as it will be allocated by this call (and
2520  * is the reason, too, why this function also must handle its own declaration).
2521  * The user defined value in the first argument will be available to ap_expr_yyalloc in
2522  * the yyextra field.
2523  */
2524
2525 int ap_expr_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
2526
2527 {
2528     struct yyguts_t dummy_yyguts;
2529
2530     ap_expr_yyset_extra (yy_user_defined, &dummy_yyguts);
2531
2532     if (ptr_yy_globals == NULL){
2533         errno = EINVAL;
2534         return 1;
2535     }
2536         
2537     *ptr_yy_globals = (yyscan_t) ap_expr_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
2538         
2539     if (*ptr_yy_globals == NULL){
2540         errno = ENOMEM;
2541         return 1;
2542     }
2543     
2544     /* By setting to 0xAA, we expose bugs in
2545     yy_init_globals. Leave at 0x00 for releases. */
2546     memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
2547     
2548     ap_expr_yyset_extra (yy_user_defined, *ptr_yy_globals);
2549     
2550     return yy_init_globals ( *ptr_yy_globals );
2551 }
2552
2553 static int yy_init_globals (yyscan_t yyscanner)
2554 {
2555     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2556     /* Initialization is the same as for the non-reentrant scanner.
2557      * This function is called from ap_expr_yylex_destroy(), so don't allocate here.
2558      */
2559
2560     yyg->yy_buffer_stack = 0;
2561     yyg->yy_buffer_stack_top = 0;
2562     yyg->yy_buffer_stack_max = 0;
2563     yyg->yy_c_buf_p = (char *) 0;
2564     yyg->yy_init = 0;
2565     yyg->yy_start = 0;
2566
2567     yyg->yy_start_stack_ptr = 0;
2568     yyg->yy_start_stack_depth = 0;
2569     yyg->yy_start_stack =  NULL;
2570
2571 /* Defined in main.c */
2572 #ifdef YY_STDINIT
2573     yyin = stdin;
2574     yyout = stdout;
2575 #else
2576     yyin = (FILE *) 0;
2577     yyout = (FILE *) 0;
2578 #endif
2579
2580     /* For future reference: Set errno on error, since we are called by
2581      * ap_expr_yylex_init()
2582      */
2583     return 0;
2584 }
2585
2586 /* ap_expr_yylex_destroy is for both reentrant and non-reentrant scanners. */
2587 int ap_expr_yylex_destroy  (yyscan_t yyscanner)
2588 {
2589     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2590
2591     /* Pop the buffer stack, destroying each element. */
2592         while(YY_CURRENT_BUFFER){
2593                 ap_expr_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
2594                 YY_CURRENT_BUFFER_LVALUE = NULL;
2595                 ap_expr_yypop_buffer_state(yyscanner);
2596         }
2597
2598         /* Destroy the stack itself. */
2599         ap_expr_yyfree(yyg->yy_buffer_stack ,yyscanner);
2600         yyg->yy_buffer_stack = NULL;
2601
2602     /* Destroy the start condition stack. */
2603         ap_expr_yyfree(yyg->yy_start_stack ,yyscanner );
2604         yyg->yy_start_stack = NULL;
2605
2606     /* Reset the globals. This is important in a non-reentrant scanner so the next time
2607      * ap_expr_yylex() is called, initialization will occur. */
2608     yy_init_globals( yyscanner);
2609
2610     /* Destroy the main struct (reentrant only). */
2611     ap_expr_yyfree ( yyscanner , yyscanner );
2612     yyscanner = NULL;
2613     return 0;
2614 }
2615
2616 /*
2617  * Internal utility routines.
2618  */
2619
2620 #ifndef yytext_ptr
2621 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
2622 {
2623         register int i;
2624         for ( i = 0; i < n; ++i )
2625                 s1[i] = s2[i];
2626 }
2627 #endif
2628
2629 #ifdef YY_NEED_STRLEN
2630 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
2631 {
2632         register int n;
2633         for ( n = 0; s[n]; ++n )
2634                 ;
2635
2636         return n;
2637 }
2638 #endif
2639
2640 void *ap_expr_yyalloc (yy_size_t  size , yyscan_t yyscanner)
2641 {
2642         return (void *) malloc( size );
2643 }
2644
2645 void *ap_expr_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
2646 {
2647         /* The cast to (char *) in the following accommodates both
2648          * implementations that use char* generic pointers, and those
2649          * that use void* generic pointers.  It works with the latter
2650          * because both ANSI C and C++ allow castless assignment from
2651          * any pointer type to void*, and deal with argument conversions
2652          * as though doing an assignment.
2653          */
2654         return (void *) realloc( (char *) ptr, size );
2655 }
2656
2657 void ap_expr_yyfree (void * ptr , yyscan_t yyscanner)
2658 {
2659         free( (char *) ptr );   /* see ap_expr_yyrealloc() for (char *) cast */
2660 }
2661
2662 #define YYTABLES_NAME "yytables"
2663
2664 #line 398 "util_expr_scan.l"
2665
2666
2667
2668
2669