1#line 2 "scan-code.c"
2
3#line 4 "scan-code.c"
4
5#define  YY_INT_ALIGNED short int
6
7/* A lexical scanner generated by flex */
8
9/* %not-for-header */
10
11/* %if-c-only */
12/* %if-not-reentrant */
13#define yy_create_buffer code__create_buffer
14#define yy_delete_buffer code__delete_buffer
15#define yy_flex_debug code__flex_debug
16#define yy_init_buffer code__init_buffer
17#define yy_flush_buffer code__flush_buffer
18#define yy_load_buffer_state code__load_buffer_state
19#define yy_switch_to_buffer code__switch_to_buffer
20#define yyin code_in
21#define yyleng code_leng
22#define yylex code_lex
23#define yylineno code_lineno
24#define yyout code_out
25#define yyrestart code_restart
26#define yytext code_text
27#define yywrap code_wrap
28#define yyalloc code_alloc
29#define yyrealloc code_realloc
30#define yyfree code_free
31
32/* %endif */
33/* %endif */
34/* %ok-for-header */
35
36#define FLEX_SCANNER
37#define YY_FLEX_MAJOR_VERSION 2
38#define YY_FLEX_MINOR_VERSION 5
39#define YY_FLEX_SUBMINOR_VERSION 37
40#if YY_FLEX_SUBMINOR_VERSION > 0
41#define FLEX_BETA
42#endif
43
44/* %if-c++-only */
45/* %endif */
46
47/* %if-c-only */
48
49/* %endif */
50
51/* %if-c-only */
52
53/* %endif */
54
55/* First, we deal with  platform-specific or compiler-specific issues. */
56
57/* begin standard C headers. */
58/* %if-c-only */
59#include <stdio.h>
60#include <string.h>
61#include <errno.h>
62#include <stdlib.h>
63/* %endif */
64
65/* %if-tables-serialization */
66/* %endif */
67/* end standard C headers. */
68
69/* %if-c-or-c++ */
70/* flex integer type definitions */
71
72#ifndef FLEXINT_H
73#define FLEXINT_H
74
75/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
76
77#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
78
79/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
80 * if you want the limit (max/min) macros for int types.
81 */
82#ifndef __STDC_LIMIT_MACROS
83#define __STDC_LIMIT_MACROS 1
84#endif
85
86#include <inttypes.h>
87typedef int8_t flex_int8_t;
88typedef uint8_t flex_uint8_t;
89typedef int16_t flex_int16_t;
90typedef uint16_t flex_uint16_t;
91typedef int32_t flex_int32_t;
92typedef uint32_t flex_uint32_t;
93#else
94typedef signed char flex_int8_t;
95typedef short int flex_int16_t;
96typedef int flex_int32_t;
97typedef unsigned char flex_uint8_t;
98typedef unsigned short int flex_uint16_t;
99typedef unsigned int flex_uint32_t;
100
101/* Limits of integral types. */
102#ifndef INT8_MIN
103#define INT8_MIN               (-128)
104#endif
105#ifndef INT16_MIN
106#define INT16_MIN              (-32767-1)
107#endif
108#ifndef INT32_MIN
109#define INT32_MIN              (-2147483647-1)
110#endif
111#ifndef INT8_MAX
112#define INT8_MAX               (127)
113#endif
114#ifndef INT16_MAX
115#define INT16_MAX              (32767)
116#endif
117#ifndef INT32_MAX
118#define INT32_MAX              (2147483647)
119#endif
120#ifndef UINT8_MAX
121#define UINT8_MAX              (255U)
122#endif
123#ifndef UINT16_MAX
124#define UINT16_MAX             (65535U)
125#endif
126#ifndef UINT32_MAX
127#define UINT32_MAX             (4294967295U)
128#endif
129
130#endif /* ! C99 */
131
132#endif /* ! FLEXINT_H */
133
134/* %endif */
135
136/* %if-c++-only */
137/* %endif */
138
139#ifdef __cplusplus
140
141/* The "const" storage-class-modifier is valid. */
142#define YY_USE_CONST
143
144#else	/* ! __cplusplus */
145
146/* C99 requires __STDC__ to be defined as 1. */
147#if defined (__STDC__)
148
149#define YY_USE_CONST
150
151#endif	/* defined (__STDC__) */
152#endif	/* ! __cplusplus */
153
154#ifdef YY_USE_CONST
155#define yyconst const
156#else
157#define yyconst
158#endif
159
160/* %not-for-header */
161
162/* Returned upon end-of-file. */
163#define YY_NULL 0
164/* %ok-for-header */
165
166/* %not-for-header */
167
168/* Promotes a possibly negative, possibly signed char to an unsigned
169 * integer for use as an array index.  If the signed char is negative,
170 * we want to instead treat it as an 8-bit unsigned char, hence the
171 * double cast.
172 */
173#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
174/* %ok-for-header */
175
176/* %if-reentrant */
177/* %endif */
178
179/* %if-not-reentrant */
180
181/* %endif */
182
183/* Enter a start condition.  This macro really ought to take a parameter,
184 * but we do it the disgusting crufty way forced on us by the ()-less
185 * definition of BEGIN.
186 */
187#define BEGIN (yy_start) = 1 + 2 *
188
189/* Translate the current start state into a value that can be later handed
190 * to BEGIN to return to the state.  The YYSTATE alias is for lex
191 * compatibility.
192 */
193#define YY_START (((yy_start) - 1) / 2)
194#define YYSTATE YY_START
195
196/* Action number for EOF rule of a given start state. */
197#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
198
199/* Special action meaning "start processing a new file". */
200#define YY_NEW_FILE code_restart(code_in  )
201
202#define YY_END_OF_BUFFER_CHAR 0
203
204/* Size of default input buffer. */
205#ifndef YY_BUF_SIZE
206#define YY_BUF_SIZE 16384
207#endif
208
209/* The state buf must be large enough to hold one state per character in the main buffer.
210 */
211#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
212
213#ifndef YY_TYPEDEF_YY_BUFFER_STATE
214#define YY_TYPEDEF_YY_BUFFER_STATE
215typedef struct yy_buffer_state *YY_BUFFER_STATE;
216#endif
217
218#ifndef YY_TYPEDEF_YY_SIZE_T
219#define YY_TYPEDEF_YY_SIZE_T
220typedef size_t yy_size_t;
221#endif
222
223/* %if-not-reentrant */
224extern yy_size_t code_leng;
225/* %endif */
226
227/* %if-c-only */
228/* %if-not-reentrant */
229extern FILE *code_in, *code_out;
230/* %endif */
231/* %endif */
232
233#define EOB_ACT_CONTINUE_SCAN 0
234#define EOB_ACT_END_OF_FILE 1
235#define EOB_ACT_LAST_MATCH 2
236
237    #define YY_LESS_LINENO(n)
238
239/* Return all but the first "n" matched characters back to the input stream. */
240#define yyless(n) \
241	do \
242		{ \
243		/* Undo effects of setting up code_text. */ \
244        int yyless_macro_arg = (n); \
245        YY_LESS_LINENO(yyless_macro_arg);\
246		*yy_cp = (yy_hold_char); \
247		YY_RESTORE_YY_MORE_OFFSET \
248		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
249		YY_DO_BEFORE_ACTION; /* set up code_text again */ \
250		} \
251	while ( 0 )
252
253#define unput(c) yyunput( c, (yytext_ptr)  )
254
255#ifndef YY_STRUCT_YY_BUFFER_STATE
256#define YY_STRUCT_YY_BUFFER_STATE
257struct yy_buffer_state
258	{
259/* %if-c-only */
260	FILE *yy_input_file;
261/* %endif */
262
263/* %if-c++-only */
264/* %endif */
265
266	char *yy_ch_buf;		/* input buffer */
267	char *yy_buf_pos;		/* current position in input buffer */
268
269	/* Size of input buffer in bytes, not including room for EOB
270	 * characters.
271	 */
272	yy_size_t yy_buf_size;
273
274	/* Number of characters read into yy_ch_buf, not including EOB
275	 * characters.
276	 */
277	yy_size_t yy_n_chars;
278
279	/* Whether we "own" the buffer - i.e., we know we created it,
280	 * and can realloc() it to grow it, and should free() it to
281	 * delete it.
282	 */
283	int yy_is_our_buffer;
284
285	/* Whether this is an "interactive" input source; if so, and
286	 * if we're using stdio for input, then we want to use getc()
287	 * instead of fread(), to make sure we stop fetching input after
288	 * each newline.
289	 */
290	int yy_is_interactive;
291
292	/* Whether we're considered to be at the beginning of a line.
293	 * If so, '^' rules will be active on the next match, otherwise
294	 * not.
295	 */
296	int yy_at_bol;
297
298    int yy_bs_lineno; /**< The line count. */
299    int yy_bs_column; /**< The column count. */
300
301	/* Whether to try to fill the input buffer when we reach the
302	 * end of it.
303	 */
304	int yy_fill_buffer;
305
306	int yy_buffer_status;
307
308#define YY_BUFFER_NEW 0
309#define YY_BUFFER_NORMAL 1
310	/* When an EOF's been seen but there's still some text to process
311	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
312	 * shouldn't try reading from the input source any more.  We might
313	 * still have a bunch of tokens to match, though, because of
314	 * possible backing-up.
315	 *
316	 * When we actually see the EOF, we change the status to "new"
317	 * (via code_restart()), so that the user can continue scanning by
318	 * just pointing code_in at a new input file.
319	 */
320#define YY_BUFFER_EOF_PENDING 2
321
322	};
323#endif /* !YY_STRUCT_YY_BUFFER_STATE */
324
325/* %if-c-only Standard (non-C++) definition */
326/* %not-for-header */
327
328/* %if-not-reentrant */
329
330/* Stack of input buffers. */
331static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
332static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
333static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
334/* %endif */
335/* %ok-for-header */
336
337/* %endif */
338
339/* We provide macros for accessing buffer states in case in the
340 * future we want to put the buffer states in a more general
341 * "scanner state".
342 *
343 * Returns the top of the stack, or NULL.
344 */
345#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
346                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
347                          : NULL)
348
349/* Same as previous macro, but useful when we know that the buffer stack is not
350 * NULL or when we need an lvalue. For internal use only.
351 */
352#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
353
354/* %if-c-only Standard (non-C++) definition */
355
356/* %if-not-reentrant */
357/* %not-for-header */
358
359/* yy_hold_char holds the character lost when code_text is formed. */
360static char yy_hold_char;
361static yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
362yy_size_t code_leng;
363
364/* Points to current character in buffer. */
365static char *yy_c_buf_p = (char *) 0;
366static int yy_init = 0;		/* whether we need to initialize */
367static int yy_start = 0;	/* start state number */
368
369/* Flag which is used to allow code_wrap()'s to do buffer switches
370 * instead of setting up a fresh code_in.  A bit of a hack ...
371 */
372static int yy_did_buffer_switch_on_eof;
373/* %ok-for-header */
374
375/* %endif */
376
377void code_restart (FILE *input_file  );
378void code__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
379YY_BUFFER_STATE code__create_buffer (FILE *file,int size  );
380void code__delete_buffer (YY_BUFFER_STATE b  );
381void code__flush_buffer (YY_BUFFER_STATE b  );
382void code_push_buffer_state (YY_BUFFER_STATE new_buffer  );
383void code_pop_buffer_state (void );
384
385static void code_ensure_buffer_stack (void );
386static void code__load_buffer_state (void );
387static void code__init_buffer (YY_BUFFER_STATE b,FILE *file  );
388
389#define YY_FLUSH_BUFFER code__flush_buffer(YY_CURRENT_BUFFER )
390
391YY_BUFFER_STATE code__scan_buffer (char *base,yy_size_t size  );
392YY_BUFFER_STATE code__scan_string (yyconst char *yy_str  );
393YY_BUFFER_STATE code__scan_bytes (yyconst char *bytes,yy_size_t len  );
394
395/* %endif */
396
397void *code_alloc (yy_size_t  );
398void *code_realloc (void *,yy_size_t  );
399void code_free (void *  );
400
401#define yy_new_buffer code__create_buffer
402
403#define yy_set_interactive(is_interactive) \
404	{ \
405	if ( ! YY_CURRENT_BUFFER ){ \
406        code_ensure_buffer_stack (); \
407		YY_CURRENT_BUFFER_LVALUE =    \
408            code__create_buffer(code_in,YY_BUF_SIZE ); \
409	} \
410	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
411	}
412
413#define yy_set_bol(at_bol) \
414	{ \
415	if ( ! YY_CURRENT_BUFFER ){\
416        code_ensure_buffer_stack (); \
417		YY_CURRENT_BUFFER_LVALUE =    \
418            code__create_buffer(code_in,YY_BUF_SIZE ); \
419	} \
420	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
421	}
422
423#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
424
425/* %% [1.0] code_text/code_in/code_out/yy_state_type/code_lineno etc. def's & init go here */
426/* Begin user sect3 */
427
428#define code_wrap() 1
429#define YY_SKIP_YYWRAP
430
431#define FLEX_DEBUG
432
433typedef unsigned char YY_CHAR;
434
435FILE *code_in = (FILE *) 0, *code_out = (FILE *) 0;
436
437typedef int yy_state_type;
438
439extern int code_lineno;
440
441int code_lineno = 1;
442
443extern char *code_text;
444#define yytext_ptr code_text
445
446/* %if-c-only Standard (non-C++) definition */
447
448static yy_state_type yy_get_previous_state (void );
449static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
450static int yy_get_next_buffer (void );
451static void yy_fatal_error (yyconst char msg[]  );
452
453/* %endif */
454
455/* Done after the current pattern has been matched and before the
456 * corresponding action - sets up code_text.
457 */
458#define YY_DO_BEFORE_ACTION \
459	(yytext_ptr) = yy_bp; \
460/* %% [2.0] code to fiddle code_text and code_leng for yymore() goes here \ */\
461	code_leng = (size_t) (yy_cp - yy_bp); \
462	(yy_hold_char) = *yy_cp; \
463	*yy_cp = '\0'; \
464/* %% [3.0] code to copy yytext_ptr to code_text[] goes here, if %array \ */\
465	(yy_c_buf_p) = yy_cp;
466
467/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
468#define YY_NUM_RULES 29
469#define YY_END_OF_BUFFER 30
470/* This struct is not used in this scanner,
471   but its presence is necessary. */
472struct yy_trans_info
473	{
474	flex_int32_t yy_verify;
475	flex_int32_t yy_nxt;
476	};
477static yyconst flex_int16_t yy_accept[101] =
478    {   0,
479        0,    0,    0,    0,    3,    3,    4,    4,    4,    4,
480       19,   19,    0,    0,   30,   28,   27,   28,    2,   28,
481        6,   28,    5,   24,   21,   20,   20,    8,   18,   11,
482        7,   24,   15,   11,   23,   23,   12,   24,   16,   17,
483        8,   11,    7,   28,   11,   12,    1,    0,    0,    3,
484        4,    4,    4,    4,   13,    0,   13,   13,    0,    0,
485        9,   10,    0,   14,    0,   14,   14,    0,   23,   23,
486        0,   19,   25,    0,   26,    0,    0,    0,    0,    0,
487        0,    0,   13,    0,    0,    0,    0,   14,    0,   23,
488        0,    0,    0,    0,    0,   23,    0,   23,   22,    0
489
490    } ;
491
492static yyconst flex_int32_t yy_ec[256] =
493    {   0,
494        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
495        4,    2,    5,    1,    1,    1,    1,    1,    1,    1,
496        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
497        1,    2,    1,    6,    7,    8,    1,    1,    9,    1,
498        1,   10,    1,    1,   11,   12,   13,   14,   14,   14,
499       14,   14,   14,   14,   14,   14,   14,    1,   15,   16,
500        1,   17,    1,   18,   19,   20,   20,   20,   20,   21,
501       20,   20,   22,   20,   20,   23,   20,   20,   20,   20,
502       20,   20,   20,   20,   20,   20,   20,   20,   24,   20,
503       25,   26,   27,    1,   20,    1,   20,   20,   20,   20,
504
505       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
506       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
507       20,   20,   28,    1,   29,    1,    1,    1,    1,    1,
508        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
509        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
510        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
511        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
512        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
513        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
514        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
515
516        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
517        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
518        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
519        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
520        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
521        1,    1,    1,    1,    1
522    } ;
523
524static yyconst flex_int32_t yy_meta[31] =
525    {   0,
526        1,    1,    2,    1,    1,    1,    1,    3,    1,    1,
527        4,    5,    1,    6,    1,    1,    2,    1,    7,    7,
528        7,    7,    7,    7,    3,    1,    8,    1,    1,    2
529    } ;
530
531static yyconst flex_int16_t yy_base[113] =
532    {   0,
533        0,    1,   21,   41,   66,    0,    4,    8,   12,   14,
534       93,    0,  118,    0,  242,  243,  243,    7,  243,    0,
535      243,   39,  243,  243,  243,  243,  243,  243,  243,  138,
536      243,   34,  243,   42,    0,  217,  243,   33,  243,  243,
537      243,    8,  243,   44,  232,  243,  243,   59,   69,  213,
538      243,   73,  212,   76,  243,  223,    0,  222,    0,    0,
539      243,  243,   79,  243,  205,    0,  202,    0,    0,  188,
540       83,  175,  243,    0,  243,   86,   19,  126,  130,  135,
541      138,  122,    0,  151,  140,  162,  143,    0,  128,  132,
542      168,  130,  128,  108,   37,   36,   47,   29,    0,  243,
543
544      172,  180,  186,  188,  192,  199,  203,  207,  210,  217,
545      222,  227
546    } ;
547
548static yyconst flex_int16_t yy_def[113] =
549    {   0,
550      101,  101,  101,  101,  101,    5,    5,    5,    5,    5,
551      100,   11,  101,   13,  100,  100,  100,  100,  100,  100,
552      100,  102,  100,  100,  100,  100,  100,  100,  100,  100,
553      100,  100,  100,  103,  104,  104,  100,  100,  100,  100,
554      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
555      100,  100,  100,  100,  100,  100,  105,  100,  106,  107,
556      100,  100,  100,  100,  100,  108,  100,  109,  104,  104,
557      100,  100,  100,  110,  100,  100,  100,  100,  100,  100,
558      100,  102,  105,  106,  111,  100,  100,  108,  112,  104,
559      100,  110,   30,  111,  112,  104,  100,  104,  104,    0,
560
561      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
562      100,  100
563    } ;
564
565static yyconst flex_int16_t yy_nxt[274] =
566    {   0,
567      100,   49,   50,   49,  100,  100,   16,   17,   17,   21,
568       16,  100,  100,   21,   16,   73,   16,   17,   17,   47,
569       23,  100,   23,   74,   17,   17,   17,   17,   17,   22,
570       18,   47,   48,   22,   71,   72,   71,   22,   17,   22,
571       52,   53,   52,   61,   48,   17,   62,   17,   17,   64,
572       18,   99,   65,   61,   73,   67,   62,   98,   17,   63,
573       76,   77,   76,   64,   54,   17,   68,   17,   19,   63,
574       49,   50,   49,   17,   79,   53,   79,   81,   82,   81,
575       86,   87,   86,   17,   71,   72,   71,   76,   77,   76,
576       17,   20,   17,   24,   25,   26,   24,   27,   28,   29,
577
578       30,   31,   24,   24,   24,   32,   24,   33,   24,   24,
579       34,   35,   35,   35,   35,   35,   36,   37,   38,   37,
580       39,   40,   24,   41,  100,   42,   43,   49,   50,   49,
581       44,   79,   53,   79,   55,   45,   79,   53,   79,   81,
582       82,   81,   46,  100,   46,   55,   97,   54,   56,   57,
583       96,   58,   61,   59,   64,   62,   57,   57,   57,   57,
584       57,   57,   60,   86,   87,   86,   55,   93,   63,   71,
585       72,   71,   16,   16,   16,   16,   16,   16,   16,   16,
586       51,   51,   51,   51,   51,   51,   51,   51,   66,   66,
587       66,   66,   66,   69,   69,   83,   83,   83,   83,   84,
588
589       91,   84,   84,   84,   84,   84,   84,   85,   90,   85,
590       88,   88,   88,   88,   89,   67,   89,   92,   67,   92,
591       92,   92,   92,   92,   92,   94,   94,   94,   94,   94,
592       95,   95,   95,   95,   95,   58,   58,   80,   78,   75,
593       70,  100,   15,  100,  100,  100,  100,  100,  100,  100,
594      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
595      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
596      100,  100,  100
597    } ;
598
599static yyconst flex_int16_t yy_chk[274] =
600    {   0,
601        0,   20,   20,   20,    0,    0,    7,    1,    2,    7,
602        8,    0,    0,    8,    9,   42,   10,    1,    2,   18,
603        9,    0,   10,   42,    1,    2,    1,    2,    3,    7,
604        3,   77,   18,    8,   38,   38,   38,    9,    3,   10,
605       22,   22,   22,   32,   77,    3,   32,    3,    4,   34,
606        4,   98,   34,   44,   97,   34,   44,   96,    4,   32,
607       48,   48,   48,   95,   22,    4,   34,    4,    5,   44,
608       49,   49,   49,    5,   52,   52,   52,   54,   54,   54,
609       63,   63,   63,    5,   71,   71,   71,   76,   76,   76,
610        5,    5,    5,   11,   11,   11,   11,   11,   11,   11,
611
612       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
613       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
614       11,   11,   11,   13,   82,   13,   13,   78,   78,   78,
615       13,   79,   79,   79,   94,   13,   80,   80,   80,   81,
616       81,   81,   13,   93,   13,   30,   92,   82,   30,   30,
617       90,   30,   87,   30,   89,   87,   30,   30,   30,   30,
618       30,   30,   30,   86,   86,   86,   85,   84,   87,   91,
619       91,   91,  101,  101,  101,  101,  101,  101,  101,  101,
620      102,  102,  102,  102,  102,  102,  102,  102,  103,  103,
621      103,  103,  103,  104,  104,  105,  105,  105,  105,  106,
622
623       72,  106,  106,  106,  106,  106,  106,  107,   70,  107,
624      108,  108,  108,  108,  109,   67,  109,  110,   65,  110,
625      110,  110,  110,  110,  110,  111,  111,  111,  111,  111,
626      112,  112,  112,  112,  112,   58,   56,   53,   50,   45,
627       36,   15,  100,  100,  100,  100,  100,  100,  100,  100,
628      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
629      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
630      100,  100,  100
631    } ;
632
633static yy_state_type yy_last_accepting_state;
634static char *yy_last_accepting_cpos;
635
636extern int code__flex_debug;
637int code__flex_debug = 1;
638
639static yyconst flex_int16_t yy_rule_linenum[29] =
640    {   0,
641      132,  142,  143,  153,  158,  163,  169,  174,  179,  183,
642      187,  192,  200,  207,  215,  216,  217,  244,  246,  247,
643      248,  252,  260,  262,  267,  275,  285,  288
644    } ;
645
646/* The intent behind this definition is that it'll catch
647 * any uses of REJECT which flex missed.
648 */
649#define REJECT reject_used_but_not_detected
650#define yymore() yymore_used_but_not_detected
651#define YY_MORE_ADJ 0
652#define YY_RESTORE_YY_MORE_OFFSET
653char *code_text;
654#line 1 "scan-code.l"
655/* Bison Action Scanner                             -*- C -*-
656
657   Copyright (C) 2006-2012 Free Software Foundation, Inc.
658
659   This file is part of Bison, the GNU Compiler Compiler.
660
661   This program is free software: you can redistribute it and/or modify
662   it under the terms of the GNU General Public License as published by
663   the Free Software Foundation, either version 3 of the License, or
664   (at your option) any later version.
665
666   This program is distributed in the hope that it will be useful,
667   but WITHOUT ANY WARRANTY; without even the implied warranty of
668   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
669   GNU General Public License for more details.
670
671   You should have received a copy of the GNU General Public License
672   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
673#define YY_NO_INPUT 1
674#line 24 "scan-code.l"
675/* Work around a bug in flex 2.5.31.  See Debian bug 333231
676   <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>.  */
677#undef code_wrap
678#define code_wrap() 1
679
680#define FLEX_PREFIX(Id) code_ ## Id
681#include "flex-scanner.h"
682
683#include "complain.h"
684#include "reader.h"
685#include "getargs.h"
686#include "scan-code.h"
687#include "symlist.h"
688
689#include <c-ctype.h>
690#include <get-errno.h>
691#include <quote.h>
692
693/* The current calling start condition: SC_RULE_ACTION or
694   SC_SYMBOL_ACTION. */
695# define YY_DECL static char *code_lex (code_props *self, int sc_context)
696YY_DECL;
697
698#define YY_USER_ACTION  location_compute (loc, &loc->end, code_text, code_leng);
699
700static char *fetch_type_name (char *cp, char const **type_name,
701                              location dollar_loc);
702
703static void handle_action_dollar (symbol_list *rule, char *cp,
704				  location dollar_loc);
705static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
706
707/* A string to be pushed to obstack after dollar/at has been handled. */
708static char *ref_tail_fields;
709
710static location the_location;
711static location *loc = &the_location;
712
713/* A string representing the most recent translation.  */
714static char *last_string;
715
716/* True if an untyped $$ or $n was seen.  */
717static bool untyped_var_seen;
718
719/* C and C++ comments in code. */
720
721/* Strings and characters in code. */
722
723/* Whether in a rule or symbol action.  Specifies the translation
724of $ and @.  */
725
726/* POSIX says that a tag must be both an id and a C union member, but
727   historically almost any character is allowed in a tag.  We disallow
728   NUL and newline, as this simplifies our implementation.  */
729/* Zero or more instances of backslash-newline.  Following GCC, allow
730   white space between the backslash and the newline.  */
731/* C style identifier. Must start with letter. Will be used for
732   named symbol references. Shall be kept synchronized with
733   scan-gram.l "letter" and "id". */
734#line 735 "scan-code.c"
735
736#define INITIAL 0
737#define SC_COMMENT 1
738#define SC_LINE_COMMENT 2
739#define SC_STRING 3
740#define SC_CHARACTER 4
741#define SC_RULE_ACTION 5
742#define SC_SYMBOL_ACTION 6
743
744#ifndef YY_NO_UNISTD_H
745/* Special case for "unistd.h", since it is non-ANSI. We include it way
746 * down here because we want the user's section 1 to have been scanned first.
747 * The user has a chance to override it with an option.
748 */
749/* %if-c-only */
750#include <unistd.h>
751/* %endif */
752/* %if-c++-only */
753/* %endif */
754#endif
755
756#ifndef YY_EXTRA_TYPE
757#define YY_EXTRA_TYPE void *
758#endif
759
760/* %if-c-only Reentrant structure and macros (non-C++). */
761/* %if-reentrant */
762/* %if-c-only */
763
764static int yy_init_globals (void );
765
766/* %endif */
767/* %if-reentrant */
768/* %endif */
769/* %endif End reentrant structures and macros. */
770
771/* Accessor methods to globals.
772   These are made visible to non-reentrant scanners for convenience. */
773
774int code_lex_destroy (void );
775
776int code_get_debug (void );
777
778void code_set_debug (int debug_flag  );
779
780YY_EXTRA_TYPE code_get_extra (void );
781
782void code_set_extra (YY_EXTRA_TYPE user_defined  );
783
784FILE *code_get_in (void );
785
786void code_set_in  (FILE * in_str  );
787
788FILE *code_get_out (void );
789
790void code_set_out  (FILE * out_str  );
791
792yy_size_t code_get_leng (void );
793
794char *code_get_text (void );
795
796int code_get_lineno (void );
797
798void code_set_lineno (int line_number  );
799
800/* %if-bison-bridge */
801/* %endif */
802
803/* Macros after this point can all be overridden by user definitions in
804 * section 1.
805 */
806
807#ifndef YY_SKIP_YYWRAP
808#ifdef __cplusplus
809extern "C" int code_wrap (void );
810#else
811extern int code_wrap (void );
812#endif
813#endif
814
815/* %not-for-header */
816
817/* %ok-for-header */
818
819/* %endif */
820
821#ifndef yytext_ptr
822static void yy_flex_strncpy (char *,yyconst char *,int );
823#endif
824
825#ifdef YY_NEED_STRLEN
826static int yy_flex_strlen (yyconst char * );
827#endif
828
829#ifndef YY_NO_INPUT
830/* %if-c-only Standard (non-C++) definition */
831/* %not-for-header */
832
833#ifdef __cplusplus
834static int yyinput (void );
835#else
836static int input (void );
837#endif
838/* %ok-for-header */
839
840/* %endif */
841#endif
842
843/* %if-c-only */
844
845/* %endif */
846
847/* Amount of stuff to slurp up with each read. */
848#ifndef YY_READ_BUF_SIZE
849#define YY_READ_BUF_SIZE 8192
850#endif
851
852/* Copy whatever the last rule matched to the standard output. */
853#ifndef ECHO
854/* %if-c-only Standard (non-C++) definition */
855/* This used to be an fputs(), but since the string might contain NUL's,
856 * we now use fwrite().
857 */
858#define ECHO do { if (fwrite( code_text, code_leng, 1, code_out )) {} } while (0)
859/* %endif */
860/* %if-c++-only C++ definition */
861/* %endif */
862#endif
863
864/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
865 * is returned in "result".
866 */
867#ifndef YY_INPUT
868#define YY_INPUT(buf,result,max_size) \
869/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\
870	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
871		{ \
872		int c = '*'; \
873		size_t n; \
874		for ( n = 0; n < max_size && \
875			     (c = getc( code_in )) != EOF && c != '\n'; ++n ) \
876			buf[n] = (char) c; \
877		if ( c == '\n' ) \
878			buf[n++] = (char) c; \
879		if ( c == EOF && ferror( code_in ) ) \
880			YY_FATAL_ERROR( "input in flex scanner failed" ); \
881		result = n; \
882		} \
883	else \
884		{ \
885		errno=0; \
886		while ( (result = fread(buf, 1, max_size, code_in))==0 && ferror(code_in)) \
887			{ \
888			if( errno != EINTR) \
889				{ \
890				YY_FATAL_ERROR( "input in flex scanner failed" ); \
891				break; \
892				} \
893			errno=0; \
894			clearerr(code_in); \
895			} \
896		}\
897\
898/* %if-c++-only C++ definition \ */\
899/* %endif */
900
901#endif
902
903/* No semi-colon after return; correct usage is to write "yyterminate();" -
904 * we don't want an extra ';' after the "return" because that will cause
905 * some compilers to complain about unreachable statements.
906 */
907#ifndef yyterminate
908#define yyterminate() return YY_NULL
909#endif
910
911/* Number of entries by which start-condition stack grows. */
912#ifndef YY_START_STACK_INCR
913#define YY_START_STACK_INCR 25
914#endif
915
916/* Report a fatal error. */
917#ifndef YY_FATAL_ERROR
918/* %if-c-only */
919#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
920/* %endif */
921/* %if-c++-only */
922/* %endif */
923#endif
924
925/* %if-tables-serialization structures and prototypes */
926/* %not-for-header */
927
928/* %ok-for-header */
929
930/* %not-for-header */
931
932/* %tables-yydmap generated elements */
933/* %endif */
934/* end tables serialization structures and prototypes */
935
936/* %ok-for-header */
937
938/* Default declaration of generated scanner - a define so the user can
939 * easily add parameters.
940 */
941#ifndef YY_DECL
942#define YY_DECL_IS_OURS 1
943/* %if-c-only Standard (non-C++) definition */
944
945extern int code_lex (void);
946
947#define YY_DECL int code_lex (void)
948/* %endif */
949/* %if-c++-only C++ definition */
950/* %endif */
951#endif /* !YY_DECL */
952
953/* Code executed at the beginning of each rule, after code_text and code_leng
954 * have been set up.
955 */
956#ifndef YY_USER_ACTION
957#define YY_USER_ACTION
958#endif
959
960/* Code executed at the end of each rule. */
961#ifndef YY_BREAK
962#define YY_BREAK break;
963#endif
964
965/* %% [6.0] YY_RULE_SETUP definition goes here */
966#define YY_RULE_SETUP \
967	YY_USER_ACTION
968
969/* %not-for-header */
970
971/** The main scanner function which does all the work.
972 */
973YY_DECL
974{
975	register yy_state_type yy_current_state;
976	register char *yy_cp, *yy_bp;
977	register int yy_act;
978
979/* %% [7.0] user's declarations go here */
980#line 94 "scan-code.l"
981
982
983
984  /* Nesting level of the current code in braces.  */
985  int braces_level = 0;
986
987  /* Whether a semicolon is probably needed.
988
989     The heuristic is that a semicolon is not needed after '{', '}',
990     ';', or a C preprocessor directive, and that whitespaces and
991     comments do not affect this flag.  Note that '{' does not need a
992     semicolon because of '{}'.  A semicolon may be needed before a
993     cpp directive, but don't bother.
994
995     While it is maintained in several start-conditions (factoring
996     opportunities), it is meaningful only for SC_RULE_ACTION. */
997  bool need_semicolon = false;
998
999  /* Whether in a C preprocessor directive.  Don't use a start condition
1000     for this because, at the end of strings and comments, we still need
1001     to know whether we're in a directive.  */
1002  bool in_cpp = false;
1003
1004  /* This scanner is special: it is invoked only once, henceforth
1005     is expected to return only once.  This initialization is
1006     therefore done once per action to translate. */
1007  aver (sc_context == SC_SYMBOL_ACTION
1008	|| sc_context == SC_RULE_ACTION
1009	|| sc_context == INITIAL);
1010  BEGIN sc_context;
1011
1012
1013  /*------------------------------------------------------------.
1014  | Scanning a C comment.  The initial '/ *' is already eaten.  |
1015  `------------------------------------------------------------*/
1016
1017#line 1018 "scan-code.c"
1018
1019	if ( !(yy_init) )
1020		{
1021		(yy_init) = 1;
1022
1023#ifdef YY_USER_INIT
1024		YY_USER_INIT;
1025#endif
1026
1027		if ( ! (yy_start) )
1028			(yy_start) = 1;	/* first start state */
1029
1030		if ( ! code_in )
1031/* %if-c-only */
1032			code_in = stdin;
1033/* %endif */
1034/* %if-c++-only */
1035/* %endif */
1036
1037		if ( ! code_out )
1038/* %if-c-only */
1039			code_out = stdout;
1040/* %endif */
1041/* %if-c++-only */
1042/* %endif */
1043
1044		if ( ! YY_CURRENT_BUFFER ) {
1045			code_ensure_buffer_stack ();
1046			YY_CURRENT_BUFFER_LVALUE =
1047				code__create_buffer(code_in,YY_BUF_SIZE );
1048		}
1049
1050		code__load_buffer_state( );
1051		}
1052
1053	while ( 1 )		/* loops until end-of-file is reached */
1054		{
1055/* %% [8.0] yymore()-related code goes here */
1056		yy_cp = (yy_c_buf_p);
1057
1058		/* Support of code_text. */
1059		*yy_cp = (yy_hold_char);
1060
1061		/* yy_bp points to the position in yy_ch_buf of the start of
1062		 * the current run.
1063		 */
1064		yy_bp = yy_cp;
1065
1066/* %% [9.0] code to set up and find next match goes here */
1067		yy_current_state = (yy_start);
1068yy_match:
1069		do
1070			{
1071			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
1072			if ( yy_accept[yy_current_state] )
1073				{
1074				(yy_last_accepting_state) = yy_current_state;
1075				(yy_last_accepting_cpos) = yy_cp;
1076				}
1077			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1078				{
1079				yy_current_state = (int) yy_def[yy_current_state];
1080				if ( yy_current_state >= 101 )
1081					yy_c = yy_meta[(unsigned int) yy_c];
1082				}
1083			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1084			++yy_cp;
1085			}
1086		while ( yy_current_state != 100 );
1087		yy_cp = (yy_last_accepting_cpos);
1088		yy_current_state = (yy_last_accepting_state);
1089
1090yy_find_action:
1091/* %% [10.0] code to find the action number goes here */
1092		yy_act = yy_accept[yy_current_state];
1093
1094		YY_DO_BEFORE_ACTION;
1095
1096/* %% [11.0] code for code_lineno update goes here */
1097
1098do_action:	/* This label is used only to access EOF actions. */
1099
1100/* %% [12.0] debug code goes here */
1101		if ( code__flex_debug )
1102			{
1103			if ( yy_act == 0 )
1104				fprintf( stderr, "--scanner backing up\n" );
1105			else if ( yy_act < 29 )
1106				fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
1107				         (long)yy_rule_linenum[yy_act], code_text );
1108			else if ( yy_act == 29 )
1109				fprintf( stderr, "--accepting default rule (\"%s\")\n",
1110				         code_text );
1111			else if ( yy_act == 30 )
1112				fprintf( stderr, "--(end of buffer or a NUL)\n" );
1113			else
1114				fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
1115			}
1116
1117		switch ( yy_act )
1118	{ /* beginning of action switch */
1119/* %% [13.0] actions go here */
1120			case 0: /* must back up */
1121			/* undo the effects of YY_DO_BEFORE_ACTION */
1122			*yy_cp = (yy_hold_char);
1123			yy_cp = (yy_last_accepting_cpos);
1124			yy_current_state = (yy_last_accepting_state);
1125			goto yy_find_action;
1126
1127case 1:
1128/* rule 1 can match eol */
1129YY_RULE_SETUP
1130#line 132 "scan-code.l"
1131STRING_GROW; BEGIN sc_context;
1132	YY_BREAK
1133
1134/*--------------------------------------------------------------.
1135  | Scanning a line comment.  The initial '//' is already eaten.  |
1136  `--------------------------------------------------------------*/
1137
1138
1139case 2:
1140/* rule 2 can match eol */
1141YY_RULE_SETUP
1142#line 142 "scan-code.l"
1143STRING_GROW; BEGIN sc_context;
1144	YY_BREAK
1145case 3:
1146/* rule 3 can match eol */
1147YY_RULE_SETUP
1148#line 143 "scan-code.l"
1149STRING_GROW;
1150	YY_BREAK
1151
1152/*--------------------------------------------.
1153  | Scanning user-code characters and strings.  |
1154  `--------------------------------------------*/
1155
1156
1157case 4:
1158/* rule 4 can match eol */
1159YY_RULE_SETUP
1160#line 153 "scan-code.l"
1161STRING_GROW;
1162	YY_BREAK
1163
1164
1165
1166case 5:
1167YY_RULE_SETUP
1168#line 158 "scan-code.l"
1169STRING_GROW; BEGIN sc_context;
1170	YY_BREAK
1171
1172
1173
1174case 6:
1175YY_RULE_SETUP
1176#line 163 "scan-code.l"
1177STRING_GROW; BEGIN sc_context;
1178	YY_BREAK
1179
1180
1181
1182case 7:
1183YY_RULE_SETUP
1184#line 169 "scan-code.l"
1185{
1186    STRING_GROW;
1187    BEGIN SC_CHARACTER;
1188    need_semicolon = true;
1189  }
1190	YY_BREAK
1191case 8:
1192YY_RULE_SETUP
1193#line 174 "scan-code.l"
1194{
1195    STRING_GROW;
1196    BEGIN SC_STRING;
1197    need_semicolon = true;
1198  }
1199	YY_BREAK
1200case 9:
1201/* rule 9 can match eol */
1202YY_RULE_SETUP
1203#line 179 "scan-code.l"
1204{
1205    STRING_GROW;
1206    BEGIN SC_COMMENT;
1207  }
1208	YY_BREAK
1209case 10:
1210/* rule 10 can match eol */
1211YY_RULE_SETUP
1212#line 183 "scan-code.l"
1213{
1214    STRING_GROW;
1215    BEGIN SC_LINE_COMMENT;
1216  }
1217	YY_BREAK
1218case 11:
1219YY_RULE_SETUP
1220#line 187 "scan-code.l"
1221{
1222    warn_at (*loc, _("stray '%s'"), code_text);
1223    obstack_escape (&obstack_for_string, code_text);
1224    need_semicolon = true;
1225  }
1226	YY_BREAK
1227case 12:
1228YY_RULE_SETUP
1229#line 192 "scan-code.l"
1230{
1231    obstack_escape (&obstack_for_string, code_text);
1232    need_semicolon = true;
1233  }
1234	YY_BREAK
1235
1236
1237
1238case 13:
1239YY_RULE_SETUP
1240#line 200 "scan-code.l"
1241{
1242    ref_tail_fields = NULL;
1243    handle_action_dollar (self->rule, code_text, *loc);
1244    if (ref_tail_fields)
1245      obstack_sgrow (&obstack_for_string, ref_tail_fields);
1246    need_semicolon = true;
1247  }
1248	YY_BREAK
1249case 14:
1250YY_RULE_SETUP
1251#line 207 "scan-code.l"
1252{
1253    ref_tail_fields = NULL;
1254    handle_action_at (self->rule, code_text, *loc);
1255    if (ref_tail_fields)
1256      obstack_sgrow (&obstack_for_string, ref_tail_fields);
1257    need_semicolon = true;
1258  }
1259	YY_BREAK
1260case 15:
1261YY_RULE_SETUP
1262#line 215 "scan-code.l"
1263STRING_GROW;                 need_semicolon = false;
1264	YY_BREAK
1265case 16:
1266YY_RULE_SETUP
1267#line 216 "scan-code.l"
1268STRING_GROW; ++braces_level; need_semicolon = false;
1269	YY_BREAK
1270case 17:
1271YY_RULE_SETUP
1272#line 217 "scan-code.l"
1273{
1274    bool outer_brace = --braces_level == 0;
1275
1276    /* As an undocumented Bison extension, append ';' before the last
1277       brace in braced code, so that the user code can omit trailing
1278       ';'.  But do not append ';' if emulating Yacc, since Yacc does
1279       not append one.  This is deprecated since release 2.4.1.  */
1280    if (outer_brace && !yacc_flag && language_prio == default_prio
1281        && skeleton_prio == default_prio && need_semicolon && ! in_cpp)
1282      {
1283        unsigned int indent = 0;
1284        warn_at_indent (*loc, &indent,
1285                       _("a ';' might be needed at the end of action code"));
1286        indent += SUB_INDENT;
1287        warn_at_indent (*loc, &indent,
1288                       _("future versions of Bison will not add the ';'"));
1289        obstack_1grow (&obstack_for_string, ';');
1290      }
1291
1292    STRING_GROW;
1293    need_semicolon = false;
1294  }
1295	YY_BREAK
1296/* Preprocessing directives should only be recognized at the beginning
1297     of lines, allowing whitespace including comments, but in C/C++,
1298     '#' can only be the start of preprocessor directives or within
1299     '#define' directives anyway, so don't bother with begin of line.  */
1300case 18:
1301YY_RULE_SETUP
1302#line 244 "scan-code.l"
1303STRING_GROW; in_cpp = true;
1304	YY_BREAK
1305case 19:
1306/* rule 19 can match eol */
1307YY_RULE_SETUP
1308#line 246 "scan-code.l"
1309STRING_GROW;
1310	YY_BREAK
1311case 20:
1312/* rule 20 can match eol */
1313YY_RULE_SETUP
1314#line 247 "scan-code.l"
1315STRING_GROW; if (in_cpp) in_cpp = need_semicolon = false;
1316	YY_BREAK
1317case 21:
1318YY_RULE_SETUP
1319#line 248 "scan-code.l"
1320STRING_GROW;
1321	YY_BREAK
1322/* YYFAIL is undocumented and was formally deprecated in Bison
1323     2.4.2.  */
1324case 22:
1325YY_RULE_SETUP
1326#line 252 "scan-code.l"
1327{
1328    STRING_GROW; need_semicolon = true;
1329    warn_at (*loc, _("use of YYFAIL, which is deprecated and will be"
1330                     " removed"));
1331  }
1332	YY_BREAK
1333/* The sole purpose of this is to make sure identifiers that merely
1334     contain YYFAIL don't produce the above warning.  */
1335case 23:
1336YY_RULE_SETUP
1337#line 260 "scan-code.l"
1338STRING_GROW; need_semicolon = true;
1339	YY_BREAK
1340case 24:
1341YY_RULE_SETUP
1342#line 262 "scan-code.l"
1343STRING_GROW; need_semicolon = true;
1344	YY_BREAK
1345
1346
1347
1348case 25:
1349YY_RULE_SETUP
1350#line 267 "scan-code.l"
1351{
1352    const char *type_name = NULL;
1353    fetch_type_name (code_text + 1, &type_name, *loc)[-1] = 0;
1354    obstack_sgrow (&obstack_for_string, "]b4_dollar_dollar(");
1355    obstack_quote (&obstack_for_string, type_name);
1356    obstack_sgrow (&obstack_for_string, ")[");
1357    self->is_value_used = true;
1358  }
1359	YY_BREAK
1360case 26:
1361YY_RULE_SETUP
1362#line 275 "scan-code.l"
1363{
1364    obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
1365    locations_flag = true;
1366  }
1367	YY_BREAK
1368
1369
1370
1371/* Escape M4 quoting characters in C code.  */
1372case 27:
1373YY_RULE_SETUP
1374#line 285 "scan-code.l"
1375obstack_escape (&obstack_for_string, code_text);
1376	YY_BREAK
1377/* By default, grow the string obstack with the input.  */
1378case 28:
1379/* rule 28 can match eol */
1380YY_RULE_SETUP
1381#line 288 "scan-code.l"
1382STRING_GROW;
1383	YY_BREAK
1384/* End of processing. */
1385case YY_STATE_EOF(INITIAL):
1386case YY_STATE_EOF(SC_COMMENT):
1387case YY_STATE_EOF(SC_LINE_COMMENT):
1388case YY_STATE_EOF(SC_STRING):
1389case YY_STATE_EOF(SC_CHARACTER):
1390case YY_STATE_EOF(SC_RULE_ACTION):
1391case YY_STATE_EOF(SC_SYMBOL_ACTION):
1392#line 291 "scan-code.l"
1393STRING_FINISH; return last_string;
1394	YY_BREAK
1395
1396case 29:
1397YY_RULE_SETUP
1398#line 294 "scan-code.l"
1399YY_FATAL_ERROR( "flex scanner jammed" );
1400	YY_BREAK
1401#line 1402 "scan-code.c"
1402
1403	case YY_END_OF_BUFFER:
1404		{
1405		/* Amount of text matched not including the EOB char. */
1406		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
1407
1408		/* Undo the effects of YY_DO_BEFORE_ACTION. */
1409		*yy_cp = (yy_hold_char);
1410		YY_RESTORE_YY_MORE_OFFSET
1411
1412		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
1413			{
1414			/* We're scanning a new file or input source.  It's
1415			 * possible that this happened because the user
1416			 * just pointed code_in at a new source and called
1417			 * code_lex().  If so, then we have to assure
1418			 * consistency between YY_CURRENT_BUFFER and our
1419			 * globals.  Here is the right place to do so, because
1420			 * this is the first action (other than possibly a
1421			 * back-up) that will match for the new input source.
1422			 */
1423			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1424			YY_CURRENT_BUFFER_LVALUE->yy_input_file = code_in;
1425			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
1426			}
1427
1428		/* Note that here we test for yy_c_buf_p "<=" to the position
1429		 * of the first EOB in the buffer, since yy_c_buf_p will
1430		 * already have been incremented past the NUL character
1431		 * (since all states make transitions on EOB to the
1432		 * end-of-buffer state).  Contrast this with the test
1433		 * in input().
1434		 */
1435		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1436			{ /* This was really a NUL. */
1437			yy_state_type yy_next_state;
1438
1439			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
1440
1441			yy_current_state = yy_get_previous_state(  );
1442
1443			/* Okay, we're now positioned to make the NUL
1444			 * transition.  We couldn't have
1445			 * yy_get_previous_state() go ahead and do it
1446			 * for us because it doesn't know how to deal
1447			 * with the possibility of jamming (and we don't
1448			 * want to build jamming into it because then it
1449			 * will run more slowly).
1450			 */
1451
1452			yy_next_state = yy_try_NUL_trans( yy_current_state );
1453
1454			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1455
1456			if ( yy_next_state )
1457				{
1458				/* Consume the NUL. */
1459				yy_cp = ++(yy_c_buf_p);
1460				yy_current_state = yy_next_state;
1461				goto yy_match;
1462				}
1463
1464			else
1465				{
1466/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */
1467				yy_cp = (yy_last_accepting_cpos);
1468				yy_current_state = (yy_last_accepting_state);
1469				goto yy_find_action;
1470				}
1471			}
1472
1473		else switch ( yy_get_next_buffer(  ) )
1474			{
1475			case EOB_ACT_END_OF_FILE:
1476				{
1477				(yy_did_buffer_switch_on_eof) = 0;
1478
1479				if ( code_wrap( ) )
1480					{
1481					/* Note: because we've taken care in
1482					 * yy_get_next_buffer() to have set up
1483					 * code_text, we can now set up
1484					 * yy_c_buf_p so that if some total
1485					 * hoser (like flex itself) wants to
1486					 * call the scanner after we return the
1487					 * YY_NULL, it'll still work - another
1488					 * YY_NULL will get returned.
1489					 */
1490					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
1491
1492					yy_act = YY_STATE_EOF(YY_START);
1493					goto do_action;
1494					}
1495
1496				else
1497					{
1498					if ( ! (yy_did_buffer_switch_on_eof) )
1499						YY_NEW_FILE;
1500					}
1501				break;
1502				}
1503
1504			case EOB_ACT_CONTINUE_SCAN:
1505				(yy_c_buf_p) =
1506					(yytext_ptr) + yy_amount_of_matched_text;
1507
1508				yy_current_state = yy_get_previous_state(  );
1509
1510				yy_cp = (yy_c_buf_p);
1511				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1512				goto yy_match;
1513
1514			case EOB_ACT_LAST_MATCH:
1515				(yy_c_buf_p) =
1516				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
1517
1518				yy_current_state = yy_get_previous_state(  );
1519
1520				yy_cp = (yy_c_buf_p);
1521				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
1522				goto yy_find_action;
1523			}
1524		break;
1525		}
1526
1527	default:
1528		YY_FATAL_ERROR(
1529			"fatal flex scanner internal error--no action found" );
1530	} /* end of action switch */
1531		} /* end of scanning one token */
1532} /* end of code_lex */
1533/* %ok-for-header */
1534
1535/* %if-c++-only */
1536/* %not-for-header */
1537
1538/* %ok-for-header */
1539
1540/* %endif */
1541
1542/* yy_get_next_buffer - try to read in a new buffer
1543 *
1544 * Returns a code representing an action:
1545 *	EOB_ACT_LAST_MATCH -
1546 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
1547 *	EOB_ACT_END_OF_FILE - end of file
1548 */
1549/* %if-c-only */
1550static int yy_get_next_buffer (void)
1551/* %endif */
1552/* %if-c++-only */
1553/* %endif */
1554{
1555    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
1556	register char *source = (yytext_ptr);
1557	register int number_to_move, i;
1558	int ret_val;
1559
1560	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
1561		YY_FATAL_ERROR(
1562		"fatal flex scanner internal error--end of buffer missed" );
1563
1564	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
1565		{ /* Don't try to fill the buffer, so this is an EOF. */
1566		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
1567			{
1568			/* We matched a single character, the EOB, so
1569			 * treat this as a final EOF.
1570			 */
1571			return EOB_ACT_END_OF_FILE;
1572			}
1573
1574		else
1575			{
1576			/* We matched some text prior to the EOB, first
1577			 * process it.
1578			 */
1579			return EOB_ACT_LAST_MATCH;
1580			}
1581		}
1582
1583	/* Try to read more data. */
1584
1585	/* First move last chars to start of buffer. */
1586	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
1587
1588	for ( i = 0; i < number_to_move; ++i )
1589		*(dest++) = *(source++);
1590
1591	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
1592		/* don't do the read, it's not guaranteed to return an EOF,
1593		 * just force an EOF
1594		 */
1595		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
1596
1597	else
1598		{
1599			yy_size_t num_to_read =
1600			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
1601
1602		while ( num_to_read <= 0 )
1603			{ /* Not enough room in the buffer - grow it. */
1604
1605			/* just a shorter name for the current buffer */
1606			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
1607
1608			int yy_c_buf_p_offset =
1609				(int) ((yy_c_buf_p) - b->yy_ch_buf);
1610
1611			if ( b->yy_is_our_buffer )
1612				{
1613				yy_size_t new_size = b->yy_buf_size * 2;
1614
1615				if ( new_size <= 0 )
1616					b->yy_buf_size += b->yy_buf_size / 8;
1617				else
1618					b->yy_buf_size *= 2;
1619
1620				b->yy_ch_buf = (char *)
1621					/* Include room in for 2 EOB chars. */
1622					code_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
1623				}
1624			else
1625				/* Can't grow it, we don't own it. */
1626				b->yy_ch_buf = 0;
1627
1628			if ( ! b->yy_ch_buf )
1629				YY_FATAL_ERROR(
1630				"fatal error - scanner input buffer overflow" );
1631
1632			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
1633
1634			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
1635						number_to_move - 1;
1636
1637			}
1638
1639		if ( num_to_read > YY_READ_BUF_SIZE )
1640			num_to_read = YY_READ_BUF_SIZE;
1641
1642		/* Read in more data. */
1643		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
1644			(yy_n_chars), num_to_read );
1645
1646		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1647		}
1648
1649	if ( (yy_n_chars) == 0 )
1650		{
1651		if ( number_to_move == YY_MORE_ADJ )
1652			{
1653			ret_val = EOB_ACT_END_OF_FILE;
1654			code_restart(code_in  );
1655			}
1656
1657		else
1658			{
1659			ret_val = EOB_ACT_LAST_MATCH;
1660			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
1661				YY_BUFFER_EOF_PENDING;
1662			}
1663		}
1664
1665	else
1666		ret_val = EOB_ACT_CONTINUE_SCAN;
1667
1668	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
1669		/* Extend the array by 50%, plus the number we really need. */
1670		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
1671		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) code_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
1672		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
1673			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
1674	}
1675
1676	(yy_n_chars) += number_to_move;
1677	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
1678	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
1679
1680	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
1681
1682	return ret_val;
1683}
1684
1685/* yy_get_previous_state - get the state just before the EOB char was reached */
1686
1687/* %if-c-only */
1688/* %not-for-header */
1689
1690    static yy_state_type yy_get_previous_state (void)
1691/* %endif */
1692/* %if-c++-only */
1693/* %endif */
1694{
1695	register yy_state_type yy_current_state;
1696	register char *yy_cp;
1697
1698/* %% [15.0] code to get the start state into yy_current_state goes here */
1699	yy_current_state = (yy_start);
1700
1701	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
1702		{
1703/* %% [16.0] code to find the next state goes here */
1704		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 30);
1705		if ( yy_accept[yy_current_state] )
1706			{
1707			(yy_last_accepting_state) = yy_current_state;
1708			(yy_last_accepting_cpos) = yy_cp;
1709			}
1710		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1711			{
1712			yy_current_state = (int) yy_def[yy_current_state];
1713			if ( yy_current_state >= 101 )
1714				yy_c = yy_meta[(unsigned int) yy_c];
1715			}
1716		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1717		}
1718
1719	return yy_current_state;
1720}
1721
1722/* yy_try_NUL_trans - try to make a transition on the NUL character
1723 *
1724 * synopsis
1725 *	next_state = yy_try_NUL_trans( current_state );
1726 */
1727/* %if-c-only */
1728    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
1729/* %endif */
1730/* %if-c++-only */
1731/* %endif */
1732{
1733	register int yy_is_jam;
1734    /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */
1735	register char *yy_cp = (yy_c_buf_p);
1736
1737	register YY_CHAR yy_c = 30;
1738	if ( yy_accept[yy_current_state] )
1739		{
1740		(yy_last_accepting_state) = yy_current_state;
1741		(yy_last_accepting_cpos) = yy_cp;
1742		}
1743	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
1744		{
1745		yy_current_state = (int) yy_def[yy_current_state];
1746		if ( yy_current_state >= 101 )
1747			yy_c = yy_meta[(unsigned int) yy_c];
1748		}
1749	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
1750	yy_is_jam = (yy_current_state == 100);
1751
1752		return yy_is_jam ? 0 : yy_current_state;
1753}
1754
1755/* %if-c-only */
1756
1757/* %endif */
1758
1759/* %if-c-only */
1760#ifndef YY_NO_INPUT
1761#ifdef __cplusplus
1762    static int yyinput (void)
1763#else
1764    static int input  (void)
1765#endif
1766
1767/* %endif */
1768/* %if-c++-only */
1769/* %endif */
1770{
1771	int c;
1772
1773	*(yy_c_buf_p) = (yy_hold_char);
1774
1775	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
1776		{
1777		/* yy_c_buf_p now points to the character we want to return.
1778		 * If this occurs *before* the EOB characters, then it's a
1779		 * valid NUL; if not, then we've hit the end of the buffer.
1780		 */
1781		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
1782			/* This was really a NUL. */
1783			*(yy_c_buf_p) = '\0';
1784
1785		else
1786			{ /* need more input */
1787			yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
1788			++(yy_c_buf_p);
1789
1790			switch ( yy_get_next_buffer(  ) )
1791				{
1792				case EOB_ACT_LAST_MATCH:
1793					/* This happens because yy_g_n_b()
1794					 * sees that we've accumulated a
1795					 * token and flags that we need to
1796					 * try matching the token before
1797					 * proceeding.  But for input(),
1798					 * there's no matching to consider.
1799					 * So convert the EOB_ACT_LAST_MATCH
1800					 * to EOB_ACT_END_OF_FILE.
1801					 */
1802
1803					/* Reset buffer status. */
1804					code_restart(code_in );
1805
1806					/*FALLTHROUGH*/
1807
1808				case EOB_ACT_END_OF_FILE:
1809					{
1810					if ( code_wrap( ) )
1811						return EOF;
1812
1813					if ( ! (yy_did_buffer_switch_on_eof) )
1814						YY_NEW_FILE;
1815#ifdef __cplusplus
1816					return yyinput();
1817#else
1818					return input();
1819#endif
1820					}
1821
1822				case EOB_ACT_CONTINUE_SCAN:
1823					(yy_c_buf_p) = (yytext_ptr) + offset;
1824					break;
1825				}
1826			}
1827		}
1828
1829	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
1830	*(yy_c_buf_p) = '\0';	/* preserve code_text */
1831	(yy_hold_char) = *++(yy_c_buf_p);
1832
1833/* %% [19.0] update BOL and code_lineno */
1834
1835	return c;
1836}
1837/* %if-c-only */
1838#endif	/* ifndef YY_NO_INPUT */
1839/* %endif */
1840
1841/** Immediately switch to a different input stream.
1842 * @param input_file A readable stream.
1843 *
1844 * @note This function does not reset the start condition to @c INITIAL .
1845 */
1846/* %if-c-only */
1847    void code_restart  (FILE * input_file )
1848/* %endif */
1849/* %if-c++-only */
1850/* %endif */
1851{
1852
1853	if ( ! YY_CURRENT_BUFFER ){
1854        code_ensure_buffer_stack ();
1855		YY_CURRENT_BUFFER_LVALUE =
1856            code__create_buffer(code_in,YY_BUF_SIZE );
1857	}
1858
1859	code__init_buffer(YY_CURRENT_BUFFER,input_file );
1860	code__load_buffer_state( );
1861}
1862
1863/** Switch to a different input buffer.
1864 * @param new_buffer The new input buffer.
1865 *
1866 */
1867/* %if-c-only */
1868    void code__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
1869/* %endif */
1870/* %if-c++-only */
1871/* %endif */
1872{
1873
1874	/* TODO. We should be able to replace this entire function body
1875	 * with
1876	 *		code_pop_buffer_state();
1877	 *		code_push_buffer_state(new_buffer);
1878     */
1879	code_ensure_buffer_stack ();
1880	if ( YY_CURRENT_BUFFER == new_buffer )
1881		return;
1882
1883	if ( YY_CURRENT_BUFFER )
1884		{
1885		/* Flush out information for old buffer. */
1886		*(yy_c_buf_p) = (yy_hold_char);
1887		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
1888		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
1889		}
1890
1891	YY_CURRENT_BUFFER_LVALUE = new_buffer;
1892	code__load_buffer_state( );
1893
1894	/* We don't actually know whether we did this switch during
1895	 * EOF (code_wrap()) processing, but the only time this flag
1896	 * is looked at is after code_wrap() is called, so it's safe
1897	 * to go ahead and always set it.
1898	 */
1899	(yy_did_buffer_switch_on_eof) = 1;
1900}
1901
1902/* %if-c-only */
1903static void code__load_buffer_state  (void)
1904/* %endif */
1905/* %if-c++-only */
1906/* %endif */
1907{
1908    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
1909	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
1910	code_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
1911	(yy_hold_char) = *(yy_c_buf_p);
1912}
1913
1914/** Allocate and initialize an input buffer state.
1915 * @param file A readable stream.
1916 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
1917 *
1918 * @return the allocated buffer state.
1919 */
1920/* %if-c-only */
1921    YY_BUFFER_STATE code__create_buffer  (FILE * file, int  size )
1922/* %endif */
1923/* %if-c++-only */
1924/* %endif */
1925{
1926	YY_BUFFER_STATE b;
1927
1928	b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state )  );
1929	if ( ! b )
1930		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
1931
1932	b->yy_buf_size = size;
1933
1934	/* yy_ch_buf has to be 2 characters longer than the size given because
1935	 * we need to put in 2 end-of-buffer characters.
1936	 */
1937	b->yy_ch_buf = (char *) code_alloc(b->yy_buf_size + 2  );
1938	if ( ! b->yy_ch_buf )
1939		YY_FATAL_ERROR( "out of dynamic memory in code__create_buffer()" );
1940
1941	b->yy_is_our_buffer = 1;
1942
1943	code__init_buffer(b,file );
1944
1945	return b;
1946}
1947
1948/** Destroy the buffer.
1949 * @param b a buffer created with code__create_buffer()
1950 *
1951 */
1952/* %if-c-only */
1953    void code__delete_buffer (YY_BUFFER_STATE  b )
1954/* %endif */
1955/* %if-c++-only */
1956/* %endif */
1957{
1958
1959	if ( ! b )
1960		return;
1961
1962	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
1963		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
1964
1965	if ( b->yy_is_our_buffer )
1966		code_free((void *) b->yy_ch_buf  );
1967
1968	code_free((void *) b  );
1969}
1970
1971/* Initializes or reinitializes a buffer.
1972 * This function is sometimes called more than once on the same buffer,
1973 * such as during a code_restart() or at EOF.
1974 */
1975/* %if-c-only */
1976    static void code__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
1977/* %endif */
1978/* %if-c++-only */
1979/* %endif */
1980
1981{
1982	int oerrno = errno;
1983
1984	code__flush_buffer(b );
1985
1986	b->yy_input_file = file;
1987	b->yy_fill_buffer = 1;
1988
1989    /* If b is the current buffer, then code__init_buffer was _probably_
1990     * called from code_restart() or through yy_get_next_buffer.
1991     * In that case, we don't want to reset the lineno or column.
1992     */
1993    if (b != YY_CURRENT_BUFFER){
1994        b->yy_bs_lineno = 1;
1995        b->yy_bs_column = 0;
1996    }
1997
1998/* %if-c-only */
1999
2000        b->yy_is_interactive = 0;
2001
2002/* %endif */
2003/* %if-c++-only */
2004/* %endif */
2005	errno = oerrno;
2006}
2007
2008/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
2009 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
2010 *
2011 */
2012/* %if-c-only */
2013    void code__flush_buffer (YY_BUFFER_STATE  b )
2014/* %endif */
2015/* %if-c++-only */
2016/* %endif */
2017{
2018    	if ( ! b )
2019		return;
2020
2021	b->yy_n_chars = 0;
2022
2023	/* We always need two end-of-buffer characters.  The first causes
2024	 * a transition to the end-of-buffer state.  The second causes
2025	 * a jam in that state.
2026	 */
2027	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
2028	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
2029
2030	b->yy_buf_pos = &b->yy_ch_buf[0];
2031
2032	b->yy_at_bol = 1;
2033	b->yy_buffer_status = YY_BUFFER_NEW;
2034
2035	if ( b == YY_CURRENT_BUFFER )
2036		code__load_buffer_state( );
2037}
2038
2039/* %if-c-or-c++ */
2040/** Pushes the new state onto the stack. The new state becomes
2041 *  the current state. This function will allocate the stack
2042 *  if necessary.
2043 *  @param new_buffer The new state.
2044 *
2045 */
2046/* %if-c-only */
2047void code_push_buffer_state (YY_BUFFER_STATE new_buffer )
2048/* %endif */
2049/* %if-c++-only */
2050/* %endif */
2051{
2052    	if (new_buffer == NULL)
2053		return;
2054
2055	code_ensure_buffer_stack();
2056
2057	/* This block is copied from code__switch_to_buffer. */
2058	if ( YY_CURRENT_BUFFER )
2059		{
2060		/* Flush out information for old buffer. */
2061		*(yy_c_buf_p) = (yy_hold_char);
2062		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
2063		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
2064		}
2065
2066	/* Only push if top exists. Otherwise, replace top. */
2067	if (YY_CURRENT_BUFFER)
2068		(yy_buffer_stack_top)++;
2069	YY_CURRENT_BUFFER_LVALUE = new_buffer;
2070
2071	/* copied from code__switch_to_buffer. */
2072	code__load_buffer_state( );
2073	(yy_did_buffer_switch_on_eof) = 1;
2074}
2075/* %endif */
2076
2077/* %if-c-or-c++ */
2078/** Removes and deletes the top of the stack, if present.
2079 *  The next element becomes the new top.
2080 *
2081 */
2082/* %if-c-only */
2083void code_pop_buffer_state (void)
2084/* %endif */
2085/* %if-c++-only */
2086/* %endif */
2087{
2088    	if (!YY_CURRENT_BUFFER)
2089		return;
2090
2091	code__delete_buffer(YY_CURRENT_BUFFER );
2092	YY_CURRENT_BUFFER_LVALUE = NULL;
2093	if ((yy_buffer_stack_top) > 0)
2094		--(yy_buffer_stack_top);
2095
2096	if (YY_CURRENT_BUFFER) {
2097		code__load_buffer_state( );
2098		(yy_did_buffer_switch_on_eof) = 1;
2099	}
2100}
2101/* %endif */
2102
2103/* %if-c-or-c++ */
2104/* Allocates the stack if it does not exist.
2105 *  Guarantees space for at least one push.
2106 */
2107/* %if-c-only */
2108static void code_ensure_buffer_stack (void)
2109/* %endif */
2110/* %if-c++-only */
2111/* %endif */
2112{
2113	yy_size_t num_to_alloc;
2114
2115	if (!(yy_buffer_stack)) {
2116
2117		/* First allocation is just for 2 elements, since we don't know if this
2118		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
2119		 * immediate realloc on the next call.
2120         */
2121		num_to_alloc = 1;
2122		(yy_buffer_stack) = (struct yy_buffer_state**)code_alloc
2123								(num_to_alloc * sizeof(struct yy_buffer_state*)
2124								);
2125		if ( ! (yy_buffer_stack) )
2126			YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" );
2127
2128		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
2129
2130		(yy_buffer_stack_max) = num_to_alloc;
2131		(yy_buffer_stack_top) = 0;
2132		return;
2133	}
2134
2135	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
2136
2137		/* Increase the buffer to prepare for a possible push. */
2138		int grow_size = 8 /* arbitrary grow size */;
2139
2140		num_to_alloc = (yy_buffer_stack_max) + grow_size;
2141		(yy_buffer_stack) = (struct yy_buffer_state**)code_realloc
2142								((yy_buffer_stack),
2143								num_to_alloc * sizeof(struct yy_buffer_state*)
2144								);
2145		if ( ! (yy_buffer_stack) )
2146			YY_FATAL_ERROR( "out of dynamic memory in code_ensure_buffer_stack()" );
2147
2148		/* zero only the new slots.*/
2149		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
2150		(yy_buffer_stack_max) = num_to_alloc;
2151	}
2152}
2153/* %endif */
2154
2155/* %if-c-only */
2156/** Setup the input buffer state to scan directly from a user-specified character buffer.
2157 * @param base the character buffer
2158 * @param size the size in bytes of the character buffer
2159 *
2160 * @return the newly allocated buffer state object.
2161 */
2162YY_BUFFER_STATE code__scan_buffer  (char * base, yy_size_t  size )
2163{
2164	YY_BUFFER_STATE b;
2165
2166	if ( size < 2 ||
2167	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
2168	     base[size-1] != YY_END_OF_BUFFER_CHAR )
2169		/* They forgot to leave room for the EOB's. */
2170		return 0;
2171
2172	b = (YY_BUFFER_STATE) code_alloc(sizeof( struct yy_buffer_state )  );
2173	if ( ! b )
2174		YY_FATAL_ERROR( "out of dynamic memory in code__scan_buffer()" );
2175
2176	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
2177	b->yy_buf_pos = b->yy_ch_buf = base;
2178	b->yy_is_our_buffer = 0;
2179	b->yy_input_file = 0;
2180	b->yy_n_chars = b->yy_buf_size;
2181	b->yy_is_interactive = 0;
2182	b->yy_at_bol = 1;
2183	b->yy_fill_buffer = 0;
2184	b->yy_buffer_status = YY_BUFFER_NEW;
2185
2186	code__switch_to_buffer(b  );
2187
2188	return b;
2189}
2190/* %endif */
2191
2192/* %if-c-only */
2193/** Setup the input buffer state to scan a string. The next call to code_lex() will
2194 * scan from a @e copy of @a str.
2195 * @param yystr a NUL-terminated string to scan
2196 *
2197 * @return the newly allocated buffer state object.
2198 * @note If you want to scan bytes that may contain NUL values, then use
2199 *       code__scan_bytes() instead.
2200 */
2201YY_BUFFER_STATE code__scan_string (yyconst char * yystr )
2202{
2203
2204	return code__scan_bytes(yystr,strlen(yystr) );
2205}
2206/* %endif */
2207
2208/* %if-c-only */
2209/** Setup the input buffer state to scan the given bytes. The next call to code_lex() will
2210 * scan from a @e copy of @a bytes.
2211 * @param yybytes the byte buffer to scan
2212 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
2213 *
2214 * @return the newly allocated buffer state object.
2215 */
2216YY_BUFFER_STATE code__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
2217{
2218	YY_BUFFER_STATE b;
2219	char *buf;
2220	yy_size_t n;
2221	int i;
2222
2223	/* Get memory for full buffer, including space for trailing EOB's. */
2224	n = _yybytes_len + 2;
2225	buf = (char *) code_alloc(n  );
2226	if ( ! buf )
2227		YY_FATAL_ERROR( "out of dynamic memory in code__scan_bytes()" );
2228
2229	for ( i = 0; i < _yybytes_len; ++i )
2230		buf[i] = yybytes[i];
2231
2232	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
2233
2234	b = code__scan_buffer(buf,n );
2235	if ( ! b )
2236		YY_FATAL_ERROR( "bad buffer in code__scan_bytes()" );
2237
2238	/* It's okay to grow etc. this buffer, and we should throw it
2239	 * away when we're done.
2240	 */
2241	b->yy_is_our_buffer = 1;
2242
2243	return b;
2244}
2245/* %endif */
2246
2247#ifndef YY_EXIT_FAILURE
2248#define YY_EXIT_FAILURE 2
2249#endif
2250
2251/* %if-c-only */
2252static void yy_fatal_error (yyconst char* msg )
2253{
2254    	(void) fprintf( stderr, "%s\n", msg );
2255	exit( YY_EXIT_FAILURE );
2256}
2257/* %endif */
2258/* %if-c++-only */
2259/* %endif */
2260
2261/* Redefine yyless() so it works in section 3 code. */
2262
2263#undef yyless
2264#define yyless(n) \
2265	do \
2266		{ \
2267		/* Undo effects of setting up code_text. */ \
2268        int yyless_macro_arg = (n); \
2269        YY_LESS_LINENO(yyless_macro_arg);\
2270		code_text[code_leng] = (yy_hold_char); \
2271		(yy_c_buf_p) = code_text + yyless_macro_arg; \
2272		(yy_hold_char) = *(yy_c_buf_p); \
2273		*(yy_c_buf_p) = '\0'; \
2274		code_leng = yyless_macro_arg; \
2275		} \
2276	while ( 0 )
2277
2278/* Accessor  methods (get/set functions) to struct members. */
2279
2280/* %if-c-only */
2281/* %if-reentrant */
2282/* %endif */
2283
2284/** Get the current line number.
2285 *
2286 */
2287int code_get_lineno  (void)
2288{
2289
2290    return code_lineno;
2291}
2292
2293/** Get the input stream.
2294 *
2295 */
2296FILE *code_get_in  (void)
2297{
2298        return code_in;
2299}
2300
2301/** Get the output stream.
2302 *
2303 */
2304FILE *code_get_out  (void)
2305{
2306        return code_out;
2307}
2308
2309/** Get the length of the current token.
2310 *
2311 */
2312yy_size_t code_get_leng  (void)
2313{
2314        return code_leng;
2315}
2316
2317/** Get the current token.
2318 *
2319 */
2320
2321char *code_get_text  (void)
2322{
2323        return code_text;
2324}
2325
2326/* %if-reentrant */
2327/* %endif */
2328
2329/** Set the current line number.
2330 * @param line_number
2331 *
2332 */
2333void code_set_lineno (int  line_number )
2334{
2335
2336    code_lineno = line_number;
2337}
2338
2339/** Set the input stream. This does not discard the current
2340 * input buffer.
2341 * @param in_str A readable stream.
2342 *
2343 * @see code__switch_to_buffer
2344 */
2345void code_set_in (FILE *  in_str )
2346{
2347        code_in = in_str ;
2348}
2349
2350void code_set_out (FILE *  out_str )
2351{
2352        code_out = out_str ;
2353}
2354
2355int code_get_debug  (void)
2356{
2357        return code__flex_debug;
2358}
2359
2360void code_set_debug (int  bdebug )
2361{
2362        code__flex_debug = bdebug ;
2363}
2364
2365/* %endif */
2366
2367/* %if-reentrant */
2368/* %if-bison-bridge */
2369/* %endif */
2370/* %endif if-c-only */
2371
2372/* %if-c-only */
2373static int yy_init_globals (void)
2374{
2375        /* Initialization is the same as for the non-reentrant scanner.
2376     * This function is called from code_lex_destroy(), so don't allocate here.
2377     */
2378
2379    (yy_buffer_stack) = 0;
2380    (yy_buffer_stack_top) = 0;
2381    (yy_buffer_stack_max) = 0;
2382    (yy_c_buf_p) = (char *) 0;
2383    (yy_init) = 0;
2384    (yy_start) = 0;
2385
2386/* Defined in main.c */
2387#ifdef YY_STDINIT
2388    code_in = stdin;
2389    code_out = stdout;
2390#else
2391    code_in = (FILE *) 0;
2392    code_out = (FILE *) 0;
2393#endif
2394
2395    /* For future reference: Set errno on error, since we are called by
2396     * code_lex_init()
2397     */
2398    return 0;
2399}
2400/* %endif */
2401
2402/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */
2403/* code_lex_destroy is for both reentrant and non-reentrant scanners. */
2404int code_lex_destroy  (void)
2405{
2406
2407    /* Pop the buffer stack, destroying each element. */
2408	while(YY_CURRENT_BUFFER){
2409		code__delete_buffer(YY_CURRENT_BUFFER  );
2410		YY_CURRENT_BUFFER_LVALUE = NULL;
2411		code_pop_buffer_state();
2412	}
2413
2414	/* Destroy the stack itself. */
2415	code_free((yy_buffer_stack) );
2416	(yy_buffer_stack) = NULL;
2417
2418    /* Reset the globals. This is important in a non-reentrant scanner so the next time
2419     * code_lex() is called, initialization will occur. */
2420    yy_init_globals( );
2421
2422/* %if-reentrant */
2423/* %endif */
2424    return 0;
2425}
2426/* %endif */
2427
2428/*
2429 * Internal utility routines.
2430 */
2431
2432#ifndef yytext_ptr
2433static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
2434{
2435	register int i;
2436	for ( i = 0; i < n; ++i )
2437		s1[i] = s2[i];
2438}
2439#endif
2440
2441#ifdef YY_NEED_STRLEN
2442static int yy_flex_strlen (yyconst char * s )
2443{
2444	register int n;
2445	for ( n = 0; s[n]; ++n )
2446		;
2447
2448	return n;
2449}
2450#endif
2451
2452void *code_alloc (yy_size_t  size )
2453{
2454	return (void *) malloc( size );
2455}
2456
2457void *code_realloc  (void * ptr, yy_size_t  size )
2458{
2459	/* The cast to (char *) in the following accommodates both
2460	 * implementations that use char* generic pointers, and those
2461	 * that use void* generic pointers.  It works with the latter
2462	 * because both ANSI C and C++ allow castless assignment from
2463	 * any pointer type to void*, and deal with argument conversions
2464	 * as though doing an assignment.
2465	 */
2466	return (void *) realloc( (char *) ptr, size );
2467}
2468
2469void code_free (void * ptr )
2470{
2471	free( (char *) ptr );	/* see code_realloc() for (char *) cast */
2472}
2473
2474/* %if-tables-serialization definitions */
2475/* %define-yytables   The name for this specific scanner's tables. */
2476#define YYTABLES_NAME "yytables"
2477/* %endif */
2478
2479/* %ok-for-header */
2480
2481#line 294 "scan-code.l"
2482
2483
2484
2485static inline bool
2486is_dot_or_dash (char ch)
2487{
2488  return ch == '.' || ch == '-';
2489}
2490
2491static inline bool
2492contains_dot_or_dash (const char* p)
2493{
2494  for (; *p; ++p)
2495    if (is_dot_or_dash (*p))
2496      return true;
2497  return false;
2498}
2499
2500/* Defines a variant of a symbolic name resolution. */
2501typedef struct
2502{
2503  /* Index in symbol list. */
2504  unsigned symbol_index;
2505
2506  /* Matched symbol id and loc. */
2507  uniqstr id;
2508  location loc;
2509
2510  /* Hiding named reference. */
2511  named_ref* hidden_by;
2512
2513  /* Error flags. May contain zero (no errors) or
2514     a combination of VARIANT_* values. */
2515  unsigned err;
2516} variant;
2517
2518/* Set when the variant refers to a symbol hidden
2519   by an explicit symbol reference. */
2520#define VARIANT_HIDDEN (1 << 0)
2521
2522/* Set when the variant refers to a symbol containing
2523   dots or dashes. Will require explicit bracketing. */
2524#define VARIANT_BAD_BRACKETING (1 << 1)
2525
2526/* Set when the variant refers to a symbol which is
2527   not visible from current midrule. */
2528#define VARIANT_NOT_VISIBLE_FROM_MIDRULE (1 << 2)
2529
2530static variant *variant_table = NULL;
2531static unsigned variant_table_size = 0;
2532static unsigned variant_count = 0;
2533
2534static variant *
2535variant_table_grow (void)
2536{
2537  ++variant_count;
2538  if (variant_count > variant_table_size)
2539    {
2540      while (variant_count > variant_table_size)
2541	variant_table_size = 2 * variant_table_size + 3;
2542      variant_table = xnrealloc (variant_table, variant_table_size,
2543				 sizeof *variant_table);
2544    }
2545  return &variant_table[variant_count - 1];
2546}
2547
2548static void
2549variant_table_free (void)
2550{
2551  free (variant_table);
2552  variant_table = NULL;
2553  variant_table_size = variant_count = 0;
2554}
2555
2556static char *
2557find_prefix_end (const char *prefix, char *begin, char *end)
2558{
2559  char *ptr = begin;
2560
2561  for (; *prefix && ptr != end; ++prefix, ++ptr)
2562    if (*prefix != *ptr)
2563      return 0;
2564
2565  if (*prefix)
2566    return 0;
2567
2568  return ptr;
2569}
2570
2571static variant *
2572variant_add (uniqstr id, location id_loc, unsigned symbol_index,
2573	     char *cp, char *cp_end, bool explicit_bracketing)
2574{
2575  char *prefix_end;
2576
2577  prefix_end = find_prefix_end (id, cp, cp_end);
2578  if (prefix_end &&
2579      (prefix_end == cp_end ||
2580       (!explicit_bracketing && is_dot_or_dash (*prefix_end))))
2581    {
2582      variant *r = variant_table_grow ();
2583      r->symbol_index = symbol_index;
2584      r->id = id;
2585      r->loc = id_loc;
2586      r->hidden_by = NULL;
2587      r->err = 0;
2588      return r;
2589    }
2590  else
2591    return NULL;
2592}
2593
2594static const char *
2595get_at_spec (unsigned symbol_index)
2596{
2597  static char at_buf[20];
2598  if (symbol_index == 0)
2599    strcpy (at_buf, "$$");
2600  else
2601    snprintf (at_buf, sizeof at_buf, "$%u", symbol_index);
2602  return at_buf;
2603}
2604
2605static void
2606show_sub_messages (const char* cp, bool explicit_bracketing,
2607                   int midrule_rhs_index, char dollar_or_at,
2608                   bool is_warning, unsigned indent)
2609{
2610  unsigned i;
2611
2612  for (i = 0; i < variant_count; ++i)
2613    {
2614      const variant *var = &variant_table[i];
2615      const char *at_spec = get_at_spec (var->symbol_index);
2616
2617      if (var->err == 0)
2618        {
2619          if (is_warning)
2620            warn_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
2621                            dollar_or_at, var->id, at_spec);
2622          else
2623            complain_at_indent (var->loc, &indent, _("refers to: %c%s at %s"),
2624                                dollar_or_at, var->id, at_spec);
2625        }
2626      else
2627	{
2628	  static struct obstack msg_buf;
2629	  const char *tail = explicit_bracketing ? "" :
2630	    cp + strlen (var->id);
2631	  const char *id = var->hidden_by ? var->hidden_by->id :
2632	    var->id;
2633	  location id_loc = var->hidden_by ? var->hidden_by->loc :
2634	    var->loc;
2635
2636	  /* Create the explanation message. */
2637	  obstack_init (&msg_buf);
2638
2639	  obstack_printf (&msg_buf, _("possibly meant: %c"), dollar_or_at);
2640	  if (contains_dot_or_dash (id))
2641	    obstack_printf (&msg_buf, "[%s]", id);
2642	  else
2643	    obstack_sgrow (&msg_buf, id);
2644	  obstack_sgrow (&msg_buf, tail);
2645
2646	  if (var->err & VARIANT_HIDDEN)
2647	    {
2648	      obstack_printf (&msg_buf, _(", hiding %c"), dollar_or_at);
2649	      if (contains_dot_or_dash (var->id))
2650		obstack_printf (&msg_buf, "[%s]", var->id);
2651	      else
2652		obstack_sgrow (&msg_buf, var->id);
2653	      obstack_sgrow (&msg_buf, tail);
2654	    }
2655
2656	  obstack_printf (&msg_buf, _(" at %s"), at_spec);
2657
2658	  if (var->err & VARIANT_NOT_VISIBLE_FROM_MIDRULE)
2659            {
2660              const char *format =
2661                _(", cannot be accessed from mid-rule action at $%d");
2662              obstack_printf (&msg_buf, format, midrule_rhs_index);
2663            }
2664
2665	  obstack_1grow (&msg_buf, '\0');
2666          if (is_warning)
2667            warn_at_indent (id_loc, &indent, "%s",
2668                            (char *) obstack_finish (&msg_buf));
2669          else
2670            complain_at_indent (id_loc, &indent, "%s",
2671                                (char *) obstack_finish (&msg_buf));
2672	  obstack_free (&msg_buf, 0);
2673	}
2674    }
2675}
2676
2677/* Returned from "parse_ref" when the reference
2678   is inappropriate. */
2679#define INVALID_REF (INT_MIN)
2680
2681/* Returned from "parse_ref" when the reference
2682   points to LHS ($$) of the current rule or midrule. */
2683#define LHS_REF (INT_MIN + 1)
2684
2685/* Parse named or positional reference. In case of positional
2686   references, can return negative values for $-n "deep" stack
2687   accesses. */
2688static long int
2689parse_ref (char *cp, symbol_list *rule, int rule_length,
2690	   int midrule_rhs_index, char *text, location text_loc,
2691	   char dollar_or_at)
2692{
2693  symbol_list *l;
2694  char *cp_end;
2695  bool explicit_bracketing;
2696  unsigned i;
2697  unsigned valid_variants = 0;
2698  unsigned valid_variant_index = 0;
2699
2700  if ('$' == *cp)
2701    return LHS_REF;
2702
2703  if (c_isdigit (*cp) || (*cp == '-' && c_isdigit (* (cp + 1))))
2704    {
2705      long int num = strtol (cp, &cp, 10);
2706      if (1 - INT_MAX + rule_length <= num && num <= rule_length)
2707	return num;
2708      else
2709	{
2710	  complain_at (text_loc, _("integer out of range: %s"),
2711                       quote (text));
2712	  return INVALID_REF;
2713	}
2714    }
2715
2716  if ('[' == *cp)
2717    {
2718      /* Ignore the brackets. */
2719      char *p;
2720      for (p = ++cp; *p != ']'; ++p)
2721	continue;
2722      cp_end = p;
2723
2724      explicit_bracketing = true;
2725    }
2726  else
2727    {
2728      /* Take all characters of the name. */
2729      char* p;
2730      for (p = cp; *p; ++p)
2731	if (is_dot_or_dash (*p))
2732	  {
2733	    ref_tail_fields = p;
2734	    break;
2735	  }
2736      for (p = cp; *p; ++p)
2737	continue;
2738      cp_end = p;
2739
2740      explicit_bracketing = false;
2741    }
2742
2743  /* Add all relevant variants. */
2744  {
2745    unsigned symbol_index;
2746    variant_count = 0;
2747    for (symbol_index = 0, l = rule; !symbol_list_null (l);
2748         ++symbol_index, l = l->next)
2749      {
2750	variant *var;
2751	if (l->content_type != SYMLIST_SYMBOL)
2752	  continue;
2753
2754	var = variant_add (l->content.sym->tag, l->sym_loc,
2755                           symbol_index, cp, cp_end, explicit_bracketing);
2756	if (var && l->named_ref)
2757	  var->hidden_by = l->named_ref;
2758
2759	if (l->named_ref)
2760	  variant_add (l->named_ref->id, l->named_ref->loc,
2761                       symbol_index, cp, cp_end, explicit_bracketing);
2762      }
2763  }
2764
2765  /* Check errors. */
2766  for (i = 0; i < variant_count; ++i)
2767    {
2768      variant *var = &variant_table[i];
2769      unsigned symbol_index = var->symbol_index;
2770
2771      /* Check visibility from mid-rule actions. */
2772      if (midrule_rhs_index != 0
2773	  && (symbol_index == 0 || midrule_rhs_index < symbol_index))
2774        var->err |= VARIANT_NOT_VISIBLE_FROM_MIDRULE;
2775
2776      /* Check correct bracketing. */
2777      if (!explicit_bracketing && contains_dot_or_dash (var->id))
2778        var->err |= VARIANT_BAD_BRACKETING;
2779
2780      /* Check using of hidden symbols. */
2781      if (var->hidden_by)
2782        var->err |= VARIANT_HIDDEN;
2783
2784      if (!var->err)
2785        {
2786          valid_variant_index = i;
2787          ++valid_variants;
2788        }
2789    }
2790
2791  switch (valid_variants)
2792    {
2793    case 0:
2794      {
2795        unsigned len = (explicit_bracketing || !ref_tail_fields) ?
2796          cp_end - cp : ref_tail_fields - cp;
2797        unsigned indent = 0;
2798
2799        complain_at_indent (text_loc, &indent, _("invalid reference: %s"),
2800                            quote (text));
2801        indent += SUB_INDENT;
2802        if (len == 0)
2803          {
2804            location sym_loc = text_loc;
2805            sym_loc.start.column += 1;
2806            sym_loc.end = sym_loc.start;
2807            const char *format =
2808              _("syntax error after '%c', expecting integer, letter,"
2809                " '_', '[', or '$'");
2810            complain_at_indent (sym_loc, &indent, format, dollar_or_at);
2811          }
2812        else if (midrule_rhs_index)
2813          {
2814            const char *format =
2815              _("symbol not found in production before $%d: %.*s");
2816            complain_at_indent (rule->location, &indent, format,
2817                                midrule_rhs_index, len, cp);
2818          }
2819        else
2820          {
2821            const char *format =
2822              _("symbol not found in production: %.*s");
2823            complain_at_indent (rule->location, &indent, format,
2824                                len, cp);
2825          }
2826
2827        if (variant_count > 0)
2828          show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
2829                             dollar_or_at, false, indent);
2830        return INVALID_REF;
2831      }
2832    case 1:
2833      {
2834        unsigned indent = 0;
2835        if (variant_count > 1)
2836          {
2837            warn_at_indent (text_loc, &indent, _("misleading reference: %s"),
2838                            quote (text));
2839            show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
2840                               dollar_or_at, true, indent + SUB_INDENT);
2841          }
2842        {
2843          unsigned symbol_index =
2844            variant_table[valid_variant_index].symbol_index;
2845          return (symbol_index == midrule_rhs_index) ? LHS_REF : symbol_index;
2846        }
2847      }
2848    case 2:
2849    default:
2850      {
2851        unsigned indent = 0;
2852        complain_at_indent (text_loc, &indent, _("ambiguous reference: %s"),
2853                            quote (text));
2854        show_sub_messages (cp, explicit_bracketing, midrule_rhs_index,
2855                           dollar_or_at, false, indent + SUB_INDENT);
2856        return INVALID_REF;
2857      }
2858    }
2859
2860  /* Not reachable. */
2861  return INVALID_REF;
2862}
2863
2864/* Keeps track of the maximum number of semantic values to the left of
2865   a handle (those referenced by $0, $-1, etc.) are required by the
2866   semantic actions of this grammar. */
2867int max_left_semantic_context = 0;
2868
2869
2870/* If CP points to a typename (i.e., <.*?>), set TYPE_NAME to its
2871   beginning (i.e., after the opening "<", and return the pointer
2872   immediately after it.  */
2873
2874static
2875char *
2876fetch_type_name (char *cp, char const **type_name,
2877                 location dollar_loc)
2878{
2879  if (*cp == '<')
2880    {
2881      *type_name = ++cp;
2882      while (*cp != '>')
2883	++cp;
2884
2885      /* The '>' symbol will be later replaced by '\0'. Original
2886	 'text' is needed for error messages. */
2887      ++cp;
2888      if (untyped_var_seen)
2889	complain_at (dollar_loc, _("explicit type given in untyped grammar"));
2890      tag_seen = true;
2891    }
2892  return cp;
2893}
2894
2895/*------------------------------------------------------------------.
2896| TEXT is pointing to a wannabee semantic value (i.e., a '$').      |
2897|                                                                   |
2898| Possible inputs: $[<TYPENAME>]($|integer)                         |
2899|                                                                   |
2900| Output to OBSTACK_FOR_STRING a reference to this semantic value.  |
2901`------------------------------------------------------------------*/
2902
2903static void
2904handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
2905{
2906  char const *type_name = NULL;
2907  char *cp = text + 1;
2908  symbol_list *effective_rule;
2909  int effective_rule_length;
2910  int n;
2911
2912  if (rule->midrule_parent_rule)
2913    {
2914      effective_rule = rule->midrule_parent_rule;
2915      effective_rule_length = rule->midrule_parent_rhs_index - 1;
2916    }
2917  else
2918    {
2919      effective_rule = rule;
2920      effective_rule_length = symbol_list_length (rule->next);
2921    }
2922
2923  /* Get the type name if explicit. */
2924  cp = fetch_type_name (cp, &type_name, dollar_loc);
2925
2926  n = parse_ref (cp, effective_rule, effective_rule_length,
2927		 rule->midrule_parent_rhs_index, text, dollar_loc, '$');
2928
2929  /* End type_name. */
2930  if (type_name)
2931    cp[-1] = '\0';
2932
2933  switch (n)
2934    {
2935    case INVALID_REF:
2936      break;
2937
2938    case LHS_REF:
2939      if (!type_name)
2940	type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
2941
2942      if (!type_name)
2943        {
2944          if (union_seen | tag_seen)
2945            {
2946              if (rule->midrule_parent_rule)
2947                complain_at (dollar_loc,
2948                             _("$$ for the midrule at $%d of %s"
2949                               " has no declared type"),
2950                             rule->midrule_parent_rhs_index,
2951                             quote (effective_rule->content.sym->tag));
2952              else
2953                complain_at (dollar_loc, _("$$ of %s has no declared type"),
2954                             quote (rule->content.sym->tag));
2955            }
2956          else
2957            untyped_var_seen = true;
2958        }
2959
2960      obstack_sgrow (&obstack_for_string, "]b4_lhs_value(");
2961      obstack_quote (&obstack_for_string, type_name);
2962      obstack_sgrow (&obstack_for_string, ")[");
2963      rule->action_props.is_value_used = true;
2964      break;
2965
2966    default:
2967      if (max_left_semantic_context < 1 - n)
2968	max_left_semantic_context = 1 - n;
2969      if (!type_name && 0 < n)
2970	type_name =
2971	  symbol_list_n_type_name_get (effective_rule, dollar_loc, n);
2972      if (!type_name)
2973        {
2974          if (union_seen | tag_seen)
2975            complain_at (dollar_loc, _("$%s of %s has no declared type"),
2976                         cp, quote (effective_rule->content.sym->tag));
2977          else
2978            untyped_var_seen = true;
2979        }
2980
2981      obstack_printf (&obstack_for_string,
2982		      "]b4_rhs_value(%d, %d, ", effective_rule_length, n);
2983      obstack_quote (&obstack_for_string, type_name);
2984      obstack_sgrow (&obstack_for_string, ")[");
2985      if (n > 0)
2986	symbol_list_n_get (effective_rule, n)->action_props.is_value_used =
2987	  true;
2988      break;
2989    }
2990}
2991
2992
2993/*------------------------------------------------------.
2994| TEXT is a location token (i.e., a '@...').  Output to |
2995| OBSTACK_FOR_STRING a reference to this location.      |
2996`------------------------------------------------------*/
2997
2998static void
2999handle_action_at (symbol_list *rule, char *text, location at_loc)
3000{
3001  char *cp = text + 1;
3002  symbol_list *effective_rule;
3003  int effective_rule_length;
3004  int n;
3005
3006  if (rule->midrule_parent_rule)
3007    {
3008      effective_rule = rule->midrule_parent_rule;
3009      effective_rule_length = rule->midrule_parent_rhs_index - 1;
3010    }
3011  else
3012    {
3013      effective_rule = rule;
3014      effective_rule_length = symbol_list_length (rule->next);
3015    }
3016
3017  locations_flag = true;
3018
3019  n = parse_ref (cp, effective_rule, effective_rule_length,
3020                 rule->midrule_parent_rhs_index, text, at_loc, '@');
3021  switch (n)
3022    {
3023    case INVALID_REF:
3024      break;
3025
3026    case LHS_REF:
3027      obstack_sgrow (&obstack_for_string, "]b4_lhs_location[");
3028      break;
3029
3030    default:
3031      obstack_printf (&obstack_for_string, "]b4_rhs_location(%d, %d)[",
3032		      effective_rule_length, n);
3033      break;
3034    }
3035}
3036
3037
3038/*-------------------------.
3039| Initialize the scanner.  |
3040`-------------------------*/
3041
3042/* Translate the dollars and ats in \a self, in the context \a sc_context
3043   (SC_RULE_ACTION, SC_SYMBOL_ACTION, INITIAL).  */
3044
3045static char const *
3046translate_action (code_props *self, int sc_context)
3047{
3048  char *res;
3049  static bool initialized = false;
3050  if (!initialized)
3051    {
3052      obstack_init (&obstack_for_string);
3053      code__flex_debug = 0;
3054      initialized = true;
3055    }
3056
3057  loc->start = loc->end = self->location.start;
3058  code__switch_to_buffer (code__scan_string (self->code));
3059  res = code_lex (self, sc_context);
3060  code__delete_buffer (YY_CURRENT_BUFFER);
3061
3062  return res;
3063}
3064
3065/*------------------------------------------------------------------------.
3066| Implementation of the public interface as documented in "scan-code.h".  |
3067`------------------------------------------------------------------------*/
3068
3069void
3070code_props_none_init (code_props *self)
3071{
3072  *self = code_props_none;
3073}
3074
3075code_props const code_props_none = CODE_PROPS_NONE_INIT;
3076
3077void
3078code_props_plain_init (code_props *self, char const *code,
3079		       location code_loc)
3080{
3081  self->kind = CODE_PROPS_PLAIN;
3082  self->code = code;
3083  self->location = code_loc;
3084  self->is_value_used = false;
3085  self->rule = NULL;
3086  self->named_ref = NULL;
3087}
3088
3089void
3090code_props_symbol_action_init (code_props *self, char const *code,
3091                               location code_loc)
3092{
3093  self->kind = CODE_PROPS_SYMBOL_ACTION;
3094  self->code = code;
3095  self->location = code_loc;
3096  self->is_value_used = false;
3097  self->rule = NULL;
3098  self->named_ref = NULL;
3099}
3100
3101void
3102code_props_rule_action_init (code_props *self, char const *code,
3103                             location code_loc, symbol_list *rule,
3104			     named_ref *name)
3105{
3106  self->kind = CODE_PROPS_RULE_ACTION;
3107  self->code = code;
3108  self->location = code_loc;
3109  self->is_value_used = false;
3110  self->rule = rule;
3111  self->named_ref = name;
3112}
3113
3114void
3115code_props_translate_code (code_props *self)
3116{
3117  switch (self->kind)
3118    {
3119      case CODE_PROPS_NONE:
3120        break;
3121      case CODE_PROPS_PLAIN:
3122        self->code = translate_action (self, INITIAL);
3123        break;
3124      case CODE_PROPS_SYMBOL_ACTION:
3125        self->code = translate_action (self, SC_SYMBOL_ACTION);
3126        break;
3127      case CODE_PROPS_RULE_ACTION:
3128        self->code = translate_action (self, SC_RULE_ACTION);
3129        break;
3130    }
3131}
3132
3133void
3134code_scanner_last_string_free (void)
3135{
3136  STRING_FREE;
3137}
3138
3139void
3140code_scanner_free (void)
3141{
3142  obstack_free (&obstack_for_string, 0);
3143  variant_table_free ();
3144
3145  /* Reclaim Flex's buffers.  */
3146  code_lex_destroy ();
3147}
3148
3149