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