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