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