grammar.tab.c revision 1.7 1 /* $NetBSD: grammar.tab.c,v 1.7 2026/01/18 16:41:30 christos Exp $ */
2
3 /* original parser id follows */
4 /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6
7 #define YYBYACC 1
8 #define YYMAJOR 2
9 #define YYMINOR 0
10 #define YYCHECK "yyyymmdd"
11
12 #define YYEMPTY (-1)
13 #define yyclearin (yychar = YYEMPTY)
14 #define yyerrok (yyerrflag = 0)
15 #define YYRECOVERING() (yyerrflag != 0)
16 #define YYENOMEM (-2)
17 #define YYEOF 0
18 #undef YYBTYACC
19 #define YYBTYACC 0
20 #define YYDEBUGSTR YYPREFIX "debug"
21
22 #ifndef yyparse
23 #define yyparse grammar_parse
24 #endif /* yyparse */
25
26 #ifndef yylex
27 #define yylex grammar_lex
28 #endif /* yylex */
29
30 #ifndef yyerror
31 #define yyerror grammar_error
32 #endif /* yyerror */
33
34 #ifndef yychar
35 #define yychar grammar_char
36 #endif /* yychar */
37
38 #ifndef yyval
39 #define yyval grammar_val
40 #endif /* yyval */
41
42 #ifndef yylval
43 #define yylval grammar_lval
44 #endif /* yylval */
45
46 #ifndef yydebug
47 #define yydebug grammar_debug
48 #endif /* yydebug */
49
50 #ifndef yynerrs
51 #define yynerrs grammar_nerrs
52 #endif /* yynerrs */
53
54 #ifndef yyerrflag
55 #define yyerrflag grammar_errflag
56 #endif /* yyerrflag */
57
58 #ifndef yylhs
59 #define yylhs grammar_lhs
60 #endif /* yylhs */
61
62 #ifndef yylen
63 #define yylen grammar_len
64 #endif /* yylen */
65
66 #ifndef yydefred
67 #define yydefred grammar_defred
68 #endif /* yydefred */
69
70 #ifndef yystos
71 #define yystos grammar_stos
72 #endif /* yystos */
73
74 #ifndef yydgoto
75 #define yydgoto grammar_dgoto
76 #endif /* yydgoto */
77
78 #ifndef yysindex
79 #define yysindex grammar_sindex
80 #endif /* yysindex */
81
82 #ifndef yyrindex
83 #define yyrindex grammar_rindex
84 #endif /* yyrindex */
85
86 #ifndef yygindex
87 #define yygindex grammar_gindex
88 #endif /* yygindex */
89
90 #ifndef yytable
91 #define yytable grammar_table
92 #endif /* yytable */
93
94 #ifndef yycheck
95 #define yycheck grammar_check
96 #endif /* yycheck */
97
98 #ifndef yyname
99 #define yyname grammar_name
100 #endif /* yyname */
101
102 #ifndef yyrule
103 #define yyrule grammar_rule
104 #endif /* yyrule */
105
106 #if YYBTYACC
107
108 #ifndef yycindex
109 #define yycindex grammar_cindex
110 #endif /* yycindex */
111
112 #ifndef yyctable
113 #define yyctable grammar_ctable
114 #endif /* yyctable */
115
116 #endif /* YYBTYACC */
117
118 #define YYPREFIX "grammar_"
119
120 #define YYPURE 0
121
122 #line 9 "grammar.y"
123 #ifdef YYBISON
124 #include <stdlib.h>
125 #define YYSTYPE_IS_DECLARED
126 #define yyerror yaccError
127 #endif
128
129 #if defined(YYBISON) || !defined(YYBYACC)
130 static void yyerror(const char *s);
131 #endif
132 #line 81 "grammar.y"
133 #include <stdio.h>
134 #include <ctype.h>
135 #include <string.h>
136
137 #define OPT_LINTLIBRARY 1
138
139 #ifndef TRUE
140 #define TRUE (1)
141 #endif
142
143 #ifndef FALSE
144 #define FALSE (0)
145 #endif
146
147 /* #include "cproto.h" */
148 #define MAX_TEXT_SIZE 1024
149 #define TEXT_LEN (MAX_TEXT_SIZE / 2 - 3)
150
151 /* Prototype styles */
152 #if OPT_LINTLIBRARY
153 #define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
154 #define PROTO_LINTLIBRARY -1 /* form lint-library source */
155 #endif
156 #define PROTO_NONE 0 /* do not output any prototypes */
157 #define PROTO_TRADITIONAL 1 /* comment out parameters */
158 #define PROTO_ABSTRACT 2 /* comment out parameter names */
159 #define PROTO_ANSI 3 /* ANSI C prototype */
160
161 typedef int PrototypeStyle;
162
163 typedef char boolean;
164
165 extern boolean types_out;
166 extern PrototypeStyle proto_style;
167
168 #define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
169 #define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
170 #define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
171
172 #if OPT_LINTLIBRARY
173 #define FUNC_UNKNOWN -1 /* unspecified */
174 #else
175 #define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
176 #endif
177 #define FUNC_NONE 0 /* not a function definition */
178 #define FUNC_TRADITIONAL 1 /* traditional style */
179 #define FUNC_ANSI 2 /* ANSI style */
180 #define FUNC_BOTH 3 /* both styles */
181
182 typedef int FuncDefStyle;
183
184 /* Source file text */
185 typedef struct text {
186 char text[MAX_TEXT_SIZE]; /* source text */
187 long begin; /* offset in temporary file */
188 } Text;
189
190 /* Declaration specifier flags */
191 #define DS_NONE 0 /* default */
192 #define DS_EXTERN 1 /* contains "extern" specifier */
193 #define DS_STATIC 2 /* contains "static" specifier */
194 #define DS_CHAR 4 /* contains "char" type specifier */
195 #define DS_SHORT 8 /* contains "short" type specifier */
196 #define DS_FLOAT 16 /* contains "float" type specifier */
197 #define DS_INLINE 32 /* contains "inline" specifier */
198 #define DS_JUNK 64 /* we're not interested in this declaration */
199
200 /* This structure stores information about a declaration specifier. */
201 typedef struct decl_spec {
202 unsigned short flags; /* flags defined above */
203 char *text; /* source text */
204 long begin; /* offset in temporary file */
205 } DeclSpec;
206
207 /* This is a list of function parameters. */
208 typedef struct _ParameterList {
209 struct parameter *first; /* pointer to first parameter in list */
210 struct parameter *last; /* pointer to last parameter in list */
211 long begin_comment; /* begin offset of comment */
212 long end_comment; /* end offset of comment */
213 char *comment; /* comment at start of parameter list */
214 } ParameterList;
215
216 /* This structure stores information about a declarator. */
217 typedef struct _Declarator {
218 char *name; /* name of variable or function */
219 char *text; /* source text */
220 long begin; /* offset in temporary file */
221 long begin_comment; /* begin offset of comment */
222 long end_comment; /* end offset of comment */
223 FuncDefStyle func_def; /* style of function definition */
224 ParameterList params; /* function parameters */
225 boolean pointer; /* TRUE if it declares a pointer */
226 struct _Declarator *head; /* head function declarator */
227 struct _Declarator *func_stack; /* stack of function declarators */
228 struct _Declarator *next; /* next declarator in list */
229 } Declarator;
230
231 /* This structure stores information about a function parameter. */
232 typedef struct parameter {
233 struct parameter *next; /* next parameter in list */
234 DeclSpec decl_spec;
235 Declarator *declarator;
236 char *comment; /* comment following the parameter */
237 } Parameter;
238
239 /* This is a list of declarators. */
240 typedef struct declarator_list {
241 Declarator *first; /* pointer to first declarator in list */
242 Declarator *last; /* pointer to last declarator in list */
243 } DeclaratorList;
244
245 /* #include "symbol.h" */
246 typedef struct symbol {
247 struct symbol *next; /* next symbol in list */
248 char *name; /* name of symbol */
249 char *value; /* value of symbol (for defines) */
250 short flags; /* symbol attributes */
251 } Symbol;
252
253 /* parser stack entry type */
254 typedef union {
255 Text text;
256 DeclSpec decl_spec;
257 Parameter *parameter;
258 ParameterList param_list;
259 Declarator *declarator;
260 DeclaratorList decl_list;
261 } YYSTYPE;
262
263 /* The hash table length should be a prime number. */
264 #define SYM_MAX_HASH 251
265
266 typedef struct symbol_table {
267 Symbol *bucket[SYM_MAX_HASH]; /* hash buckets */
268 } SymbolTable;
269
270 extern SymbolTable *new_symbol_table /* Create symbol table */
271 (void);
272 extern void free_symbol_table /* Destroy symbol table */
273 (SymbolTable *s);
274 extern Symbol *find_symbol /* Lookup symbol name */
275 (SymbolTable *s, const char *n);
276 extern Symbol *new_symbol /* Define new symbol */
277 (SymbolTable *s, const char *n, const char *v, int f);
278
279 /* #include "semantic.h" */
280 extern void new_decl_spec (DeclSpec *, const char *, long, int);
281 extern void free_decl_spec (DeclSpec *);
282 extern void join_decl_specs (DeclSpec *, DeclSpec *, DeclSpec *);
283 extern void check_untagged (DeclSpec *);
284 extern Declarator *new_declarator (const char *, const char *, long);
285 extern void free_declarator (Declarator *);
286 extern void new_decl_list (DeclaratorList *, Declarator *);
287 extern void free_decl_list (DeclaratorList *);
288 extern void add_decl_list (DeclaratorList *, DeclaratorList *, Declarator *);
289 extern Parameter *new_parameter (DeclSpec *, Declarator *);
290 extern void free_parameter (Parameter *);
291 extern void new_param_list (ParameterList *, Parameter *);
292 extern void free_param_list (ParameterList *);
293 extern void add_param_list (ParameterList *, ParameterList *, Parameter *);
294 extern void new_ident_list (ParameterList *);
295 extern void add_ident_list (ParameterList *, ParameterList *, const char *);
296 extern void set_param_types (ParameterList *, DeclSpec *, DeclaratorList *);
297 extern void gen_declarations (DeclSpec *, DeclaratorList *);
298 extern void gen_prototype (DeclSpec *, Declarator *);
299 extern void gen_func_declarator (Declarator *);
300 extern void gen_func_definition (DeclSpec *, Declarator *);
301
302 extern void init_parser (void);
303 extern void process_file (FILE *infile, char *name);
304 extern char *cur_text (void);
305 extern char *cur_file_name (void);
306 extern char *implied_typedef (void);
307 extern void include_file (char *name, int convert);
308 extern char *supply_parm (int count);
309 extern char *xstrdup (const char *);
310 extern int already_declared (char *name);
311 extern int is_actual_func (Declarator *d);
312 extern int lint_ellipsis (Parameter *p);
313 extern int want_typedef (void);
314 extern void begin_tracking (void);
315 extern void begin_typedef (void);
316 extern void copy_typedef (char *s);
317 extern void ellipsis_varargs (Declarator *d);
318 extern void end_typedef (void);
319 extern void flush_varargs (void);
320 extern void fmt_library (int code);
321 extern void imply_typedef (const char *s);
322 extern void indent (FILE *outf);
323 extern void put_blankline (FILE *outf);
324 extern void put_body (FILE *outf, DeclSpec *decl_spec, Declarator *declarator);
325 extern void put_char (FILE *outf, int c);
326 extern void put_error (void);
327 extern void put_newline (FILE *outf);
328 extern void put_padded (FILE *outf, const char *s);
329 extern void put_string (FILE *outf, const char *s);
330 extern void track_in (void);
331
332 extern boolean file_comments;
333 extern FuncDefStyle func_style;
334 extern char base_file[];
335
336 extern int yylex (void);
337
338 /* declaration specifier attributes for the typedef statement currently being
339 * scanned
340 */
341 static int cur_decl_spec_flags;
342
343 /* pointer to parameter list for the current function definition */
344 static ParameterList *func_params;
345
346 /* A parser semantic action sets this pointer to the current declarator in
347 * a function parameter declaration in order to catch any comments following
348 * the parameter declaration on the same line. If the lexer scans a comment
349 * and <cur_declarator> is not NULL, then the comment is attached to the
350 * declarator. To ignore subsequent comments, the lexer sets this to NULL
351 * after scanning a comment or end of line.
352 */
353 static Declarator *cur_declarator;
354
355 /* temporary string buffer */
356 static char buf[MAX_TEXT_SIZE];
357
358 /* table of typedef names */
359 static SymbolTable *typedef_names;
360
361 /* table of define names */
362 static SymbolTable *define_names;
363
364 /* table of type qualifiers */
365 static SymbolTable *type_qualifiers;
366
367 /* information about the current input file */
368 typedef struct {
369 char *base_name; /* base input file name */
370 char *file_name; /* current file name */
371 FILE *file; /* input file */
372 unsigned line_num; /* current line number in input file */
373 FILE *tmp_file; /* temporary file */
374 long begin_comment; /* tmp file offset after last written ) or ; */
375 long end_comment; /* tmp file offset after last comment */
376 boolean convert; /* if TRUE, convert function definitions */
377 boolean changed; /* TRUE if conversion done in this file */
378 } IncludeStack;
379
380 static IncludeStack *cur_file; /* current input file */
381
382 /* #include "yyerror.c" */
383
384 static int haveAnsiParam (void);
385
386
387 /* Flags to enable us to find if a procedure returns a value.
388 */
389 static int return_val; /* nonzero on BRACES iff return-expression found */
390
391 static const char *
392 dft_decl_spec (void)
393 {
394 return (lintLibrary() && !return_val) ? "void" : "int";
395 }
396
397 static int
398 haveAnsiParam (void)
399 {
400 Parameter *p;
401 if (func_params != NULL) {
402 for (p = func_params->first; p != NULL; p = p->next) {
403 if (p->declarator->func_def == FUNC_ANSI) {
404 return TRUE;
405 }
406 }
407 }
408 return FALSE;
409 }
410 #line 409 "grammar.tab.c"
411
412 /* compatibility with bison */
413 #ifdef YYPARSE_PARAM
414 /* compatibility with FreeBSD */
415 # ifdef YYPARSE_PARAM_TYPE
416 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
417 # else
418 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
419 # endif
420 #else
421 # define YYPARSE_DECL() yyparse(void)
422 #endif
423
424 /* Parameters sent to lex. */
425 #ifdef YYLEX_PARAM
426 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
427 # define YYLEX yylex(YYLEX_PARAM)
428 #else
429 # define YYLEX_DECL() yylex(void)
430 # define YYLEX yylex()
431 #endif
432
433 /* Parameters sent to yyerror. */
434 #ifndef YYERROR_DECL
435 #define YYERROR_DECL() yyerror(const char *s)
436 #endif
437 #ifndef YYERROR_CALL
438 #define YYERROR_CALL(msg) yyerror(msg)
439 #endif
440
441 extern int YYPARSE_DECL();
442
443 #define T_IDENTIFIER 257
444 #define T_TYPEDEF_NAME 258
445 #define T_DEFINE_NAME 259
446 #define T_AUTO 260
447 #define T_EXTERN 261
448 #define T_REGISTER 262
449 #define T_STATIC 263
450 #define T_TYPEDEF 264
451 #define T_INLINE 265
452 #define T_EXTENSION 266
453 #define T_CHAR 267
454 #define T_DOUBLE 268
455 #define T_FLOAT 269
456 #define T_INT 270
457 #define T_VOID 271
458 #define T_LONG 272
459 #define T_SHORT 273
460 #define T_SIGNED 274
461 #define T_UNSIGNED 275
462 #define T_ENUM 276
463 #define T_STRUCT 277
464 #define T_UNION 278
465 #define T_Bool 279
466 #define T_Complex 280
467 #define T_Imaginary 281
468 #define T_TYPE_QUALIFIER 282
469 #define T_BRACKETS 283
470 #define T_LBRACE 284
471 #define T_MATCHRBRACE 285
472 #define T_ELLIPSIS 286
473 #define T_INITIALIZER 287
474 #define T_STRING_LITERAL 288
475 #define T_ASM 289
476 #define T_ASMARG 290
477 #define T_VA_DCL 291
478 #define YYERRCODE 256
479 typedef int YYINT;
480 static const YYINT grammar_lhs[] = { -1,
481 0, 0, 26, 26, 27, 27, 27, 27, 27, 27,
482 27, 31, 30, 30, 28, 28, 34, 28, 32, 32,
483 33, 33, 35, 35, 37, 38, 29, 39, 29, 36,
484 36, 36, 40, 40, 1, 1, 2, 2, 2, 3,
485 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
486 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
487 5, 5, 6, 6, 6, 19, 19, 8, 8, 9,
488 41, 9, 7, 7, 7, 25, 23, 23, 10, 10,
489 11, 11, 11, 11, 11, 20, 20, 21, 21, 22,
490 22, 14, 14, 15, 15, 16, 16, 16, 17, 17,
491 18, 18, 24, 24, 12, 12, 12, 13, 13, 13,
492 13, 13, 13, 13,
493 };
494 static const YYINT grammar_len[] = { 2,
495 0, 1, 1, 2, 1, 1, 1, 1, 3, 2,
496 2, 2, 3, 3, 2, 3, 0, 5, 2, 1,
497 0, 1, 1, 3, 0, 0, 7, 0, 5, 0,
498 1, 1, 1, 2, 1, 2, 1, 1, 1, 1,
499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
500 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
501 1, 1, 3, 2, 2, 1, 1, 1, 3, 1,
502 0, 4, 3, 2, 2, 1, 1, 1, 2, 1,
503 1, 3, 2, 4, 4, 2, 3, 0, 1, 1,
504 2, 1, 3, 1, 3, 2, 2, 1, 0, 1,
505 1, 3, 1, 2, 1, 2, 1, 3, 2, 1,
506 4, 3, 3, 2,
507 };
508 static const YYINT grammar_defred[] = { 0,
509 0, 0, 0, 0, 77, 0, 62, 40, 0, 42,
510 43, 20, 44, 0, 46, 47, 48, 49, 54, 50,
511 51, 52, 53, 76, 66, 67, 55, 56, 57, 61,
512 0, 7, 0, 0, 35, 37, 38, 39, 59, 60,
513 28, 0, 0, 0, 103, 81, 0, 0, 3, 5,
514 6, 8, 0, 10, 11, 78, 0, 90, 0, 0,
515 104, 0, 19, 0, 41, 45, 15, 36, 0, 68,
516 0, 0, 0, 83, 0, 0, 64, 0, 0, 74,
517 4, 58, 0, 82, 87, 91, 0, 14, 13, 9,
518 16, 0, 71, 0, 31, 33, 0, 0, 0, 0,
519 0, 94, 0, 0, 101, 12, 63, 73, 0, 0,
520 69, 0, 0, 0, 34, 0, 110, 96, 97, 0,
521 0, 84, 0, 85, 0, 23, 0, 0, 72, 26,
522 29, 114, 0, 0, 0, 109, 0, 93, 95, 102,
523 18, 0, 0, 108, 113, 112, 0, 24, 27, 111,
524 };
525 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
526 static const YYINT grammar_stos[] = { 0,
527 256, 40, 42, 38, 257, 258, 259, 260, 261, 262,
528 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
529 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
530 289, 59, 293, 294, 295, 296, 297, 298, 299, 300,
531 303, 304, 312, 313, 316, 317, 318, 319, 320, 321,
532 322, 323, 325, 285, 59, 258, 303, 298, 314, 315,
533 316, 288, 264, 290, 261, 266, 59, 295, 301, 302,
534 303, 332, 40, 283, 284, 316, 324, 304, 316, 324,
535 320, 258, 294, 41, 313, 298, 294, 321, 324, 59,
536 59, 44, 61, 330, 291, 321, 329, 333, 294, 307,
537 308, 309, 310, 311, 316, 285, 324, 324, 327, 303,
538 302, 334, 329, 284, 321, 40, 283, 303, 305, 306,
539 313, 41, 44, 41, 44, 303, 326, 328, 287, 284,
540 285, 41, 305, 307, 40, 283, 306, 286, 309, 316,
541 59, 44, 331, 41, 41, 41, 307, 303, 285, 41,
542 };
543 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
544 static const YYINT grammar_dgoto[] = { 33,
545 87, 35, 36, 37, 38, 39, 40, 69, 70, 41,
546 42, 119, 120, 100, 101, 102, 103, 104, 43, 44,
547 59, 60, 45, 46, 47, 48, 49, 50, 51, 52,
548 77, 53, 127, 109, 128, 97, 94, 143, 72, 98,
549 112,
550 };
551 static const YYINT grammar_sindex[] = { -2,
552 -3, 27, -239, -177, 0, 0, 0, 0, -274, 0,
553 0, 0, 0, -246, 0, 0, 0, 0, 0, 0,
554 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
555 -266, 0, 0, 455, 0, 0, 0, 0, 0, 0,
556 0, -35, -245, 128, 0, 0, -245, -2, 0, 0,
557 0, 0, 642, 0, 0, 0, -15, 0, -12, -239,
558 0, 590, 0, -27, 0, 0, 0, 0, -10, 0,
559 -11, 534, -72, 0, -237, -232, 0, -35, -232, 0,
560 0, 0, 642, 0, 0, 0, 455, 0, 0, 0,
561 0, 27, 0, 534, 0, 0, -222, 617, 209, 34,
562 39, 0, 44, 42, 0, 0, 0, 0, 27, -11,
563 0, -200, -196, -195, 0, 174, 0, 0, 0, -33,
564 243, 0, 561, 0, -177, 0, 33, 49, 0, 0,
565 0, 0, 53, 55, 417, 0, -33, 0, 0, 0,
566 0, 27, -188, 0, 0, 0, 57, 0, 0, 0,
567 };
568 static const YYINT grammar_rindex[] = { 99,
569 0, 0, 275, 0, 0, -38, 0, 0, 481, 0,
570 0, 0, 0, 509, 0, 0, 0, 0, 0, 0,
571 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
572 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
573 0, 30, 0, 0, 0, 0, 0, 101, 0, 0,
574 0, 0, 0, 0, 0, 0, 0, 0, 343, 309,
575 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
576 98, -182, 62, 0, 0, 133, 0, 64, 379, 0,
577 0, 0, -5, 0, 0, 0, 0, 0, 0, 0,
578 0, 0, 0, -182, 0, 0, 0, -180, -19, 0,
579 65, 0, 0, 68, 0, 0, 0, 0, 51, 9,
580 0, 0, 0, 0, 0, 0, 0, 0, 0, -13,
581 19, 0, 0, 0, 0, 0, 0, 52, 0, 0,
582 0, 0, 0, 0, 0, 0, 35, 0, 0, 0,
583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
584 };
585 #if YYBTYACC
586 static const YYINT grammar_cindex[] = { 0,
587 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
588 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
590 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
592 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
593 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
594 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
595 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
597 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
598 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
600 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
602 };
603 #endif
604 static const YYINT grammar_gindex[] = { 0,
605 11, -17, 0, 0, 13, 0, 0, 0, 20, 8,
606 -43, -1, -8, -89, 0, -9, 0, 0, 0, -44,
607 0, 0, 4, 0, 0, 0, 70, -53, 0, 0,
608 -18, 0, 0, 0, 0, 22, 0, 0, 0, 0,
609 0,
610 };
611 #define YYTABLESIZE 924
612 static const YYINT grammar_table[] = { 58,
613 78, 58, 58, 58, 73, 58, 135, 61, 88, 57,
614 34, 5, 56, 62, 85, 58, 68, 63, 96, 7,
615 58, 98, 78, 64, 98, 84, 134, 107, 80, 3,
616 107, 90, 17, 92, 17, 4, 17, 2, 75, 3,
617 96, 71, 30, 89, 115, 147, 76, 106, 91, 93,
618 79, 75, 70, 17, 121, 55, 32, 107, 34, 105,
619 108, 114, 105, 83, 4, 68, 2, 70, 3, 68,
620 80, 121, 86, 80, 122, 106, 105, 78, 106, 5,
621 56, 68, 123, 99, 124, 125, 129, 130, 80, 131,
622 80, 141, 142, 144, 110, 145, 149, 150, 1, 110,
623 2, 30, 99, 32, 79, 92, 118, 79, 100, 21,
624 22, 111, 137, 139, 133, 113, 126, 81, 0, 0,
625 0, 0, 79, 57, 79, 0, 99, 0, 140, 0,
626 0, 0, 0, 99, 0, 0, 0, 0, 0, 0,
627 0, 70, 0, 0, 0, 99, 0, 0, 0, 148,
628 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,
629 0, 0, 0, 0, 0, 4, 0, 2, 0, 0,
630 65, 0, 65, 65, 65, 0, 65, 0, 0, 0,
631 0, 0, 0, 0, 5, 6, 7, 8, 65, 10,
632 11, 65, 13, 66, 15, 16, 17, 18, 19, 20,
633 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
634 0, 4, 0, 116, 132, 3, 0, 0, 58, 58,
635 58, 58, 58, 58, 58, 78, 58, 58, 58, 58,
636 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
637 58, 58, 58, 58, 58, 78, 4, 74, 116, 136,
638 3, 17, 78, 1, 5, 6, 7, 8, 9, 10,
639 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
640 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
641 4, 54, 116, 5, 56, 0, 31, 80, 80, 80,
642 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
643 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
644 80, 80, 88, 80, 88, 88, 88, 0, 88, 0,
645 80, 79, 79, 79, 79, 79, 79, 79, 79, 79,
646 79, 79, 79, 79, 79, 79, 79, 79, 79, 79,
647 79, 79, 79, 79, 79, 79, 89, 79, 89, 89,
648 89, 0, 89, 0, 79, 25, 25, 25, 25, 25,
649 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
650 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
651 86, 25, 86, 86, 5, 56, 86, 0, 25, 65,
652 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
653 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
654 65, 65, 65, 65, 65, 65, 75, 0, 75, 75,
655 75, 0, 75, 0, 0, 0, 0, 0, 0, 0,
656 5, 6, 7, 8, 65, 10, 11, 75, 13, 66,
657 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
658 25, 26, 27, 28, 29, 30, 117, 146, 0, 0,
659 0, 0, 0, 0, 0, 5, 6, 7, 8, 65,
660 10, 11, 0, 13, 66, 15, 16, 17, 18, 19,
661 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
662 30, 117, 4, 0, 2, 0, 3, 0, 0, 5,
663 56, 0, 0, 0, 0, 0, 0, 0, 0, 0,
664 0, 0, 0, 67, 0, 0, 0, 0, 41, 0,
665 41, 0, 41, 0, 0, 117, 0, 0, 0, 0,
666 0, 88, 88, 0, 0, 0, 0, 0, 0, 41,
667 0, 0, 0, 0, 0, 0, 45, 0, 45, 0,
668 45, 0, 0, 0, 0, 0, 0, 88, 0, 0,
669 0, 0, 0, 0, 0, 89, 89, 45, 0, 0,
670 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
671 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
672 0, 89, 0, 0, 0, 0, 0, 0, 0, 86,
673 86, 0, 0, 0, 0, 0, 0, 0, 0, 0,
674 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
675 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
676 0, 0, 0, 0, 0, 75, 75, 75, 75, 75,
677 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
678 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
679 75, 75, 0, 0, 0, 0, 0, 0, 0, 0,
680 0, 0, 0, 0, 82, 7, 8, 65, 10, 11,
681 0, 13, 66, 15, 16, 17, 18, 19, 20, 21,
682 22, 23, 24, 25, 26, 27, 28, 29, 30, 0,
683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
684 0, 5, 6, 7, 8, 65, 10, 11, 0, 13,
685 66, 15, 16, 17, 18, 19, 20, 21, 22, 23,
686 24, 25, 26, 27, 28, 29, 30, 41, 41, 41,
687 41, 41, 41, 41, 0, 41, 41, 41, 41, 41,
688 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
689 41, 41, 41, 0, 0, 45, 45, 45, 45, 45,
690 45, 45, 0, 45, 45, 45, 45, 45, 45, 45,
691 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
692 45, 82, 7, 8, 65, 10, 11, 12, 13, 14,
693 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
694 25, 26, 27, 28, 29, 30, 0, 0, 82, 7,
695 8, 65, 10, 11, 95, 13, 66, 15, 16, 17,
696 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
697 28, 29, 30, 0, 0, 0, 138, 82, 7, 8,
698 65, 10, 11, 12, 13, 14, 15, 16, 17, 18,
699 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
700 29, 30, 0, 75, 82, 7, 8, 65, 10, 11,
701 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
702 22, 23, 24, 25, 26, 27, 28, 29, 30, 82,
703 7, 8, 65, 10, 11, 0, 13, 66, 15, 16,
704 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
705 27, 28, 29, 30,
706 };
707 static const YYINT grammar_check[] = { 38,
708 44, 40, 41, 42, 40, 44, 40, 4, 62, 2,
709 0, 257, 258, 288, 59, 3, 34, 264, 72, 259,
710 59, 41, 61, 290, 44, 41, 116, 41, 47, 42,
711 44, 59, 38, 44, 40, 38, 42, 40, 284, 42,
712 94, 34, 282, 62, 98, 135, 43, 285, 59, 61,
713 47, 284, 44, 59, 99, 59, 59, 76, 48, 41,
714 79, 284, 44, 53, 38, 83, 40, 59, 42, 87,
715 41, 116, 60, 44, 41, 41, 73, 121, 44, 257,
716 258, 99, 44, 73, 41, 44, 287, 284, 59, 285,
717 61, 59, 44, 41, 87, 41, 285, 41, 0, 92,
718 0, 284, 41, 284, 41, 41, 99, 44, 41, 59,
719 59, 92, 121, 123, 116, 94, 109, 48, -1, -1,
720 -1, -1, 59, 116, 61, -1, 116, -1, 125, -1,
721 -1, -1, -1, 123, -1, -1, -1, -1, -1, -1,
722 -1, 44, -1, -1, -1, 135, -1, -1, -1, 142,
723 -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
724 -1, -1, -1, -1, -1, 38, -1, 40, -1, -1,
725 38, -1, 40, 41, 42, -1, 44, -1, -1, -1,
726 -1, -1, -1, -1, 257, 258, 259, 260, 261, 262,
727 263, 59, 265, 266, 267, 268, 269, 270, 271, 272,
728 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
729 -1, 38, -1, 40, 41, 42, -1, -1, 257, 258,
730 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
731 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
732 279, 280, 281, 282, 283, 284, 38, 283, 40, 283,
733 42, 257, 291, 256, 257, 258, 259, 260, 261, 262,
734 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
735 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
736 38, 285, 40, 257, 258, -1, 289, 258, 259, 260,
737 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
738 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
739 281, 282, 38, 284, 40, 41, 42, -1, 44, -1,
740 291, 258, 259, 260, 261, 262, 263, 264, 265, 266,
741 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
742 277, 278, 279, 280, 281, 282, 38, 284, 40, 41,
743 42, -1, 44, -1, 291, 258, 259, 260, 261, 262,
744 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
745 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
746 38, 284, 40, 41, 257, 258, 44, -1, 291, 257,
747 258, 259, 260, 261, 262, 263, -1, 265, 266, 267,
748 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
749 278, 279, 280, 281, 282, 283, 38, -1, 40, 41,
750 42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
751 257, 258, 259, 260, 261, 262, 263, 59, 265, 266,
752 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
753 277, 278, 279, 280, 281, 282, 283, 41, -1, -1,
754 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
755 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
756 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
757 282, 283, 38, -1, 40, -1, 42, -1, -1, 257,
758 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
759 -1, -1, -1, 59, -1, -1, -1, -1, 38, -1,
760 40, -1, 42, -1, -1, 283, -1, -1, -1, -1,
761 -1, 257, 258, -1, -1, -1, -1, -1, -1, 59,
762 -1, -1, -1, -1, -1, -1, 38, -1, 40, -1,
763 42, -1, -1, -1, -1, -1, -1, 283, -1, -1,
764 -1, -1, -1, -1, -1, 257, 258, 59, -1, -1,
765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
766 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
767 -1, 283, -1, -1, -1, -1, -1, -1, -1, 257,
768 258, -1, -1, -1, -1, -1, -1, -1, -1, -1,
769 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
770 -1, -1, -1, -1, -1, 283, -1, -1, -1, -1,
771 -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
772 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
773 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
774 282, 283, -1, -1, -1, -1, -1, -1, -1, -1,
775 -1, -1, -1, -1, 258, 259, 260, 261, 262, 263,
776 -1, 265, 266, 267, 268, 269, 270, 271, 272, 273,
777 274, 275, 276, 277, 278, 279, 280, 281, 282, -1,
778 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
779 -1, 257, 258, 259, 260, 261, 262, 263, -1, 265,
780 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
781 276, 277, 278, 279, 280, 281, 282, 257, 258, 259,
782 260, 261, 262, 263, -1, 265, 266, 267, 268, 269,
783 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
784 280, 281, 282, -1, -1, 257, 258, 259, 260, 261,
785 262, 263, -1, 265, 266, 267, 268, 269, 270, 271,
786 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
787 282, 258, 259, 260, 261, 262, 263, 264, 265, 266,
788 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
789 277, 278, 279, 280, 281, 282, -1, -1, 258, 259,
790 260, 261, 262, 263, 291, 265, 266, 267, 268, 269,
791 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
792 280, 281, 282, -1, -1, -1, 286, 258, 259, 260,
793 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
794 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
795 281, 282, -1, 284, 258, 259, 260, 261, 262, 263,
796 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
797 274, 275, 276, 277, 278, 279, 280, 281, 282, 258,
798 259, 260, 261, 262, 263, -1, 265, 266, 267, 268,
799 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
800 279, 280, 281, 282,
801 };
802 #if YYBTYACC
803 static const YYINT grammar_ctable[] = { -1,
804 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
805 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
806 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
807 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
808 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
809 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
810 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
811 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
812 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
813 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
814 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
815 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
816 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
817 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
818 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
819 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
820 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
821 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
822 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
823 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
824 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
825 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
826 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
827 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
828 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
829 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
830 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
831 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
832 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
833 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
834 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
835 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
836 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
837 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
838 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
839 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
840 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
841 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
843 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
844 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
845 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
846 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
847 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
848 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
849 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
850 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
851 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
853 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
854 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
855 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
856 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
857 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
858 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
859 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
860 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
861 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
863 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
864 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
865 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
866 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
867 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
868 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
869 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
870 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
871 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
872 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
874 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
875 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
876 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
877 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
878 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
879 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
880 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
881 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
882 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
885 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
886 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
887 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
888 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
889 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
890 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
891 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
892 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
893 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
895 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
896 -1, -1, -1,
897 };
898 #endif
899 #define YYFINAL 33
900 #ifndef YYDEBUG
901 #define YYDEBUG 0
902 #endif
903 #define YYMAXTOKEN 291
904 #define YYUNDFTOKEN 335
905 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
906 #if YYDEBUG
907 #ifndef NULL
908 #define NULL (void*)0
909 #endif
910 static const char *const grammar_name[] = {
911
912 "$end",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
913 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
914 NULL,NULL,NULL,NULL,NULL,NULL,NULL,"'&'",NULL,"'('","')'","'*'",NULL,"','",NULL,
915 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"';'",NULL,
916 "'='",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
917 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
918 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
919 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
920 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
921 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
922 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
923 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
924 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
925 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
926 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
927 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
928 NULL,NULL,NULL,NULL,"error","T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME",
929 "T_AUTO","T_EXTERN","T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE",
930 "T_EXTENSION","T_CHAR","T_DOUBLE","T_FLOAT","T_INT","T_VOID","T_LONG","T_SHORT",
931 "T_SIGNED","T_UNSIGNED","T_ENUM","T_STRUCT","T_UNION","T_Bool","T_Complex",
932 "T_Imaginary","T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE",
933 "T_ELLIPSIS","T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",
934 "$accept","program","decl_specifiers","decl_specifier","storage_class",
935 "type_specifier","type_qualifier","struct_or_union_specifier","enum_specifier",
936 "init_declarator_list","init_declarator","declarator","direct_declarator",
937 "abs_declarator","direct_abs_declarator","parameter_type_list","parameter_list",
938 "parameter_declaration","opt_identifier_list","identifier_list",
939 "struct_or_union","pointer","opt_type_qualifiers","type_qualifier_list",
940 "any_id","identifier_or_ref","enumeration","translation_unit",
941 "external_declaration","declaration","function_definition",
942 "linkage_specification","braces","any_typedef","opt_declarator_list","$$1",
943 "declarator_list","opt_declaration_list","$$2","$$3","$$4","declaration_list",
944 "$$5","illegal-symbol",
945 };
946 static const char *const grammar_rule[] = {
947 "$accept : program",
948 "program :",
949 "program : translation_unit",
950 "translation_unit : external_declaration",
951 "translation_unit : translation_unit external_declaration",
952 "external_declaration : declaration",
953 "external_declaration : function_definition",
954 "external_declaration : ';'",
955 "external_declaration : linkage_specification",
956 "external_declaration : T_ASM T_ASMARG ';'",
957 "external_declaration : error T_MATCHRBRACE",
958 "external_declaration : error ';'",
959 "braces : T_LBRACE T_MATCHRBRACE",
960 "linkage_specification : T_EXTERN T_STRING_LITERAL braces",
961 "linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
962 "declaration : decl_specifiers ';'",
963 "declaration : decl_specifiers init_declarator_list ';'",
964 "$$1 :",
965 "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
966 "any_typedef : T_EXTENSION T_TYPEDEF",
967 "any_typedef : T_TYPEDEF",
968 "opt_declarator_list :",
969 "opt_declarator_list : declarator_list",
970 "declarator_list : declarator",
971 "declarator_list : declarator_list ',' declarator",
972 "$$2 :",
973 "$$3 :",
974 "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
975 "$$4 :",
976 "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
977 "opt_declaration_list :",
978 "opt_declaration_list : T_VA_DCL",
979 "opt_declaration_list : declaration_list",
980 "declaration_list : declaration",
981 "declaration_list : declaration_list declaration",
982 "decl_specifiers : decl_specifier",
983 "decl_specifiers : decl_specifiers decl_specifier",
984 "decl_specifier : storage_class",
985 "decl_specifier : type_specifier",
986 "decl_specifier : type_qualifier",
987 "storage_class : T_AUTO",
988 "storage_class : T_EXTERN",
989 "storage_class : T_REGISTER",
990 "storage_class : T_STATIC",
991 "storage_class : T_INLINE",
992 "storage_class : T_EXTENSION",
993 "type_specifier : T_CHAR",
994 "type_specifier : T_DOUBLE",
995 "type_specifier : T_FLOAT",
996 "type_specifier : T_INT",
997 "type_specifier : T_LONG",
998 "type_specifier : T_SHORT",
999 "type_specifier : T_SIGNED",
1000 "type_specifier : T_UNSIGNED",
1001 "type_specifier : T_VOID",
1002 "type_specifier : T_Bool",
1003 "type_specifier : T_Complex",
1004 "type_specifier : T_Imaginary",
1005 "type_specifier : T_TYPEDEF_NAME",
1006 "type_specifier : struct_or_union_specifier",
1007 "type_specifier : enum_specifier",
1008 "type_qualifier : T_TYPE_QUALIFIER",
1009 "type_qualifier : T_DEFINE_NAME",
1010 "struct_or_union_specifier : struct_or_union any_id braces",
1011 "struct_or_union_specifier : struct_or_union braces",
1012 "struct_or_union_specifier : struct_or_union any_id",
1013 "struct_or_union : T_STRUCT",
1014 "struct_or_union : T_UNION",
1015 "init_declarator_list : init_declarator",
1016 "init_declarator_list : init_declarator_list ',' init_declarator",
1017 "init_declarator : declarator",
1018 "$$5 :",
1019 "init_declarator : declarator '=' $$5 T_INITIALIZER",
1020 "enum_specifier : enumeration any_id braces",
1021 "enum_specifier : enumeration braces",
1022 "enum_specifier : enumeration any_id",
1023 "enumeration : T_ENUM",
1024 "any_id : T_IDENTIFIER",
1025 "any_id : T_TYPEDEF_NAME",
1026 "declarator : pointer direct_declarator",
1027 "declarator : direct_declarator",
1028 "direct_declarator : identifier_or_ref",
1029 "direct_declarator : '(' declarator ')'",
1030 "direct_declarator : direct_declarator T_BRACKETS",
1031 "direct_declarator : direct_declarator '(' parameter_type_list ')'",
1032 "direct_declarator : direct_declarator '(' opt_identifier_list ')'",
1033 "pointer : '*' opt_type_qualifiers",
1034 "pointer : '*' opt_type_qualifiers pointer",
1035 "opt_type_qualifiers :",
1036 "opt_type_qualifiers : type_qualifier_list",
1037 "type_qualifier_list : type_qualifier",
1038 "type_qualifier_list : type_qualifier_list type_qualifier",
1039 "parameter_type_list : parameter_list",
1040 "parameter_type_list : parameter_list ',' T_ELLIPSIS",
1041 "parameter_list : parameter_declaration",
1042 "parameter_list : parameter_list ',' parameter_declaration",
1043 "parameter_declaration : decl_specifiers declarator",
1044 "parameter_declaration : decl_specifiers abs_declarator",
1045 "parameter_declaration : decl_specifiers",
1046 "opt_identifier_list :",
1047 "opt_identifier_list : identifier_list",
1048 "identifier_list : any_id",
1049 "identifier_list : identifier_list ',' any_id",
1050 "identifier_or_ref : any_id",
1051 "identifier_or_ref : '&' any_id",
1052 "abs_declarator : pointer",
1053 "abs_declarator : pointer direct_abs_declarator",
1054 "abs_declarator : direct_abs_declarator",
1055 "direct_abs_declarator : '(' abs_declarator ')'",
1056 "direct_abs_declarator : direct_abs_declarator T_BRACKETS",
1057 "direct_abs_declarator : T_BRACKETS",
1058 "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
1059 "direct_abs_declarator : direct_abs_declarator '(' ')'",
1060 "direct_abs_declarator : '(' parameter_type_list ')'",
1061 "direct_abs_declarator : '(' ')'",
1062
1063 };
1064 #endif
1065
1066 #if YYDEBUG
1067 int yydebug;
1068 #endif
1069
1070 int yyerrflag;
1071 int yychar;
1072 YYSTYPE yyval;
1073 YYSTYPE yylval;
1074 int yynerrs;
1075
1076 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1077 YYLTYPE yyloc; /* position returned by actions */
1078 YYLTYPE yylloc; /* position from the lexer */
1079 #endif
1080
1081 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1082 #ifndef YYLLOC_DEFAULT
1083 #define YYLLOC_DEFAULT(loc, rhs, n) \
1084 do \
1085 { \
1086 if (n == 0) \
1087 { \
1088 (loc).first_line = YYRHSLOC(rhs, 0).last_line; \
1089 (loc).first_column = YYRHSLOC(rhs, 0).last_column; \
1090 (loc).last_line = YYRHSLOC(rhs, 0).last_line; \
1091 (loc).last_column = YYRHSLOC(rhs, 0).last_column; \
1092 } \
1093 else \
1094 { \
1095 (loc).first_line = YYRHSLOC(rhs, 1).first_line; \
1096 (loc).first_column = YYRHSLOC(rhs, 1).first_column; \
1097 (loc).last_line = YYRHSLOC(rhs, n).last_line; \
1098 (loc).last_column = YYRHSLOC(rhs, n).last_column; \
1099 } \
1100 } while (0)
1101 #endif /* YYLLOC_DEFAULT */
1102 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1103 #if YYBTYACC
1104
1105 #ifndef YYLVQUEUEGROWTH
1106 #define YYLVQUEUEGROWTH 32
1107 #endif
1108 #endif /* YYBTYACC */
1109
1110 /* define the initial stack-sizes */
1111 #ifdef YYSTACKSIZE
1112 #undef YYMAXDEPTH
1113 #define YYMAXDEPTH YYSTACKSIZE
1114 #else
1115 #ifdef YYMAXDEPTH
1116 #define YYSTACKSIZE YYMAXDEPTH
1117 #else
1118 #define YYSTACKSIZE 10000
1119 #define YYMAXDEPTH 10000
1120 #endif
1121 #endif
1122
1123 #ifndef YYINITSTACKSIZE
1124 #define YYINITSTACKSIZE 200
1125 #endif
1126
1127 typedef struct {
1128 unsigned stacksize;
1129 YYINT *s_base;
1130 YYINT *s_mark;
1131 YYINT *s_last;
1132 YYSTYPE *l_base;
1133 YYSTYPE *l_mark;
1134 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1135 YYLTYPE *p_base;
1136 YYLTYPE *p_mark;
1137 #endif
1138 } YYSTACKDATA;
1139 #if YYBTYACC
1140
1141 struct YYParseState_s
1142 {
1143 struct YYParseState_s *save; /* Previously saved parser state */
1144 YYSTACKDATA yystack; /* saved parser stack */
1145 int state; /* saved parser state */
1146 int errflag; /* saved error recovery status */
1147 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
1148 YYINT ctry; /* saved index in yyctable[] for this conflict */
1149 };
1150 typedef struct YYParseState_s YYParseState;
1151 #endif /* YYBTYACC */
1152 /* variables for the parser stack */
1153 static YYSTACKDATA yystack;
1154 #if YYBTYACC
1155
1156 /* Current parser state */
1157 static YYParseState *yyps = NULL;
1158
1159 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
1160 static YYParseState *yypath = NULL;
1161
1162 /* Base of the lexical value queue */
1163 static YYSTYPE *yylvals = NULL;
1164
1165 /* Current position at lexical value queue */
1166 static YYSTYPE *yylvp = NULL;
1167
1168 /* End position of lexical value queue */
1169 static YYSTYPE *yylve = NULL;
1170
1171 /* The last allocated position at the lexical value queue */
1172 static YYSTYPE *yylvlim = NULL;
1173
1174 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1175 /* Base of the lexical position queue */
1176 static YYLTYPE *yylpsns = NULL;
1177
1178 /* Current position at lexical position queue */
1179 static YYLTYPE *yylpp = NULL;
1180
1181 /* End position of lexical position queue */
1182 static YYLTYPE *yylpe = NULL;
1183
1184 /* The last allocated position at the lexical position queue */
1185 static YYLTYPE *yylplim = NULL;
1186 #endif
1187
1188 /* Current position at lexical token queue */
1189 static YYINT *yylexp = NULL;
1190
1191 static YYINT *yylexemes = NULL;
1192 #endif /* YYBTYACC */
1193 #line 1015 "grammar.y"
1194
1195 /* lex.yy.c */
1196 #define BEGIN yy_start = 1 + 2 *
1197
1198 #define CPP1 1
1199 #define INIT1 2
1200 #define INIT2 3
1201 #define CURLY 4
1202 #define LEXYACC 5
1203 #define ASM 6
1204 #define CPP_INLINE 7
1205
1206 extern char *yytext;
1207 extern FILE *yyin, *yyout;
1208
1209 static int curly; /* number of curly brace nesting levels */
1210 static int ly_count; /* number of occurrences of %% */
1211 static int inc_depth; /* include nesting level */
1212 static SymbolTable *included_files; /* files already included */
1213 static int yy_start = 0; /* start state number */
1214
1215 #define grammar_error(s) yaccError(s)
1216
1217 static void
1218 yaccError (const char *msg)
1219 {
1220 func_params = NULL;
1221 put_error(); /* tell what line we're on, and what file */
1222 fprintf(stderr, "%s at token '%s'\n", msg, yytext);
1223 }
1224
1225 /* Initialize the table of type qualifier keywords recognized by the lexical
1226 * analyzer.
1227 */
1228 void
1229 init_parser (void)
1230 {
1231 static const char *keywords[] = {
1232 "const",
1233 "restrict",
1234 "volatile",
1235 "interrupt",
1236 #ifdef vms
1237 "noshare",
1238 "readonly",
1239 #endif
1240 #if defined(MSDOS) || defined(OS2)
1241 "__cdecl",
1242 "__export",
1243 "__far",
1244 "__fastcall",
1245 "__fortran",
1246 "__huge",
1247 "__inline",
1248 "__interrupt",
1249 "__loadds",
1250 "__near",
1251 "__pascal",
1252 "__saveregs",
1253 "__segment",
1254 "__stdcall",
1255 "__syscall",
1256 "_cdecl",
1257 "_cs",
1258 "_ds",
1259 "_es",
1260 "_export",
1261 "_far",
1262 "_fastcall",
1263 "_fortran",
1264 "_huge",
1265 "_interrupt",
1266 "_loadds",
1267 "_near",
1268 "_pascal",
1269 "_saveregs",
1270 "_seg",
1271 "_segment",
1272 "_ss",
1273 "cdecl",
1274 "far",
1275 "huge",
1276 "near",
1277 "pascal",
1278 #ifdef OS2
1279 "__far16",
1280 #endif
1281 #endif
1282 #ifdef __GNUC__
1283 /* gcc aliases */
1284 "__builtin_va_arg",
1285 "__builtin_va_list",
1286 "__const",
1287 "__const__",
1288 "__inline",
1289 "__inline__",
1290 "__restrict",
1291 "__restrict__",
1292 "__volatile",
1293 "__volatile__",
1294 #endif
1295 };
1296 unsigned i;
1297
1298 /* Initialize type qualifier table. */
1299 type_qualifiers = new_symbol_table();
1300 for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
1301 new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
1302 }
1303 }
1304
1305 /* Process the C source file. Write function prototypes to the standard
1306 * output. Convert function definitions and write the converted source
1307 * code to a temporary file.
1308 */
1309 void
1310 process_file (FILE *infile, char *name)
1311 {
1312 char *s;
1313
1314 if (strlen(name) > 2) {
1315 s = name + strlen(name) - 2;
1316 if (*s == '.') {
1317 ++s;
1318 if (*s == 'l' || *s == 'y')
1319 BEGIN LEXYACC;
1320 #if defined(MSDOS) || defined(OS2)
1321 if (*s == 'L' || *s == 'Y')
1322 BEGIN LEXYACC;
1323 #endif
1324 }
1325 }
1326
1327 included_files = new_symbol_table();
1328 typedef_names = new_symbol_table();
1329 define_names = new_symbol_table();
1330 inc_depth = -1;
1331 curly = 0;
1332 ly_count = 0;
1333 func_params = NULL;
1334 yyin = infile;
1335 include_file(strcpy(base_file, name), func_style != FUNC_NONE);
1336 if (file_comments) {
1337 #if OPT_LINTLIBRARY
1338 if (lintLibrary()) {
1339 put_blankline(stdout);
1340 begin_tracking();
1341 }
1342 #endif
1343 put_string(stdout, "/* ");
1344 put_string(stdout, cur_file_name());
1345 put_string(stdout, " */\n");
1346 }
1347 yyparse();
1348 free_symbol_table(define_names);
1349 free_symbol_table(typedef_names);
1350 free_symbol_table(included_files);
1351 }
1352
1353 #ifdef NO_LEAKS
1354 void
1355 free_parser(void)
1356 {
1357 free_symbol_table (type_qualifiers);
1358 #ifdef FLEX_SCANNER
1359 if (yy_current_buffer != 0)
1360 yy_delete_buffer(yy_current_buffer);
1361 #endif
1362 }
1363 #endif
1364 #line 1363 "grammar.tab.c"
1365
1366 /* For use in generated program */
1367 #define yydepth (int)(yystack.s_mark - yystack.s_base)
1368 #if YYBTYACC
1369 #define yytrial (yyps->save)
1370 #endif /* YYBTYACC */
1371
1372 #if YYDEBUG
1373 #include <stdio.h> /* needed for printf */
1374 #endif
1375
1376 #include <stdlib.h> /* needed for malloc, etc */
1377 #include <string.h> /* needed for memset */
1378
1379 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
1380 static int yygrowstack(YYSTACKDATA *data)
1381 {
1382 int i;
1383 unsigned newsize;
1384 YYINT *newss;
1385 YYSTYPE *newvs;
1386 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1387 YYLTYPE *newps;
1388 #endif
1389
1390 if ((newsize = data->stacksize) == 0)
1391 newsize = YYINITSTACKSIZE;
1392 else if (newsize >= YYMAXDEPTH)
1393 return YYENOMEM;
1394 else if ((newsize *= 2) > YYMAXDEPTH)
1395 newsize = YYMAXDEPTH;
1396
1397 i = (int) (data->s_mark - data->s_base);
1398 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
1399 if (newss == NULL)
1400 return YYENOMEM;
1401
1402 data->s_base = newss;
1403 data->s_mark = newss + i;
1404
1405 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
1406 if (newvs == NULL)
1407 return YYENOMEM;
1408
1409 data->l_base = newvs;
1410 data->l_mark = newvs + i;
1411
1412 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1413 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
1414 if (newps == NULL)
1415 return YYENOMEM;
1416
1417 data->p_base = newps;
1418 data->p_mark = newps + i;
1419 #endif
1420
1421 data->stacksize = newsize;
1422 data->s_last = data->s_base + newsize - 1;
1423
1424 #if YYDEBUG
1425 if (yydebug)
1426 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
1427 #endif
1428 return 0;
1429 }
1430
1431 #if YYPURE || defined(YY_NO_LEAKS)
1432 static void yyfreestack(YYSTACKDATA *data)
1433 {
1434 free(data->s_base);
1435 free(data->l_base);
1436 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1437 free(data->p_base);
1438 #endif
1439 memset(data, 0, sizeof(*data));
1440 }
1441 #else
1442 #define yyfreestack(data) /* nothing */
1443 #endif /* YYPURE || defined(YY_NO_LEAKS) */
1444 #if YYBTYACC
1445
1446 static YYParseState *
1447 yyNewState(unsigned size)
1448 {
1449 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
1450 if (p == NULL) return NULL;
1451
1452 p->yystack.stacksize = size;
1453 if (size == 0)
1454 {
1455 p->yystack.s_base = NULL;
1456 p->yystack.l_base = NULL;
1457 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1458 p->yystack.p_base = NULL;
1459 #endif
1460 return p;
1461 }
1462 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
1463 if (p->yystack.s_base == NULL) return NULL;
1464 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
1465 if (p->yystack.l_base == NULL) return NULL;
1466 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
1467 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1468 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
1469 if (p->yystack.p_base == NULL) return NULL;
1470 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
1471 #endif
1472
1473 return p;
1474 }
1475
1476 static void
1477 yyFreeState(YYParseState *p)
1478 {
1479 yyfreestack(&p->yystack);
1480 free(p);
1481 }
1482 #endif /* YYBTYACC */
1483
1484 #define YYABORT goto yyabort
1485 #define YYREJECT goto yyabort
1486 #define YYACCEPT goto yyaccept
1487 #define YYERROR goto yyerrlab
1488 #if YYBTYACC
1489 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
1490 #define YYVALID_NESTED do { if (yyps->save && \
1491 yyps->save->save == 0) goto yyvalid; } while(0)
1492 #endif /* YYBTYACC */
1493
1494 int
1495 YYPARSE_DECL()
1496 {
1497 int yym, yyn, yystate, yyresult;
1498 #if YYBTYACC
1499 int yynewerrflag;
1500 YYParseState *yyerrctx = NULL;
1501 #endif /* YYBTYACC */
1502 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1503 YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */
1504 #endif
1505 #if YYDEBUG
1506 const char *yys;
1507
1508 if ((yys = getenv("YYDEBUG")) != NULL)
1509 {
1510 yyn = *yys;
1511 if (yyn >= '0' && yyn <= '9')
1512 yydebug = yyn - '0';
1513 }
1514 if (yydebug)
1515 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
1516 #endif
1517 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1518 memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));
1519 #endif
1520
1521 #if YYBTYACC
1522 yyps = yyNewState(0); if (yyps == NULL) goto yyenomem;
1523 yyps->save = NULL;
1524 #endif /* YYBTYACC */
1525 yym = 0;
1526 /* yyn is set below */
1527 yynerrs = 0;
1528 yyerrflag = 0;
1529 yychar = YYEMPTY;
1530 yystate = 0;
1531
1532 #if YYPURE
1533 memset(&yystack, 0, sizeof(yystack));
1534 #endif
1535
1536 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1537 yystack.s_mark = yystack.s_base;
1538 yystack.l_mark = yystack.l_base;
1539 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1540 yystack.p_mark = yystack.p_base;
1541 #endif
1542 yystate = 0;
1543 *yystack.s_mark = 0;
1544
1545 yyloop:
1546 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
1547 if (yychar < 0)
1548 {
1549 #if YYBTYACC
1550 do {
1551 if (yylvp < yylve)
1552 {
1553 /* we're currently re-reading tokens */
1554 yylval = *yylvp++;
1555 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1556 yylloc = *yylpp++;
1557 #endif
1558 yychar = *yylexp++;
1559 break;
1560 }
1561 if (yyps->save)
1562 {
1563 /* in trial mode; save scanner results for future parse attempts */
1564 if (yylvp == yylvlim)
1565 { /* Enlarge lexical value queue */
1566 size_t p = (size_t) (yylvp - yylvals);
1567 size_t s = (size_t) (yylvlim - yylvals);
1568
1569 s += YYLVQUEUEGROWTH;
1570 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
1571 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
1572 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1573 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
1574 #endif
1575 yylvp = yylve = yylvals + p;
1576 yylvlim = yylvals + s;
1577 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1578 yylpp = yylpe = yylpsns + p;
1579 yylplim = yylpsns + s;
1580 #endif
1581 yylexp = yylexemes + p;
1582 }
1583 *yylexp = (YYINT) YYLEX;
1584 *yylvp++ = yylval;
1585 yylve++;
1586 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1587 *yylpp++ = yylloc;
1588 yylpe++;
1589 #endif
1590 yychar = *yylexp++;
1591 break;
1592 }
1593 /* normal operation, no conflict encountered */
1594 #endif /* YYBTYACC */
1595 yychar = YYLEX;
1596 #if YYBTYACC
1597 } while (0);
1598 #endif /* YYBTYACC */
1599 if (yychar < 0) yychar = YYEOF;
1600 #if YYDEBUG
1601 if (yydebug)
1602 {
1603 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1604 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
1605 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1606 #ifdef YYSTYPE_TOSTRING
1607 #if YYBTYACC
1608 if (!yytrial)
1609 #endif /* YYBTYACC */
1610 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
1611 #endif
1612 fputc('\n', stderr);
1613 }
1614 #endif
1615 }
1616 #if YYBTYACC
1617
1618 /* Do we have a conflict? */
1619 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1620 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1621 {
1622 YYINT ctry;
1623
1624 if (yypath)
1625 {
1626 YYParseState *save;
1627 #if YYDEBUG
1628 if (yydebug)
1629 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
1630 YYDEBUGSTR, yydepth, yystate);
1631 #endif
1632 /* Switch to the next conflict context */
1633 save = yypath;
1634 yypath = save->save;
1635 save->save = NULL;
1636 ctry = save->ctry;
1637 if (save->state != yystate) YYABORT;
1638 yyFreeState(save);
1639
1640 }
1641 else
1642 {
1643
1644 /* Unresolved conflict - start/continue trial parse */
1645 YYParseState *save;
1646 #if YYDEBUG
1647 if (yydebug)
1648 {
1649 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
1650 if (yyps->save)
1651 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
1652 else
1653 fputs("Starting trial parse.\n", stderr);
1654 }
1655 #endif
1656 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1657 if (save == NULL) goto yyenomem;
1658 save->save = yyps->save;
1659 save->state = yystate;
1660 save->errflag = yyerrflag;
1661 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
1662 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1663 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
1664 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1665 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1666 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
1667 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1668 #endif
1669 ctry = yytable[yyn];
1670 if (yyctable[ctry] == -1)
1671 {
1672 #if YYDEBUG
1673 if (yydebug && yychar >= YYEOF)
1674 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
1675 #endif
1676 ctry++;
1677 }
1678 save->ctry = ctry;
1679 if (yyps->save == NULL)
1680 {
1681 /* If this is a first conflict in the stack, start saving lexemes */
1682 if (!yylexemes)
1683 {
1684 yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
1685 if (yylexemes == NULL) goto yyenomem;
1686 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
1687 if (yylvals == NULL) goto yyenomem;
1688 yylvlim = yylvals + YYLVQUEUEGROWTH;
1689 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1690 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
1691 if (yylpsns == NULL) goto yyenomem;
1692 yylplim = yylpsns + YYLVQUEUEGROWTH;
1693 #endif
1694 }
1695 if (yylvp == yylve)
1696 {
1697 yylvp = yylve = yylvals;
1698 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1699 yylpp = yylpe = yylpsns;
1700 #endif
1701 yylexp = yylexemes;
1702 if (yychar >= YYEOF)
1703 {
1704 *yylve++ = yylval;
1705 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1706 *yylpe++ = yylloc;
1707 #endif
1708 *yylexp = (YYINT) yychar;
1709 yychar = YYEMPTY;
1710 }
1711 }
1712 }
1713 if (yychar >= YYEOF)
1714 {
1715 yylvp--;
1716 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1717 yylpp--;
1718 #endif
1719 yylexp--;
1720 yychar = YYEMPTY;
1721 }
1722 save->lexeme = (int) (yylvp - yylvals);
1723 yyps->save = save;
1724 }
1725 if (yytable[yyn] == ctry)
1726 {
1727 #if YYDEBUG
1728 if (yydebug)
1729 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1730 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1731 #endif
1732 if (yychar < 0)
1733 {
1734 yylvp++;
1735 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1736 yylpp++;
1737 #endif
1738 yylexp++;
1739 }
1740 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1741 goto yyoverflow;
1742 yystate = yyctable[ctry];
1743 *++yystack.s_mark = (YYINT) yystate;
1744 *++yystack.l_mark = yylval;
1745 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1746 *++yystack.p_mark = yylloc;
1747 #endif
1748 yychar = YYEMPTY;
1749 if (yyerrflag > 0) --yyerrflag;
1750 goto yyloop;
1751 }
1752 else
1753 {
1754 yyn = yyctable[ctry];
1755 goto yyreduce;
1756 }
1757 } /* End of code dealing with conflicts */
1758 #endif /* YYBTYACC */
1759 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1760 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1761 {
1762 #if YYDEBUG
1763 if (yydebug)
1764 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1765 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1766 #endif
1767 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1768 yystate = yytable[yyn];
1769 *++yystack.s_mark = yytable[yyn];
1770 *++yystack.l_mark = yylval;
1771 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1772 *++yystack.p_mark = yylloc;
1773 #endif
1774 yychar = YYEMPTY;
1775 if (yyerrflag > 0) --yyerrflag;
1776 goto yyloop;
1777 }
1778 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1779 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1780 {
1781 yyn = yytable[yyn];
1782 goto yyreduce;
1783 }
1784 if (yyerrflag != 0) goto yyinrecovery;
1785 #if YYBTYACC
1786
1787 yynewerrflag = 1;
1788 goto yyerrhandler;
1789 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1790
1791 yyerrlab:
1792 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
1793 * before looking for error recovery */
1794 yystack.s_mark -= yym;
1795 yystate = *yystack.s_mark;
1796 yystack.l_mark -= yym;
1797 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1798 yystack.p_mark -= yym;
1799 #endif
1800
1801 yynewerrflag = 0;
1802 yyerrhandler:
1803 while (yyps->save)
1804 {
1805 int ctry;
1806 YYParseState *save = yyps->save;
1807 #if YYDEBUG
1808 if (yydebug)
1809 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1810 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1811 (int)(yylvp - yylvals - yyps->save->lexeme));
1812 #endif
1813 /* Memorize most forward-looking error state in case it's really an error. */
1814 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1815 {
1816 /* Free old saved error context state */
1817 if (yyerrctx) yyFreeState(yyerrctx);
1818 /* Create and fill out new saved error context state */
1819 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1820 if (yyerrctx == NULL) goto yyenomem;
1821 yyerrctx->save = yyps->save;
1822 yyerrctx->state = yystate;
1823 yyerrctx->errflag = yyerrflag;
1824 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1825 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1826 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1827 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1828 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1829 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1830 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1831 #endif
1832 yyerrctx->lexeme = (int) (yylvp - yylvals);
1833 }
1834 yylvp = yylvals + save->lexeme;
1835 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1836 yylpp = yylpsns + save->lexeme;
1837 #endif
1838 yylexp = yylexemes + save->lexeme;
1839 yychar = YYEMPTY;
1840 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1841 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1842 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1843 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1844 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1845 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1846 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1847 #endif
1848 ctry = ++save->ctry;
1849 yystate = save->state;
1850 /* We tried shift, try reduce now */
1851 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1852 yyps->save = save->save;
1853 save->save = NULL;
1854 yyFreeState(save);
1855
1856 /* Nothing left on the stack -- error */
1857 if (!yyps->save)
1858 {
1859 #if YYDEBUG
1860 if (yydebug)
1861 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1862 YYPREFIX, yydepth);
1863 #endif
1864 /* Restore state as it was in the most forward-advanced error */
1865 yylvp = yylvals + yyerrctx->lexeme;
1866 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1867 yylpp = yylpsns + yyerrctx->lexeme;
1868 #endif
1869 yylexp = yylexemes + yyerrctx->lexeme;
1870 yychar = yylexp[-1];
1871 yylval = yylvp[-1];
1872 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1873 yylloc = yylpp[-1];
1874 #endif
1875 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1876 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1877 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1878 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1879 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1880 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1881 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1882 #endif
1883 yystate = yyerrctx->state;
1884 yyFreeState(yyerrctx);
1885 yyerrctx = NULL;
1886 }
1887 yynewerrflag = 1;
1888 }
1889 if (yynewerrflag == 0) goto yyinrecovery;
1890 #endif /* YYBTYACC */
1891
1892 YYERROR_CALL("syntax error");
1893 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1894 yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */
1895 #endif
1896
1897 #if !YYBTYACC
1898 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1899 yyerrlab:
1900 #endif
1901 ++yynerrs;
1902
1903 yyinrecovery:
1904 if (yyerrflag < 3)
1905 {
1906 yyerrflag = 3;
1907 for (;;)
1908 {
1909 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1910 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1911 {
1912 #if YYDEBUG
1913 if (yydebug)
1914 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1915 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1916 #endif
1917 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1918 yystate = yytable[yyn];
1919 *++yystack.s_mark = yytable[yyn];
1920 *++yystack.l_mark = yylval;
1921 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1922 /* lookahead position is error end position */
1923 yyerror_loc_range[2] = yylloc;
1924 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1925 *++yystack.p_mark = yyloc;
1926 #endif
1927 goto yyloop;
1928 }
1929 else
1930 {
1931 #if YYDEBUG
1932 if (yydebug)
1933 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1934 YYDEBUGSTR, yydepth, *yystack.s_mark);
1935 #endif
1936 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1937 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1938 /* the current TOS position is the error start position */
1939 yyerror_loc_range[1] = *yystack.p_mark;
1940 #endif
1941 #if defined(YYDESTRUCT_CALL)
1942 #if YYBTYACC
1943 if (!yytrial)
1944 #endif /* YYBTYACC */
1945 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1946 YYDESTRUCT_CALL("error: discarding state",
1947 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1948 #else
1949 YYDESTRUCT_CALL("error: discarding state",
1950 yystos[*yystack.s_mark], yystack.l_mark);
1951 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1952 #endif /* defined(YYDESTRUCT_CALL) */
1953 --yystack.s_mark;
1954 --yystack.l_mark;
1955 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1956 --yystack.p_mark;
1957 #endif
1958 }
1959 }
1960 }
1961 else
1962 {
1963 if (yychar == YYEOF) goto yyabort;
1964 #if YYDEBUG
1965 if (yydebug)
1966 {
1967 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1968 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1969 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1970 }
1971 #endif
1972 #if defined(YYDESTRUCT_CALL)
1973 #if YYBTYACC
1974 if (!yytrial)
1975 #endif /* YYBTYACC */
1976 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1977 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1978 #else
1979 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1980 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1981 #endif /* defined(YYDESTRUCT_CALL) */
1982 yychar = YYEMPTY;
1983 goto yyloop;
1984 }
1985
1986 yyreduce:
1987 yym = yylen[yyn];
1988 #if YYDEBUG
1989 if (yydebug)
1990 {
1991 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1992 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1993 #ifdef YYSTYPE_TOSTRING
1994 #if YYBTYACC
1995 if (!yytrial)
1996 #endif /* YYBTYACC */
1997 if (yym > 0)
1998 {
1999 int i;
2000 fputc('<', stderr);
2001 for (i = yym; i > 0; i--)
2002 {
2003 if (i != yym) fputs(", ", stderr);
2004 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
2005 yystack.l_mark[1-i]), stderr);
2006 }
2007 fputc('>', stderr);
2008 }
2009 #endif
2010 fputc('\n', stderr);
2011 }
2012 #endif
2013 if (yym > 0)
2014 yyval = yystack.l_mark[1-yym];
2015 else
2016 memset(&yyval, 0, sizeof yyval);
2017 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2018
2019 /* Perform position reduction */
2020 memset(&yyloc, 0, sizeof(yyloc));
2021 #if YYBTYACC
2022 if (!yytrial)
2023 #endif /* YYBTYACC */
2024 {
2025 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);
2026 /* just in case YYERROR is invoked within the action, save
2027 the start of the rhs as the error start position */
2028 yyerror_loc_range[1] = yystack.p_mark[1-yym];
2029 }
2030 #endif
2031
2032 switch (yyn)
2033 {
2034 case 10:
2035 #line 378 "grammar.y"
2036 {
2037 yyerrok;
2038 }
2039 #line 2038 "grammar.tab.c"
2040 break;
2041 case 11:
2042 #line 382 "grammar.y"
2043 {
2044 yyerrok;
2045 }
2046 #line 2045 "grammar.tab.c"
2047 break;
2048 case 13:
2049 #line 393 "grammar.y"
2050 {
2051 /* Provide an empty action here so bison will not complain about
2052 * incompatible types in the default action it normally would
2053 * have generated.
2054 */
2055 }
2056 #line 2055 "grammar.tab.c"
2057 break;
2058 case 14:
2059 #line 400 "grammar.y"
2060 {
2061 /* empty */
2062 }
2063 #line 2062 "grammar.tab.c"
2064 break;
2065 case 15:
2066 #line 407 "grammar.y"
2067 {
2068 #if OPT_LINTLIBRARY
2069 if (types_out && want_typedef()) {
2070 gen_declarations(&yystack.l_mark[-1].decl_spec, (DeclaratorList *)0);
2071 flush_varargs();
2072 }
2073 #endif
2074 free_decl_spec(&yystack.l_mark[-1].decl_spec);
2075 end_typedef();
2076 }
2077 #line 2076 "grammar.tab.c"
2078 break;
2079 case 16:
2080 #line 418 "grammar.y"
2081 {
2082 if (func_params != NULL) {
2083 set_param_types(func_params, &yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
2084 } else {
2085 gen_declarations(&yystack.l_mark[-2].decl_spec, &yystack.l_mark[-1].decl_list);
2086 #if OPT_LINTLIBRARY
2087 flush_varargs();
2088 #endif
2089 free_decl_list(&yystack.l_mark[-1].decl_list);
2090 }
2091 free_decl_spec(&yystack.l_mark[-2].decl_spec);
2092 end_typedef();
2093 }
2094 #line 2093 "grammar.tab.c"
2095 break;
2096 case 17:
2097 #line 432 "grammar.y"
2098 {
2099 cur_decl_spec_flags = yystack.l_mark[0].decl_spec.flags;
2100 free_decl_spec(&yystack.l_mark[0].decl_spec);
2101 }
2102 #line 2101 "grammar.tab.c"
2103 break;
2104 case 18:
2105 #line 437 "grammar.y"
2106 {
2107 end_typedef();
2108 }
2109 #line 2108 "grammar.tab.c"
2110 break;
2111 case 19:
2112 #line 444 "grammar.y"
2113 {
2114 begin_typedef();
2115 }
2116 #line 2115 "grammar.tab.c"
2117 break;
2118 case 20:
2119 #line 448 "grammar.y"
2120 {
2121 begin_typedef();
2122 }
2123 #line 2122 "grammar.tab.c"
2124 break;
2125 case 23:
2126 #line 460 "grammar.y"
2127 {
2128 int flags = cur_decl_spec_flags;
2129
2130 /* If the typedef is a pointer type, then reset the short type
2131 * flags so it does not get promoted.
2132 */
2133 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
2134 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
2135 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
2136 free_declarator(yystack.l_mark[0].declarator);
2137 }
2138 #line 2137 "grammar.tab.c"
2139 break;
2140 case 24:
2141 #line 472 "grammar.y"
2142 {
2143 int flags = cur_decl_spec_flags;
2144
2145 if (strcmp(yystack.l_mark[0].declarator->text, yystack.l_mark[0].declarator->name) != 0)
2146 flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
2147 new_symbol(typedef_names, yystack.l_mark[0].declarator->name, NULL, flags);
2148 free_declarator(yystack.l_mark[0].declarator);
2149 }
2150 #line 2149 "grammar.tab.c"
2151 break;
2152 case 25:
2153 #line 484 "grammar.y"
2154 {
2155 check_untagged(&yystack.l_mark[-1].decl_spec);
2156 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
2157 yyerror("syntax error");
2158 YYERROR;
2159 }
2160 func_params = &(yystack.l_mark[0].declarator->head->params);
2161 func_params->begin_comment = cur_file->begin_comment;
2162 func_params->end_comment = cur_file->end_comment;
2163 }
2164 #line 2163 "grammar.tab.c"
2165 break;
2166 case 26:
2167 #line 495 "grammar.y"
2168 {
2169 /* If we're converting to K&R and we've got a nominally K&R
2170 * function which has a parameter which is ANSI (i.e., a prototyped
2171 * function pointer), then we must override the deciphered value of
2172 * 'func_def' so that the parameter will be converted.
2173 */
2174 if (func_style == FUNC_TRADITIONAL
2175 && haveAnsiParam()
2176 && yystack.l_mark[-3].declarator->head->func_def == func_style) {
2177 yystack.l_mark[-3].declarator->head->func_def = FUNC_BOTH;
2178 }
2179
2180 func_params = NULL;
2181
2182 if (cur_file->convert)
2183 gen_func_definition(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
2184 gen_prototype(&yystack.l_mark[-4].decl_spec, yystack.l_mark[-3].declarator);
2185 #if OPT_LINTLIBRARY
2186 flush_varargs();
2187 #endif
2188 free_decl_spec(&yystack.l_mark[-4].decl_spec);
2189 free_declarator(yystack.l_mark[-3].declarator);
2190 }
2191 #line 2190 "grammar.tab.c"
2192 break;
2193 case 28:
2194 #line 520 "grammar.y"
2195 {
2196 if (yystack.l_mark[0].declarator->func_def == FUNC_NONE) {
2197 yyerror("syntax error");
2198 YYERROR;
2199 }
2200 func_params = &(yystack.l_mark[0].declarator->head->params);
2201 func_params->begin_comment = cur_file->begin_comment;
2202 func_params->end_comment = cur_file->end_comment;
2203 }
2204 #line 2203 "grammar.tab.c"
2205 break;
2206 case 29:
2207 #line 530 "grammar.y"
2208 {
2209 DeclSpec decl_spec;
2210
2211 func_params = NULL;
2212
2213 new_decl_spec(&decl_spec, dft_decl_spec(), yystack.l_mark[-4].declarator->begin, DS_NONE);
2214 if (cur_file->convert)
2215 gen_func_definition(&decl_spec, yystack.l_mark[-4].declarator);
2216 gen_prototype(&decl_spec, yystack.l_mark[-4].declarator);
2217 #if OPT_LINTLIBRARY
2218 flush_varargs();
2219 #endif
2220 free_decl_spec(&decl_spec);
2221 free_declarator(yystack.l_mark[-4].declarator);
2222 }
2223 #line 2222 "grammar.tab.c"
2224 break;
2225 case 36:
2226 #line 561 "grammar.y"
2227 {
2228 join_decl_specs(&yyval.decl_spec, &yystack.l_mark[-1].decl_spec, &yystack.l_mark[0].decl_spec);
2229 free(yystack.l_mark[-1].decl_spec.text);
2230 free(yystack.l_mark[0].decl_spec.text);
2231 }
2232 #line 2231 "grammar.tab.c"
2233 break;
2234 case 40:
2235 #line 576 "grammar.y"
2236 {
2237 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2238 }
2239 #line 2238 "grammar.tab.c"
2240 break;
2241 case 41:
2242 #line 580 "grammar.y"
2243 {
2244 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_EXTERN);
2245 }
2246 #line 2245 "grammar.tab.c"
2247 break;
2248 case 42:
2249 #line 584 "grammar.y"
2250 {
2251 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2252 }
2253 #line 2252 "grammar.tab.c"
2254 break;
2255 case 43:
2256 #line 588 "grammar.y"
2257 {
2258 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_STATIC);
2259 }
2260 #line 2259 "grammar.tab.c"
2261 break;
2262 case 44:
2263 #line 592 "grammar.y"
2264 {
2265 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_INLINE);
2266 }
2267 #line 2266 "grammar.tab.c"
2268 break;
2269 case 45:
2270 #line 596 "grammar.y"
2271 {
2272 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_JUNK);
2273 }
2274 #line 2273 "grammar.tab.c"
2275 break;
2276 case 46:
2277 #line 603 "grammar.y"
2278 {
2279 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
2280 }
2281 #line 2280 "grammar.tab.c"
2282 break;
2283 case 47:
2284 #line 607 "grammar.y"
2285 {
2286 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2287 }
2288 #line 2287 "grammar.tab.c"
2289 break;
2290 case 48:
2291 #line 611 "grammar.y"
2292 {
2293 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_FLOAT);
2294 }
2295 #line 2294 "grammar.tab.c"
2296 break;
2297 case 49:
2298 #line 615 "grammar.y"
2299 {
2300 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2301 }
2302 #line 2301 "grammar.tab.c"
2303 break;
2304 case 50:
2305 #line 619 "grammar.y"
2306 {
2307 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2308 }
2309 #line 2308 "grammar.tab.c"
2310 break;
2311 case 51:
2312 #line 623 "grammar.y"
2313 {
2314 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_SHORT);
2315 }
2316 #line 2315 "grammar.tab.c"
2317 break;
2318 case 52:
2319 #line 627 "grammar.y"
2320 {
2321 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2322 }
2323 #line 2322 "grammar.tab.c"
2324 break;
2325 case 53:
2326 #line 631 "grammar.y"
2327 {
2328 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2329 }
2330 #line 2329 "grammar.tab.c"
2331 break;
2332 case 54:
2333 #line 635 "grammar.y"
2334 {
2335 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2336 }
2337 #line 2336 "grammar.tab.c"
2338 break;
2339 case 55:
2340 #line 639 "grammar.y"
2341 {
2342 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_CHAR);
2343 }
2344 #line 2343 "grammar.tab.c"
2345 break;
2346 case 56:
2347 #line 643 "grammar.y"
2348 {
2349 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2350 }
2351 #line 2350 "grammar.tab.c"
2352 break;
2353 case 57:
2354 #line 647 "grammar.y"
2355 {
2356 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2357 }
2358 #line 2357 "grammar.tab.c"
2359 break;
2360 case 58:
2361 #line 651 "grammar.y"
2362 {
2363 Symbol *s;
2364 s = find_symbol(typedef_names, yystack.l_mark[0].text.text);
2365 if (s != NULL)
2366 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
2367 }
2368 #line 2367 "grammar.tab.c"
2369 break;
2370 case 61:
2371 #line 663 "grammar.y"
2372 {
2373 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, DS_NONE);
2374 }
2375 #line 2374 "grammar.tab.c"
2376 break;
2377 case 62:
2378 #line 667 "grammar.y"
2379 {
2380 /* This rule allows the <pointer> nonterminal to scan #define
2381 * names as if they were type modifiers.
2382 */
2383 Symbol *s;
2384 s = find_symbol(define_names, yystack.l_mark[0].text.text);
2385 if (s != NULL)
2386 new_decl_spec(&yyval.decl_spec, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin, s->flags);
2387 }
2388 #line 2387 "grammar.tab.c"
2389 break;
2390 case 63:
2391 #line 680 "grammar.y"
2392 {
2393 char *s;
2394 if ((s = implied_typedef()) == NULL)
2395 (void)sprintf(s = buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-2].text.text, TEXT_LEN, yystack.l_mark[-1].text.text);
2396 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
2397 }
2398 #line 2397 "grammar.tab.c"
2399 break;
2400 case 64:
2401 #line 687 "grammar.y"
2402 {
2403 char *s;
2404 if ((s = implied_typedef()) == NULL)
2405 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text);
2406 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
2407 }
2408 #line 2407 "grammar.tab.c"
2409 break;
2410 case 65:
2411 #line 694 "grammar.y"
2412 {
2413 (void)sprintf(buf, "%.*s %.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text);
2414 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
2415 }
2416 #line 2415 "grammar.tab.c"
2417 break;
2418 case 66:
2419 #line 702 "grammar.y"
2420 {
2421 imply_typedef(yyval.text.text);
2422 }
2423 #line 2422 "grammar.tab.c"
2424 break;
2425 case 67:
2426 #line 706 "grammar.y"
2427 {
2428 imply_typedef(yyval.text.text);
2429 }
2430 #line 2429 "grammar.tab.c"
2431 break;
2432 case 68:
2433 #line 713 "grammar.y"
2434 {
2435 new_decl_list(&yyval.decl_list, yystack.l_mark[0].declarator);
2436 }
2437 #line 2436 "grammar.tab.c"
2438 break;
2439 case 69:
2440 #line 717 "grammar.y"
2441 {
2442 add_decl_list(&yyval.decl_list, &yystack.l_mark[-2].decl_list, yystack.l_mark[0].declarator);
2443 }
2444 #line 2443 "grammar.tab.c"
2445 break;
2446 case 70:
2447 #line 724 "grammar.y"
2448 {
2449 if (yystack.l_mark[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
2450 func_style == FUNC_TRADITIONAL && cur_file->convert) {
2451 gen_func_declarator(yystack.l_mark[0].declarator);
2452 fputs(cur_text(), cur_file->tmp_file);
2453 }
2454 cur_declarator = yyval.declarator;
2455 }
2456 #line 2455 "grammar.tab.c"
2457 break;
2458 case 71:
2459 #line 733 "grammar.y"
2460 {
2461 if (yystack.l_mark[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
2462 func_style == FUNC_TRADITIONAL && cur_file->convert) {
2463 gen_func_declarator(yystack.l_mark[-1].declarator);
2464 fputs(" =", cur_file->tmp_file);
2465 }
2466 }
2467 #line 2466 "grammar.tab.c"
2468 break;
2469 case 73:
2470 #line 745 "grammar.y"
2471 {
2472 char *s;
2473 if ((s = implied_typedef()) == NULL)
2474 (void)sprintf(s = buf, "enum %.*s", TEXT_LEN, yystack.l_mark[-1].text.text);
2475 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-2].text.begin, DS_NONE);
2476 }
2477 #line 2476 "grammar.tab.c"
2478 break;
2479 case 74:
2480 #line 752 "grammar.y"
2481 {
2482 char *s;
2483 if ((s = implied_typedef()) == NULL)
2484 (void)sprintf(s = buf, "%.*s {}", TEXT_LEN, yystack.l_mark[-1].text.text);
2485 new_decl_spec(&yyval.decl_spec, s, yystack.l_mark[-1].text.begin, DS_NONE);
2486 }
2487 #line 2486 "grammar.tab.c"
2488 break;
2489 case 75:
2490 #line 759 "grammar.y"
2491 {
2492 (void)sprintf(buf, "enum %.*s", TEXT_LEN, yystack.l_mark[0].text.text);
2493 new_decl_spec(&yyval.decl_spec, buf, yystack.l_mark[-1].text.begin, DS_NONE);
2494 }
2495 #line 2494 "grammar.tab.c"
2496 break;
2497 case 76:
2498 #line 767 "grammar.y"
2499 {
2500 imply_typedef("enum");
2501 yyval.text = yystack.l_mark[0].text;
2502 }
2503 #line 2502 "grammar.tab.c"
2504 break;
2505 case 79:
2506 #line 780 "grammar.y"
2507 {
2508 yyval.declarator = yystack.l_mark[0].declarator;
2509 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text);
2510 free(yyval.declarator->text);
2511 yyval.declarator->text = xstrdup(buf);
2512 yyval.declarator->begin = yystack.l_mark[-1].text.begin;
2513 yyval.declarator->pointer = TRUE;
2514 }
2515 #line 2514 "grammar.tab.c"
2516 break;
2517 case 81:
2518 #line 793 "grammar.y"
2519 {
2520 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, yystack.l_mark[0].text.text, yystack.l_mark[0].text.begin);
2521 }
2522 #line 2521 "grammar.tab.c"
2523 break;
2524 case 82:
2525 #line 797 "grammar.y"
2526 {
2527 yyval.declarator = yystack.l_mark[-1].declarator;
2528 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text);
2529 free(yyval.declarator->text);
2530 yyval.declarator->text = xstrdup(buf);
2531 yyval.declarator->begin = yystack.l_mark[-2].text.begin;
2532 }
2533 #line 2532 "grammar.tab.c"
2534 break;
2535 case 83:
2536 #line 805 "grammar.y"
2537 {
2538 yyval.declarator = yystack.l_mark[-1].declarator;
2539 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text);
2540 free(yyval.declarator->text);
2541 yyval.declarator->text = xstrdup(buf);
2542 }
2543 #line 2542 "grammar.tab.c"
2544 break;
2545 case 84:
2546 #line 812 "grammar.y"
2547 {
2548 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
2549 yyval.declarator->params = yystack.l_mark[-1].param_list;
2550 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2551 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2552 yyval.declarator->func_def = FUNC_ANSI;
2553 }
2554 #line 2553 "grammar.tab.c"
2555 break;
2556 case 85:
2557 #line 820 "grammar.y"
2558 {
2559 yyval.declarator = new_declarator("%s()", yystack.l_mark[-3].declarator->name, yystack.l_mark[-3].declarator->begin);
2560 yyval.declarator->params = yystack.l_mark[-1].param_list;
2561 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2562 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2563 yyval.declarator->func_def = FUNC_TRADITIONAL;
2564 }
2565 #line 2564 "grammar.tab.c"
2566 break;
2567 case 86:
2568 #line 831 "grammar.y"
2569 {
2570 (void)sprintf(yyval.text.text, "*%.*s", TEXT_LEN, yystack.l_mark[0].text.text);
2571 yyval.text.begin = yystack.l_mark[-1].text.begin;
2572 }
2573 #line 2572 "grammar.tab.c"
2574 break;
2575 case 87:
2576 #line 836 "grammar.y"
2577 {
2578 (void)sprintf(yyval.text.text, "*%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].text.text);
2579 yyval.text.begin = yystack.l_mark[-2].text.begin;
2580 }
2581 #line 2580 "grammar.tab.c"
2582 break;
2583 case 88:
2584 #line 844 "grammar.y"
2585 {
2586 strcpy(yyval.text.text, "");
2587 yyval.text.begin = 0L;
2588 }
2589 #line 2588 "grammar.tab.c"
2590 break;
2591 case 90:
2592 #line 853 "grammar.y"
2593 {
2594 (void)sprintf(yyval.text.text, "%s ", yystack.l_mark[0].decl_spec.text);
2595 yyval.text.begin = yystack.l_mark[0].decl_spec.begin;
2596 free(yystack.l_mark[0].decl_spec.text);
2597 }
2598 #line 2597 "grammar.tab.c"
2599 break;
2600 case 91:
2601 #line 859 "grammar.y"
2602 {
2603 (void)sprintf(yyval.text.text, "%.*s%.*s ", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yystack.l_mark[0].decl_spec.text);
2604 yyval.text.begin = yystack.l_mark[-1].text.begin;
2605 free(yystack.l_mark[0].decl_spec.text);
2606 }
2607 #line 2606 "grammar.tab.c"
2608 break;
2609 case 93:
2610 #line 869 "grammar.y"
2611 {
2612 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, "...");
2613 }
2614 #line 2613 "grammar.tab.c"
2615 break;
2616 case 94:
2617 #line 876 "grammar.y"
2618 {
2619 new_param_list(&yyval.param_list, yystack.l_mark[0].parameter);
2620 }
2621 #line 2620 "grammar.tab.c"
2622 break;
2623 case 95:
2624 #line 880 "grammar.y"
2625 {
2626 add_param_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].parameter);
2627 }
2628 #line 2627 "grammar.tab.c"
2629 break;
2630 case 96:
2631 #line 887 "grammar.y"
2632 {
2633 check_untagged(&yystack.l_mark[-1].decl_spec);
2634 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
2635 }
2636 #line 2635 "grammar.tab.c"
2637 break;
2638 case 97:
2639 #line 892 "grammar.y"
2640 {
2641 check_untagged(&yystack.l_mark[-1].decl_spec);
2642 yyval.parameter = new_parameter(&yystack.l_mark[-1].decl_spec, yystack.l_mark[0].declarator);
2643 }
2644 #line 2643 "grammar.tab.c"
2645 break;
2646 case 98:
2647 #line 897 "grammar.y"
2648 {
2649 check_untagged(&yystack.l_mark[0].decl_spec);
2650 yyval.parameter = new_parameter(&yystack.l_mark[0].decl_spec, (Declarator *)0);
2651 }
2652 #line 2651 "grammar.tab.c"
2653 break;
2654 case 99:
2655 #line 905 "grammar.y"
2656 {
2657 new_ident_list(&yyval.param_list);
2658 }
2659 #line 2658 "grammar.tab.c"
2660 break;
2661 case 101:
2662 #line 913 "grammar.y"
2663 {
2664 new_ident_list(&yyval.param_list);
2665 add_ident_list(&yyval.param_list, &yyval.param_list, yystack.l_mark[0].text.text);
2666 }
2667 #line 2666 "grammar.tab.c"
2668 break;
2669 case 102:
2670 #line 918 "grammar.y"
2671 {
2672 add_ident_list(&yyval.param_list, &yystack.l_mark[-2].param_list, yystack.l_mark[0].text.text);
2673 }
2674 #line 2673 "grammar.tab.c"
2675 break;
2676 case 103:
2677 #line 925 "grammar.y"
2678 {
2679 yyval.text = yystack.l_mark[0].text;
2680 }
2681 #line 2680 "grammar.tab.c"
2682 break;
2683 case 104:
2684 #line 929 "grammar.y"
2685 {
2686 #if OPT_LINTLIBRARY
2687 if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
2688 yyval.text = yystack.l_mark[0].text;
2689 } else
2690 #endif
2691 (void)sprintf(yyval.text.text, "&%.*s", TEXT_LEN, yystack.l_mark[0].text.text);
2692 yyval.text.begin = yystack.l_mark[-1].text.begin;
2693 }
2694 #line 2693 "grammar.tab.c"
2695 break;
2696 case 105:
2697 #line 942 "grammar.y"
2698 {
2699 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
2700 }
2701 #line 2700 "grammar.tab.c"
2702 break;
2703 case 106:
2704 #line 946 "grammar.y"
2705 {
2706 yyval.declarator = yystack.l_mark[0].declarator;
2707 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yystack.l_mark[-1].text.text, TEXT_LEN, yyval.declarator->text);
2708 free(yyval.declarator->text);
2709 yyval.declarator->text = xstrdup(buf);
2710 yyval.declarator->begin = yystack.l_mark[-1].text.begin;
2711 }
2712 #line 2711 "grammar.tab.c"
2713 break;
2714 case 108:
2715 #line 958 "grammar.y"
2716 {
2717 yyval.declarator = yystack.l_mark[-1].declarator;
2718 (void)sprintf(buf, "(%.*s)", TEXT_LEN, yyval.declarator->text);
2719 free(yyval.declarator->text);
2720 yyval.declarator->text = xstrdup(buf);
2721 yyval.declarator->begin = yystack.l_mark[-2].text.begin;
2722 }
2723 #line 2722 "grammar.tab.c"
2724 break;
2725 case 109:
2726 #line 966 "grammar.y"
2727 {
2728 yyval.declarator = yystack.l_mark[-1].declarator;
2729 (void)sprintf(buf, "%.*s%.*s", TEXT_LEN, yyval.declarator->text, TEXT_LEN, yystack.l_mark[0].text.text);
2730 free(yyval.declarator->text);
2731 yyval.declarator->text = xstrdup(buf);
2732 }
2733 #line 2732 "grammar.tab.c"
2734 break;
2735 case 110:
2736 #line 973 "grammar.y"
2737 {
2738 yyval.declarator = new_declarator(yystack.l_mark[0].text.text, "", yystack.l_mark[0].text.begin);
2739 }
2740 #line 2739 "grammar.tab.c"
2741 break;
2742 case 111:
2743 #line 977 "grammar.y"
2744 {
2745 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-3].declarator->begin);
2746 yyval.declarator->params = yystack.l_mark[-1].param_list;
2747 yyval.declarator->func_stack = yystack.l_mark[-3].declarator;
2748 yyval.declarator->head = (yystack.l_mark[-3].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-3].declarator->head;
2749 yyval.declarator->func_def = FUNC_ANSI;
2750 }
2751 #line 2750 "grammar.tab.c"
2752 break;
2753 case 112:
2754 #line 985 "grammar.y"
2755 {
2756 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].declarator->begin);
2757 yyval.declarator->func_stack = yystack.l_mark[-2].declarator;
2758 yyval.declarator->head = (yystack.l_mark[-2].declarator->func_stack == NULL) ? yyval.declarator : yystack.l_mark[-2].declarator->head;
2759 yyval.declarator->func_def = FUNC_ANSI;
2760 }
2761 #line 2760 "grammar.tab.c"
2762 break;
2763 case 113:
2764 #line 992 "grammar.y"
2765 {
2766 Declarator *d;
2767
2768 d = new_declarator("", "", yystack.l_mark[-2].text.begin);
2769 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-2].text.begin);
2770 yyval.declarator->params = yystack.l_mark[-1].param_list;
2771 yyval.declarator->func_stack = d;
2772 yyval.declarator->head = yyval.declarator;
2773 yyval.declarator->func_def = FUNC_ANSI;
2774 }
2775 #line 2774 "grammar.tab.c"
2776 break;
2777 case 114:
2778 #line 1003 "grammar.y"
2779 {
2780 Declarator *d;
2781
2782 d = new_declarator("", "", yystack.l_mark[-1].text.begin);
2783 yyval.declarator = new_declarator("%s()", "", yystack.l_mark[-1].text.begin);
2784 yyval.declarator->func_stack = d;
2785 yyval.declarator->head = yyval.declarator;
2786 yyval.declarator->func_def = FUNC_ANSI;
2787 }
2788 #line 2787 "grammar.tab.c"
2789 break;
2790 #line 2789 "grammar.tab.c"
2791 default:
2792 break;
2793 }
2794 yystack.s_mark -= yym;
2795 yystate = *yystack.s_mark;
2796 yystack.l_mark -= yym;
2797 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2798 yystack.p_mark -= yym;
2799 #endif
2800 yym = yylhs[yyn];
2801 if (yystate == 0 && yym == 0)
2802 {
2803 #if YYDEBUG
2804 if (yydebug)
2805 {
2806 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2807 #ifdef YYSTYPE_TOSTRING
2808 #if YYBTYACC
2809 if (!yytrial)
2810 #endif /* YYBTYACC */
2811 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
2812 #endif
2813 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
2814 }
2815 #endif
2816 yystate = YYFINAL;
2817 *++yystack.s_mark = YYFINAL;
2818 *++yystack.l_mark = yyval;
2819 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2820 *++yystack.p_mark = yyloc;
2821 #endif
2822 if (yychar < 0)
2823 {
2824 #if YYBTYACC
2825 do {
2826 if (yylvp < yylve)
2827 {
2828 /* we're currently re-reading tokens */
2829 yylval = *yylvp++;
2830 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2831 yylloc = *yylpp++;
2832 #endif
2833 yychar = *yylexp++;
2834 break;
2835 }
2836 if (yyps->save)
2837 {
2838 /* in trial mode; save scanner results for future parse attempts */
2839 if (yylvp == yylvlim)
2840 { /* Enlarge lexical value queue */
2841 size_t p = (size_t) (yylvp - yylvals);
2842 size_t s = (size_t) (yylvlim - yylvals);
2843
2844 s += YYLVQUEUEGROWTH;
2845 if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)
2846 goto yyenomem;
2847 if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
2848 goto yyenomem;
2849 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2850 if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
2851 goto yyenomem;
2852 #endif
2853 yylvp = yylve = yylvals + p;
2854 yylvlim = yylvals + s;
2855 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2856 yylpp = yylpe = yylpsns + p;
2857 yylplim = yylpsns + s;
2858 #endif
2859 yylexp = yylexemes + p;
2860 }
2861 *yylexp = (YYINT) YYLEX;
2862 *yylvp++ = yylval;
2863 yylve++;
2864 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2865 *yylpp++ = yylloc;
2866 yylpe++;
2867 #endif
2868 yychar = *yylexp++;
2869 break;
2870 }
2871 /* normal operation, no conflict encountered */
2872 #endif /* YYBTYACC */
2873 yychar = YYLEX;
2874 #if YYBTYACC
2875 } while (0);
2876 #endif /* YYBTYACC */
2877 if (yychar < 0) yychar = YYEOF;
2878 #if YYDEBUG
2879 if (yydebug)
2880 {
2881 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
2882 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
2883 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
2884 }
2885 #endif
2886 }
2887 if (yychar == YYEOF) goto yyaccept;
2888 goto yyloop;
2889 }
2890 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
2891 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
2892 yystate = yytable[yyn];
2893 else
2894 yystate = yydgoto[yym];
2895 #if YYDEBUG
2896 if (yydebug)
2897 {
2898 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
2899 #ifdef YYSTYPE_TOSTRING
2900 #if YYBTYACC
2901 if (!yytrial)
2902 #endif /* YYBTYACC */
2903 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
2904 #endif
2905 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
2906 }
2907 #endif
2908 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
2909 *++yystack.s_mark = (YYINT) yystate;
2910 *++yystack.l_mark = yyval;
2911 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2912 *++yystack.p_mark = yyloc;
2913 #endif
2914 goto yyloop;
2915 #if YYBTYACC
2916
2917 /* Reduction declares that this path is valid. Set yypath and do a full parse */
2918 yyvalid:
2919 if (yypath) YYABORT;
2920 while (yyps->save)
2921 {
2922 YYParseState *save = yyps->save;
2923 yyps->save = save->save;
2924 save->save = yypath;
2925 yypath = save;
2926 }
2927 #if YYDEBUG
2928 if (yydebug)
2929 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
2930 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
2931 #endif
2932 if (yyerrctx)
2933 {
2934 yyFreeState(yyerrctx);
2935 yyerrctx = NULL;
2936 }
2937 yylvp = yylvals + yypath->lexeme;
2938 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2939 yylpp = yylpsns + yypath->lexeme;
2940 #endif
2941 yylexp = yylexemes + yypath->lexeme;
2942 yychar = YYEMPTY;
2943 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
2944 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
2945 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
2946 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
2947 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2948 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
2949 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
2950 #endif
2951 yystate = yypath->state;
2952 goto yyloop;
2953 #endif /* YYBTYACC */
2954
2955 yyoverflow:
2956 YYERROR_CALL("yacc stack overflow");
2957 #if YYBTYACC
2958 goto yyabort_nomem;
2959 yyenomem:
2960 YYERROR_CALL("memory exhausted");
2961 yyabort_nomem:
2962 #endif /* YYBTYACC */
2963 yyresult = 2;
2964 goto yyreturn;
2965
2966 yyabort:
2967 yyresult = 1;
2968 goto yyreturn;
2969
2970 yyaccept:
2971 #if YYBTYACC
2972 if (yyps->save) goto yyvalid;
2973 #endif /* YYBTYACC */
2974 yyresult = 0;
2975
2976 yyreturn:
2977 #if defined(YYDESTRUCT_CALL)
2978 if (yychar != YYEOF && yychar != YYEMPTY)
2979 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2980 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
2981 #else
2982 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
2983 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2984
2985 {
2986 YYSTYPE *pv;
2987 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
2988 YYLTYPE *pp;
2989
2990 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
2991 YYDESTRUCT_CALL("cleanup: discarding state",
2992 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
2993 #else
2994 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
2995 YYDESTRUCT_CALL("cleanup: discarding state",
2996 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
2997 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
2998 }
2999 #endif /* defined(YYDESTRUCT_CALL) */
3000
3001 #if YYBTYACC
3002 if (yyerrctx)
3003 {
3004 yyFreeState(yyerrctx);
3005 yyerrctx = NULL;
3006 }
3007 while (yyps)
3008 {
3009 YYParseState *save = yyps;
3010 yyps = save->save;
3011 save->save = NULL;
3012 yyFreeState(save);
3013 }
3014 while (yypath)
3015 {
3016 YYParseState *save = yypath;
3017 yypath = save->save;
3018 save->save = NULL;
3019 yyFreeState(save);
3020 }
3021 #endif /* YYBTYACC */
3022 yyfreestack(&yystack);
3023 return (yyresult);
3024 }
3025