home *** CD-ROM | disk | FTP | other *** search
- #ifndef lint
- static char yyid[] = "@(#)modification of yaccpar 1.8 (Berkeley) 01/20/90";
- #endif
- #define YYXBYACC 1 /* XBYACC -- modified Berkeley yacc */
- /*
- Berkeley yacc modified so only tables and
- yydebug and yylval are global
- #define YYGLOBAL -- gives standard byacc
- #define YYPURE -- gives a reentrant parser
-
- Mike Brennan 11/05/91
- */
- #line 24 "parse.y"
- #include <stdio.h>
- #include "mawk.h"
- #include "code.h"
- #include "symtype.h"
- #include "memory.h"
- #include "bi_funct.h"
- #include "bi_vars.h"
- #include "jmp.h"
- #include "field.h"
- #include "files.h"
-
- #ifdef YYXBYACC
- #define YYBYACC 1
- #endif
-
- #define YYMAXDEPTH 200
-
- /* Bison's use of MSDOS and ours clashes */
- #undef MSDOS
-
- extern void PROTO( eat_nl, (void) ) ;
- static void PROTO( resize_fblock, (FBLOCK *, INST *) ) ;
- static void PROTO( code_array, (SYMTAB *) ) ;
- static void PROTO( code_call_id, (CA_REC *, SYMTAB *) ) ;
- static void PROTO( field_A2I, (void)) ;
- static int PROTO( current_offset, (void) ) ;
- static void PROTO( check_var, (SYMTAB *) ) ;
- static void PROTO( check_array, (SYMTAB *) ) ;
- static void PROTO( RE_as_arg, (void)) ;
-
- static int scope ;
- static FBLOCK *active_funct ;
- /* when scope is SCOPE_FUNCT */
-
- #define code_address(x) if( is_local(x) )\
- { code1(L_PUSHA) ; code1((x)->offset) ; }\
- else code2(_PUSHA, (x)->stval.cp)
-
- /* this nonsense caters to MSDOS large model */
- #define CODE_FE_PUSHA() code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA)
-
- #line 67 "parse.y"
- typedef union{
- CELL *cp ;
- SYMTAB *stp ;
- INST *start ; /* code starting address */
- PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */
- 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;
- #line 69 "y.tab.c"
- #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 PRINT 310
- #define PRINTF 311
- #define SPLIT 312
- #define MATCH_FUNC 313
- #define SUB 314
- #define GSUB 315
- #define DO 316
- #define WHILE 317
- #define FOR 318
- #define BREAK 319
- #define CONTINUE 320
- #define IF 321
- #define ELSE 322
- #define DELETE 323
- #define BEGIN 324
- #define END 325
- #define EXIT 326
- #define NEXT 327
- #define RETURN 328
- #define FUNCTION 329
- #define YYERRCODE 256
- short yylhs[] = { -1,
- 0, 0, 36, 36, 36, 37, 39, 37, 40, 37,
- 41, 37, 42, 43, 37, 1, 1, 2, 2, 3,
- 3, 4, 4, 4, 4, 4, 4, 4, 4, 44,
- 44, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 45, 13, 46, 13,
- 47, 48, 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, 49,
- 49, 17, 4, 50, 4, 51, 4, 16, 4, 4,
- 18, 18, 19, 19, 52, 52, 13, 13, 10, 15,
- 15, 4, 20, 4, 11, 11, 11, 11, 11, 15,
- 13, 13, 13, 13, 13, 13, 13, 15, 22, 53,
- 53, 15, 23, 4, 4, 21, 21, 15, 15, 15,
- 15, 15, 54, 12, 12, 9, 9, 15, 28, 28,
- 24, 24, 38, 29, 30, 30, 34, 34, 35, 35,
- 15, 31, 31, 32, 32, 32, 33, 33,
- };
- short 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, 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, 6, 2, 1, 2, 6, 2, 3, 1,
- 3, 3, 3, 3, 3, 3, 3, 2, 5, 1,
- 3, 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,
- 3, 2, 2, 1, 3, 3, 2, 2,
- };
- short yydefred[] = { 0,
- 0, 0, 143, 0, 0, 0, 0, 0, 115, 0,
- 56, 57, 60, 0, 81, 81, 0, 0, 149, 150,
- 7, 9, 0, 0, 6, 70, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 3, 4, 0,
- 5, 0, 30, 31, 83, 84, 96, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 22, 0, 20, 0,
- 0, 0, 0, 0, 28, 81, 24, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 72, 74, 0, 118,
- 0, 0, 0, 71, 0, 0, 0, 0, 0, 0,
- 0, 155, 156, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 13, 51, 47, 49, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 130, 128, 0, 153, 0, 146, 144, 145,
- 0, 17, 25, 0, 0, 26, 27, 0, 81, 0,
- 134, 29, 0, 136, 0, 16, 21, 23, 99, 0,
- 103, 0, 0, 114, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 119, 0, 59, 0, 0, 161, 0,
- 0, 0, 0, 8, 10, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 107, 0, 40, 41, 42, 43, 44,
- 45, 18, 12, 19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 159, 0, 0, 147, 0, 101,
- 0, 0, 0, 0, 135, 137, 94, 0, 104, 105,
- 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 162, 0, 0, 163, 0,
- 0, 0, 0, 0, 0, 0, 142, 131, 0, 154,
- 0, 98, 0, 102, 92, 0, 95, 106, 100, 87,
- 0, 0, 0, 0, 0, 0, 0, 0, 108, 0,
- 166, 168, 165, 167, 80, 129, 0, 0, 52, 0,
- 160, 0, 0, 0, 0, 82, 0, 0, 0, 109,
- 117, 111, 132, 15, 0, 0, 151, 148, 113, 0,
- 0, 0, 0, 112, 97, 152,
- };
- short yydgoto[] = { 24,
- 57, 213, 58, 59, 85, 244, 81, 26, 27, 28,
- 29, 141, 60, 31, 32, 61, 62, 63, 163, 64,
- 65, 33, 224, 318, 246, 247, 66, 34, 35, 36,
- 179, 180, 259, 226, 227, 37, 38, 39, 90, 91,
- 123, 200, 298, 67, 202, 203, 201, 315, 283, 238,
- 68, 242, 134, 40,
- };
- short yysindex[] = { 38,
- -259, 276, 0, 2215, 2215, 2215, -158, 2128, 0, 2244,
- 0, 0, 0, -290, 0, 0, -286, -274, 0, 0,
- 0, 0, -212, 38, 0, 0, 2215, 282, 2122, 2514,
- 2215, 116, -242, -270, -259, -261, 0, 0, 0, -223,
- 0, -125, 0, 0, 0, 0, 0, -255, -250, -197,
- -197, -234, -222, 1702, -197, 1702, 0, 130, 0, 2466,
- 349, 349, 1792, 349, 0, 0, 0, 349, 2244, -290,
- -210, -260, -260, -260, -103, 0, 0, 0, 0, 0,
- -241, -84, 2069, 0, -147, -169, -143, 2244, 2244, -259,
- -259, 0, 0, 0, -130, 2244, 2244, 2244, 2244, 2244,
- 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 0,
- 0, 0, 0, 0, -135, 2244, 2244, 2244, 2244, 2244,
- 2244, 2244, -44, 116, 2215, 2215, 2215, 2215, 2215, -110,
- 2215, 2244, 0, 0, 2244, 0, -106, 0, 0, 0,
- -69, 0, 0, 2244, 1822, 0, 0, 2244, 0, 2466,
- 0, 0, 2466, 0, -197, 0, 0, 0, 0, -95,
- 0, 2478, 2157, 0, 2273, -88, 2373, -22, -59, -14,
- -10, 2244, -24, 0, 2244, 0, 2244, -46, 0, 2302,
- 2244, 2535, 2556, 0, 0, 2580, 2580, 2580, 2580, 2580,
- 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2244,
- 2244, 2244, 2244, 0, 204, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -25, -25, -260, -260, -260, -158,
- -130, 2385, 2580, -8, 0, -43, -4, 0, 2400, 0,
- -266, 2493, 2412, 5, 0, 0, 0, 349, 0, 0,
- 2427, 349, 2186, -2, 2580, 0, -3, -32, 2244, 2244,
- 2244, 2580, -31, 2580, -184, 0, -248, 2096, 0, -28,
- -19, 2244, 2580, 2568, 2589, 197, 0, 0, 2244, 0,
- -18, 0, -6, 0, 0, 2244, 0, 0, 0, 0,
- -237, 2244, -197, 2244, 2244, -126, -111, -102, 0, -17,
- 0, 0, 0, 0, 0, 0, -20, -44, 0, 2123,
- 0, 2, -90, -24, 2580, 0, 2580, 2439, -17, 0,
- 0, 0, 0, 0, 2244, -158, 0, 0, 0, -197,
- -197, 2580, 6, 0, 0, 0,
- };
- short yyrindex[] = { 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 590, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1559, 19,
- 95, 1616, 0, 0, 0, 0, 0, 0, 0, 1388,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 533,
- 647, 875, 932, 989, 0, 419, 0, 0, 476, 0,
- 0, 1917, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1046, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1673, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 11, 0, 0, 0,
- 704, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
- 0, 0, 0, 0, -109, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 2331, 0, 0,
- 12, 0, 0, 0, 0, -217, 135, 208, 281, 354,
- 1974, 1982, 1994, 2002, 2014, 2022, 2034, 2042, 2054, 0,
- 0, 0, 0, 0, -54, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1445, 1502, 1103, 1160, 1217, 1331,
- 761, 0, -236, 0, 0, 0, 15, 0, 0, 0,
- 1758, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -80, -173, 0, -207, 0, 0, 0,
- 0, -231, 0, -227, 0, 0, 1875, 0, 0, 0,
- 0, 0, 37, 0, -29, 46, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1274,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -67, -51, 0, -26, 0, 818, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 2062, 0, 0, 0, 0,
- };
- short yygindex[] = { 0,
- 21, 4, 0, -48, 3, 0, 41, 0, 0, -7,
- -1, -185, 1, 0, 164, 0, 0, 0, 0, 0,
- 0, 0, 39, 0, 122, -136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 294, 0, 0, 0, 0,
- 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- #define YYTABLESIZE 2874
- short yytable[] = { 77,
- 30, 2, 71, 71, 71, 78, 71, 84, 82, 157,
- 83, 273, 159, 160, 88, 164, 291, 86, 87, 166,
- 25, 41, 132, 172, 30, 71, 89, 172, 133, 71,
- 135, 84, 139, 89, 267, 130, 131, 88, 140, 137,
- 255, 33, 33, 33, 25, 144, 33, 33, 33, 84,
- 145, 77, 77, 292, 150, 136, 153, 33, 77, 133,
- 173, 43, 44, 162, 304, 133, 148, 82, 165, 167,
- 89, 138, 168, 169, 88, 8, 9, 75, 170, 290,
- 284, 171, 76, 149, 33, 78, 78, 110, 182, 183,
- 78, 78, 78, 92, 77, 93, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
- 184, 185, 286, 287, 288, 177, 205, 206, 207, 208,
- 209, 210, 211, 71, 71, 71, 71, 71, 78, 71,
- 323, 178, 222, 43, 44, 223, 142, 309, 284, 303,
- 8, 9, 75, 212, 229, 232, 143, 76, 233, 76,
- 76, 234, 310, 284, 146, 147, 76, 181, 151, 152,
- 154, 311, 284, 241, 158, 245, 131, 72, 73, 74,
- 204, 80, 252, 320, 284, 254, 220, 245, 90, 90,
- 258, 245, 103, 104, 105, 106, 107, 108, 109, 277,
- 95, 86, 86, 279, 124, 8, 9, 75, 86, 225,
- 263, 264, 265, 266, 46, 46, 46, 91, 91, 46,
- 46, 46, 139, 110, 43, 44, 2, 174, 140, 46,
- 46, 46, 46, 46, 46, 228, 237, 214, 248, 48,
- 48, 48, 79, 79, 48, 48, 48, 79, 79, 79,
- 249, 82, 174, 83, 48, 48, 48, 46, 250, 245,
- 245, 245, 251, 253, 235, 256, 269, 236, 270, 143,
- 271, 284, 223, 282, 127, 128, 129, 276, 285, 300,
- 130, 131, 48, 295, 289, 79, 245, 11, 11, 11,
- 312, 313, 305, 281, 307, 308, 296, 301, 215, 216,
- 217, 218, 219, 1, 221, 14, 14, 14, 2, 302,
- 297, 314, 260, 319, 50, 50, 50, 326, 139, 50,
- 50, 50, 157, 76, 140, 322, 158, 94, 212, 50,
- 50, 50, 50, 0, 3, 4, 5, 0, 0, 0,
- 6, 0, 0, 0, 0, 7, 8, 9, 10, 0,
- 11, 12, 13, 14, 0, 15, 16, 50, 0, 17,
- 18, 19, 20, 32, 32, 32, 0, 0, 32, 32,
- 32, 21, 22, 0, 0, 0, 23, 0, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 0, 0, 0, 0, 0, 155, 0, 306, 43, 44,
- 2, 156, 0, 34, 34, 34, 32, 0, 34, 34,
- 34, 0, 214, 125, 126, 127, 128, 129, 0, 34,
- 0, 130, 131, 0, 0, 0, 3, 4, 5, 0,
- 0, 0, 6, 0, 324, 325, 0, 7, 8, 9,
- 10, 0, 11, 12, 13, 14, 34, 15, 16, 45,
- 46, 17, 18, 19, 20, 47, 48, 49, 50, 51,
- 52, 0, 53, 0, 0, 54, 55, 56, 93, 0,
- 0, 93, 93, 93, 93, 0, 35, 35, 35, 0,
- 0, 35, 35, 35, 115, 116, 117, 118, 119, 120,
- 121, 122, 35, 117, 118, 119, 120, 121, 122, 93,
- 93, 93, 0, 0, 0, 93, 0, 0, 0, 0,
- 93, 93, 93, 93, 0, 93, 93, 93, 93, 35,
- 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 93, 93, 93, 0, 93, 0, 0, 93, 93,
- 93, 42, 0, 0, 43, 44, 2, 0, 0, 36,
- 36, 36, 0, 0, 36, 36, 36, 0, 96, 97,
- 98, 99, 100, 101, 102, 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, 45, 46, 17, 18, 19,
- 20, 47, 48, 49, 50, 51, 52, 0, 53, 0,
- 0, 54, 55, 56, 155, 0, 0, 43, 44, 2,
- 0, 0, 37, 37, 37, 0, 0, 37, 37, 37,
- 0, 0, 0, 0, 0, 0, 0, 0, 37, 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, 37, 15, 16, 45, 46,
- 17, 18, 19, 20, 47, 48, 49, 50, 51, 52,
- 0, 53, 0, 0, 54, 55, 56, 75, 75, 75,
- 0, 81, 75, 75, 75, 75, 75, 75, 75, 75,
- 75, 75, 75, 75, 75, 75, 75, 75, 75, 75,
- 75, 75, 75, 75, 0, 75, 75, 75, 75, 75,
- 75, 75, 0, 75, 75, 75, 75, 75, 75, 75,
- 75, 75, 75, 75, 75, 0, 75, 75, 0, 0,
- 75, 75, 75, 75, 116, 116, 116, 0, 81, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 0, 116, 116, 116, 116, 116, 116, 116, 0,
- 116, 116, 116, 116, 116, 116, 116, 116, 116, 116,
- 116, 116, 0, 116, 116, 0, 0, 116, 116, 116,
- 116, 58, 58, 58, 0, 81, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 0, 58,
- 58, 58, 58, 58, 58, 58, 0, 58, 58, 58,
- 0, 58, 58, 58, 58, 58, 58, 58, 58, 0,
- 58, 58, 0, 0, 58, 58, 58, 58, 58, 58,
- 58, 0, 81, 58, 58, 58, 75, 75, 75, 75,
- 75, 75, 75, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 0, 58, 58, 58, 58,
- 58, 58, 58, 0, 0, 58, 58, 0, 58, 58,
- 58, 58, 58, 58, 58, 58, 0, 58, 58, 0,
- 0, 58, 58, 58, 58, 120, 120, 120, 0, 0,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 0, 120, 120, 120, 120, 120, 120, 120,
- 0, 120, 120, 120, 0, 120, 120, 120, 120, 120,
- 120, 120, 120, 0, 120, 120, 0, 0, 120, 120,
- 120, 120, 139, 139, 139, 0, 0, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 0,
- 139, 139, 139, 139, 139, 139, 139, 0, 0, 139,
- 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
- 0, 139, 139, 0, 0, 139, 139, 139, 139, 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, 66, 0, 66, 66,
- 66, 66, 66, 66, 66, 66, 66, 0, 66, 66,
- 0, 0, 66, 66, 66, 66, 110, 110, 110, 0,
- 0, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 110, 0, 110, 110, 110, 110, 110, 110,
- 110, 0, 110, 110, 110, 0, 110, 110, 110, 110,
- 110, 110, 110, 110, 0, 110, 110, 0, 0, 110,
- 110, 110, 110, 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, 0, 0, 68, 68, 68, 68,
- 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, 0, 0, 69, 69, 69, 69, 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, 0, 0, 67, 67, 67, 67,
- 67, 67, 67, 67, 67, 0, 67, 67, 0, 0,
- 67, 67, 67, 67, 140, 140, 140, 0, 0, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 0, 140, 140, 140, 140, 140, 140, 140, 0,
- 140, 0, 0, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 0, 140, 140, 0, 0, 140, 140, 140,
- 140, 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, 63, 63, 63, 63, 0, 63, 0, 0,
- 63, 63, 63, 63, 63, 63, 63, 63, 63, 0,
- 63, 63, 0, 0, 63, 63, 63, 63, 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, 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, 0, 0, 65, 65,
- 65, 65, 110, 110, 110, 0, 0, 110, 110, 110,
- 109, 109, 109, 109, 109, 109, 109, 110, 110, 110,
- 110, 110, 110, 110, 110, 110, 110, 110, 110, 0,
- 110, 110, 110, 110, 110, 110, 110, 0, 0, 110,
- 110, 0, 110, 110, 110, 110, 110, 110, 110, 110,
- 0, 110, 110, 0, 0, 110, 110, 110, 110, 141,
- 141, 141, 0, 0, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 141, 141, 141, 141,
- 141, 141, 141, 141, 141, 141, 0, 141, 141, 141,
- 141, 141, 141, 141, 0, 141, 141, 141, 141, 0,
- 0, 0, 141, 141, 141, 141, 0, 0, 141, 141,
- 0, 0, 141, 141, 141, 141, 138, 138, 138, 0,
- 0, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138, 138, 138,
- 138, 138, 138, 0, 138, 138, 138, 138, 138, 138,
- 138, 0, 0, 138, 138, 138, 0, 0, 0, 138,
- 138, 138, 138, 0, 0, 138, 138, 0, 0, 138,
- 138, 138, 138, 61, 61, 61, 0, 0, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 0, 61, 61, 61, 0, 0, 0, 61, 0, 61,
- 0, 0, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 0, 61, 61, 0, 0, 61, 61, 61, 61,
- 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, 0, 0, 62, 62, 62, 62, 120, 120, 120,
- 0, 0, 120, 120, 120, 0, 0, 0, 0, 0,
- 0, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 120, 120, 0, 120, 120, 120, 120, 120,
- 120, 120, 0, 0, 120, 120, 0, 120, 120, 120,
- 120, 120, 120, 120, 120, 0, 120, 120, 0, 0,
- 120, 120, 120, 120, 54, 54, 54, 0, 0, 54,
- 54, 54, 0, 0, 0, 0, 0, 0, 0, 54,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 0, 54, 0, 0, 0, 0, 0, 54, 0,
- 0, 0, 0, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 0, 54, 54, 0, 0, 54, 54, 54,
- 54, 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,
- 43, 44, 0, 0, 0, 55, 0, 0, 0, 0,
- 55, 55, 55, 55, 55, 55, 55, 55, 55, 0,
- 55, 55, 0, 0, 55, 55, 55, 55, 3, 4,
- 5, 0, 0, 0, 6, 0, 0, 0, 0, 7,
- 8, 9, 10, 0, 11, 12, 13, 14, 0, 15,
- 16, 0, 0, 17, 18, 19, 20, 58, 0, 0,
- 81, 0, 0, 0, 75, 75, 75, 75, 75, 75,
- 75, 58, 0, 58, 58, 0, 58, 58, 58, 58,
- 58, 58, 58, 0, 58, 58, 58, 58, 58, 58,
- 58, 161, 0, 58, 58, 0, 58, 58, 58, 0,
- 58, 58, 58, 58, 0, 58, 58, 0, 0, 58,
- 58, 58, 58, 0, 0, 0, 0, 0, 3, 4,
- 5, 230, 0, 0, 6, 0, 0, 0, 0, 7,
- 8, 9, 10, 0, 11, 12, 13, 14, 0, 15,
- 16, 0, 0, 17, 18, 19, 20, 0, 3, 4,
- 5, 0, 0, 0, 6, 0, 0, 0, 0, 7,
- 8, 9, 10, 0, 11, 12, 13, 231, 0, 15,
- 16, 0, 0, 17, 18, 19, 20, 81, 0, 0,
- 0, 75, 75, 75, 75, 75, 75, 75, 58, 0,
- 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
- 0, 58, 58, 58, 58, 58, 58, 58, 0, 0,
- 58, 58, 0, 58, 58, 58, 0, 58, 58, 58,
- 58, 120, 58, 58, 0, 0, 58, 58, 58, 58,
- 120, 0, 120, 120, 120, 120, 120, 120, 120, 120,
- 120, 120, 0, 120, 120, 120, 120, 120, 120, 120,
- 0, 0, 120, 120, 0, 120, 120, 120, 0, 120,
- 120, 120, 120, 0, 120, 120, 0, 0, 120, 120,
- 120, 120, 38, 38, 38, 0, 0, 38, 38, 38,
- 39, 39, 39, 0, 0, 39, 39, 39, 38, 0,
- 0, 0, 121, 121, 121, 0, 39, 121, 121, 121,
- 122, 122, 122, 0, 0, 122, 122, 122, 121, 0,
- 0, 0, 123, 123, 123, 38, 122, 123, 123, 123,
- 124, 124, 124, 39, 0, 124, 124, 124, 123, 0,
- 0, 0, 125, 125, 125, 121, 124, 125, 125, 125,
- 126, 126, 126, 122, 0, 126, 126, 126, 125, 0,
- 0, 0, 127, 127, 127, 123, 126, 127, 127, 127,
- 53, 53, 53, 124, 0, 53, 53, 53, 127, 0,
- 0, 0, 0, 175, 0, 125, 53, 0, 0, 0,
- 0, 0, 112, 126, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 0, 127, 0, 0, 0, 0,
- 293, 0, 0, 53, 0, 0, 0, 0, 0, 112,
- 176, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 0, 0, 0, 0, 0, 0, 316, 103, 104,
- 105, 106, 107, 108, 109, 0, 112, 294, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 0, 0,
- 0, 0, 0, 0, 3, 4, 5, 0, 0, 110,
- 6, 0, 0, 0, 317, 7, 8, 9, 69, 0,
- 11, 12, 13, 70, 79, 15, 16, 0, 0, 17,
- 18, 19, 20, 3, 4, 5, 0, 0, 0, 6,
- 0, 0, 0, 0, 7, 8, 9, 10, 240, 11,
- 12, 13, 14, 0, 15, 16, 0, 0, 17, 18,
- 19, 20, 3, 4, 5, 0, 0, 0, 6, 0,
- 0, 0, 0, 7, 8, 9, 10, 280, 11, 12,
- 13, 14, 0, 15, 16, 0, 0, 17, 18, 19,
- 20, 3, 4, 5, 0, 0, 0, 6, 0, 0,
- 0, 0, 7, 8, 9, 69, 0, 11, 12, 13,
- 70, 0, 15, 16, 0, 0, 17, 18, 19, 20,
- 3, 4, 5, 0, 0, 0, 6, 0, 0, 0,
- 0, 7, 8, 9, 10, 0, 11, 12, 13, 14,
- 0, 15, 16, 0, 0, 17, 18, 19, 20, 3,
- 4, 5, 0, 0, 0, 6, 0, 0, 0, 0,
- 7, 8, 9, 243, 0, 11, 12, 13, 14, 0,
- 15, 16, 0, 0, 17, 18, 19, 20, 3, 4,
- 5, 0, 0, 0, 6, 0, 0, 0, 0, 7,
- 8, 9, 10, 0, 11, 12, 13, 257, 0, 15,
- 16, 0, 0, 17, 18, 19, 20, 164, 164, 164,
- 0, 0, 0, 164, 0, 0, 0, 0, 164, 164,
- 164, 164, 0, 164, 164, 164, 164, 0, 164, 164,
- 0, 0, 164, 164, 164, 164, 112, 0, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 112, 0,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 0, 0, 0, 112, 176, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 122, 112, 268, 113, 114, 115,
- 116, 117, 118, 119, 120, 121, 122, 0, 0, 0,
- 112, 272, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 112, 275, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 43, 44, 0, 0, 278, 0,
- 0, 0, 0, 0, 0, 0, 0, 239, 0, 112,
- 321, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 112, 274, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 0, 0, 0, 112, 0, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 111, 0,
- 0, 0, 0, 0, 0, 0, 0, 112, 0, 113,
- 114, 115, 116, 117, 118, 119, 120, 121, 122, 261,
- 0, 0, 0, 0, 0, 0, 0, 0, 112, 0,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 262, 0, 0, 0, 0, 0, 0, 0, 0, 112,
- 0, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 112, 299, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 112, 0, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 122, 114, 115, 116, 117, 118,
- 119, 120, 121, 122,
- };
- short yycheck[] = { 7,
- 0, 261, 4, 5, 6, 7, 8, 298, 10, 58,
- 10, 278, 61, 62, 301, 64, 265, 15, 16, 68,
- 0, 1, 265, 265, 24, 27, 301, 265, 265, 31,
- 301, 298, 40, 265, 220, 296, 297, 265, 40, 301,
- 177, 259, 260, 261, 24, 301, 264, 265, 266, 298,
- 301, 259, 260, 302, 54, 35, 56, 275, 266, 302,
- 302, 259, 260, 63, 302, 302, 301, 69, 66, 69,
- 302, 295, 70, 75, 302, 299, 300, 301, 76, 264,
- 265, 79, 306, 306, 302, 259, 260, 298, 88, 89,
- 264, 265, 266, 306, 302, 308, 96, 97, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 90, 91, 249, 250, 251, 263, 116, 117, 118, 119,
- 120, 121, 122, 125, 126, 127, 128, 129, 302, 131,
- 316, 301, 132, 259, 260, 135, 262, 264, 265, 276,
- 299, 300, 301, 123, 144, 145, 42, 306, 148, 259,
- 260, 149, 264, 265, 50, 51, 266, 301, 54, 55,
- 56, 264, 265, 163, 60, 165, 297, 4, 5, 6,
- 306, 8, 172, 264, 265, 175, 287, 177, 259, 260,
- 180, 181, 267, 268, 269, 270, 271, 272, 273, 238,
- 27, 259, 260, 242, 31, 299, 300, 301, 266, 306,
- 200, 201, 202, 203, 259, 260, 261, 259, 260, 264,
- 265, 266, 220, 298, 259, 260, 261, 302, 220, 274,
- 275, 276, 277, 278, 279, 295, 322, 123, 317, 259,
- 260, 261, 259, 260, 264, 265, 266, 264, 265, 266,
- 263, 243, 302, 243, 274, 275, 276, 302, 263, 249,
- 250, 251, 263, 278, 150, 302, 265, 153, 302, 155,
- 265, 265, 262, 266, 290, 291, 292, 263, 301, 269,
- 296, 297, 302, 302, 306, 302, 276, 259, 260, 261,
- 298, 302, 282, 243, 284, 285, 306, 306, 125, 126,
- 127, 128, 129, 256, 131, 259, 260, 261, 261, 306,
- 262, 298, 181, 302, 259, 260, 261, 302, 316, 264,
- 265, 266, 302, 302, 316, 315, 302, 24, 298, 274,
- 275, 276, 277, -1, 287, 288, 289, -1, -1, -1,
- 293, -1, -1, -1, -1, 298, 299, 300, 301, -1,
- 303, 304, 305, 306, -1, 308, 309, 302, -1, 312,
- 313, 314, 315, 259, 260, 261, -1, -1, 264, 265,
- 266, 324, 325, -1, -1, -1, 329, -1, 274, 275,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- -1, -1, -1, -1, -1, 256, -1, 283, 259, 260,
- 261, 262, -1, 259, 260, 261, 302, -1, 264, 265,
- 266, -1, 298, 288, 289, 290, 291, 292, -1, 275,
- -1, 296, 297, -1, -1, -1, 287, 288, 289, -1,
- -1, -1, 293, -1, 320, 321, -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, -1, 323, -1, -1, 326, 327, 328, 256, -1,
- -1, 259, 260, 261, 262, -1, 259, 260, 261, -1,
- -1, 264, 265, 266, 278, 279, 280, 281, 282, 283,
- 284, 285, 275, 280, 281, 282, 283, 284, 285, 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, -1, 323, -1, -1, 326, 327,
- 328, 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, -1, 323, -1,
- -1, 326, 327, 328, 256, -1, -1, 259, 260, 261,
- -1, -1, 259, 260, 261, -1, -1, 264, 265, 266,
- -1, -1, -1, -1, -1, -1, -1, -1, 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,
- -1, 323, -1, -1, 326, 327, 328, 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, -1, -1,
- 312, 313, 314, 315, 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, -1, -1, 312, 313, 314,
- 315, 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, -1, -1, 312, 313, 314, 315, 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, -1,
- -1, 312, 313, 314, 315, 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, -1, -1, 312, 313,
- 314, 315, 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, -1, -1, 312, 313, 314, 315, 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,
- -1, -1, 312, 313, 314, 315, 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, -1, -1, 312,
- 313, 314, 315, 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, -1, -1, 312, 313, 314, 315,
- 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, -1, -1, 312, 313, 314, 315, 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, -1, -1,
- 312, 313, 314, 315, 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, -1, -1, 312, 313, 314,
- 315, 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, -1, -1, 312, 313, 314, 315, 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, -1,
- -1, 312, 313, 314, 315, 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, -1, -1, 312, 313,
- 314, 315, 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, -1, -1, 312, 313, 314, 315, 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,
- -1, -1, 312, 313, 314, 315, 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, -1, -1, 312,
- 313, 314, 315, 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, -1, -1, 312, 313, 314, 315,
- 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, -1, -1, 312, 313, 314, 315, 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, -1, -1,
- 312, 313, 314, 315, 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, -1, -1, 312, 313, 314,
- 315, 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,
- 259, 260, -1, -1, -1, 293, -1, -1, -1, -1,
- 298, 299, 300, 301, 302, 303, 304, 305, 306, -1,
- 308, 309, -1, -1, 312, 313, 314, 315, 287, 288,
- 289, -1, -1, -1, 293, -1, -1, -1, -1, 298,
- 299, 300, 301, -1, 303, 304, 305, 306, -1, 308,
- 309, -1, -1, 312, 313, 314, 315, 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, -1, -1, 312,
- 313, 314, 315, -1, -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, -1, -1, 312, 313, 314, 315, -1, 287, 288,
- 289, -1, -1, -1, 293, -1, -1, -1, -1, 298,
- 299, 300, 301, -1, 303, 304, 305, 306, -1, 308,
- 309, -1, -1, 312, 313, 314, 315, 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, 265, 308, 309, -1, -1, 312, 313, 314, 315,
- 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, -1, -1, 312, 313,
- 314, 315, 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, -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, 267, 268,
- 269, 270, 271, 272, 273, -1, 274, 302, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, -1, -1,
- -1, -1, -1, -1, 287, 288, 289, -1, -1, 298,
- 293, -1, -1, -1, 302, 298, 299, 300, 301, -1,
- 303, 304, 305, 306, 307, 308, 309, -1, -1, 312,
- 313, 314, 315, 287, 288, 289, -1, -1, -1, 293,
- -1, -1, -1, -1, 298, 299, 300, 301, 302, 303,
- 304, 305, 306, -1, 308, 309, -1, -1, 312, 313,
- 314, 315, 287, 288, 289, -1, -1, -1, 293, -1,
- -1, -1, -1, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, -1, 308, 309, -1, -1, 312, 313, 314,
- 315, 287, 288, 289, -1, -1, -1, 293, -1, -1,
- -1, -1, 298, 299, 300, 301, -1, 303, 304, 305,
- 306, -1, 308, 309, -1, -1, 312, 313, 314, 315,
- 287, 288, 289, -1, -1, -1, 293, -1, -1, -1,
- -1, 298, 299, 300, 301, -1, 303, 304, 305, 306,
- -1, 308, 309, -1, -1, 312, 313, 314, 315, 287,
- 288, 289, -1, -1, -1, 293, -1, -1, -1, -1,
- 298, 299, 300, 301, -1, 303, 304, 305, 306, -1,
- 308, 309, -1, -1, 312, 313, 314, 315, 287, 288,
- 289, -1, -1, -1, 293, -1, -1, -1, -1, 298,
- 299, 300, 301, -1, 303, 304, 305, 306, -1, 308,
- 309, -1, -1, 312, 313, 314, 315, 287, 288, 289,
- -1, -1, -1, 293, -1, -1, -1, -1, 298, 299,
- 300, 301, -1, 303, 304, 305, 306, -1, 308, 309,
- -1, -1, 312, 313, 314, 315, 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, -1, 302, -1,
- -1, -1, -1, -1, -1, -1, -1, 260, -1, 274,
- 302, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 274, 260, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, -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,
- 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, 277, 278, 279, 280, 281,
- 282, 283, 284, 285,
- };
- #define YYFINAL 24
- #ifndef YYDEBUG
- #define YYDEBUG 0
- #endif
- #define YYMAXTOKEN 329
- #if YYDEBUG
- char *yyname[] = {
- "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"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","PRINT","PRINTF","SPLIT","MATCH_FUNC","SUB","GSUB","DO",
- "WHILE","FOR","BREAK","CONTINUE","IF","ELSE","DELETE","BEGIN","END","EXIT",
- "NEXT","RETURN","FUNCTION",
- };
- char *yyrule[] = {
- "$accept : program",
- "program : program_block",
- "program : program program_block",
- "program_block : PA_block",
- "program_block : function_def",
- "program_block : 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",
- "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 : ELSE",
- "statement : if_front statement else 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",
- "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 : 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",
- "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
- #ifdef YYPURE
- #undef YYGLOBAL
- #define YYLEX() yylex(&yylval)
- #else
- #define YYLEX() yylex()
- #endif
-
- #define yyclearin (yychar=(-1))
- #define yyerrok (yyerrflag=0)
- #ifdef YYSTACKSIZE
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH YYSTACKSIZE
- #endif
- #else
- #ifdef YYMAXDEPTH
- #define YYSTACKSIZE YYMAXDEPTH
- #else
- #define YYSTACKSIZE 500
- #define YYMAXDEPTH 500
- #endif
- #endif
- int yydebug;
- #ifndef YYPURE
- YYSTYPE yylval;
- #endif
-
- #ifdef YYGLOBAL
- int yynerrs;
- int yyerrflag;
- int yychar;
- short *yyssp;
- YYSTYPE *yyvsp;
- YYSTYPE yyval;
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #endif
- #define yystacksize YYSTACKSIZE
- #line 1041 "parse.y"
-
- /* resize the code for a user function */
-
- static void resize_fblock( fbp, code_ptr )
- FBLOCK *fbp ;
- INST *code_ptr ;
- { int size ;
-
- code1(_RET0) ; /* make sure there is always a return statement */
-
- #if !SM_DOS
- if ( dump_code )
- { code1(_HALT) ; /*stops da() */
- add_to_fdump_list(fbp) ;
- }
- #endif
-
- if ( (size = code_ptr - fbp->code) > PAGE_SZ-1 )
- overflow("function code size", PAGE_SZ ) ;
-
- /* resize the code */
- fbp->code = (INST*) zrealloc(fbp->code, PAGE_SZ*sizeof(INST),
- size * sizeof(INST) ) ;
-
- }
-
-
- /* convert FE_PUSHA to FE_PUSHI
- or F_PUSH to F_PUSHI
- */
-
- static void field_A2I()
- { CELL *cp ;
-
- 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
- {
- cp = (CELL *) code_ptr[-1].ptr ;
-
- if ( cp == field ||
-
- #if LM_DOS
- SAMESEG(cp,field) &&
- #endif
- 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( p )
- register SYMTAB *p ;
- {
- switch(p->type)
- {
- case ST_NONE : /* new id */
- p->type = ST_VAR ;
- p->stval.cp = new_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(p)
- register SYMTAB *p ;
- {
- switch(p->type)
- {
- case ST_NONE : /* a new array */
- p->type = ST_ARRAY ;
- p->stval.array = new_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(p)
- register SYMTAB *p ;
- { if ( is_local(p) )
- { code1(LA_PUSHA) ; code1(p->offset) ; }
- else code2(A_PUSHA, p->stval.array) ;
- }
-
-
- static int current_offset()
- {
- switch( scope )
- {
- case SCOPE_MAIN : return code_ptr - main_start ;
- case SCOPE_BEGIN : return code_ptr - begin_code.start ;
- case SCOPE_END : return code_ptr - end_code.start ;
- case SCOPE_FUNCT : return code_ptr - active_funct->code ;
- }
- /* can't get here */
- return 0 ;
- }
-
- /* we've seen an ID as an argument to a user defined function */
-
- static void code_call_id( p, ip )
- register CA_REC *p ;
- register SYMTAB *ip ;
- { static CELL dummy ;
-
- switch( ip->type )
- {
- case ST_VAR :
- p->type = CA_EXPR ;
- code2(_PUSHI, ip->stval.cp) ;
- break ;
-
- case ST_LOCAL_VAR :
- p->type = CA_EXPR ;
- code1(L_PUSHI) ;
- code1(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 ;
- code1(LA_PUSHA) ;
- code1(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->call_offset = current_offset() ;
- p->sym_p = ip ;
- code2(_PUSHI, &dummy) ;
- break ;
-
- case ST_LOCAL_NONE :
- p->type = ST_LOCAL_NONE ;
- p->call_offset = current_offset() ;
- p->type_p = & active_funct->typev[ip->offset] ;
- code1(L_PUSHI) ;
- code1(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()
- { CELL *cp = ZMALLOC(CELL) ;
-
- code_ptr -= 2 ;
- cp->type = C_RE ;
- cp->ptr = code_ptr[1].ptr ;
- code2(_PUSHC, cp) ;
- }
-
-
- int parse()
- { int yy = yyparse() ;
-
- #if YYBYACC
- extern struct yacc_mem *yacc_memp ;
-
- yacc_memp++ ; /* puts parser tables in mem pool */
- #endif
-
- if ( resolve_list ) resolve_fcalls() ;
- return yy ;
- }
-
- #line 1340 "y.tab.c"
- #define YYABORT goto yyabort
- #define YYACCEPT goto yyaccept
- #define YYERROR goto yyerrlab
- int
- yyparse()
- {
- register int yyn, yystate;
- int yym ;
- #ifdef YYPURE
- YYSTYPE yylval ;
- #endif
-
- #ifndef YYGLOBAL
- int yynerrs;
- int yyerrflag;
- int yychar;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- YYSTYPE yyval;
- short yyss[YYSTACKSIZE];
- YYSTYPE yyvs[YYSTACKSIZE];
- #endif
- #if YYDEBUG
- register char *yys;
- extern char *getenv();
-
- if (yys = getenv("YYDEBUG"))
- {
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
- }
- #endif
-
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
-
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
-
- yyloop:
- if (yyn = yydefred[yystate]) goto yyreduce;
- if (yychar < 0)
- {
- if ((yychar = YYLEX()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n", yystate,
- yychar, yys);
- }
- #endif
- }
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, shifting to state %d\n",
- yystate, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
- {
- yyn = yytable[yyn];
- goto yyreduce;
- }
- if (yyerrflag) goto yyinrecovery;
- #ifdef lint
- goto yynewerror;
- #endif
- yynewerror:
- yyerror("syntax error");
- #ifdef lint
- goto yyerrlab;
- #endif
- yyerrlab:
- ++yynerrs;
- yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, error recovery shifting\
- to state %d\n", *yyssp, yytable[yyn]);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: error recovery discarding state %d\n",
- *yyssp);
- #endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
- }
- else
- {
- if (yychar == 0) goto yyabort;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, error recovery discards token %d (%s)\n",
- yystate, yychar, yys);
- }
- #endif
- yychar = (-1);
- goto yyloop;
- }
- yyreduce:
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: state %d, reducing by rule %d (%s)\n",
- yystate, yyn, yyrule[yyn]);
- #endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
- {
- case 5:
- #line 150 "parse.y"
- { if (scope == SCOPE_FUNCT)
- { restore_ids() ; scope = SCOPE_MAIN ; }
- code_ptr = main_code_ptr ;
- }
- break;
- case 6:
- #line 157 "parse.y"
- { /* this do nothing action removes a vacuous warning
- from Bison */
- }
- break;
- case 7:
- #line 162 "parse.y"
- {
- be_expand(&begin_code) ;
- scope = SCOPE_BEGIN ;
- }
- break;
- case 8:
- #line 168 "parse.y"
- { be_shrink(&begin_code) ;
- scope = SCOPE_MAIN ;
- }
- break;
- case 9:
- #line 173 "parse.y"
- {
- be_expand(&end_code) ;
- scope = SCOPE_END ;
- }
- break;
- case 10:
- #line 179 "parse.y"
- { be_shrink(&end_code) ;
- scope = SCOPE_MAIN ;
- }
- break;
- case 11:
- #line 184 "parse.y"
- { code_jmp(_JZ, (INST*)0) ; }
- break;
- case 12:
- #line 187 "parse.y"
- { patch_jmp( code_ptr ) ; }
- break;
- case 13:
- #line 191 "parse.y"
- { code_push(yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
- code_ptr = yyvsp[-1].start ;
- code1(_RANGE) ; code1(1) ;
- code_ptr += 3 ;
- code_ptr += code_pop(code_ptr) ;
- code1(_STOP) ;
- yyvsp[-1].start[2].op = code_ptr - (yyvsp[-1].start+1) ;
- }
- break;
- case 14:
- #line 200 "parse.y"
- { code1(_STOP) ; }
- break;
- case 15:
- #line 203 "parse.y"
- { yyvsp[-5].start[3].op = yyvsp[0].start - (yyvsp[-5].start+1) ;
- yyvsp[-5].start[4].op = code_ptr - (yyvsp[-5].start+1) ;
- }
- break;
- case 16:
- #line 211 "parse.y"
- { yyval.start = yyvsp[-1].start ; }
- break;
- case 17:
- #line 213 "parse.y"
- { yyval.start = code_ptr ; /* does nothing won't be executed */
- print_flag = getline_flag = paren_cnt = 0 ;
- yyerrok ; }
- break;
- case 19:
- #line 220 "parse.y"
- { yyval.start = code_ptr ;
- code1(_PUSHINT) ; code1(0) ;
- code2(_PRINT, bi_print) ;
- }
- break;
- case 23:
- #line 232 "parse.y"
- { code1(_POP) ; }
- break;
- case 24:
- #line 234 "parse.y"
- { yyval.start = code_ptr ; }
- break;
- case 25:
- #line 236 "parse.y"
- { yyval.start = code_ptr ;
- print_flag = getline_flag = 0 ;
- paren_cnt = 0 ;
- yyerrok ;
- }
- break;
- case 26:
- #line 242 "parse.y"
- { yyval.start = code_ptr ; BC_insert('B', code_ptr+1) ;
- code2(_JMP, 0) /* don't use code_jmp ! */ ; }
- break;
- case 27:
- #line 245 "parse.y"
- { yyval.start = code_ptr ; BC_insert('C', code_ptr+1) ;
- code2(_JMP, 0) ; }
- break;
- case 28:
- #line 248 "parse.y"
- { if ( scope != SCOPE_FUNCT )
- compile_error("return outside function body") ;
- }
- break;
- case 29:
- #line 252 "parse.y"
- { if ( scope != SCOPE_MAIN )
- compile_error( "improper use of next" ) ;
- yyval.start = code_ptr ;
- code1(_NEXT) ;
- }
- break;
- case 33:
- #line 263 "parse.y"
- { code1(_ASSIGN) ; }
- break;
- case 34:
- #line 264 "parse.y"
- { code1(_ADD_ASG) ; }
- break;
- case 35:
- #line 265 "parse.y"
- { code1(_SUB_ASG) ; }
- break;
- case 36:
- #line 266 "parse.y"
- { code1(_MUL_ASG) ; }
- break;
- case 37:
- #line 267 "parse.y"
- { code1(_DIV_ASG) ; }
- break;
- case 38:
- #line 268 "parse.y"
- { code1(_MOD_ASG) ; }
- break;
- case 39:
- #line 269 "parse.y"
- { code1(_POW_ASG) ; }
- break;
- case 40:
- #line 270 "parse.y"
- { code1(_EQ) ; }
- break;
- case 41:
- #line 271 "parse.y"
- { code1(_NEQ) ; }
- break;
- case 42:
- #line 272 "parse.y"
- { code1(_LT) ; }
- break;
- case 43:
- #line 273 "parse.y"
- { code1(_LTE) ; }
- break;
- case 44:
- #line 274 "parse.y"
- { code1(_GT) ; }
- break;
- case 45:
- #line 275 "parse.y"
- { code1(_GTE) ; }
- break;
- case 46:
- #line 278 "parse.y"
- {
- if ( yyvsp[0].start == code_ptr - 2 )
- {
- if ( yyvsp[0].start->op == _MATCH0 ) yyvsp[0].start->op = _MATCH1 ;
-
- else /* check for string */
- if ( yyvsp[0].start->op == _PUSHS )
- { CELL *cp = ZMALLOC(CELL) ;
-
- cp->type = C_STRING ;
- cp->ptr = yyvsp[0].start[1].ptr ;
- cast_to_RE(cp) ;
- code_ptr -= 2 ;
- code2(_MATCH1, cp->ptr) ;
- ZFREE(cp) ;
- }
- else code1(_MATCH2) ;
- }
- else code1(_MATCH2) ;
-
- if ( !yyvsp[-1].ival ) code1(_NOT) ;
- }
- break;
- case 47:
- #line 303 "parse.y"
- { code1(_DUP) ;
- code_jmp(_JNZ, (INST*)0) ;
- code1(_POP) ;
- }
- break;
- case 48:
- #line 308 "parse.y"
- { patch_jmp(code_ptr) ; code1(_TEST) ; }
- break;
- case 49:
- #line 311 "parse.y"
- { code1(_DUP) ; code_jmp(_JZ, (INST*)0) ;
- code1(_POP) ; }
- break;
- case 50:
- #line 314 "parse.y"
- { patch_jmp(code_ptr) ; code1(_TEST) ; }
- break;
- case 51:
- #line 316 "parse.y"
- { code_jmp(_JZ, (INST*)0) ; }
- break;
- case 52:
- #line 317 "parse.y"
- { code_jmp(_JMP, (INST*)0) ; }
- break;
- case 53:
- #line 319 "parse.y"
- { patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
- break;
- case 55:
- #line 324 "parse.y"
- { code1(_CAT) ; }
- break;
- case 56:
- #line 328 "parse.y"
- { yyval.start = code_ptr ; code2(_PUSHD, yyvsp[0].ptr) ; }
- break;
- case 57:
- #line 330 "parse.y"
- { yyval.start = code_ptr ; code2(_PUSHS, yyvsp[0].ptr) ; }
- break;
- case 58:
- #line 332 "parse.y"
- { check_var(yyvsp[0].stp) ;
- yyval.start = code_ptr ;
- if ( is_local(yyvsp[0].stp) )
- { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
- else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
- }
- break;
- case 59:
- #line 340 "parse.y"
- { yyval.start = yyvsp[-1].start ; }
- break;
- case 60:
- #line 344 "parse.y"
- { yyval.start = code_ptr ; code2(_MATCH0, yyvsp[0].ptr) ; }
- break;
- case 61:
- #line 347 "parse.y"
- { code1(_ADD) ; }
- break;
- case 62:
- #line 348 "parse.y"
- { code1(_SUB) ; }
- break;
- case 63:
- #line 349 "parse.y"
- { code1(_MUL) ; }
- break;
- case 64:
- #line 350 "parse.y"
- { code1(_DIV) ; }
- break;
- case 65:
- #line 351 "parse.y"
- { code1(_MOD) ; }
- break;
- case 66:
- #line 352 "parse.y"
- { code1(_POW) ; }
- break;
- case 67:
- #line 354 "parse.y"
- { yyval.start = yyvsp[0].start ; code1(_NOT) ; }
- break;
- case 68:
- #line 356 "parse.y"
- { yyval.start = yyvsp[0].start ; code1(_UPLUS) ; }
- break;
- case 69:
- #line 358 "parse.y"
- { yyval.start = yyvsp[0].start ; code1(_UMINUS) ; }
- break;
- case 71:
- #line 363 "parse.y"
- { check_var(yyvsp[-1].stp) ;
- yyval.start = code_ptr ;
- code_address(yyvsp[-1].stp) ;
-
- if ( yyvsp[0].ival == '+' ) code1(_POST_INC) ;
- else code1(_POST_DEC) ;
- }
- break;
- case 72:
- #line 371 "parse.y"
- { yyval.start = yyvsp[0].start ;
- if ( yyvsp[-1].ival == '+' ) code1(_PRE_INC) ;
- else code1(_PRE_DEC) ;
- }
- break;
- case 73:
- #line 378 "parse.y"
- { if (yyvsp[0].ival == '+' ) code1(F_POST_INC ) ;
- else code1(F_POST_DEC) ;
- }
- break;
- case 74:
- #line 382 "parse.y"
- { yyval.start = yyvsp[0].start ;
- if ( yyvsp[-1].ival == '+' ) code1(F_PRE_INC) ;
- else code1( F_PRE_DEC) ;
- }
- break;
- case 75:
- #line 389 "parse.y"
- { yyval.start = code_ptr ;
- check_var(yyvsp[0].stp) ;
- code_address(yyvsp[0].stp) ;
- }
- break;
- case 76:
- #line 397 "parse.y"
- { yyval.ival = 0 ; }
- break;
- case 78:
- #line 402 "parse.y"
- { yyval.ival = 1 ; }
- break;
- case 79:
- #line 404 "parse.y"
- { yyval.ival = yyvsp[-2].ival + 1 ; }
- break;
- case 80:
- #line 409 "parse.y"
- { BI_REC *p = yyvsp[-4].bip ;
- yyval.start = yyvsp[-3].start ;
- if ( p-> min_args > yyvsp[-1].ival || p->max_args < yyvsp[-1].ival )
- compile_error(
- "wrong number of arguments in call to %s" ,
- p->name ) ;
- if ( p->min_args != p->max_args ) /* variable args */
- { code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
- code2(_BUILTIN , p->fp) ;
- }
- break;
- case 81:
- #line 423 "parse.y"
- { yyval.start = code_ptr ; }
- break;
- case 82:
- #line 427 "parse.y"
- { code2(_PRINT, yyvsp[-4].fp) ; yyval.start = yyvsp[-3].start ;
- if ( yyvsp[-4].fp == bi_printf && yyvsp[-2].ival == 0 )
- compile_error("no arguments in call to printf") ;
- print_flag = 0 ;
- yyval.start = yyvsp[-3].start ;
- }
- break;
- case 83:
- #line 435 "parse.y"
- { yyval.fp = bi_print ; print_flag = 1 ;}
- break;
- case 84:
- #line 436 "parse.y"
- { yyval.fp = bi_printf ; print_flag = 1 ; }
- break;
- case 85:
- #line 439 "parse.y"
- { code1(_PUSHINT) ; code1(yyvsp[0].ival) ; }
- break;
- case 86:
- #line 441 "parse.y"
- { yyval.ival = yyvsp[-1].arg2p->cnt ; zfree(yyvsp[-1].arg2p,sizeof(ARG2_REC)) ;
- code1(_PUSHINT) ; code1(yyval.ival) ;
- }
- break;
- case 87:
- #line 445 "parse.y"
- { yyval.ival=0 ; code1(_PUSHINT) ; code1(0) ; }
- break;
- case 88:
- #line 449 "parse.y"
- { yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ;
- yyval.arg2p->start = yyvsp[-2].start ;
- yyval.arg2p->cnt = 2 ;
- }
- break;
- case 89:
- #line 454 "parse.y"
- { yyval.arg2p = yyvsp[-2].arg2p ; yyval.arg2p->cnt++ ; }
- break;
- case 91:
- #line 459 "parse.y"
- { code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
- break;
- case 92:
- #line 466 "parse.y"
- { yyval.start = yyvsp[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; }
- break;
- case 93:
- #line 471 "parse.y"
- { patch_jmp( code_ptr ) ; }
- break;
- case 94:
- #line 474 "parse.y"
- { eat_nl() ; code_jmp(_JMP, (INST*)0) ; }
- break;
- case 95:
- #line 479 "parse.y"
- { patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
- break;
- case 96:
- #line 485 "parse.y"
- { eat_nl() ; BC_new() ; }
- break;
- case 97:
- #line 490 "parse.y"
- { yyval.start = yyvsp[-5].start ;
- code_jmp(_JNZ, yyvsp[-5].start) ;
- BC_clear(code_ptr, yyvsp[-2].start) ; }
- break;
- case 98:
- #line 496 "parse.y"
- { eat_nl() ; BC_new() ;
- yyval.start = yyvsp[-1].start ;
-
- /* check if const expression */
- if ( code_ptr - 2 == yyvsp[-1].start &&
- code_ptr[-2].op == _PUSHD &&
- *(double*)code_ptr[-1].ptr != 0.0
- )
- code_ptr -= 2 ;
- else
- {
- code_push(yyvsp[-1].start, code_ptr-yyvsp[-1].start) ;
- code_ptr = yyvsp[-1].start ;
- code2(_JMP, (INST*)0) ; /* code2() not code_jmp() */
- }
- }
- break;
- case 99:
- #line 516 "parse.y"
- {
- INST *c_addr ; int len ;
-
- if ( yyvsp[-1].start != yyvsp[0].start ) /* real test in loop */
- {
- yyvsp[-1].start[1].op = code_ptr-(yyvsp[-1].start+1) ;
- c_addr = code_ptr ;
- len = code_pop(code_ptr) ;
- code_ptr += len ;
- code_jmp(_JNZ, yyvsp[0].start) ;
- BC_clear(code_ptr, c_addr) ;
- }
- else /* while(1) */
- {
- code_jmp(_JMP, yyvsp[-1].start) ;
- BC_clear(code_ptr, yyvsp[0].start) ;
- }
- }
- break;
- case 100:
- #line 539 "parse.y"
- {
- INST *cont_address = code_ptr ;
- unsigned len = code_pop(code_ptr) ;
-
- code_ptr += len ;
-
- if ( yyvsp[-2].start != yyvsp[0].start ) /* real test in for2 */
- {
- yyvsp[0].start[-1].op = code_ptr - yyvsp[0].start + 1 ;
- len = code_pop(code_ptr) ;
- code_ptr += len ;
- code_jmp(_JNZ, yyvsp[0].start) ;
- }
- else /* for(;;) */
- code_jmp(_JMP, yyvsp[0].start) ;
-
- BC_clear(code_ptr, cont_address) ;
-
- }
- break;
- case 101:
- #line 560 "parse.y"
- { yyval.start = code_ptr ; }
- break;
- case 102:
- #line 562 "parse.y"
- { yyval.start = yyvsp[-1].start ; code1(_POP) ; }
- break;
- case 103:
- #line 565 "parse.y"
- { yyval.start = code_ptr ; }
- break;
- case 104:
- #line 567 "parse.y"
- {
- if ( code_ptr - 2 == yyvsp[-1].start &&
- code_ptr[-2].op == _PUSHD &&
- * (double*) code_ptr[-1].ptr != 0.0
- )
- code_ptr -= 2 ;
- else
- {
- code_push(yyvsp[-1].start, code_ptr-yyvsp[-1].start) ;
- code_ptr = yyvsp[-1].start ;
- code2(_JMP, (INST*)0) ;
- }
- }
- break;
- case 105:
- #line 583 "parse.y"
- { eat_nl() ; BC_new() ; code_push((INST*)0,0) ; }
- break;
- case 106:
- #line 585 "parse.y"
- { eat_nl() ; BC_new() ;
- code1(_POP) ;
- code_push(yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
- code_ptr -= code_ptr - yyvsp[-1].start ;
- }
- break;
- case 107:
- #line 596 "parse.y"
- { check_array(yyvsp[0].stp) ;
- code_array(yyvsp[0].stp) ;
- code1(A_TEST) ;
- }
- break;
- case 108:
- #line 601 "parse.y"
- { yyval.start = yyvsp[-3].arg2p->start ;
- code1(A_CAT) ; code1(yyvsp[-3].arg2p->cnt) ;
- zfree(yyvsp[-3].arg2p, sizeof(ARG2_REC)) ;
-
- check_array(yyvsp[0].stp) ;
- code_array(yyvsp[0].stp) ;
- code1(A_TEST) ;
- }
- break;
- case 109:
- #line 612 "parse.y"
- {
- if ( yyvsp[-1].ival > 1 )
- { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
-
- check_array(yyvsp[-4].stp) ;
- if( is_local(yyvsp[-4].stp) )
- { code1(LAE_PUSHA) ; code1(yyvsp[-4].stp->offset) ; }
- else code2(AE_PUSHA, yyvsp[-4].stp->stval.array) ;
- yyval.start = yyvsp[-3].start ;
- }
- break;
- case 110:
- #line 625 "parse.y"
- {
- if ( yyvsp[-1].ival > 1 )
- { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
-
- check_array(yyvsp[-4].stp) ;
- if( is_local(yyvsp[-4].stp) )
- { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
- else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
- yyval.start = yyvsp[-3].start ;
- }
- break;
- case 111:
- #line 637 "parse.y"
- {
- if ( yyvsp[-2].ival > 1 )
- { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
-
- check_array(yyvsp[-5].stp) ;
- if( is_local(yyvsp[-5].stp) )
- { code1(LAE_PUSHA) ; code1(yyvsp[-5].stp->offset) ; }
- else code2(AE_PUSHA, yyvsp[-5].stp->stval.array) ;
- if ( yyvsp[0].ival == '+' ) code1(_POST_INC) ;
- else code1(_POST_DEC) ;
-
- yyval.start = yyvsp[-4].start ;
- }
- break;
- case 112:
- #line 654 "parse.y"
- {
- yyval.start = yyvsp[-4].start ;
- if ( yyvsp[-2].ival > 1 ) { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
- check_array(yyvsp[-5].stp) ;
- code_array(yyvsp[-5].stp) ;
- code1(A_DEL) ;
- }
- break;
- case 113:
- #line 667 "parse.y"
- { eat_nl() ; BC_new() ;
- yyval.start = code_ptr ;
-
- check_var(yyvsp[-3].stp) ;
- code_address(yyvsp[-3].stp) ;
- check_array(yyvsp[-1].stp) ;
- code_array(yyvsp[-1].stp) ;
-
- code2(SET_ALOOP, (INST*)0) ;
- }
- break;
- case 114:
- #line 681 "parse.y"
- {
- yyvsp[0].start[-1].op = code_ptr - yyvsp[0].start + 1 ;
- BC_clear( code_ptr+3 , code_ptr) ;
- code_jmp(ALOOP, yyvsp[0].start) ;
- code_ptr++->ptr = (PTR) ZMALLOC(ALOOP_STATE) ;
- }
- break;
- case 115:
- #line 696 "parse.y"
- { yyval.start = code_ptr ; code2(F_PUSHA, yyvsp[0].cp) ; }
- break;
- case 116:
- #line 698 "parse.y"
- { check_var(yyvsp[0].stp) ;
- yyval.start = code_ptr ;
- if ( is_local(yyvsp[0].stp) )
- { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
- else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
-
- CODE_FE_PUSHA() ;
- }
- break;
- case 117:
- #line 707 "parse.y"
- {
- if ( yyvsp[-1].ival > 1 )
- { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
-
- check_array(yyvsp[-4].stp) ;
- if( is_local(yyvsp[-4].stp) )
- { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
- else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
-
- CODE_FE_PUSHA() ;
-
- yyval.start = yyvsp[-3].start ;
- }
- break;
- case 118:
- #line 721 "parse.y"
- { yyval.start = yyvsp[0].start ; CODE_FE_PUSHA() ; }
- break;
- case 119:
- #line 723 "parse.y"
- { yyval.start = yyvsp[-1].start ; }
- break;
- case 120:
- #line 727 "parse.y"
- { field_A2I() ; }
- break;
- case 121:
- #line 730 "parse.y"
- { code1(F_ASSIGN) ; }
- break;
- case 122:
- #line 731 "parse.y"
- { code1(F_ADD_ASG) ; }
- break;
- case 123:
- #line 732 "parse.y"
- { code1(F_SUB_ASG) ; }
- break;
- case 124:
- #line 733 "parse.y"
- { code1(F_MUL_ASG) ; }
- break;
- case 125:
- #line 734 "parse.y"
- { code1(F_DIV_ASG) ; }
- break;
- case 126:
- #line 735 "parse.y"
- { code1(F_MOD_ASG) ; }
- break;
- case 127:
- #line 736 "parse.y"
- { code1(F_POW_ASG) ; }
- break;
- case 128:
- #line 743 "parse.y"
- { code2(_BUILTIN, bi_split) ; }
- break;
- case 129:
- #line 747 "parse.y"
- { yyval.start = yyvsp[-2].start ;
- check_array(yyvsp[0].stp) ;
- code_array(yyvsp[0].stp) ;
- }
- break;
- case 130:
- #line 754 "parse.y"
- { code2(_PUSHI, &fs_shadow) ; }
- break;
- case 131:
- #line 756 "parse.y"
- {
- if ( yyvsp[-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 ;
- }
- }
- }
- break;
- case 132:
- #line 780 "parse.y"
- { yyval.start = yyvsp[-3].start ;
- code2(_BUILTIN, bi_match) ;
- }
- break;
- case 133:
- #line 787 "parse.y"
- {
- if ( yyvsp[0].start == code_ptr - 2 )
- {
- if ( yyvsp[0].start->op == _MATCH0 ) RE_as_arg() ;
- else
- if ( yyvsp[0].start->op == _PUSHS )
- { CELL *cp = ZMALLOC(CELL) ;
-
- cp->type = C_STRING ;
- cp->ptr = yyvsp[0].start[1].ptr ;
- cast_to_RE(cp) ;
- yyvsp[0].start->op = _PUSHC ;
- yyvsp[0].start[1].ptr = (PTR) cp ;
- }
- }
- }
- break;
- case 134:
- #line 808 "parse.y"
- { yyval.start = code_ptr ;
- code1(_EXIT0) ; }
- break;
- case 135:
- #line 811 "parse.y"
- { yyval.start = yyvsp[-1].start ; code1(_EXIT) ; }
- break;
- case 136:
- #line 814 "parse.y"
- { yyval.start = code_ptr ;
- code1(_RET0) ; }
- break;
- case 137:
- #line 817 "parse.y"
- { yyval.start = yyvsp[-1].start ; code1(_RET) ; }
- break;
- case 138:
- #line 822 "parse.y"
- { yyval.start = code_ptr ;
- code2(F_PUSHA, &field[0]) ;
- code1(_PUSHINT) ; code1(0) ;
- code2(_BUILTIN, bi_getline) ;
- getline_flag = 0 ;
- }
- break;
- case 139:
- #line 829 "parse.y"
- { yyval.start = yyvsp[0].start ;
- code1(_PUSHINT) ; code1(0) ;
- code2(_BUILTIN, bi_getline) ;
- getline_flag = 0 ;
- }
- break;
- case 140:
- #line 835 "parse.y"
- { code1(_PUSHINT) ; code1(F_IN) ;
- code2(_BUILTIN, bi_getline) ;
- /* getline_flag already off in yylex() */
- }
- break;
- case 141:
- #line 840 "parse.y"
- { code2(F_PUSHA, &field[0]) ;
- code1(_PUSHINT) ; code1(PIPE_IN) ;
- code2(_BUILTIN, bi_getline) ;
- }
- break;
- case 142:
- #line 845 "parse.y"
- {
- code1(_PUSHINT) ; code1(PIPE_IN) ;
- code2(_BUILTIN, bi_getline) ;
- }
- break;
- case 143:
- #line 851 "parse.y"
- { getline_flag = 1 ; }
- break;
- case 146:
- #line 856 "parse.y"
- { yyval.start = code_ptr ;
- code2(F_PUSHA, field+0) ;
- }
- break;
- case 147:
- #line 860 "parse.y"
- { yyval.start = yyvsp[-1].start ; }
- break;
- case 148:
- #line 868 "parse.y"
- {
- if ( yyvsp[0].start - yyvsp[-1].start == 2 && yyvsp[-1].start->op == _PUSHS )
- { /* cast from STRING to REPL at compile time */
- CELL *cp = ZMALLOC(CELL) ;
- cp->type = C_STRING ;
- cp->ptr = yyvsp[-1].start[1].ptr ;
- cast_to_REPL(cp) ;
- yyvsp[-1].start->op = _PUSHC ;
- yyvsp[-1].start[1].ptr = (PTR) cp ;
- }
- code2(_BUILTIN, yyvsp[-5].fp) ;
- yyval.start = yyvsp[-3].start ;
- }
- break;
- case 149:
- #line 883 "parse.y"
- { yyval.fp = bi_sub ; }
- break;
- case 150:
- #line 884 "parse.y"
- { yyval.fp = bi_gsub ; }
- break;
- case 151:
- #line 889 "parse.y"
- { yyval.start = code_ptr ;
- code2(F_PUSHA, &field[0]) ;
- }
- break;
- case 152:
- #line 894 "parse.y"
- { yyval.start = yyvsp[-1].start ; }
- break;
- case 153:
- #line 902 "parse.y"
- { resize_fblock(yyvsp[-1].fbp, code_ptr) ;
- code_ptr = main_code_ptr ;
- scope = SCOPE_MAIN ;
- active_funct = (FBLOCK *) 0 ;
- restore_ids() ;
- }
- break;
- case 154:
- #line 912 "parse.y"
- { eat_nl() ;
- scope = SCOPE_FUNCT ;
- active_funct = yyvsp[-3].fbp ;
- main_code_ptr = code_ptr ;
-
- if ( yyvsp[-3].fbp->nargs = yyvsp[-1].ival )
- yyvsp[-3].fbp->typev = (char *)
- memset( zmalloc(yyvsp[-1].ival), ST_LOCAL_NONE, SIZE_T(yyvsp[-1].ival)) ;
- else yyvsp[-3].fbp->typev = (char *) 0 ;
- code_ptr = yyvsp[-3].fbp->code =
- (INST *) zmalloc(PAGE_SZ*sizeof(INST)) ;
- }
- break;
- case 155:
- #line 927 "parse.y"
- { FBLOCK *fbp ;
-
- if ( yyvsp[0].stp->type == ST_NONE )
- {
- yyvsp[0].stp->type = ST_FUNCT ;
- fbp = yyvsp[0].stp->stval.fbp =
- (FBLOCK *) zmalloc(sizeof(FBLOCK)) ;
- fbp->name = yyvsp[0].stp->name ;
- }
- else
- {
- type_error( yyvsp[0].stp ) ;
-
- /* this FBLOCK will not be put in
- the symbol table */
- fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ;
- fbp->name = "" ;
- }
- yyval.fbp = fbp ;
- }
- break;
- case 156:
- #line 949 "parse.y"
- { yyval.fbp = yyvsp[0].fbp ;
- if ( yyvsp[0].fbp->code )
- compile_error("redefinition of %s" , yyvsp[0].fbp->name) ;
- }
- break;
- case 157:
- #line 955 "parse.y"
- { yyval.ival = 0 ; }
- break;
- case 159:
- #line 960 "parse.y"
- { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
- yyvsp[0].stp->type = ST_LOCAL_NONE ;
- yyvsp[0].stp->offset = 0 ;
- yyval.ival = 1 ;
- }
- break;
- case 160:
- #line 966 "parse.y"
- { if ( is_local(yyvsp[0].stp) )
- compile_error("%s is duplicated in argument list",
- yyvsp[0].stp->name) ;
- else
- { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
- yyvsp[0].stp->type = ST_LOCAL_NONE ;
- yyvsp[0].stp->offset = yyvsp[-2].ival ;
- yyval.ival = yyvsp[-2].ival + 1 ;
- }
- }
- break;
- case 161:
- #line 981 "parse.y"
- { yyval.start = yyvsp[-1].start ;
- code2(_CALL, yyvsp[-2].fbp) ;
-
- if ( yyvsp[0].ca_p ) code1(yyvsp[0].ca_p->arg_num+1) ;
- else code1(0) ;
-
- check_fcall(yyvsp[-2].fbp, scope, active_funct,
- yyvsp[0].ca_p, token_lineno) ;
- }
- break;
- case 162:
- #line 993 "parse.y"
- { yyval.ca_p = (CA_REC *) 0 ; }
- break;
- case 163:
- #line 995 "parse.y"
- { yyval.ca_p = yyvsp[0].ca_p ;
- yyval.ca_p->link = yyvsp[-1].ca_p ;
- yyval.ca_p->arg_num = yyvsp[-1].ca_p ? yyvsp[-1].ca_p->arg_num+1 : 0 ;
- }
- break;
- case 164:
- #line 1010 "parse.y"
- { yyval.ca_p = (CA_REC *) 0 ; }
- break;
- case 165:
- #line 1012 "parse.y"
- { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
- yyval.ca_p->link = yyvsp[-2].ca_p ;
- yyval.ca_p->type = CA_EXPR ;
- yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
- }
- break;
- case 166:
- #line 1018 "parse.y"
- { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
- yyval.ca_p->link = yyvsp[-2].ca_p ;
- yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
-
- code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
- }
- break;
- case 167:
- #line 1027 "parse.y"
- { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
- yyval.ca_p->type = CA_EXPR ;
- }
- break;
- case 168:
- #line 1032 "parse.y"
- { yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
- code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
- }
- break;
- #line 2496 "y.tab.c"
- }
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
- {
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state 0 to\
- state %d\n", YYFINAL);
- #endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = YYLEX()) < 0) yychar = 0;
- #if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("yydebug: state %d, reading %d (%s)\n",
- YYFINAL, yychar, yys);
- }
- #endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
- }
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
- #if YYDEBUG
- if (yydebug)
- printf("yydebug: after reduction, shifting from state %d \
- to state %d\n", *yyssp, yystate);
- #endif
- if (yyssp >= yyss + yystacksize - 1)
- {
- goto yyoverflow;
- }
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
- yyoverflow:
- yyerror("yacc stack overflow");
- yyabort:
- return (1);
- yyaccept:
- return (0);
- }
-
- /********************************************
- parse2.xc
- copyright 1991, Michael D. Brennan
-
- This is a source file for mawk, an implementation of
- the AWK programming language.
-
- Mawk is distributed without warranty under the terms of
- the GNU General Public License, version 2, 1991.
- ********************************************/
-
- /* $Log: parse.c,v $
- * Revision 1.5 92/01/09 08:45:30 brennan
- * pr patch1
- *
- Revision 5.1 91/12/05 07:52:38 brennan
- 1.1 pre-release
-
- */
-
- /* If using Berkeley yacc, we can put the parser table
- memory to the zmalloc pool. This is kind of ugly and
- with paged vm probably a nop, but for DOS and MINIX and ??
- it frees a considerably amount of memory.
-
- This file is part of parse.c via
- cat y.tab.c parse2.xc > parse.c
- */
-
- static struct yacc_mem yacc_mem[] =
- {
- 0 , 0 , /* don't remove this */
-
- #ifdef YYBYACC
- (PTR) yycheck, sizeof(yycheck)/ZBLOCKSZ,
- (PTR) yytable, sizeof(yytable)/ZBLOCKSZ,
- #ifndef YYXBYACC /* with xbyacc these are storage auto */
- (PTR) yyvs , sizeof(yyvs)/ZBLOCKSZ,
- (PTR) yyss, sizeof(yyss)/ZBLOCKSZ,
- #endif
- (PTR) yydefred, sizeof(yydefred)/ZBLOCKSZ,
- (PTR) yydgoto, sizeof(yydgoto)/ZBLOCKSZ,
- (PTR) yygindex, sizeof(yygindex)/ZBLOCKSZ,
- (PTR) yylen, sizeof(yylen)/ZBLOCKSZ,
- (PTR) yylhs, sizeof(yylhs)/ZBLOCKSZ,
- (PTR) yyrindex, sizeof(yyrindex)/ZBLOCKSZ,
- (PTR) yysindex, sizeof(yysindex)/ZBLOCKSZ,
- #endif
-
- 0,0 } ;
-
- struct yacc_mem *yacc_memp = yacc_mem ;
-
-