Apache HTTPD
util_expr_scan.c
Go to the documentation of this file.
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>
44typedef int8_t flex_int8_t;
45typedef uint8_t flex_uint8_t;
46typedef int16_t flex_int16_t;
48typedef int32_t flex_int32_t;
50#else
51typedef signed char flex_int8_t;
52typedef short int flex_int16_t;
53typedef int flex_int32_t;
54typedef unsigned char flex_uint8_t;
55typedef unsigned short int flex_uint16_t;
56typedef 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
125typedef 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
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
206typedef size_t yy_size_t;
207#endif
208
209#ifndef YY_STRUCT_YY_BUFFER_STATE
210#define YY_STRUCT_YY_BUFFER_STATE
212 {
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 */
222
223 /* Number of characters read into yy_ch_buf, not including EOB
224 * characters.
225 */
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 */
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 */
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 */
246
250 /* Whether to try to fill the input buffer when we reach the
251 * end of it.
252 */
254
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
296
300
301#define YY_FLUSH_BUFFER ap_expr_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
302
306
309void 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
340typedef unsigned char YY_CHAR;
341
342typedef int yy_state_type;
343
344#define yytext_ptr yytext_r
345
349static 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. */
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
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
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
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
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
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
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. */
637 {
638
639 /* User-defined. Not touched by flex. */
641
642 /* The rest are the same as the globals declared in the non-reentrant scanner. */
659
662
663 char *yytext_r;
666
668
669 }; /* end struct yyguts_t */
670
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
677int ap_expr_yylex_init (yyscan_t* scanner);
678
680
681/* Accessor methods to globals.
682 These are made visible to non-reentrant scanners for convenience. */
683
685
687
689
691
693
695
697
699
701
703
705
707
708void ap_expr_yyset_lineno (int line_number ,yyscan_t yyscanner );
709
711
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
720extern "C" int ap_expr_yywrap (yyscan_t yyscanner );
721#else
722extern int ap_expr_yywrap (yyscan_t yyscanner );
723#endif
724#endif
725
726#ifndef yytext_ptr
727static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
728#endif
729
730#ifdef YY_NEED_STRLEN
731static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
732#endif
733
734#ifndef YY_NO_INPUT
735
736#ifdef __cplusplus
737static int yyinput (yyscan_t yyscanner );
738#else
739static 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
828extern int ap_expr_yylex \
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
853{
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
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
888
889 if ( !yyg->yy_init )
890 {
891 yyg->yy_init = 1;
892
893#ifdef 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 ) {
910 }
911
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;
929 do
930 {
931 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
933 {
934 yyg->yy_last_accepting_state = yy_current_state;
935 yyg->yy_last_accepting_cpos = yy_cp;
936 }
938 {
940 if ( yy_current_state >= 124 )
941 yy_c = yy_meta[(unsigned int) yy_c];
942 }
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
952
954
955do_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
966case 1:
967/* rule 1 can match eol */
969#line 103 "util_expr_scan.l"
970{
971 /* NOP */
972}
974/*
975 * strings ("..." and '...')
976 */
977case 2:
979#line 110 "util_expr_scan.l"
980{
982 str_del = yytext[0];
983 BEGIN(str);
984 return T_STR_BEGIN;
985}
987case 3:
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
1013case 4:
1014/* rule 4 can match eol */
1016#line 138 "util_expr_scan.l"
1017{
1018 PERROR("Unterminated string or variable");
1019}
1020 YY_BREAK
1021case YY_STATE_EOF(var):
1022case YY_STATE_EOF(vararg):
1023#line 141 "util_expr_scan.l"
1024{
1025 PERROR("Unterminated string or variable");
1026}
1027 YY_BREAK
1028case 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
1043case 5:
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 {
1055 }
1056}
1057 YY_BREAK
1058case 6:
1060#line 168 "util_expr_scan.l"
1061{
1062 PERROR("Bad escape sequence");
1063}
1064 YY_BREAK
1065case 7:
1067#line 171 "util_expr_scan.l"
1068{ STR_APPEND('\n'); }
1069 YY_BREAK
1070case 8:
1072#line 172 "util_expr_scan.l"
1073{ STR_APPEND('\r'); }
1074 YY_BREAK
1075case 9:
1077#line 173 "util_expr_scan.l"
1078{ STR_APPEND('\t'); }
1079 YY_BREAK
1080case 10:
1082#line 174 "util_expr_scan.l"
1083{ STR_APPEND('\b'); }
1084 YY_BREAK
1085case 11:
1087#line 175 "util_expr_scan.l"
1088{ STR_APPEND('\f'); }
1089 YY_BREAK
1090case 12:
1091/* rule 12 can match eol */
1093#line 176 "util_expr_scan.l"
1094{ STR_APPEND(yytext[1]); }
1095 YY_BREAK
1096/* regexp backref inside string/arg */
1097case 13:
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
1115case 14:
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 */
1127case 15:
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 {
1141 return T_VAR_BEGIN;
1142 }
1143}
1144 YY_BREAK
1145case 16:
1147#line 218 "util_expr_scan.l"
1148{
1149 STR_APPEND(yytext[0]);
1150}
1151 YY_BREAK
1152case 17:
1154#line 222 "util_expr_scan.l"
1155{
1156 STR_APPEND(yytext[0]);
1157}
1158 YY_BREAK
1159case 18:
1161#line 226 "util_expr_scan.l"
1162{
1164 return T_VAR_BEGIN;
1165}
1166 YY_BREAK
1167case 19:
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 */
1178case 20:
1180#line 239 "util_expr_scan.l"
1181{
1182 yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
1183 return T_ID;
1184}
1185 YY_BREAK
1186case 21:
1188#line 244 "util_expr_scan.l"
1189{
1191 return T_VAR_END;
1192}
1193 YY_BREAK
1194case 22:
1196#line 249 "util_expr_scan.l"
1197{
1198 BEGIN(vararg);
1199 return yytext[0];
1200}
1201 YY_BREAK
1202case 23:
1203/* rule 23 can match eol */
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
1212case 24:
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 {
1226 return T_VAR_END;
1227 }
1228}
1229 YY_BREAK
1230/*
1231 * Regular Expression
1232 */
1233case 25:
1235#line 278 "util_expr_scan.l"
1236{
1237 regex_del = yytext[1];
1239 BEGIN(regex);
1240}
1241 YY_BREAK
1242case 26:
1244#line 283 "util_expr_scan.l"
1245{
1246 regex_del = yytext[0];
1248 BEGIN(regex);
1249}
1250 YY_BREAK
1251case 27:
1252/* rule 27 can match eol */
1254#line 288 "util_expr_scan.l"
1255{
1256 if (yytext[0] == regex_del) {
1257 *regex_ptr = '\0';
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
1267case 28:
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
1276case 29:
1277/* rule 29 can match eol */
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
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 */
1298case 30:
1300#line 319 "util_expr_scan.l"
1301{ return T_OP_STR_EQ; }
1302 YY_BREAK
1303case 31:
1305#line 320 "util_expr_scan.l"
1306{ return T_OP_STR_NE; }
1307 YY_BREAK
1308case 32:
1310#line 321 "util_expr_scan.l"
1311{ return T_OP_STR_LT; }
1312 YY_BREAK
1313case 33:
1315#line 322 "util_expr_scan.l"
1316{ return T_OP_STR_LE; }
1317 YY_BREAK
1318case 34:
1320#line 323 "util_expr_scan.l"
1321{ return T_OP_STR_GT; }
1322 YY_BREAK
1323case 35:
1325#line 324 "util_expr_scan.l"
1326{ return T_OP_STR_GE; }
1327 YY_BREAK
1328case 36:
1330#line 325 "util_expr_scan.l"
1331{ return T_OP_REG; }
1332 YY_BREAK
1333case 37:
1335#line 326 "util_expr_scan.l"
1336{ return T_OP_NRE; }
1337 YY_BREAK
1338case 38:
1340#line 327 "util_expr_scan.l"
1341{ return T_OP_AND; }
1342 YY_BREAK
1343case 39:
1345#line 328 "util_expr_scan.l"
1346{ return T_OP_AND; }
1347 YY_BREAK
1348case 40:
1350#line 329 "util_expr_scan.l"
1351{ return T_OP_OR; }
1352 YY_BREAK
1353case 41:
1355#line 330 "util_expr_scan.l"
1356{ return T_OP_OR; }
1357 YY_BREAK
1358case 42:
1360#line 331 "util_expr_scan.l"
1361{ return T_OP_NOT; }
1362 YY_BREAK
1363case 43:
1365#line 332 "util_expr_scan.l"
1366{ return T_OP_NOT; }
1367 YY_BREAK
1368case 44:
1370#line 333 "util_expr_scan.l"
1371{ return T_OP_CONCAT; }
1372 YY_BREAK
1373case 45:
1375#line 334 "util_expr_scan.l"
1376{ return T_OP_IN; }
1377 YY_BREAK
1378case 46:
1380#line 335 "util_expr_scan.l"
1381{ return T_OP_EQ; }
1382 YY_BREAK
1383case 47:
1385#line 336 "util_expr_scan.l"
1386{ return T_OP_NE; }
1387 YY_BREAK
1388case 48:
1390#line 337 "util_expr_scan.l"
1391{ return T_OP_GE; }
1392 YY_BREAK
1393case 49:
1395#line 338 "util_expr_scan.l"
1396{ return T_OP_LE; }
1397 YY_BREAK
1398case 50:
1400#line 339 "util_expr_scan.l"
1401{ return T_OP_GT; }
1402 YY_BREAK
1403case 51:
1405#line 340 "util_expr_scan.l"
1406{ return T_OP_LT; }
1407 YY_BREAK
1408/* for compatibility with ssl_expr */
1409case 52:
1411#line 343 "util_expr_scan.l"
1412{ return T_OP_LT; }
1413 YY_BREAK
1414case 53:
1416#line 344 "util_expr_scan.l"
1417{ return T_OP_LE; }
1418 YY_BREAK
1419case 54:
1421#line 345 "util_expr_scan.l"
1422{ return T_OP_GT; }
1423 YY_BREAK
1424case 55:
1426#line 346 "util_expr_scan.l"
1427{ return T_OP_GE; }
1428 YY_BREAK
1429case 56:
1431#line 347 "util_expr_scan.l"
1432{ return T_OP_NE; }
1433 YY_BREAK
1434case 57:
1436#line 348 "util_expr_scan.l"
1437{ return T_OP_EQ; }
1438 YY_BREAK
1439case 58:
1441#line 349 "util_expr_scan.l"
1442{ return T_OP_IN; }
1443 YY_BREAK
1444case 59:
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
1452case 60:
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 */
1463case 61:
1465#line 364 "util_expr_scan.l"
1466{ return T_TRUE; }
1467 YY_BREAK
1468case 62:
1470#line 365 "util_expr_scan.l"
1471{ return T_FALSE; }
1472 YY_BREAK
1473/*
1474 * Digits
1475 */
1476case 63:
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 */
1487case 64:
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 */
1498case 65:
1500#line 386 "util_expr_scan.l"
1501{
1502 return yytext[0];
1503}
1504 YY_BREAK
1505/*
1506 * Anything else is an error
1507 */
1508case 66:
1509/* rule 66 can match eol */
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
1517case 67:
1519#line 398 "util_expr_scan.l"
1520YY_FATAL_ERROR( "flex scanner jammed" );
1521 YY_BREAK
1522#line 1523 "util_expr_scan.c"
1523case YY_STATE_EOF(INITIAL):
1524case 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;
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. */
1562
1563 yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
1564
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
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;
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 {
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
1616 goto do_action;
1617 }
1618
1619 else
1620 {
1621 if ( ! yyg->yy_did_buffer_switch_on_eof )
1623 }
1624 break;
1625 }
1626
1628 yyg->yy_c_buf_p =
1629 yyg->yytext_ptr + yy_amount_of_matched_text;
1630
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
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:
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 */
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] )
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 */
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 )
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
1753
1754 /* Read in more data. */
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 {
1767 }
1768
1769 else
1770 {
1772 YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1774 }
1775 }
1776
1777 else
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
1800{
1802 register char *yy_cp;
1803 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
1804
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);
1811 {
1812 yyg->yy_last_accepting_state = yy_current_state;
1813 yyg->yy_last_accepting_cpos = yy_cp;
1814 }
1816 {
1818 if ( yy_current_state >= 124 )
1819 yy_c = yy_meta[(unsigned int) yy_c];
1820 }
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 */
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;
1840 {
1841 yyg->yy_last_accepting_state = yy_current_state;
1842 yyg->yy_last_accepting_cpos = yy_cp;
1843 }
1845 {
1847 if ( yy_current_state >= 124 )
1848 yy_c = yy_meta[(unsigned int) yy_c];
1849 }
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. */
1899
1900 /*FALLTHROUGH*/
1901
1903 {
1904 if ( ap_expr_yywrap(yyscanner ) )
1905 return EOF;
1906
1907 if ( ! yyg->yy_did_buffer_switch_on_eof )
1909#ifdef __cplusplus
1910 return yyinput(yyscanner);
1911#else
1912 return input(yyscanner);
1913#endif
1914 }
1915
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
1949
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 */
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
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
1987{
1988 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
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
2002{
2004
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
2021
2022 return b;
2023}
2024
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. */
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 */
2050
2051{
2052 int oerrno = errno;
2053 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2054
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
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 )
2100}
2101
2109{
2110 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2111 if (new_buffer == NULL)
2112 return;
2113
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. */
2127 yyg->yy_buffer_stack_top++;
2129
2130 /* copied from ap_expr_yy_switch_to_buffer. */
2132 yyg->yy_did_buffer_switch_on_eof = 1;
2133}
2134
2140{
2141 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2142 if (!YY_CURRENT_BUFFER)
2143 return;
2144
2147 if (yyg->yy_buffer_stack_top > 0)
2148 --yyg->yy_buffer_stack_top;
2149
2150 if (YY_CURRENT_BUFFER) {
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 */
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;
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
2210{
2212
2213 if ( size < 2 ||
2216 /* They forgot to leave room for the EOB's. */
2217 return 0;
2218
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
2234
2235 return b;
2236}
2237
2251
2260{
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
2276
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
2290{
2291 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2292 if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
2293 {
2295
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
2312}
2313
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
2327static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
2328{
2329 (void) fprintf( stderr, "%s\n", msg );
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
2356{
2357 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2358 return yyextra;
2359}
2360
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
2382{
2383 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2384 return yyin;
2385}
2386
2391{
2392 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2393 return yyout;
2394}
2395
2400{
2401 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2402 return yyleng;
2403}
2404
2410{
2411 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2412 return yytext;
2413}
2414
2424
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
2452{
2453 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2454 yyin = in_str ;
2455}
2456
2458{
2459 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2460 yyout = out_str ;
2461}
2462
2464{
2465 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2466 return yy_flex_debug;
2467}
2468
2470{
2471 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2473}
2474
2475/* Accessor methods for yylval and yylloc */
2476
2478{
2479 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2480 return yylval;
2481}
2482
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
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
2526
2527{
2528 struct yyguts_t dummy_yyguts;
2529
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
2549
2550 return yy_init_globals ( *ptr_yy_globals );
2551}
2552
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. */
2588{
2589 struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
2590
2591 /* Pop the buffer stack, destroying each element. */
2592 while(YY_CURRENT_BUFFER){
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. */
2609
2610 /* Destroy the main struct (reentrant only). */
2612 yyscanner = NULL;
2613 return 0;
2614}
2615
2616/*
2617 * Internal utility routines.
2618 */
2619
2620#ifndef yytext_ptr
2621static 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
2630static 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
2641{
2642 return (void *) malloc( size );
2643}
2644
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
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
int n
Definition ap_regex.h:278
const char apr_size_t len
Definition ap_regex.h:187
ap_conf_vector_t * base
#define MAX_STRING_LEN
Definition httpd.h:300
const unsigned char * buf
Definition util_md5.h:50
#define AP_EXPR_FLAG_STRING_RESULT
Definition ap_expr.h:68
apr_size_t size
const char * input
Definition apr_cstr.h:93
apr_seek_where_t apr_off_t * offset
const char apr_file_t * file
apr_array_header_t ** result
apr_vformatter_buff_t * c
Definition apr_lib.h:175
apr_sockaddr_t apr_sockaddr_t apr_sockaddr_t * source
apr_pool_t * b
Definition apr_pools.h:529
const void apr_size_t bytes
Definition apr_random.h:91
const char * s
Definition apr_strings.h:95
return NULL
Definition mod_so.c:359
int i
Definition mod_so.c:347
yy_size_t yy_buf_size
flex_int32_t yy_verify
flex_int32_t yy_nxt
FILE * yyin_r
int yy_did_buffer_switch_on_eof
int yy_start_stack_depth
FILE * yyout_r
size_t yy_buffer_stack_max
char * yy_last_accepting_cpos
YYSTYPE * yylval_r
int yy_flex_debug_r
ap_expr_parse_ctx_t * yyextra_r
yy_state_type yy_last_accepting_state
char * yy_c_buf_p
YY_BUFFER_STATE * yy_buffer_stack
int yy_start_stack_ptr
char yy_hold_char
char * yytext_r
int * yy_start_stack
size_t yy_buffer_stack_top
@ T_OP_STR_NE
@ T_OP_CONCAT
@ T_OP_STR_GE
@ T_OP_STR_LT
@ T_REGEX
@ T_STR_END
@ T_OP_IN
@ T_OP_STR_LE
@ T_STRING
@ T_OP_STR_EQ
@ T_EXPR_BOOL
@ T_OP_REG
@ T_OP_EQ
@ T_TRUE
@ T_VAR_BEGIN
@ T_OP_UNARY
@ T_ID
@ T_OP_NE
@ T_OP_OR
@ T_OP_NOT
@ T_OP_STR_GT
@ T_OP_BINARY
@ T_REGEX_I
@ T_OP_LE
@ T_OP_GE
@ T_OP_GT
@ T_OP_NRE
@ T_FALSE
@ T_DIGIT
@ T_EXPR_STRING
@ T_VAR_END
@ T_OP_LT
@ T_OP_AND
@ T_STR_BEGIN
@ T_REGEX_BACKREF
#define yyscanner
static void ap_expr_yyensure_buffer_stack(yyscan_t yyscanner)
#define YY_NEW_FILE
YY_BUFFER_STATE ap_expr_yy_create_buffer(FILE *file, int size, yyscan_t yyscanner)
static void yy_push_state(int new_state, yyscan_t yyscanner)
void ap_expr_yyset_lval(YYSTYPE *yylval_param, yyscan_t yyscanner)
void * ap_expr_yyrealloc(void *, yy_size_t, yyscan_t yyscanner)
void ap_expr_yyset_extra(ap_expr_parse_ctx_t *user_defined, yyscan_t yyscanner)
#define yytext
unsigned char flex_uint8_t
YY_BUFFER_STATE ap_expr_yy_scan_buffer(char *base, yy_size_t size, yyscan_t yyscanner)
#define str_buf
void * yyscan_t
void ap_expr_yyset_lineno(int line_number, yyscan_t yyscanner)
#define var
#define regex_flags
void ap_expr_yy_switch_to_buffer(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
unsigned char YY_CHAR
#define str_ptr
static int yy_init_globals(yyscan_t yyscanner)
#define YY_START_STACK_INCR
#define YY_EXTRA_TYPE
int ap_expr_yylex(YYSTYPE *yylval_param, yyscan_t yyscanner)
static int yy_get_next_buffer(yyscan_t yyscanner)
short int flex_int16_t
int ap_expr_yylex_init_extra(ap_expr_parse_ctx_t *user_defined, yyscan_t *scanner)
#define yy_flex_debug
YY_BUFFER_STATE ap_expr_yy_scan_bytes(char *bytes, int len, yyscan_t yyscanner)
static flex_int32_t yy_ec[256]
static flex_int32_t yy_meta[44]
unsigned int flex_uint32_t
FILE * ap_expr_yyget_in(yyscan_t yyscanner)
static void yy_fatal_error(char msg[], yyscan_t yyscanner)
static yy_state_type yy_try_NUL_trans(yy_state_type current_state, yyscan_t yyscanner)
static void ap_expr_yy_init_buffer(YY_BUFFER_STATE b, FILE *file, yyscan_t yyscanner)
#define YY_BREAK
void * ap_expr_yyalloc(yy_size_t, yyscan_t yyscanner)
static void ap_expr_yy_load_buffer_state(yyscan_t yyscanner)
#define str_del
static flex_int16_t yy_def[133]
void ap_expr_yypop_buffer_state(yyscan_t yyscanner)
struct yy_buffer_state * YY_BUFFER_STATE
#define yyout
ap_expr_parse_ctx_t * ap_expr_yyget_extra(yyscan_t yyscanner)
void ap_expr_yy_delete_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
#define YY_BUFFER_NEW
#define YY_RESTORE_YY_MORE_OFFSET
#define PERROR(msg)
#define YY_BUFFER_NORMAL
static void yy_pop_state(yyscan_t yyscanner)
#define YY_MORE_ADJ
#define vararg
#define YY_RULE_SETUP
int ap_expr_yyget_leng(yyscan_t yyscanner)
#define yyextra
char * ap_expr_yyget_text(yyscan_t yyscanner)
void ap_expr_yyset_in(FILE *in_str, yyscan_t yyscanner)
#define yylval
FILE * ap_expr_yyget_out(yyscan_t yyscanner)
signed char flex_int8_t
static flex_int16_t yy_chk[319]
#define EOB_ACT_END_OF_FILE
#define YY_CURRENT_BUFFER_LVALUE
int flex_int32_t
void ap_expr_yyfree(void *, yyscan_t yyscanner)
#define YY_START
void ap_expr_yypush_buffer_state(YY_BUFFER_STATE new_buffer, yyscan_t yyscanner)
#define str
int ap_expr_yyget_debug(yyscan_t yyscanner)
#define STR_APPEND(c)
int yy_state_type
#define YY_CURRENT_BUFFER
#define yyconst
#define INITIAL
#define yyin
#define YY_READ_BUF_SIZE
#define YY_INPUT(buf, result, max_size)
int ap_expr_yyget_lineno(yyscan_t yyscanner)
#define YY_END_OF_BUFFER
#define YY_STATE_EOF(state)
#define BEGIN
#define YY_END_OF_BUFFER_CHAR
#define YY_FATAL_ERROR(msg)
#define yyterminate()
unsigned short int flex_uint16_t
#define ap_expr_yywrap(n)
#define YY_DO_BEFORE_ACTION
int ap_expr_yylex_init(yyscan_t *scanner)
YYSTYPE * ap_expr_yyget_lval(yyscan_t yyscanner)
#define EOB_ACT_LAST_MATCH
void ap_expr_yy_flush_buffer(YY_BUFFER_STATE b, yyscan_t yyscanner)
size_t yy_size_t
void ap_expr_yyset_debug(int debug_flag, yyscan_t yyscanner)
#define YY_BUFFER_EOF_PENDING
#define yylineno
int ap_expr_yylex_destroy(yyscan_t yyscanner)
#define EOB_ACT_CONTINUE_SCAN
void ap_expr_yyrestart(FILE *input_file, yyscan_t yyscanner)
#define regex
#define YY_DECL
#define yyless(n)
#define YY_BUF_SIZE
#define YY_EXIT_FAILURE
static flex_int16_t yy_base[133]
static yy_state_type yy_get_previous_state(yyscan_t yyscanner)
static flex_int16_t yy_accept[124]
#define YY_SC_TO_UI(c)
static flex_int16_t yy_nxt[319]
YY_BUFFER_STATE ap_expr_yy_scan_string(char *yy_str, yyscan_t yyscanner)
#define yyleng
void ap_expr_yyset_out(FILE *out_str, yyscan_t yyscanner)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray