/* original parser id follows */ /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ #define YYBYACC 1 #define YYMAJOR 2 #define YYMINOR 0 #define YYPATCH 20241214 #define YYEMPTY (-1) #define yyclearin (yychar = YYEMPTY) #define yyerrok (yyerrflag = 0) #define YYRECOVERING() (yyerrflag != 0) #define YYENOMEM (-2) #define YYEOF 0 #undef YYBTYACC #define YYBTYACC 0 #define YYDEBUGSTR YYPREFIX "debug" #define YYPREFIX "yy" #define YYPURE 0 #line 18 "parse.y" #define Visible_ARG2_REC #define Visible_ARRAY #define Visible_BI_REC #define Visible_CA_REC #define Visible_CELL #define Visible_CODEBLOCK #define Visible_DEFER_LEN #define Visible_FCALL_REC #define Visible_FBLOCK #define Visible_SYMTAB #include #include #include #include #include #include #include #include #include #define YYMAXDEPTH 200 #if defined(YYBYACC) && (YYBYACC < 2) extern int yylex(void); #endif extern void eat_nl(void); static SYMTAB *save_arglist(const char *); static int init_arglist(void); static void RE_as_arg(void); static void check_array(SYMTAB *); static void check_var(SYMTAB *); static void code_array(SYMTAB *); static void code_call_id(CA_REC *, SYMTAB *); static void field_A2I(void); static void free_arglist(void); static void improve_arglist(const char *); static void resize_fblock(FBLOCK *); static void switch_code_to_main(void); static int scope; static FBLOCK *active_funct; static CA_REC *active_arglist; /* when scope is SCOPE_FUNCT */ #define code_address(x) if( is_local(x) ) \ code2op(L_PUSHA, (x)->offset) ;\ else code2(_PUSHA, (x)->stval.cp) #define CDP(x) (code_base+(x)) /* WARNING: These CDP() calculations become invalid after calls that might change code_base. Which are: code2(), code2op(), code_jmp() and code_pop(). */ /* this nonsense caters to MSDOS large model */ #define CODE_FE_PUSHA() code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA) #ifdef YYSTYPE #undef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #endif #ifndef YYSTYPE_IS_DECLARED #define YYSTYPE_IS_DECLARED 1 #line 81 "parse.y" typedef union YYSTYPE{ CELL *cp ; SYMTAB *stp ; int start ; /* code starting address as offset from code_base */ PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */ const BI_REC *bip ; /* ptr to info about a builtin */ FBLOCK *fbp ; /* ptr to a function block */ ARG2_REC *arg2p ; CA_REC *ca_p ; int ival ; PTR ptr ; } YYSTYPE; #endif /* !YYSTYPE_IS_DECLARED */ #line 106 "parse.c" /* compatibility with bison */ #ifdef YYPARSE_PARAM /* compatibility with FreeBSD */ # ifdef YYPARSE_PARAM_TYPE # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) # else # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) # endif #else # define YYPARSE_DECL() yyparse(void) #endif /* Parameters sent to lex. */ #ifdef YYLEX_PARAM # define YYLEX_DECL() yylex(void *YYLEX_PARAM) # define YYLEX yylex(YYLEX_PARAM) #else # define YYLEX_DECL() yylex(void) # define YYLEX yylex() #endif #if !(defined(yylex) || defined(YYSTATE)) int YYLEX_DECL(); #endif /* Parameters sent to yyerror. */ #ifndef YYERROR_DECL #define YYERROR_DECL() yyerror(const char *s) #endif #ifndef YYERROR_CALL #define YYERROR_CALL(msg) yyerror(msg) #endif extern int YYPARSE_DECL(); #define UNEXPECTED 257 #define BAD_DECIMAL 258 #define NL 259 #define SEMI_COLON 260 #define LBRACE 261 #define RBRACE 262 #define LBOX 263 #define RBOX 264 #define COMMA 265 #define IO_OUT 266 #define ASSIGN 267 #define ADD_ASG 268 #define SUB_ASG 269 #define MUL_ASG 270 #define DIV_ASG 271 #define MOD_ASG 272 #define POW_ASG 273 #define QMARK 274 #define COLON 275 #define OR 276 #define AND 277 #define IN 278 #define MATCH 279 #define EQ 280 #define NEQ 281 #define LT 282 #define LTE 283 #define GT 284 #define GTE 285 #define CAT 286 #define GETLINE 287 #define PLUS 288 #define MINUS 289 #define MUL 290 #define DIV 291 #define MOD 292 #define NOT 293 #define UMINUS 294 #define IO_IN 295 #define PIPE 296 #define POW 297 #define INC_or_DEC 298 #define DOLLAR 299 #define FIELD 300 #define LPAREN 301 #define RPAREN 302 #define DOUBLE 303 #define STRING_ 304 #define RE 305 #define ID 306 #define D_ID 307 #define FUNCT_ID 308 #define BUILTIN 309 #define LENGTH 310 #define PRINT 311 #define PRINTF 312 #define SPLIT 313 #define MATCH_FUNC 314 #define SUB 315 #define GSUB 316 #define DO 317 #define WHILE 318 #define FOR 319 #define BREAK 320 #define CONTINUE 321 #define IF 322 #define ELSE 323 #define DELETE 324 #define BEGIN 325 #define END 326 #define EXIT 327 #define NEXT 328 #define NEXTFILE 329 #define RETURN 330 #define FUNCTION 331 #define YYERRCODE 256 typedef short YYINT; static const YYINT yylhs[] = { -1, 0, 0, 36, 36, 36, 37, 40, 37, 41, 37, 42, 37, 43, 44, 37, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 45, 45, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 46, 13, 47, 13, 48, 49, 13, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 10, 25, 25, 26, 26, 8, 5, 4, 27, 27, 6, 6, 6, 7, 7, 50, 50, 17, 4, 51, 4, 52, 4, 16, 4, 4, 18, 18, 19, 19, 53, 53, 13, 13, 10, 15, 15, 4, 4, 20, 4, 11, 11, 11, 11, 11, 15, 13, 13, 13, 13, 13, 13, 13, 15, 22, 54, 54, 15, 15, 15, 15, 15, 23, 4, 4, 21, 21, 15, 15, 15, 15, 15, 55, 12, 12, 9, 9, 15, 28, 28, 24, 24, 38, 29, 30, 30, 34, 34, 35, 35, 39, 15, 31, 31, 32, 32, 32, 33, 33, }; static const YYINT yylen[] = { 2, 1, 2, 1, 1, 2, 1, 0, 3, 0, 3, 0, 3, 0, 0, 6, 3, 3, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 4, 0, 4, 0, 0, 7, 1, 2, 1, 1, 1, 3, 1, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 2, 2, 2, 2, 1, 0, 1, 1, 3, 5, 0, 5, 1, 1, 1, 3, 2, 3, 3, 0, 2, 4, 2, 1, 4, 1, 7, 4, 2, 4, 3, 4, 1, 2, 1, 2, 3, 5, 5, 5, 6, 7, 3, 6, 2, 1, 2, 6, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3, 2, 5, 1, 3, 3, 4, 4, 1, 6, 1, 2, 3, 2, 3, 1, 2, 2, 3, 4, 1, 1, 1, 2, 3, 6, 1, 1, 1, 3, 2, 4, 2, 2, 0, 1, 1, 3, 1, 3, 2, 2, 1, 3, 3, 2, 2, }; static const YYINT yydefred[] = { 0, 167, 0, 149, 0, 0, 0, 0, 0, 117, 0, 57, 58, 61, 0, 82, 82, 0, 0, 0, 155, 156, 7, 9, 0, 0, 6, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 4, 0, 0, 0, 31, 32, 84, 85, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 20, 0, 0, 0, 0, 0, 28, 82, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 75, 0, 120, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 161, 162, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 13, 52, 48, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 130, 0, 159, 0, 5, 152, 150, 151, 0, 17, 25, 0, 0, 26, 27, 0, 0, 0, 140, 29, 30, 0, 142, 0, 16, 21, 23, 100, 0, 104, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 60, 0, 0, 168, 0, 0, 134, 0, 0, 0, 0, 8, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 41, 42, 43, 44, 45, 46, 18, 12, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 0, 0, 153, 0, 102, 0, 0, 0, 0, 114, 141, 143, 95, 0, 105, 106, 0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, 170, 0, 136, 135, 0, 0, 0, 0, 0, 0, 148, 133, 0, 160, 0, 99, 0, 103, 93, 0, 96, 107, 101, 88, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 173, 175, 172, 174, 81, 131, 0, 0, 53, 0, 166, 0, 0, 0, 0, 83, 0, 0, 0, 110, 119, 112, 138, 15, 0, 0, 157, 154, 115, 0, 0, 0, 0, 113, 98, 158, }; #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING) static const YYINT yystos[] = { 0, 256, 261, 287, 288, 289, 293, 298, 299, 300, 301, 303, 304, 305, 306, 308, 309, 310, 313, 314, 315, 316, 325, 326, 331, 333, 334, 341, 342, 343, 344, 346, 347, 348, 355, 361, 362, 363, 369, 370, 371, 372, 388, 256, 259, 260, 311, 312, 317, 318, 319, 320, 321, 322, 324, 327, 328, 329, 330, 334, 336, 337, 346, 349, 350, 351, 353, 354, 360, 378, 385, 301, 306, 344, 348, 348, 348, 301, 306, 343, 344, 307, 348, 340, 344, 346, 298, 338, 338, 338, 301, 301, 301, 373, 374, 306, 308, 369, 348, 267, 268, 269, 270, 271, 272, 273, 267, 268, 269, 270, 271, 272, 273, 298, 265, 274, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 375, 348, 288, 289, 290, 291, 292, 296, 297, 265, 302, 387, 301, 334, 301, 334, 295, 343, 344, 345, 262, 378, 301, 301, 378, 378, 301, 306, 346, 378, 378, 378, 346, 378, 256, 262, 337, 378, 337, 337, 260, 346, 352, 337, 338, 337, 346, 338, 344, 338, 338, 265, 302, 302, 265, 302, 263, 301, 364, 365, 301, 302, 306, 346, 346, 346, 334, 334, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 346, 376, 381, 379, 380, 306, 346, 346, 346, 346, 346, 346, 346, 334, 335, 378, 348, 348, 348, 348, 348, 287, 348, 346, 346, 356, 306, 367, 368, 295, 346, 260, 306, 346, 346, 338, 378, 378, 378, 323, 384, 260, 302, 346, 386, 301, 339, 346, 358, 359, 318, 263, 263, 263, 346, 278, 346, 359, 302, 306, 346, 366, 358, 302, 302, 265, 265, 346, 346, 346, 346, 345, 302, 265, 302, 265, 302, 278, 260, 302, 263, 337, 302, 337, 302, 340, 266, 383, 265, 301, 359, 359, 359, 306, 264, 265, 302, 265, 302, 302, 306, 356, 377, 275, 346, 306, 306, 359, 302, 346, 378, 346, 346, 264, 264, 264, 298, 302, 335, 382, 265, 302, 357, 302, 264, 302, 346, 345, 378, 378, 302, }; #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */ static const YYINT yydgoto[] = { 25, 59, 221, 60, 61, 87, 253, 83, 27, 28, 29, 30, 145, 62, 32, 33, 63, 64, 65, 168, 66, 67, 34, 232, 329, 255, 256, 68, 35, 36, 37, 184, 185, 268, 234, 235, 38, 39, 40, 41, 93, 94, 126, 208, 309, 69, 210, 211, 209, 326, 294, 247, 70, 251, 137, 42, }; static const YYINT yysindex[] = { 57, 0, 268, 0, 2322, 2322, 2322, 23, 2202, 0, 2352, 0, 0, 0, -286, 0, 0, -246, -243, -207, 0, 0, 0, 0, -174, 57, 0, 0, 2322, 349, 122, 2637, 2322, -13, -263, -166, -144, -142, 0, 0, 0, -144, -43, -163, 0, 0, 0, 0, 0, -136, -113, -122, -122, -99, -291, -70, -122, -122, -70, 0, 118, 0, 2578, 343, 343, 1840, 343, 0, 0, 0, 343, 2352, -286, -152, -155, -155, -155, -271, 0, 0, 0, 0, 0, -257, -3, 2143, 0, -84, -81, -79, 2232, 2352, 2352, -144, -144, 0, 0, 0, -65, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 0, 0, 0, 0, 0, -64, 2352, 2352, 2352, 2352, 2352, 2352, 2352, -68, -13, 2322, 2322, 2322, 2322, 2322, -40, 2322, 2352, 0, 0, 2352, 0, -44, 0, 0, 0, 0, -58, 0, 0, 2352, 1870, 0, 0, 2352, -122, 2578, 0, 0, 0, 2578, 0, -122, 0, 0, 0, 0, -41, 0, 2604, 2262, 0, 2382, -45, 2485, 30, -22, 35, 49, 2352, 11, 0, 2352, 0, 2352, 15, 0, 2412, 2352, 0, -215, 2497, 2658, 2679, 0, 0, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2703, 2352, 2352, 2352, 2352, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, -42, -42, -155, -155, -155, 23, -65, 2512, 2703, 54, 0, 19, 60, 0, 2524, 0, -256, 2616, 2539, 79, 0, 0, 0, 0, 343, 0, 0, 2551, 343, 2292, 77, 2703, 0, 86, 51, 2352, 2352, 2352, 2703, 53, 2703, -110, 0, -125, 2170, 0, 62, 0, 0, 63, 2352, 2703, 2691, 119, 262, 0, 0, 2352, 0, 70, 0, 75, 0, 0, 2352, 0, 0, 0, 0, -231, 2352, -122, 2352, 2352, -80, -69, 7, 0, 87, 0, 0, 0, 0, 0, 0, 66, -68, 0, 2197, 0, 82, 50, 11, 2703, 0, 2703, 2566, 87, 0, 0, 0, 0, 0, 2352, 23, 0, 0, 0, -122, -122, 2703, 84, 0, 0, 0, }; static const YYINT yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, 0, 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, -53, 26, 1691, 0, 0, 0, 0, 0, 0, 0, 0, 1459, 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, 531, 705, 937, 995, 1053, 0, 415, 0, 0, 473, 0, 0, 1970, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1111, 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, 1749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 763, 0, 0, 0, 0, 0, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 0, 0, 0, 0, -191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2442, 0, 0, 107, 0, 1924, 0, 0, 0, 0, 0, -212, 273, 348, 2028, 2036, 2048, 2056, 2068, 2076, 2088, 2096, 2108, 2116, 2128, 0, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1517, 1575, 1169, 1227, 1285, 1401, 821, 0, -214, 0, 0, 0, 108, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, -241, 0, -216, 0, 0, 0, 0, -184, 0, -183, 0, 0, 1924, 0, 0, 0, 0, 0, 0, 0, -35, 0, 73, -61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1343, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -92, 81, 0, -108, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2136, 0, 0, 0, 0, }; #if YYBTYACC static const YYINT yycindex[] = { 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #endif static const YYINT yygindex[] = { 0, 21, 103, 0, -50, 17, 0, 161, 0, 0, -7, -1, -211, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 141, 0, 229, -115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define YYTABLESIZE 2988 static const YYINT yytable[] = { 79, 31, 135, 73, 73, 73, 80, 73, 177, 84, 162, 85, 86, 164, 165, 153, 169, 278, 79, 79, 171, 26, 284, 79, 79, 79, 31, 73, 8, 9, 77, 73, 88, 89, 177, 143, 74, 75, 76, 136, 82, 144, 86, 78, 78, 178, 26, 34, 34, 34, 78, 139, 34, 34, 34, 90, 154, 139, 91, 158, 98, 79, 141, 34, 127, 147, 167, 264, 77, 77, 84, 315, 172, 150, 151, 77, 174, 155, 156, 157, 159, 90, 89, 86, 163, 170, 78, 270, 139, 173, 34, 189, 190, 191, 92, 175, 44, 45, 176, 146, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 192, 193, 334, 2, 90, 89, 213, 214, 215, 216, 217, 218, 219, 73, 73, 73, 73, 73, 95, 73, 96, 138, 230, 44, 45, 231, 302, 133, 134, 297, 298, 299, 113, 220, 222, 237, 240, 80, 80, 241, 301, 295, 80, 80, 80, 140, 223, 224, 225, 226, 227, 148, 229, 87, 87, 250, 242, 254, 314, 86, 87, 243, 244, 303, 261, 182, 245, 263, 147, 254, 320, 295, 267, 254, 149, 44, 45, 44, 45, 2, 80, 321, 295, 288, 51, 51, 51, 290, 152, 51, 51, 51, 11, 11, 11, 274, 275, 276, 277, 51, 51, 51, 51, 3, 4, 5, 183, 143, 186, 6, 14, 14, 14, 144, 7, 8, 9, 10, 134, 11, 12, 13, 14, 236, 15, 16, 17, 51, 212, 18, 19, 20, 21, 228, 130, 131, 132, 84, 142, 85, 133, 134, 8, 9, 77, 254, 254, 254, 233, 78, 106, 107, 108, 109, 110, 111, 112, 322, 295, 257, 231, 128, 129, 130, 131, 132, 179, 311, 246, 133, 134, 33, 33, 33, 254, 262, 33, 33, 33, 258, 316, 113, 318, 319, 259, 179, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 260, 1, 331, 295, 317, 265, 2, 280, 143, 281, 8, 9, 77, 282, 144, 333, 33, 78, 220, 222, 49, 49, 49, 91, 91, 49, 49, 49, 92, 92, 287, 293, 3, 4, 5, 49, 49, 49, 6, 295, 296, 335, 336, 7, 8, 9, 10, 300, 11, 12, 13, 14, 306, 15, 16, 17, 324, 307, 18, 19, 20, 21, 160, 49, 312, 44, 45, 2, 161, 313, 22, 23, 330, 323, 337, 163, 24, 106, 107, 108, 109, 110, 111, 112, 117, 118, 119, 120, 121, 122, 123, 124, 125, 3, 4, 5, 82, 77, 164, 6, 325, 292, 308, 269, 7, 8, 9, 10, 113, 11, 12, 13, 14, 97, 15, 16, 17, 46, 47, 18, 19, 20, 21, 48, 49, 50, 51, 52, 53, 0, 54, 0, 0, 55, 56, 57, 58, 94, 0, 0, 94, 94, 94, 94, 0, 47, 47, 47, 0, 0, 47, 47, 47, 120, 121, 122, 123, 124, 125, 0, 47, 47, 47, 47, 47, 47, 0, 0, 94, 94, 94, 0, 0, 0, 94, 0, 0, 0, 0, 94, 94, 94, 94, 0, 94, 94, 94, 94, 47, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 0, 94, 0, 0, 94, 94, 94, 94, 43, 0, 0, 44, 45, 2, 0, 0, 35, 35, 35, 0, 0, 35, 35, 35, 118, 119, 120, 121, 122, 123, 124, 125, 35, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 14, 35, 15, 16, 17, 46, 47, 18, 19, 20, 21, 48, 49, 50, 51, 52, 53, 0, 54, 0, 0, 55, 56, 57, 58, 160, 0, 0, 44, 45, 2, 0, 0, 36, 36, 36, 0, 0, 36, 36, 36, 0, 99, 100, 101, 102, 103, 104, 105, 36, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 14, 36, 15, 16, 17, 46, 47, 18, 19, 20, 21, 48, 49, 50, 51, 52, 53, 0, 54, 0, 0, 55, 56, 57, 58, 76, 76, 76, 0, 82, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 76, 76, 76, 76, 76, 76, 76, 0, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0, 76, 76, 76, 0, 0, 76, 76, 76, 76, 118, 118, 118, 0, 82, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 0, 118, 118, 118, 0, 0, 118, 118, 118, 118, 59, 59, 59, 0, 82, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, 59, 59, 59, 59, 59, 59, 0, 82, 59, 59, 59, 76, 76, 76, 76, 76, 76, 76, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, 0, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, 59, 59, 59, 137, 137, 137, 0, 0, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 137, 137, 137, 137, 137, 0, 137, 137, 137, 137, 137, 137, 0, 137, 137, 137, 137, 137, 0, 137, 137, 137, 0, 0, 137, 137, 137, 137, 122, 122, 122, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 0, 0, 122, 122, 122, 122, 145, 145, 145, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 145, 145, 145, 145, 0, 0, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 0, 145, 145, 145, 0, 0, 145, 145, 145, 145, 67, 67, 67, 0, 0, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 0, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 67, 67, 67, 0, 0, 67, 67, 67, 67, 111, 111, 111, 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 0, 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 0, 0, 111, 111, 111, 111, 69, 69, 69, 0, 0, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 69, 69, 69, 69, 69, 69, 0, 69, 0, 0, 69, 69, 69, 69, 69, 69, 69, 69, 69, 0, 69, 69, 69, 0, 0, 69, 69, 69, 69, 70, 70, 70, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 70, 70, 70, 70, 70, 70, 70, 0, 70, 0, 0, 70, 70, 70, 70, 70, 70, 70, 70, 70, 0, 70, 70, 70, 0, 0, 70, 70, 70, 70, 68, 68, 68, 0, 0, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 68, 68, 68, 68, 68, 68, 68, 0, 68, 0, 0, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 68, 68, 68, 0, 0, 68, 68, 68, 68, 146, 146, 146, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 146, 146, 146, 146, 146, 146, 146, 0, 146, 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, 146, 0, 146, 146, 146, 0, 0, 146, 146, 146, 146, 64, 64, 64, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, 0, 64, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 0, 0, 64, 64, 64, 64, 65, 65, 65, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, 65, 65, 65, 65, 0, 65, 0, 0, 65, 65, 65, 65, 65, 65, 65, 65, 65, 0, 65, 65, 65, 0, 0, 65, 65, 65, 65, 66, 66, 66, 0, 0, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 66, 66, 66, 66, 66, 66, 66, 0, 66, 0, 0, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 66, 66, 66, 0, 0, 66, 66, 66, 66, 111, 111, 111, 0, 0, 111, 111, 111, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 111, 111, 111, 111, 0, 0, 111, 111, 0, 111, 111, 111, 111, 111, 111, 111, 111, 0, 111, 111, 111, 0, 0, 111, 111, 111, 111, 147, 147, 147, 0, 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 0, 147, 147, 147, 147, 147, 147, 147, 0, 147, 147, 147, 147, 0, 0, 0, 147, 147, 147, 147, 0, 0, 147, 147, 147, 0, 0, 147, 147, 147, 147, 144, 144, 144, 0, 0, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, 144, 144, 144, 144, 144, 144, 144, 0, 0, 144, 144, 144, 0, 0, 0, 144, 144, 144, 144, 0, 0, 144, 144, 144, 0, 0, 144, 144, 144, 144, 62, 62, 62, 0, 0, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 62, 62, 62, 0, 0, 0, 62, 0, 62, 0, 0, 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 62, 62, 62, 0, 0, 62, 62, 62, 62, 63, 63, 63, 0, 0, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 63, 63, 63, 0, 0, 0, 63, 0, 63, 0, 0, 63, 63, 63, 63, 63, 63, 63, 63, 63, 0, 63, 63, 63, 0, 0, 63, 63, 63, 63, 122, 122, 122, 0, 0, 122, 122, 122, 0, 0, 0, 0, 0, 0, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, 0, 0, 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 0, 0, 122, 122, 122, 122, 55, 55, 55, 0, 0, 55, 55, 55, 0, 0, 0, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, 55, 55, 55, 0, 55, 55, 55, 0, 0, 55, 55, 55, 55, 56, 56, 56, 0, 0, 56, 56, 56, 0, 0, 0, 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 0, 0, 56, 56, 56, 56, 59, 0, 0, 82, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 59, 0, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 166, 0, 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, 0, 59, 59, 59, 0, 0, 59, 59, 59, 59, 0, 0, 0, 0, 3, 4, 5, 238, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 239, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 82, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 59, 0, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 0, 59, 59, 59, 59, 59, 59, 59, 0, 0, 59, 59, 0, 59, 59, 59, 0, 59, 59, 59, 59, 0, 59, 59, 59, 122, 0, 59, 59, 59, 59, 0, 0, 0, 122, 0, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 0, 122, 122, 122, 122, 122, 122, 122, 0, 0, 122, 122, 0, 122, 122, 122, 0, 122, 122, 122, 122, 0, 122, 122, 122, 0, 0, 122, 122, 122, 122, 37, 37, 37, 0, 0, 37, 37, 37, 38, 38, 38, 0, 0, 38, 38, 38, 37, 0, 0, 0, 39, 39, 39, 0, 38, 39, 39, 39, 40, 40, 40, 0, 0, 40, 40, 40, 39, 0, 0, 0, 123, 123, 123, 37, 40, 123, 123, 123, 124, 124, 124, 38, 0, 124, 124, 124, 123, 0, 0, 0, 125, 125, 125, 39, 124, 125, 125, 125, 126, 126, 126, 40, 0, 126, 126, 126, 125, 0, 0, 0, 127, 127, 127, 123, 126, 127, 127, 127, 128, 128, 128, 124, 0, 128, 128, 128, 127, 0, 0, 0, 129, 129, 129, 125, 128, 129, 129, 129, 54, 54, 54, 126, 0, 54, 54, 54, 129, 0, 0, 0, 0, 180, 0, 127, 54, 0, 0, 0, 0, 0, 115, 128, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 129, 0, 0, 0, 0, 304, 0, 0, 54, 0, 0, 0, 0, 0, 115, 181, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, 115, 305, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 328, 7, 8, 9, 71, 0, 11, 12, 13, 72, 81, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 187, 11, 12, 13, 188, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 249, 11, 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 291, 11, 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 71, 0, 11, 12, 13, 72, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 252, 0, 11, 12, 13, 14, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 7, 8, 9, 10, 0, 11, 12, 13, 266, 0, 15, 16, 17, 0, 0, 18, 19, 20, 21, 171, 171, 171, 0, 0, 0, 171, 0, 0, 0, 0, 171, 171, 171, 171, 0, 171, 171, 171, 171, 0, 171, 171, 171, 0, 0, 171, 171, 171, 171, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 115, 181, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 271, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 115, 279, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 283, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 44, 45, 0, 115, 286, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 289, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 248, 0, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 285, 0, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 114, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 272, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 273, 0, 0, 0, 0, 0, 0, 0, 0, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 310, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 115, 0, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, }; static const YYINT yycheck[] = { 7, 0, 265, 4, 5, 6, 7, 8, 265, 10, 60, 10, 298, 63, 64, 306, 66, 228, 259, 260, 70, 0, 278, 264, 265, 266, 25, 28, 299, 300, 301, 32, 15, 16, 265, 42, 4, 5, 6, 302, 8, 42, 298, 259, 260, 302, 25, 259, 260, 261, 266, 265, 264, 265, 266, 301, 55, 36, 301, 58, 28, 302, 41, 275, 32, 43, 65, 182, 259, 260, 71, 302, 71, 51, 52, 266, 77, 55, 56, 57, 58, 265, 265, 298, 62, 68, 302, 302, 302, 72, 302, 90, 91, 92, 301, 78, 259, 260, 81, 262, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 93, 94, 327, 261, 302, 302, 119, 120, 121, 122, 123, 124, 125, 128, 129, 130, 131, 132, 306, 134, 308, 301, 135, 259, 260, 138, 265, 296, 297, 258, 259, 260, 298, 126, 126, 148, 149, 259, 260, 152, 264, 265, 264, 265, 266, 301, 128, 129, 130, 131, 132, 301, 134, 259, 260, 168, 153, 170, 287, 298, 266, 153, 154, 302, 177, 263, 158, 180, 160, 182, 264, 265, 185, 186, 301, 259, 260, 259, 260, 261, 302, 264, 265, 247, 259, 260, 261, 251, 301, 264, 265, 266, 259, 260, 261, 208, 209, 210, 211, 274, 275, 276, 277, 287, 288, 289, 301, 228, 301, 293, 259, 260, 261, 228, 298, 299, 300, 301, 297, 303, 304, 305, 306, 295, 308, 309, 310, 302, 306, 313, 314, 315, 316, 287, 290, 291, 292, 252, 295, 252, 296, 297, 299, 300, 301, 258, 259, 260, 306, 306, 267, 268, 269, 270, 271, 272, 273, 264, 265, 318, 273, 288, 289, 290, 291, 292, 302, 280, 323, 296, 297, 259, 260, 261, 287, 278, 264, 265, 266, 263, 293, 298, 295, 296, 263, 302, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 263, 256, 264, 265, 294, 302, 261, 265, 327, 302, 299, 300, 301, 265, 327, 326, 302, 306, 309, 309, 259, 260, 261, 259, 260, 264, 265, 266, 259, 260, 263, 266, 287, 288, 289, 274, 275, 276, 293, 265, 301, 331, 332, 298, 299, 300, 301, 306, 303, 304, 305, 306, 302, 308, 309, 310, 302, 306, 313, 314, 315, 316, 256, 302, 306, 259, 260, 261, 262, 306, 325, 326, 302, 298, 302, 302, 331, 267, 268, 269, 270, 271, 272, 273, 277, 278, 279, 280, 281, 282, 283, 284, 285, 287, 288, 289, 263, 302, 302, 293, 309, 252, 273, 186, 298, 299, 300, 301, 298, 303, 304, 305, 306, 25, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, 330, 256, -1, -1, 259, 260, 261, 262, -1, 259, 260, 261, -1, -1, 264, 265, 266, 280, 281, 282, 283, 284, 285, -1, 274, 275, 276, 277, 278, 279, -1, -1, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, 302, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, 330, 256, -1, -1, 259, 260, 261, -1, -1, 259, 260, 261, -1, -1, 264, 265, 266, 278, 279, 280, 281, 282, 283, 284, 285, 275, -1, -1, -1, -1, -1, -1, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, 302, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, 330, 256, -1, -1, 259, 260, 261, -1, -1, 259, 260, 261, -1, -1, 264, 265, 266, -1, 267, 268, 269, 270, 271, 272, 273, 275, -1, -1, -1, -1, -1, -1, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, 302, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, -1, 324, -1, -1, 327, 328, 329, 330, 259, 260, 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, 298, 299, 300, -1, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, 295, 296, 297, 298, -1, -1, -1, 302, 303, 304, 305, -1, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, 298, -1, -1, -1, 302, 303, 304, 305, -1, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, -1, -1, -1, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, -1, -1, -1, 293, -1, 295, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, -1, -1, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, -1, -1, -1, -1, -1, -1, -1, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, -1, -1, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 260, -1, -1, 263, -1, -1, -1, 267, 268, 269, 270, 271, 272, 273, 274, -1, 276, 277, -1, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, 260, -1, 296, 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, -1, -1, -1, -1, 287, 288, 289, 260, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 263, -1, -1, -1, 267, 268, 269, 270, 271, 272, 273, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, 265, -1, 313, 314, 315, 316, -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 287, 288, 289, 290, 291, 292, 293, -1, -1, 296, 297, -1, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 259, 260, 261, -1, -1, 264, 265, 266, 259, 260, 261, -1, -1, 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, -1, 275, 264, 265, 266, 259, 260, 261, -1, -1, 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, 265, 266, 275, -1, -1, -1, 259, 260, 261, 302, 275, 264, 265, 266, 259, 260, 261, 302, -1, 264, 265, 266, 275, -1, -1, -1, -1, 265, -1, 302, 275, -1, -1, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, 302, -1, -1, -1, -1, 265, -1, -1, 302, -1, -1, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, -1, -1, -1, -1, -1, 265, -1, -1, -1, -1, -1, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, -1, -1, -1, -1, -1, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, 302, 298, 299, 300, 301, -1, 303, 304, 305, 306, 307, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, 302, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 287, 288, 289, -1, -1, -1, 293, -1, -1, -1, -1, 298, 299, 300, 301, -1, 303, 304, 305, 306, -1, 308, 309, 310, -1, -1, 313, 314, 315, 316, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, -1, -1, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 259, 260, -1, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, 302, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 260, -1, -1, -1, 302, -1, -1, -1, -1, -1, -1, -1, 260, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 265, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 265, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 265, -1, -1, -1, -1, -1, -1, -1, -1, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 274, -1, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, }; #if YYBTYACC static const YYINT yyctable[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; #endif #define YYFINAL 25 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 331 #define YYUNDFTOKEN 389 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG #ifndef NULL #define NULL (void*)0 #endif static const char *const yyname[] = { "$end",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,"error","UNEXPECTED","BAD_DECIMAL","NL","SEMI_COLON","LBRACE","RBRACE", "LBOX","RBOX","COMMA","IO_OUT","ASSIGN","ADD_ASG","SUB_ASG","MUL_ASG","DIV_ASG", "MOD_ASG","POW_ASG","QMARK","COLON","OR","AND","IN","MATCH","EQ","NEQ","LT", "LTE","GT","GTE","CAT","GETLINE","PLUS","MINUS","MUL","DIV","MOD","NOT", "UMINUS","IO_IN","PIPE","POW","INC_or_DEC","DOLLAR","FIELD","LPAREN","RPAREN", "DOUBLE","STRING_","RE","ID","D_ID","FUNCT_ID","BUILTIN","LENGTH","PRINT", "PRINTF","SPLIT","MATCH_FUNC","SUB","GSUB","DO","WHILE","FOR","BREAK", "CONTINUE","IF","ELSE","DELETE","BEGIN","END","EXIT","NEXT","NEXTFILE","RETURN", "FUNCTION","$accept","program","block","block_or_separator","statement_list", "statement","mark","pr_args","arg2","builtin","getline_file","lvalue","field", "fvalue","expr","cat_expr","p_expr","while_front","if_front","for1","for2", "array_loop_front","return_statement","split_front","re_arg","sub_back", "arglist","args","print","sub_or_gsub","funct_start","funct_head","call_args", "ca_front","ca_back","f_arglist","f_args","program_block","PA_block", "function_def","outside_error","$$1","$$2","$$3","$$4","$$5","separator","$$6", "$$7","$$8","$$9","pr_direction","else_back","do","for3","split_back","getline", "illegal-symbol", }; static const char *const yyrule[] = { "$accept : program", "program : program_block", "program : program program_block", "program_block : PA_block", "program_block : function_def", "program_block : outside_error block", "PA_block : block", "$$1 :", "PA_block : BEGIN $$1 block", "$$2 :", "PA_block : END $$2 block", "$$3 :", "PA_block : expr $$3 block_or_separator", "$$4 :", "$$5 :", "PA_block : expr COMMA $$4 expr $$5 block_or_separator", "block : LBRACE statement_list RBRACE", "block : LBRACE error RBRACE", "block_or_separator : block", "block_or_separator : separator", "statement_list : statement", "statement_list : statement_list statement", "statement : block", "statement : expr separator", "statement : separator", "statement : error separator", "statement : BREAK separator", "statement : CONTINUE separator", "statement : return_statement", "statement : NEXT separator", "statement : NEXTFILE separator", "separator : NL", "separator : SEMI_COLON", "expr : cat_expr", "expr : lvalue ASSIGN expr", "expr : lvalue ADD_ASG expr", "expr : lvalue SUB_ASG expr", "expr : lvalue MUL_ASG expr", "expr : lvalue DIV_ASG expr", "expr : lvalue MOD_ASG expr", "expr : lvalue POW_ASG expr", "expr : expr EQ expr", "expr : expr NEQ expr", "expr : expr LT expr", "expr : expr LTE expr", "expr : expr GT expr", "expr : expr GTE expr", "expr : expr MATCH expr", "$$6 :", "expr : expr OR $$6 expr", "$$7 :", "expr : expr AND $$7 expr", "$$8 :", "$$9 :", "expr : expr QMARK $$8 expr COLON $$9 expr", "cat_expr : p_expr", "cat_expr : cat_expr p_expr", "p_expr : DOUBLE", "p_expr : STRING_", "p_expr : ID", "p_expr : LPAREN expr RPAREN", "p_expr : RE", "p_expr : p_expr PLUS p_expr", "p_expr : p_expr MINUS p_expr", "p_expr : p_expr MUL p_expr", "p_expr : p_expr DIV p_expr", "p_expr : p_expr MOD p_expr", "p_expr : p_expr POW p_expr", "p_expr : NOT p_expr", "p_expr : PLUS p_expr", "p_expr : MINUS p_expr", "p_expr : builtin", "p_expr : ID INC_or_DEC", "p_expr : INC_or_DEC lvalue", "p_expr : field INC_or_DEC", "p_expr : INC_or_DEC field", "lvalue : ID", "arglist :", "arglist : args", "args : expr", "args : args COMMA expr", "builtin : BUILTIN mark LPAREN arglist RPAREN", "mark :", "statement : print mark pr_args pr_direction separator", "print : PRINT", "print : PRINTF", "pr_args : arglist", "pr_args : LPAREN arg2 RPAREN", "pr_args : LPAREN RPAREN", "arg2 : expr COMMA expr", "arg2 : arg2 COMMA expr", "pr_direction :", "pr_direction : IO_OUT expr", "if_front : IF LPAREN expr RPAREN", "statement : if_front statement", "else_back : ELSE", "statement : if_front statement else_back statement", "do : DO", "statement : do statement WHILE LPAREN expr RPAREN separator", "while_front : WHILE LPAREN expr RPAREN", "statement : while_front statement", "statement : for1 for2 for3 statement", "for1 : FOR LPAREN SEMI_COLON", "for1 : FOR LPAREN expr SEMI_COLON", "for2 : SEMI_COLON", "for2 : expr SEMI_COLON", "for3 : RPAREN", "for3 : expr RPAREN", "expr : expr IN ID", "expr : LPAREN arg2 RPAREN IN ID", "lvalue : ID mark LBOX args RBOX", "p_expr : ID mark LBOX args RBOX", "p_expr : ID mark LBOX args RBOX INC_or_DEC", "statement : DELETE ID mark LBOX args RBOX separator", "statement : DELETE ID separator", "array_loop_front : FOR LPAREN ID IN ID RPAREN", "statement : array_loop_front statement", "field : FIELD", "field : DOLLAR D_ID", "field : DOLLAR D_ID mark LBOX args RBOX", "field : DOLLAR p_expr", "field : LPAREN field RPAREN", "p_expr : field", "expr : field ASSIGN expr", "expr : field ADD_ASG expr", "expr : field SUB_ASG expr", "expr : field MUL_ASG expr", "expr : field DIV_ASG expr", "expr : field MOD_ASG expr", "expr : field POW_ASG expr", "p_expr : split_front split_back", "split_front : SPLIT LPAREN expr COMMA ID", "split_back : RPAREN", "split_back : COMMA expr RPAREN", "p_expr : LENGTH LPAREN RPAREN", "p_expr : LENGTH LPAREN expr RPAREN", "p_expr : LENGTH LPAREN ID RPAREN", "p_expr : LENGTH", "p_expr : MATCH_FUNC LPAREN expr COMMA re_arg RPAREN", "re_arg : expr", "statement : EXIT separator", "statement : EXIT expr separator", "return_statement : RETURN separator", "return_statement : RETURN expr separator", "p_expr : getline", "p_expr : getline fvalue", "p_expr : getline_file p_expr", "p_expr : p_expr PIPE GETLINE", "p_expr : p_expr PIPE GETLINE fvalue", "getline : GETLINE", "fvalue : lvalue", "fvalue : field", "getline_file : getline IO_IN", "getline_file : getline fvalue IO_IN", "p_expr : sub_or_gsub LPAREN re_arg COMMA expr sub_back", "sub_or_gsub : SUB", "sub_or_gsub : GSUB", "sub_back : RPAREN", "sub_back : COMMA fvalue RPAREN", "function_def : funct_start block", "funct_start : funct_head LPAREN f_arglist RPAREN", "funct_head : FUNCTION ID", "funct_head : FUNCTION FUNCT_ID", "f_arglist :", "f_arglist : f_args", "f_args : ID", "f_args : f_args COMMA ID", "outside_error : error", "p_expr : FUNCT_ID mark call_args", "call_args : LPAREN RPAREN", "call_args : ca_front ca_back", "ca_front : LPAREN", "ca_front : ca_front expr COMMA", "ca_front : ca_front ID COMMA", "ca_back : expr RPAREN", "ca_back : ID RPAREN", }; #endif #if YYDEBUG int yydebug; #endif int yyerrflag; int yychar; YYSTYPE yyval; YYSTYPE yylval; int yynerrs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyloc; /* position returned by actions */ YYLTYPE yylloc; /* position from the lexer */ #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) #ifndef YYLLOC_DEFAULT #define YYLLOC_DEFAULT(loc, rhs, n) \ do \ { \ if (n == 0) \ { \ (loc).first_line = YYRHSLOC(rhs, 0).last_line; \ (loc).first_column = YYRHSLOC(rhs, 0).last_column; \ (loc).last_line = YYRHSLOC(rhs, 0).last_line; \ (loc).last_column = YYRHSLOC(rhs, 0).last_column; \ } \ else \ { \ (loc).first_line = YYRHSLOC(rhs, 1).first_line; \ (loc).first_column = YYRHSLOC(rhs, 1).first_column; \ (loc).last_line = YYRHSLOC(rhs, n).last_line; \ (loc).last_column = YYRHSLOC(rhs, n).last_column; \ } \ } while (0) #endif /* YYLLOC_DEFAULT */ #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #if YYBTYACC #ifndef YYLVQUEUEGROWTH #define YYLVQUEUEGROWTH 32 #endif #endif /* YYBTYACC */ /* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #ifndef YYINITSTACKSIZE #define YYINITSTACKSIZE 200 #endif typedef struct { unsigned stacksize; YYINT *s_base; YYINT *s_mark; YYINT *s_last; YYSTYPE *l_base; YYSTYPE *l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *p_base; YYLTYPE *p_mark; #endif } YYSTACKDATA; #if YYBTYACC struct YYParseState_s { struct YYParseState_s *save; /* Previously saved parser state */ YYSTACKDATA yystack; /* saved parser stack */ int state; /* saved parser state */ int errflag; /* saved error recovery status */ int lexeme; /* saved index of the conflict lexeme in the lexical queue */ YYINT ctry; /* saved index in yyctable[] for this conflict */ }; typedef struct YYParseState_s YYParseState; #endif /* YYBTYACC */ /* variables for the parser stack */ static YYSTACKDATA yystack; #if YYBTYACC /* Current parser state */ static YYParseState *yyps = NULL; /* yypath != NULL: do the full parse, starting at *yypath parser state. */ static YYParseState *yypath = NULL; /* Base of the lexical value queue */ static YYSTYPE *yylvals = NULL; /* Current position at lexical value queue */ static YYSTYPE *yylvp = NULL; /* End position of lexical value queue */ static YYSTYPE *yylve = NULL; /* The last allocated position at the lexical value queue */ static YYSTYPE *yylvlim = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Base of the lexical position queue */ static YYLTYPE *yylpsns = NULL; /* Current position at lexical position queue */ static YYLTYPE *yylpp = NULL; /* End position of lexical position queue */ static YYLTYPE *yylpe = NULL; /* The last allocated position at the lexical position queue */ static YYLTYPE *yylplim = NULL; #endif /* Current position at lexical token queue */ static YYINT *yylexp = NULL; static YYINT *yylexemes = NULL; #endif /* YYBTYACC */ #line 1192 "parse.y" /* * Check for special case where there is a forward reference to a newly * declared function using an array parameter. Because the parameter * mechanism for arrays uses a different byte code, we would like to know * if this is the case so that the function's contents can handle the array * type. */ static void improve_arglist(const char *name) { CA_REC *p, *p2; FCALL_REC *q; TRACE(("improve_arglist(%s)\n", name)); for (p = active_arglist; p != NULL; p = p->link) { if (p->type == ST_LOCAL_NONE) { for (q = resolve_list; q != NULL; q = q->link) { if (!strcmp(q->callee->name, name)) { for (p2 = q->arg_list; p2 != NULL; p2 = p2->link) { if (p2->arg_num == p->arg_num) { switch (p2->type) { case ST_NONE: case ST_LOCAL_NONE: break; default: p->type = p2->type; p->sym_p->type = p2->type; TRACE(("...set arg %d of %s to %s\n", p->arg_num + 1, name, type_to_str(p->type))); break; } } } if (p->type != ST_LOCAL_NONE) break; } } if (p->type != ST_LOCAL_NONE) break; } } } /* maintain data for f_arglist to make it visible in funct_start */ static int init_arglist(void) { free_arglist(); return 0; } static SYMTAB * save_arglist(const char *s) { SYMTAB *result = save_id(s); CA_REC *saveit = ZMALLOC(CA_REC); if (saveit != NULL) { CA_REC *p, *q; int arg_num = 0; for (p = active_arglist, q = NULL; p != NULL; q = p, p = p->link) { ++arg_num; } saveit->link = NULL; saveit->type = ST_LOCAL_NONE; saveit->arg_num = (NUM_ARGS) arg_num; saveit->call_lineno = token_lineno; saveit->sym_p = result; if (q != NULL) { q->link = saveit; } else { active_arglist = saveit; } } return result; } static void free_arglist(void) { while (active_arglist != NULL) { CA_REC *next = active_arglist->link; ZFREE(active_arglist); active_arglist = next; } } /* resize the code for a user function */ static void resize_fblock(FBLOCK * fbp) { CODEBLOCK *p = ZMALLOC(CODEBLOCK); code2op(_RET0, _HALT); /* make sure there is always a return */ *p = active_code; fbp->code = code_shrink(p, &fbp->size); /* code_shrink() zfrees p */ if (dump_code_flag) add_to_fdump_list(fbp); } /* convert FE_PUSHA to FE_PUSHI or F_PUSH to F_PUSHI */ static void field_A2I(void) { if (code_ptr[-1].op == FE_PUSHA && code_ptr[-1].ptr == (PTR) 0) { /* On most architectures, the two tests are the same; a good compiler might eliminate one. On LM_DOS, and possibly other segmented architectures, they are not */ code_ptr[-1].op = FE_PUSHI; } else { CELL *cp = (CELL *) code_ptr[-1].ptr; if ((cp == field) || ((cp > NF) && (cp <= LAST_PFIELD))) { code_ptr[-2].op = _PUSHI; } else if (cp == NF) { code_ptr[-2].op = NF_PUSHI; code_ptr--; } else { code_ptr[-2].op = F_PUSHI; code_ptr->op = field_addr_to_index(code_ptr[-1].ptr); code_ptr++; } } } /* we've seen an ID in a context where it should be a VAR, check that's consistent with previous usage */ static void check_var(SYMTAB * p) { switch (p ? p->type : -1) { case ST_NONE: /* new id */ p->type = ST_VAR; p->stval.cp = ZMALLOC(CELL); p->stval.cp->type = C_NOINIT; break; case ST_LOCAL_NONE: p->type = ST_LOCAL_VAR; active_funct->typev[p->offset] = ST_LOCAL_VAR; break; case ST_VAR: case ST_LOCAL_VAR: break; default: type_error(p); break; } } /* we've seen an ID in a context where it should be an ARRAY, check that's consistent with previous usage */ static void check_array(SYMTAB * p) { switch (p ? p->type : -1) { case ST_NONE: /* a new array */ p->type = ST_ARRAY; p->stval.array = new_ARRAY(); no_leaks_array(p->stval.array); break; case ST_ARRAY: case ST_LOCAL_ARRAY: break; case ST_LOCAL_NONE: p->type = ST_LOCAL_ARRAY; active_funct->typev[p->offset] = ST_LOCAL_ARRAY; break; default: type_error(p); break; } } static void code_array(SYMTAB * p) { if (is_local(p)) code2op(LA_PUSHA, p->offset); else code2(A_PUSHA, p->stval.array); } /* we've seen an ID as an argument to a user defined function */ static void code_call_id(CA_REC * p, SYMTAB * ip) { static CELL dummy; p->call_offset = code_offset; /* This always gets set now. So that fcall:relocate_arglist works. */ switch (ip->type) { case ST_VAR: p->type = CA_EXPR; code2(_PUSHI, ip->stval.cp); break; case ST_LOCAL_VAR: p->type = CA_EXPR; code2op(L_PUSHI, ip->offset); break; case ST_ARRAY: p->type = CA_ARRAY; code2(A_PUSHA, ip->stval.array); break; case ST_LOCAL_ARRAY: p->type = CA_ARRAY; code2op(LA_PUSHA, ip->offset); break; /* not enough info to code it now; it will have to be patched later */ case ST_NONE: p->type = ST_NONE; p->sym_p = ip; code2(_PUSHI, &dummy); break; case ST_LOCAL_NONE: p->type = ST_LOCAL_NONE; p->type_p = &active_funct->typev[ip->offset]; code2op(L_PUSHI, ip->offset); break; #ifdef DEBUG default: bozo("code_call_id"); #endif } } /* an RE by itself was coded as _MATCH0 , change to push as an expression */ static void RE_as_arg(void) { CELL *cp = ZMALLOC(CELL); code_ptr -= 2; cp->type = C_RE; cp->ptr = code_ptr[1].ptr; code2(_PUSHC, cp); no_leaks_cell_ptr(cp); } /* reset the active_code back to the MAIN block */ static void switch_code_to_main(void) { switch (scope) { case SCOPE_BEGIN: *begin_code_p = active_code; active_code = *main_code_p; break; case SCOPE_END: *end_code_p = active_code; active_code = *main_code_p; break; case SCOPE_FUNCT: active_code = *main_code_p; break; case SCOPE_MAIN: break; } active_funct = (FBLOCK *) 0; scope = SCOPE_MAIN; } void parse(void) { if (yyparse() || compile_error_count != 0) mawk_exit(2); scan_cleanup(); set_code(); /* code must be set before call to resolve_fcalls() */ if (resolve_list) resolve_fcalls(); if (compile_error_count != 0) mawk_exit(2); if (dump_code_flag) { dump_code(); mawk_exit(0); } } #line 2042 "parse.c" /* For use in generated program */ #define yydepth (int)(yystack.s_mark - yystack.s_base) #if YYBTYACC #define yytrial (yyps->save) #endif /* YYBTYACC */ #if YYDEBUG #include /* needed for printf */ #endif #include /* needed for malloc, etc */ #include /* needed for memset */ /* allocate initial stack or double stack size, up to YYMAXDEPTH */ static int yygrowstack(YYSTACKDATA *data) { int i; unsigned newsize; YYINT *newss; YYSTYPE *newvs; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *newps; #endif if ((newsize = data->stacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return YYENOMEM; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = (int) (data->s_mark - data->s_base); newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); if (newss == NULL) return YYENOMEM; data->s_base = newss; data->s_mark = newss + i; newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); if (newvs == NULL) return YYENOMEM; data->l_base = newvs; data->l_mark = newvs + i; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); if (newps == NULL) return YYENOMEM; data->p_base = newps; data->p_mark = newps + i; #endif data->stacksize = newsize; data->s_last = data->s_base + newsize - 1; #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); #endif return 0; } #if YYPURE || defined(YY_NO_LEAKS) static void yyfreestack(YYSTACKDATA *data) { free(data->s_base); free(data->l_base); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) free(data->p_base); #endif memset(data, 0, sizeof(*data)); } #else #define yyfreestack(data) /* nothing */ #endif /* YYPURE || defined(YY_NO_LEAKS) */ #if YYBTYACC static YYParseState * yyNewState(unsigned size) { YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); if (p == NULL) return NULL; p->yystack.stacksize = size; if (size == 0) { p->yystack.s_base = NULL; p->yystack.l_base = NULL; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = NULL; #endif return p; } p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT)); if (p->yystack.s_base == NULL) return NULL; p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); if (p->yystack.l_base == NULL) return NULL; memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); if (p->yystack.p_base == NULL) return NULL; memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); #endif return p; } static void yyFreeState(YYParseState *p) { yyfreestack(&p->yystack); free(p); } #endif /* YYBTYACC */ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab #if YYBTYACC #define YYVALID do { if (yyps->save) goto yyvalid; } while(0) #define YYVALID_NESTED do { if (yyps->save && \ yyps->save->save == 0) goto yyvalid; } while(0) #endif /* YYBTYACC */ int YYPARSE_DECL() { int yym, yyn, yystate, yyresult; #if YYBTYACC int yynewerrflag; YYParseState *yyerrctx = NULL; #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */ #endif #if YYDEBUG const char *yys; if ((yys = getenv("YYDEBUG")) != NULL) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } if (yydebug) fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); #endif #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range)); #endif #if YYBTYACC yyps = yyNewState(0); if (yyps == NULL) goto yyenomem; yyps->save = NULL; #endif /* YYBTYACC */ yym = 0; /* yyn is set below */ yynerrs = 0; yyerrflag = 0; yychar = YYEMPTY; yystate = 0; #if YYPURE memset(&yystack, 0, sizeof(yystack)); #endif if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystack.s_mark = yystack.s_base; yystack.l_mark = yystack.l_base; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base; #endif yystate = 0; *yystack.s_mark = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", YYDEBUGSTR, yydepth, yystate, yychar, yys); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); #endif fputc('\n', stderr); } #endif } #if YYBTYACC /* Do we have a conflict? */ if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { YYINT ctry; if (yypath) { YYParseState *save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", YYDEBUGSTR, yydepth, yystate); #endif /* Switch to the next conflict context */ save = yypath; yypath = save->save; save->save = NULL; ctry = save->ctry; if (save->state != yystate) YYABORT; yyFreeState(save); } else { /* Unresolved conflict - start/continue trial parse */ YYParseState *save; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); if (yyps->save) fputs("ALREADY in conflict, continuing trial parse.\n", stderr); else fputs("Starting trial parse.\n", stderr); } #endif save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (save == NULL) goto yyenomem; save->save = yyps->save; save->state = yystate; save->errflag = yyerrflag; save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = yytable[yyn]; if (yyctable[ctry] == -1) { #if YYDEBUG if (yydebug && yychar >= YYEOF) fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); #endif ctry++; } save->ctry = ctry; if (yyps->save == NULL) { /* If this is a first conflict in the stack, start saving lexemes */ if (!yylexemes) { yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT)); if (yylexemes == NULL) goto yyenomem; yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); if (yylvals == NULL) goto yyenomem; yylvlim = yylvals + YYLVQUEUEGROWTH; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); if (yylpsns == NULL) goto yyenomem; yylplim = yylpsns + YYLVQUEUEGROWTH; #endif } if (yylvp == yylve) { yylvp = yylve = yylvals; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns; #endif yylexp = yylexemes; if (yychar >= YYEOF) { *yylve++ = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpe++ = yylloc; #endif *yylexp = (YYINT) yychar; yychar = YYEMPTY; } } } if (yychar >= YYEOF) { yylvp--; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp--; #endif yylexp--; yychar = YYEMPTY; } save->lexeme = (int) (yylvp - yylvals); yyps->save = save; } if (yytable[yyn] == ctry) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); #endif if (yychar < 0) { yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp++; #endif yylexp++; } if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yyctable[ctry]; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } else { yyn = yyctable[ctry]; goto yyreduce; } } /* End of code dealing with conflicts */ #endif /* YYBTYACC */ if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", YYDEBUGSTR, yydepth, yystate, yytable[yyn]); #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yylloc; #endif yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag != 0) goto yyinrecovery; #if YYBTYACC yynewerrflag = 1; goto yyerrhandler; goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: /* explicit YYERROR from an action -- pop the rhs of the rule reduced * before looking for error recovery */ yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yynewerrflag = 0; yyerrhandler: while (yyps->save) { int ctry; YYParseState *save = yyps->save; #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yyps->save->state, (int)(yylvp - yylvals - yyps->save->lexeme)); #endif /* Memorize most forward-looking error state in case it's really an error. */ if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) { /* Free old saved error context state */ if (yyerrctx) yyFreeState(yyerrctx); /* Create and fill out new saved error context state */ yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); if (yyerrctx == NULL) goto yyenomem; yyerrctx->save = yyps->save; yyerrctx->state = yystate; yyerrctx->errflag = yyerrflag; yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yyerrctx->lexeme = (int) (yylvp - yylvals); } yylvp = yylvals + save->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + save->lexeme; #endif yylexp = yylexemes + save->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif ctry = ++save->ctry; yystate = save->state; /* We tried shift, try reduce now */ if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; yyps->save = save->save; save->save = NULL; yyFreeState(save); /* Nothing left on the stack -- error */ if (!yyps->save) { #if YYDEBUG if (yydebug) fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", YYPREFIX, yydepth); #endif /* Restore state as it was in the most forward-advanced error */ yylvp = yylvals + yyerrctx->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yyerrctx->lexeme; #endif yylexp = yylexemes + yyerrctx->lexeme; yychar = yylexp[-1]; yylval = yylvp[-1]; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = yylpp[-1]; #endif yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yyerrctx->state; yyFreeState(yyerrctx); yyerrctx = NULL; } yynewerrflag = 1; } if (yynewerrflag == 0) goto yyinrecovery; #endif /* YYBTYACC */ YYERROR_CALL("syntax error"); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */ #endif #if !YYBTYACC goto yyerrlab; /* redundant goto avoids 'unused label' warning */ yyerrlab: #endif ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; yystate = yytable[yyn]; *++yystack.s_mark = yytable[yyn]; *++yystack.l_mark = yylval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* lookahead position is error end position */ yyerror_loc_range[2] = yylloc; YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ *++yystack.p_mark = yyloc; #endif goto yyloop; } else { #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", YYDEBUGSTR, yydepth, *yystack.s_mark); #endif if (yystack.s_mark <= yystack.s_base) goto yyabort; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* the current TOS position is the error start position */ yyerror_loc_range[1] = *yystack.p_mark; #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); #else YYDESTRUCT_CALL("error: discarding state", yystos[*yystack.s_mark], yystack.l_mark); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ --yystack.s_mark; --yystack.l_mark; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) --yystack.p_mark; #endif } } } else { if (yychar == YYEOF) goto yyabort; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", YYDEBUGSTR, yydepth, yystate, yychar, yys); } #endif #if defined(YYDESTRUCT_CALL) #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ #endif /* defined(YYDESTRUCT_CALL) */ yychar = YYEMPTY; goto yyloop; } yyreduce: yym = yylen[yyn]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ if (yym > 0) { int i; fputc('<', stderr); for (i = yym; i > 0; i--) { if (i != yym) fputs(", ", stderr); fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], yystack.l_mark[1-i]), stderr); } fputc('>', stderr); } #endif fputc('\n', stderr); } #endif if (yym > 0) yyval = yystack.l_mark[1-yym]; else memset(&yyval, 0, sizeof yyval); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) /* Perform position reduction */ memset(&yyloc, 0, sizeof(yyloc)); #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ { YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym); /* just in case YYERROR is invoked within the action, save the start of the rhs as the error start position */ yyerror_loc_range[1] = yystack.p_mark[1-yym]; } #endif switch (yyn) { case 6: #line 167 "parse.y" { /* this do nothing action removes a vacuous warning from Bison */ } #line 2717 "parse.c" break; case 7: #line 172 "parse.y" { scope = SCOPE_BEGIN ; be_setup(scope) ; } #line 2722 "parse.c" break; case 8: #line 175 "parse.y" { switch_code_to_main() ; } #line 2727 "parse.c" break; case 9: #line 178 "parse.y" { scope = SCOPE_END ; be_setup(scope) ; } #line 2732 "parse.c" break; case 10: #line 181 "parse.y" { switch_code_to_main() ; } #line 2737 "parse.c" break; case 11: #line 184 "parse.y" { code_jmp(_JZ, (INST*)0) ; } #line 2742 "parse.c" break; case 12: #line 187 "parse.y" { patch_jmp( code_ptr ) ; } #line 2747 "parse.c" break; case 13: #line 191 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; int len ; code_push(p1, (unsigned) CodeOffset(p1), scope, active_funct) ; code_ptr = p1 ; code2op(_RANGE, 1) ; code_ptr += 3 ; len = (int) code_pop(code_ptr) ; code_ptr += len ; code1(_STOP) ; p1 = CDP(yystack.l_mark[-1].start) ; p1[2].op = CodeOffset(p1 + 1) ; } #line 2766 "parse.c" break; case 14: #line 207 "parse.y" { code1(_STOP) ; } #line 2771 "parse.c" break; case 15: #line 210 "parse.y" { INST *p1 = CDP(yystack.l_mark[-5].start) ; p1[3].op = (int) (CDP(yystack.l_mark[0].start) - (p1 + 1)) ; p1[4].op = CodeOffset(p1 + 1) ; } #line 2781 "parse.c" break; case 16: #line 221 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } #line 2786 "parse.c" break; case 17: #line 223 "parse.y" { yyval.start = code_offset ; /* does nothing won't be executed */ print_flag = getline_flag = paren_cnt = 0 ; yyerrok ; } #line 2793 "parse.c" break; case 19: #line 230 "parse.y" { yyval.start = code_offset ; code1(_PUSHINT) ; code1(0) ; func2(_PRINT, bi_print) ; } #line 2801 "parse.c" break; case 23: #line 243 "parse.y" { code1(_POP) ; } #line 2806 "parse.c" break; case 24: #line 245 "parse.y" { yyval.start = code_offset ; } #line 2811 "parse.c" break; case 25: #line 247 "parse.y" { yyval.start = code_offset ; print_flag = getline_flag = 0 ; paren_cnt = 0 ; yyerrok ; } #line 2820 "parse.c" break; case 26: #line 253 "parse.y" { yyval.start = code_offset ; BC_insert('B', code_ptr+1) ; code2(_JMP, 0) /* don't use code_jmp ! */ ; } #line 2826 "parse.c" break; case 27: #line 256 "parse.y" { yyval.start = code_offset ; BC_insert('C', code_ptr+1) ; code2(_JMP, 0) ; } #line 2832 "parse.c" break; case 28: #line 259 "parse.y" { if ( scope != SCOPE_FUNCT ) compile_error("return outside function body") ; } #line 2839 "parse.c" break; case 29: #line 263 "parse.y" { if ( scope != SCOPE_MAIN ) compile_error( "improper use of next" ) ; yyval.start = code_offset ; code1(_NEXT) ; } #line 2848 "parse.c" break; case 30: #line 269 "parse.y" { if ( scope != SCOPE_MAIN ) compile_error( "improper use of nextfile" ) ; yyval.start = code_offset ; code1(_NEXTFILE) ; } #line 2857 "parse.c" break; case 34: #line 280 "parse.y" { code1(_ASSIGN) ; } #line 2862 "parse.c" break; case 35: #line 281 "parse.y" { code1(_ADD_ASG) ; } #line 2867 "parse.c" break; case 36: #line 282 "parse.y" { code1(_SUB_ASG) ; } #line 2872 "parse.c" break; case 37: #line 283 "parse.y" { code1(_MUL_ASG) ; } #line 2877 "parse.c" break; case 38: #line 284 "parse.y" { code1(_DIV_ASG) ; } #line 2882 "parse.c" break; case 39: #line 285 "parse.y" { code1(_MOD_ASG) ; } #line 2887 "parse.c" break; case 40: #line 286 "parse.y" { code1(_POW_ASG) ; } #line 2892 "parse.c" break; case 41: #line 287 "parse.y" { code1(_EQ) ; } #line 2897 "parse.c" break; case 42: #line 288 "parse.y" { code1(_NEQ) ; } #line 2902 "parse.c" break; case 43: #line 289 "parse.y" { code1(_LT) ; } #line 2907 "parse.c" break; case 44: #line 290 "parse.y" { code1(_LTE) ; } #line 2912 "parse.c" break; case 45: #line 291 "parse.y" { code1(_GT) ; } #line 2917 "parse.c" break; case 46: #line 292 "parse.y" { code1(_GTE) ; } #line 2922 "parse.c" break; case 47: #line 295 "parse.y" { INST *p3 = CDP(yystack.l_mark[0].start) ; if ( p3 == code_ptr - 2 ) { if ( p3->op == _MATCH0 ) p3->op = _MATCH1 ; else /* check for string */ if ( p3->op == _PUSHS ) { CELL *cp = ZMALLOC(CELL) ; cp->type = C_STRING ; cp->ptr = p3[1].ptr ; cast_to_RE(cp) ; no_leaks_re_ptr(cp->ptr) ; code_ptr -= 2 ; code2(_MATCH1, cp->ptr) ; ZFREE(cp) ; } else code1(_MATCH2) ; } else code1(_MATCH2) ; if ( !yystack.l_mark[-1].ival ) code1(_NOT) ; } #line 2951 "parse.c" break; case 48: #line 323 "parse.y" { code1(_TEST) ; code_jmp(_LJNZ, (INST*)0) ; } #line 2958 "parse.c" break; case 49: #line 327 "parse.y" { code1(_TEST) ; patch_jmp(code_ptr) ; } #line 2963 "parse.c" break; case 50: #line 330 "parse.y" { code1(_TEST) ; code_jmp(_LJZ, (INST*)0) ; } #line 2970 "parse.c" break; case 51: #line 334 "parse.y" { code1(_TEST) ; patch_jmp(code_ptr) ; } #line 2975 "parse.c" break; case 52: #line 336 "parse.y" { code_jmp(_JZ, (INST*)0) ; } #line 2980 "parse.c" break; case 53: #line 337 "parse.y" { code_jmp(_JMP, (INST*)0) ; } #line 2985 "parse.c" break; case 54: #line 339 "parse.y" { patch_jmp(code_ptr) ; patch_jmp(CDP(yystack.l_mark[0].start)) ; } #line 2990 "parse.c" break; case 56: #line 344 "parse.y" { code1(_CAT) ; } #line 2995 "parse.c" break; case 57: #line 348 "parse.y" { yyval.start = code_offset ; code2(_PUSHD, yystack.l_mark[0].ptr) ; } #line 3000 "parse.c" break; case 58: #line 350 "parse.y" { yyval.start = code_offset ; code2(_PUSHS, yystack.l_mark[0].ptr) ; } #line 3005 "parse.c" break; case 59: #line 352 "parse.y" { check_var(yystack.l_mark[0].stp) ; yyval.start = code_offset ; if ( is_local(yystack.l_mark[0].stp) ) { code2op(L_PUSHI, yystack.l_mark[0].stp->offset) ; } else code2(_PUSHI, yystack.l_mark[0].stp->stval.cp) ; } #line 3015 "parse.c" break; case 60: #line 360 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } #line 3020 "parse.c" break; case 61: #line 364 "parse.y" { yyval.start = code_offset ; code2(_MATCH0, yystack.l_mark[0].ptr) ; no_leaks_re_ptr(yystack.l_mark[0].ptr); } #line 3028 "parse.c" break; case 62: #line 370 "parse.y" { code1(_ADD) ; } #line 3033 "parse.c" break; case 63: #line 371 "parse.y" { code1(_SUB) ; } #line 3038 "parse.c" break; case 64: #line 372 "parse.y" { code1(_MUL) ; } #line 3043 "parse.c" break; case 65: #line 373 "parse.y" { code1(_DIV) ; } #line 3048 "parse.c" break; case 66: #line 374 "parse.y" { code1(_MOD) ; } #line 3053 "parse.c" break; case 67: #line 375 "parse.y" { code1(_POW) ; } #line 3058 "parse.c" break; case 68: #line 377 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_NOT) ; } #line 3063 "parse.c" break; case 69: #line 379 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_UPLUS) ; } #line 3068 "parse.c" break; case 70: #line 381 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_UMINUS) ; } #line 3073 "parse.c" break; case 72: #line 386 "parse.y" { check_var(yystack.l_mark[-1].stp) ; yyval.start = code_offset ; code_address(yystack.l_mark[-1].stp) ; if ( yystack.l_mark[0].ival == '+' ) code1(_POST_INC) ; else code1(_POST_DEC) ; } #line 3084 "parse.c" break; case 73: #line 394 "parse.y" { yyval.start = yystack.l_mark[0].start ; if ( yystack.l_mark[-1].ival == '+' ) code1(_PRE_INC) ; else code1(_PRE_DEC) ; } #line 3092 "parse.c" break; case 74: #line 401 "parse.y" { if (yystack.l_mark[0].ival == '+' ) code1(F_POST_INC ) ; else code1(F_POST_DEC) ; } #line 3099 "parse.c" break; case 75: #line 405 "parse.y" { yyval.start = yystack.l_mark[0].start ; if ( yystack.l_mark[-1].ival == '+' ) code1(F_PRE_INC) ; else code1( F_PRE_DEC) ; } #line 3107 "parse.c" break; case 76: #line 412 "parse.y" { yyval.start = code_offset ; check_var(yystack.l_mark[0].stp) ; code_address(yystack.l_mark[0].stp) ; } #line 3115 "parse.c" break; case 77: #line 420 "parse.y" { yyval.ival = 0 ; } #line 3120 "parse.c" break; case 79: #line 425 "parse.y" { yyval.ival = 1 ; } #line 3125 "parse.c" break; case 80: #line 427 "parse.y" { yyval.ival = yystack.l_mark[-2].ival + 1 ; } #line 3130 "parse.c" break; case 81: #line 432 "parse.y" { const BI_REC *p = yystack.l_mark[-4].bip ; yyval.start = yystack.l_mark[-3].start ; if ( (int)p->min_args > yystack.l_mark[-1].ival ) compile_error( "not enough arguments in call to %s: %d (need %d)" , p->name, yystack.l_mark[-1].ival, (int)p->min_args ) ; if ( (int)p->max_args < yystack.l_mark[-1].ival ) compile_error( "too many arguments in call to %s: %d (maximum %d)" , p->name, yystack.l_mark[-1].ival, (int)p->max_args ) ; if ( p->min_args != p->max_args ) /* variable args */ { code1(_PUSHINT) ; code1(yystack.l_mark[-1].ival) ; } func2(_BUILTIN , p->fp) ; } #line 3148 "parse.c" break; case 82: #line 450 "parse.y" { yyval.start = code_offset ; } #line 3153 "parse.c" break; case 83: #line 455 "parse.y" { func2(_PRINT, yystack.l_mark[-4].fp) ; if ( yystack.l_mark[-2].ival > MAX_ARGS ) compile_error("too many arguments in call to %s: %d (maximum %d)", ( yystack.l_mark[-4].fp == bi_printf ) ? "printf" : "print", yystack.l_mark[-2].ival, MAX_ARGS) ; if ( yystack.l_mark[-4].fp == bi_printf && yystack.l_mark[-2].ival == 0 ) compile_error("no arguments in call to printf") ; print_flag = 0 ; yyval.start = yystack.l_mark[-3].start ; } #line 3167 "parse.c" break; case 84: #line 467 "parse.y" { yyval.fp = bi_print ; print_flag = 1 ;} #line 3172 "parse.c" break; case 85: #line 468 "parse.y" { yyval.fp = bi_printf ; print_flag = 1 ; } #line 3177 "parse.c" break; case 86: #line 471 "parse.y" { code2op(_PUSHINT, yystack.l_mark[0].ival) ; } #line 3182 "parse.c" break; case 87: #line 473 "parse.y" { yyval.ival = yystack.l_mark[-1].arg2p->cnt ; zfree(yystack.l_mark[-1].arg2p,sizeof(ARG2_REC)) ; code2op(_PUSHINT, yyval.ival) ; } #line 3189 "parse.c" break; case 88: #line 477 "parse.y" { yyval.ival=0 ; code2op(_PUSHINT, 0) ; } #line 3194 "parse.c" break; case 89: #line 481 "parse.y" { yyval.arg2p = ZMALLOC(ARG2_REC) ; yyval.arg2p->start = yystack.l_mark[-2].start ; yyval.arg2p->cnt = 2 ; } #line 3202 "parse.c" break; case 90: #line 486 "parse.y" { yyval.arg2p = yystack.l_mark[-2].arg2p ; yyval.arg2p->cnt++ ; } #line 3207 "parse.c" break; case 92: #line 491 "parse.y" { code2op(_PUSHINT, yystack.l_mark[-1].ival) ; } #line 3212 "parse.c" break; case 93: #line 498 "parse.y" { yyval.start = yystack.l_mark[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; } #line 3217 "parse.c" break; case 94: #line 503 "parse.y" { patch_jmp( code_ptr ) ; } #line 3222 "parse.c" break; case 95: #line 506 "parse.y" { eat_nl() ; code_jmp(_JMP, (INST*)0) ; } #line 3227 "parse.c" break; case 96: #line 511 "parse.y" { patch_jmp(code_ptr) ; patch_jmp(CDP(yystack.l_mark[0].start)) ; } #line 3234 "parse.c" break; case 97: #line 520 "parse.y" { eat_nl() ; BC_new() ; } #line 3239 "parse.c" break; case 98: #line 525 "parse.y" { yyval.start = yystack.l_mark[-5].start ; code_jmp(_JNZ, CDP(yystack.l_mark[-5].start)) ; BC_clear(code_ptr, CDP(yystack.l_mark[-2].start)) ; } #line 3246 "parse.c" break; case 99: #line 531 "parse.y" { eat_nl() ; BC_new() ; yyval.start = yystack.l_mark[-1].start ; /* check if const expression */ if ( code_ptr - 2 == CDP(yystack.l_mark[-1].start) && code_ptr[-2].op == _PUSHD && *(double*)code_ptr[-1].ptr != 0.0 ) code_ptr -= 2 ; else { INST *p3 = CDP(yystack.l_mark[-1].start) ; code_push(p3, (unsigned) CodeOffset(p3), scope, active_funct) ; code_ptr = p3 ; code2(_JMP, (INST*)0) ; /* code2() not code_jmp() */ } } #line 3266 "parse.c" break; case 100: #line 551 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; INST *p2 = CDP(yystack.l_mark[0].start) ; if ( p1 != p2 ) /* real test in loop */ { int saved_offset ; int len ; p1[1].op = CodeOffset(p1 + 1) ; saved_offset = code_offset ; len = (int) code_pop(code_ptr) ; code_ptr += len ; code_jmp(_JNZ, CDP(yystack.l_mark[0].start)) ; BC_clear(code_ptr, CDP(saved_offset)) ; } else /* while(1) */ { code_jmp(_JMP, p1) ; BC_clear(code_ptr, CDP(yystack.l_mark[0].start)) ; } } #line 3292 "parse.c" break; case 101: #line 578 "parse.y" { int cont_offset = code_offset ; unsigned len = code_pop(code_ptr) ; INST *p2 = CDP(yystack.l_mark[-2].start) ; INST *p4 = CDP(yystack.l_mark[0].start) ; code_ptr += len ; if ( p2 != p4 ) /* real test in for2 */ { p4[-1].op = CodeOffset(p4 - 1) ; len = code_pop(code_ptr) ; code_ptr += len ; code_jmp(_JNZ, CDP(yystack.l_mark[0].start)) ; } else /* for(;;) */ code_jmp(_JMP, p4) ; BC_clear(code_ptr, CDP(cont_offset)) ; } #line 3317 "parse.c" break; case 102: #line 601 "parse.y" { yyval.start = code_offset ; } #line 3322 "parse.c" break; case 103: #line 603 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code1(_POP) ; } #line 3327 "parse.c" break; case 104: #line 606 "parse.y" { yyval.start = code_offset ; } #line 3332 "parse.c" break; case 105: #line 608 "parse.y" { if ( code_ptr - 2 == CDP(yystack.l_mark[-1].start) && code_ptr[-2].op == _PUSHD && * (double*) code_ptr[-1].ptr != 0.0 ) code_ptr -= 2 ; else { INST *p1 = CDP(yystack.l_mark[-1].start) ; code_push(p1, (unsigned) CodeOffset(p1), scope, active_funct) ; code_ptr = p1 ; code2(_JMP, (INST*)0) ; } } #line 3350 "parse.c" break; case 106: #line 625 "parse.y" { eat_nl() ; BC_new() ; code_push((INST*)0,0, scope, active_funct) ; } #line 3357 "parse.c" break; case 107: #line 629 "parse.y" { INST *p1 = CDP(yystack.l_mark[-1].start) ; eat_nl() ; BC_new() ; code1(_POP) ; code_push(p1, (unsigned) CodeOffset(p1), scope, active_funct) ; code_ptr -= code_ptr - p1 ; } #line 3368 "parse.c" break; case 108: #line 642 "parse.y" { check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; code1(A_TEST) ; } #line 3376 "parse.c" break; case 109: #line 647 "parse.y" { yyval.start = yystack.l_mark[-3].arg2p->start ; code2op(A_CAT, yystack.l_mark[-3].arg2p->cnt) ; zfree(yystack.l_mark[-3].arg2p, sizeof(ARG2_REC)) ; check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; code1(A_TEST) ; } #line 3388 "parse.c" break; case 110: #line 658 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } check_array(yystack.l_mark[-4].stp) ; if( is_local(yystack.l_mark[-4].stp) ) { code2op(LAE_PUSHA, yystack.l_mark[-4].stp->offset) ; } else code2(AE_PUSHA, yystack.l_mark[-4].stp->stval.array) ; yyval.start = yystack.l_mark[-3].start ; } #line 3402 "parse.c" break; case 111: #line 671 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } check_array(yystack.l_mark[-4].stp) ; if( is_local(yystack.l_mark[-4].stp) ) { code2op(LAE_PUSHI, yystack.l_mark[-4].stp->offset) ; } else code2(AE_PUSHI, yystack.l_mark[-4].stp->stval.array) ; yyval.start = yystack.l_mark[-3].start ; } #line 3416 "parse.c" break; case 112: #line 683 "parse.y" { if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT,yystack.l_mark[-2].ival) ; } check_array(yystack.l_mark[-5].stp) ; if( is_local(yystack.l_mark[-5].stp) ) { code2op(LAE_PUSHA, yystack.l_mark[-5].stp->offset) ; } else code2(AE_PUSHA, yystack.l_mark[-5].stp->stval.array) ; if ( yystack.l_mark[0].ival == '+' ) code1(_POST_INC) ; else code1(_POST_DEC) ; yyval.start = yystack.l_mark[-4].start ; } #line 3433 "parse.c" break; case 113: #line 700 "parse.y" { yyval.start = yystack.l_mark[-4].start ; if ( yystack.l_mark[-2].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-2].ival) ; } check_array(yystack.l_mark[-5].stp) ; code_array(yystack.l_mark[-5].stp) ; code1(A_DEL) ; } #line 3444 "parse.c" break; case 114: #line 708 "parse.y" { yyval.start = code_offset ; check_array(yystack.l_mark[-1].stp) ; code_array(yystack.l_mark[-1].stp) ; code1(DEL_A) ; } #line 3454 "parse.c" break; case 115: #line 719 "parse.y" { eat_nl() ; BC_new() ; yyval.start = code_offset ; check_var(yystack.l_mark[-3].stp) ; code_address(yystack.l_mark[-3].stp) ; check_array(yystack.l_mark[-1].stp) ; code_array(yystack.l_mark[-1].stp) ; code2(SET_ALOOP, (INST*)0) ; } #line 3468 "parse.c" break; case 116: #line 733 "parse.y" { INST *p2 = CDP(yystack.l_mark[0].start) ; p2[-1].op = CodeOffset(p2 - 1) ; BC_clear( code_ptr+2 , code_ptr) ; code_jmp(ALOOP, p2) ; code1(POP_AL) ; } #line 3480 "parse.c" break; case 117: #line 750 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, yystack.l_mark[0].cp) ; } #line 3485 "parse.c" break; case 118: #line 752 "parse.y" { check_var(yystack.l_mark[0].stp) ; yyval.start = code_offset ; if ( is_local(yystack.l_mark[0].stp) ) { code2op(L_PUSHI, yystack.l_mark[0].stp->offset) ; } else code2(_PUSHI, yystack.l_mark[0].stp->stval.cp) ; CODE_FE_PUSHA() ; } #line 3497 "parse.c" break; case 119: #line 761 "parse.y" { if ( yystack.l_mark[-1].ival > 1 ) { code2op(A_CAT, yystack.l_mark[-1].ival) ; } check_array(yystack.l_mark[-4].stp) ; if( is_local(yystack.l_mark[-4].stp) ) { code2op(LAE_PUSHI, yystack.l_mark[-4].stp->offset) ; } else code2(AE_PUSHI, yystack.l_mark[-4].stp->stval.array) ; CODE_FE_PUSHA() ; yyval.start = yystack.l_mark[-3].start ; } #line 3514 "parse.c" break; case 120: #line 775 "parse.y" { yyval.start = yystack.l_mark[0].start ; CODE_FE_PUSHA() ; } #line 3519 "parse.c" break; case 121: #line 777 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } #line 3524 "parse.c" break; case 122: #line 781 "parse.y" { field_A2I() ; } #line 3529 "parse.c" break; case 123: #line 784 "parse.y" { code1(F_ASSIGN) ; } #line 3534 "parse.c" break; case 124: #line 785 "parse.y" { code1(F_ADD_ASG) ; } #line 3539 "parse.c" break; case 125: #line 786 "parse.y" { code1(F_SUB_ASG) ; } #line 3544 "parse.c" break; case 126: #line 787 "parse.y" { code1(F_MUL_ASG) ; } #line 3549 "parse.c" break; case 127: #line 788 "parse.y" { code1(F_DIV_ASG) ; } #line 3554 "parse.c" break; case 128: #line 789 "parse.y" { code1(F_MOD_ASG) ; } #line 3559 "parse.c" break; case 129: #line 790 "parse.y" { code1(F_POW_ASG) ; } #line 3564 "parse.c" break; case 130: #line 797 "parse.y" { func2(_BUILTIN, bi_split) ; } #line 3569 "parse.c" break; case 131: #line 801 "parse.y" { yyval.start = yystack.l_mark[-2].start ; check_array(yystack.l_mark[0].stp) ; code_array(yystack.l_mark[0].stp) ; } #line 3577 "parse.c" break; case 132: #line 808 "parse.y" { code2(_PUSHI, &fs_shadow) ; } #line 3582 "parse.c" break; case 133: #line 810 "parse.y" { if ( CDP(yystack.l_mark[-1].start) == code_ptr - 2 ) { if ( code_ptr[-2].op == _MATCH0 ) { RE_as_arg() ; } else if ( code_ptr[-2].op == _PUSHS ) { CELL *cp = ZMALLOC(CELL) ; cp->type = C_STRING ; cp->ptr = code_ptr[-1].ptr ; cast_for_split(cp) ; code_ptr[-2].op = _PUSHC ; code_ptr[-1].ptr = (PTR) cp ; no_leaks_cell(cp); } } } #line 3605 "parse.c" break; case 134: #line 833 "parse.y" { yyval.start = code_offset ; code2(_PUSHI,field) ; func2(_BUILTIN,bi_length) ; } #line 3613 "parse.c" break; case 135: #line 838 "parse.y" { yyval.start = yystack.l_mark[-1].start ; func2(_BUILTIN,bi_length) ; } #line 3620 "parse.c" break; case 136: #line 842 "parse.y" { SYMTAB* stp = yystack.l_mark[-1].stp; yyval.start = code_offset; switch (stp->type) { case ST_VAR: code2(_PUSHI, stp->stval.cp); func2(_BUILTIN, bi_length); break; case ST_ARRAY: code2(A_PUSHA, stp->stval.array); func2(_BUILTIN, bi_alength); break; case ST_LOCAL_VAR: code2op(L_PUSHI, stp->offset); func2(_BUILTIN, bi_length); break; case ST_LOCAL_ARRAY: code2op(LA_PUSHA, stp->offset); func2(_BUILTIN, bi_alength); break; case ST_NONE: /* defer_alen */ code2(A_LENGTH, stp); func2(_BUILTIN, bi_length); break; case ST_LOCAL_NONE: /* defer_len */ { DEFER_LEN* pi = ZMALLOC(DEFER_LEN); pi->fbp = active_funct; pi->offset = stp->offset; code2(_LENGTH, pi); func2(_BUILTIN, bi_length); } break; default: type_error(stp); break; } } #line 3670 "parse.c" break; case 137: #line 890 "parse.y" { yyval.start = code_offset ; code2(_PUSHI,field) ; func2(_BUILTIN,bi_length) ; } #line 3678 "parse.c" break; case 138: #line 899 "parse.y" { yyval.start = yystack.l_mark[-3].start ; func2(_BUILTIN, bi_match) ; } #line 3685 "parse.c" break; case 139: #line 906 "parse.y" { INST *p1 = CDP(yystack.l_mark[0].start) ; if ( p1 == code_ptr - 2 ) { if ( p1->op == _MATCH0 ) RE_as_arg() ; else if ( p1->op == _PUSHS ) { CELL *cp = ZMALLOC(CELL) ; cp->type = C_STRING ; cp->ptr = p1[1].ptr ; cast_to_RE(cp) ; p1->op = _PUSHC ; p1[1].ptr = (PTR) cp ; no_leaks_cell(cp); } } } #line 3708 "parse.c" break; case 140: #line 930 "parse.y" { yyval.start = code_offset ; code1(_EXIT0) ; } #line 3714 "parse.c" break; case 141: #line 933 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code1(_EXIT) ; } #line 3719 "parse.c" break; case 142: #line 937 "parse.y" { yyval.start = code_offset ; code1(_RET0) ; } #line 3725 "parse.c" break; case 143: #line 940 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code1(_RET) ; } #line 3730 "parse.c" break; case 144: #line 946 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(0) ; func2(_BUILTIN, bi_getline) ; getline_flag = 0 ; } #line 3740 "parse.c" break; case 145: #line 953 "parse.y" { yyval.start = yystack.l_mark[0].start ; code1(_PUSHINT) ; code1(0) ; func2(_BUILTIN, bi_getline) ; getline_flag = 0 ; } #line 3749 "parse.c" break; case 146: #line 959 "parse.y" { code1(_PUSHINT) ; code1(F_IN) ; func2(_BUILTIN, bi_getline) ; /* getline_flag already off in yylex() */ } #line 3757 "parse.c" break; case 147: #line 964 "parse.y" { code2(F_PUSHA, &field[0]) ; code1(_PUSHINT) ; code1(PIPE_IN) ; func2(_BUILTIN, bi_getline) ; } #line 3765 "parse.c" break; case 148: #line 969 "parse.y" { code1(_PUSHINT) ; code1(PIPE_IN) ; func2(_BUILTIN, bi_getline) ; } #line 3773 "parse.c" break; case 149: #line 975 "parse.y" { getline_flag = 1 ; } #line 3778 "parse.c" break; case 152: #line 980 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, field+0) ; } #line 3785 "parse.c" break; case 153: #line 984 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } #line 3790 "parse.c" break; case 154: #line 992 "parse.y" { INST *p5 = CDP(yystack.l_mark[-1].start) ; INST *p6 = CDP(yystack.l_mark[0].start) ; if ( p6 - p5 == 2 && p5->op == _PUSHS ) { /* cast from STRING to REPL at compile time */ CELL *cp = ZMALLOC(CELL) ; cp->type = C_STRING ; cp->ptr = p5[1].ptr ; cast_to_REPL(cp) ; p5->op = _PUSHC ; p5[1].ptr = (PTR) cp ; no_leaks_cell(cp); } func2(_BUILTIN, yystack.l_mark[-5].fp) ; yyval.start = yystack.l_mark[-3].start ; } #line 3811 "parse.c" break; case 155: #line 1011 "parse.y" { yyval.fp = bi_sub ; } #line 3816 "parse.c" break; case 156: #line 1012 "parse.y" { yyval.fp = bi_gsub ; } #line 3821 "parse.c" break; case 157: #line 1017 "parse.y" { yyval.start = code_offset ; code2(F_PUSHA, &field[0]) ; } #line 3828 "parse.c" break; case 158: #line 1022 "parse.y" { yyval.start = yystack.l_mark[-1].start ; } #line 3833 "parse.c" break; case 159: #line 1030 "parse.y" { resize_fblock(yystack.l_mark[-1].fbp) ; restore_ids() ; switch_code_to_main() ; } #line 3842 "parse.c" break; case 160: #line 1039 "parse.y" { eat_nl() ; scope = SCOPE_FUNCT ; active_funct = yystack.l_mark[-3].fbp ; *main_code_p = active_code ; yystack.l_mark[-3].fbp->nargs = (NUM_ARGS) yystack.l_mark[-1].ival ; if ( yystack.l_mark[-1].ival ) yystack.l_mark[-3].fbp->typev = (SYM_TYPE *) memset( zmalloc((size_t) yystack.l_mark[-1].ival), ST_LOCAL_NONE, (size_t) yystack.l_mark[-1].ival) ; else yystack.l_mark[-3].fbp->typev = (SYM_TYPE *) 0 ; code_ptr = code_base = (INST *) zmalloc(INST_BYTES(PAGESZ)); code_limit = code_base + PAGESZ ; code_warn = code_limit - CODEWARN ; improve_arglist(yystack.l_mark[-3].fbp->name); free_arglist(); } #line 3864 "parse.c" break; case 161: #line 1060 "parse.y" { FBLOCK *fbp ; if ( yystack.l_mark[0].stp == NULL ) { compile_error("function definition") ; mawk_exit(3); } if ( yystack.l_mark[0].stp->type == ST_NONE ) { yystack.l_mark[0].stp->type = ST_FUNCT ; fbp = yystack.l_mark[0].stp->stval.fbp = ZMALLOC(FBLOCK) ; fbp->name = yystack.l_mark[0].stp->name ; fbp->code = (INST*) 0 ; } else { type_error( yystack.l_mark[0].stp ) ; /* this FBLOCK will not be put in the symbol table */ fbp = ZMALLOC(FBLOCK) ; fbp->name = "" ; } yyval.fbp = fbp ; } #line 3893 "parse.c" break; case 162: #line 1087 "parse.y" { yyval.fbp = yystack.l_mark[0].fbp ; if ( yystack.l_mark[0].fbp->code ) compile_error("redefinition of %s" , yystack.l_mark[0].fbp->name) ; } #line 3901 "parse.c" break; case 163: #line 1093 "parse.y" { yyval.ival = init_arglist() ; } #line 3906 "parse.c" break; case 165: #line 1098 "parse.y" { init_arglist(); yystack.l_mark[0].stp = save_arglist(yystack.l_mark[0].stp->name) ; yystack.l_mark[0].stp->offset = 0 ; yyval.ival = 1 ; } #line 3915 "parse.c" break; case 166: #line 1104 "parse.y" { if ( is_local(yystack.l_mark[0].stp) ) compile_error("%s is duplicated in argument list", yystack.l_mark[0].stp->name) ; else { yystack.l_mark[0].stp = save_arglist(yystack.l_mark[0].stp->name) ; yystack.l_mark[0].stp->offset = (unsigned char) yystack.l_mark[-2].ival ; yyval.ival = yystack.l_mark[-2].ival + 1 ; } } #line 3928 "parse.c" break; case 167: #line 1116 "parse.y" { /* we may have to recover from a bungled function definition */ /* can have local ids, before code scope changes */ restore_ids() ; switch_code_to_main() ; } #line 3940 "parse.c" break; case 168: #line 1129 "parse.y" { yyval.start = yystack.l_mark[-1].start ; code2(_CALL, yystack.l_mark[-2].fbp) ; if ( yystack.l_mark[0].ca_p ) code1(yystack.l_mark[0].ca_p->arg_num+1) ; else code1(0) ; check_fcall(yystack.l_mark[-2].fbp, scope, code_move_level, active_funct, yystack.l_mark[0].ca_p) ; } #line 3952 "parse.c" break; case 169: #line 1140 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } #line 3957 "parse.c" break; case 170: #line 1142 "parse.y" { yyval.ca_p = yystack.l_mark[0].ca_p ; yyval.ca_p->link = yystack.l_mark[-1].ca_p ; yyval.ca_p->arg_num = (NUM_ARGS) (yystack.l_mark[-1].ca_p ? yystack.l_mark[-1].ca_p->arg_num+1 : 0) ; yyval.ca_p->call_lineno = token_lineno; } #line 3966 "parse.c" break; case 171: #line 1158 "parse.y" { yyval.ca_p = (CA_REC *) 0 ; } #line 3971 "parse.c" break; case 172: #line 1160 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; yyval.ca_p->type = CA_EXPR ; yyval.ca_p->arg_num = (NUM_ARGS) (yystack.l_mark[-2].ca_p ? yystack.l_mark[-2].ca_p->arg_num+1 : 0) ; yyval.ca_p->call_offset = code_offset ; yyval.ca_p->call_lineno = token_lineno; } #line 3982 "parse.c" break; case 173: #line 1168 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = ST_NONE ; yyval.ca_p->link = yystack.l_mark[-2].ca_p ; yyval.ca_p->arg_num = (NUM_ARGS) (yystack.l_mark[-2].ca_p ? yystack.l_mark[-2].ca_p->arg_num+1 : 0) ; yyval.ca_p->call_lineno = token_lineno; code_call_id(yyval.ca_p, yystack.l_mark[-1].stp) ; } #line 3994 "parse.c" break; case 174: #line 1179 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = CA_EXPR ; yyval.ca_p->call_offset = code_offset ; } #line 4002 "parse.c" break; case 175: #line 1185 "parse.y" { yyval.ca_p = ZMALLOC(CA_REC) ; yyval.ca_p->type = ST_NONE ; code_call_id(yyval.ca_p, yystack.l_mark[-1].stp) ; } #line 4010 "parse.c" break; #line 4012 "parse.c" default: break; } yystack.s_mark -= yym; yystate = *yystack.s_mark; yystack.l_mark -= yym; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark -= yym; #endif yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); #endif fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); } #endif yystate = YYFINAL; *++yystack.s_mark = YYFINAL; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif if (yychar < 0) { #if YYBTYACC do { if (yylvp < yylve) { /* we're currently re-reading tokens */ yylval = *yylvp++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylloc = *yylpp++; #endif yychar = *yylexp++; break; } if (yyps->save) { /* in trial mode; save scanner results for future parse attempts */ if (yylvp == yylvlim) { /* Enlarge lexical value queue */ size_t p = (size_t) (yylvp - yylvals); size_t s = (size_t) (yylvlim - yylvals); s += YYLVQUEUEGROWTH; if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem; if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; #endif yylvp = yylve = yylvals + p; yylvlim = yylvals + s; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpe = yylpsns + p; yylplim = yylpsns + s; #endif yylexp = yylexemes + p; } *yylexp = (YYINT) YYLEX; *yylvp++ = yylval; yylve++; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *yylpp++ = yylloc; yylpe++; #endif yychar = *yylexp++; break; } /* normal operation, no conflict encountered */ #endif /* YYBTYACC */ yychar = YYLEX; #if YYBTYACC } while (0); #endif /* YYBTYACC */ if (yychar < 0) yychar = YYEOF; #if YYDEBUG if (yydebug) { if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN]; fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n", YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); } #endif } if (yychar == YYEOF) goto yyaccept; goto yyloop; } if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) { fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); #ifdef YYSTYPE_TOSTRING #if YYBTYACC if (!yytrial) #endif /* YYBTYACC */ fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); #endif fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); } #endif if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; *++yystack.s_mark = (YYINT) yystate; *++yystack.l_mark = yyval; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) *++yystack.p_mark = yyloc; #endif goto yyloop; #if YYBTYACC /* Reduction declares that this path is valid. Set yypath and do a full parse */ yyvalid: if (yypath) YYABORT; while (yyps->save) { YYParseState *save = yyps->save; yyps->save = save->save; save->save = yypath; yypath = save; } #if YYDEBUG if (yydebug) fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); #endif if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } yylvp = yylvals + yypath->lexeme; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yylpp = yylpsns + yypath->lexeme; #endif yylexp = yylexemes + yypath->lexeme; yychar = YYEMPTY; yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT)); yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); #endif yystate = yypath->state; goto yyloop; #endif /* YYBTYACC */ yyoverflow: YYERROR_CALL("yacc stack overflow"); #if YYBTYACC goto yyabort_nomem; yyenomem: YYERROR_CALL("memory exhausted"); yyabort_nomem: #endif /* YYBTYACC */ yyresult = 2; goto yyreturn; yyabort: yyresult = 1; goto yyreturn; yyaccept: #if YYBTYACC if (yyps->save) goto yyvalid; #endif /* YYBTYACC */ yyresult = 0; yyreturn: #if defined(YYDESTRUCT_CALL) if (yychar != YYEOF && yychar != YYEMPTY) #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); #else YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ { YYSTYPE *pv; #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) YYLTYPE *pp; for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); #else for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) YYDESTRUCT_CALL("cleanup: discarding state", yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ } #endif /* defined(YYDESTRUCT_CALL) */ #if YYBTYACC if (yyerrctx) { yyFreeState(yyerrctx); yyerrctx = NULL; } while (yyps) { YYParseState *save = yyps; yyps = save->save; save->save = NULL; yyFreeState(save); } while (yypath) { YYParseState *save = yypath; yypath = save->save; save->save = NULL; yyFreeState(save); } #endif /* YYBTYACC */ yyfreestack(&yystack); return (yyresult); }