| #ifdef BWGC |
| extern char *gc_malloc(), *gc_realloc(); |
| #else |
| extern char *malloc(), *realloc(); |
| #endif |
| |
| # line 15 "perly.y" |
| #include "INTERN.h" |
| #include "perl.h" |
| |
| STAB *scrstab; |
| ARG *arg4; /* rarely used arguments to make_op() */ |
| ARG *arg5; |
| |
| |
| # line 26 "perly.y" |
| typedef union { |
| int ival; |
| char *cval; |
| ARG *arg; |
| CMD *cmdval; |
| struct compcmd compval; |
| STAB *stabval; |
| FCMD *formval; |
| } YYSTYPE; |
| # define WORD 257 |
| # define APPEND 258 |
| # define OPEN 259 |
| # define SSELECT 260 |
| # define LOOPEX 261 |
| # define USING 262 |
| # define FORMAT 263 |
| # define DO 264 |
| # define SHIFT 265 |
| # define PUSH 266 |
| # define POP 267 |
| # define LVALFUN 268 |
| # define WHILE 269 |
| # define UNTIL 270 |
| # define IF 271 |
| # define UNLESS 272 |
| # define ELSE 273 |
| # define ELSIF 274 |
| # define CONTINUE 275 |
| # define SPLIT 276 |
| # define FLIST 277 |
| # define FOR 278 |
| # define FILOP 279 |
| # define FILOP2 280 |
| # define FILOP3 281 |
| # define FILOP4 282 |
| # define FILOP22 283 |
| # define FILOP25 284 |
| # define FUNC0 285 |
| # define FUNC1 286 |
| # define FUNC2 287 |
| # define FUNC2x 288 |
| # define FUNC3 289 |
| # define FUNC4 290 |
| # define FUNC5 291 |
| # define HSHFUN 292 |
| # define HSHFUN3 293 |
| # define FLIST2 294 |
| # define SUB 295 |
| # define FILETEST 296 |
| # define LOCAL 297 |
| # define DELETE 298 |
| # define RELOP 299 |
| # define EQOP 300 |
| # define MULOP 301 |
| # define ADDOP 302 |
| # define PACKAGE 303 |
| # define AMPER 304 |
| # define FORMLIST 305 |
| # define REG 306 |
| # define ARYLEN 307 |
| # define ARY 308 |
| # define HSH 309 |
| # define STAR 310 |
| # define SUBST 311 |
| # define PATTERN 312 |
| # define RSTRING 313 |
| # define TRANS 314 |
| # define LISTOP 315 |
| # define DOTDOT 316 |
| # define OROR 317 |
| # define ANDAND 318 |
| # define UNIOP 319 |
| # define LS 320 |
| # define RS 321 |
| # define MATCH 322 |
| # define NMATCH 323 |
| # define UMINUS 324 |
| # define POW 325 |
| # define INC 326 |
| # define DEC 327 |
| #define yyclearin yychar = -1 |
| #define yyerrok yyerrflag = 0 |
| extern int yychar; |
| extern int yyerrflag; |
| #ifndef YYMAXDEPTH |
| #define YYMAXDEPTH 150 |
| #endif |
| YYSTYPE yylval, yyval; |
| # define YYERRCODE 256 |
| |
| # line 792 "perly.y" |
| /* PROGRAM */ |
| int yyexca[] ={ |
| -1, 1, |
| 0, -1, |
| -2, 0, |
| -1, 3, |
| 0, 2, |
| -2, 39, |
| -1, 92, |
| 59, 35, |
| -2, 0, |
| -1, 130, |
| 326, 0, |
| 327, 0, |
| -2, 84, |
| -1, 131, |
| 326, 0, |
| 327, 0, |
| -2, 85, |
| -1, 229, |
| 299, 0, |
| -2, 66, |
| -1, 230, |
| 300, 0, |
| -2, 67, |
| -1, 231, |
| 316, 0, |
| -2, 71, |
| -1, 253, |
| 44, 175, |
| 41, 175, |
| -2, 181, |
| -1, 254, |
| 44, 175, |
| -2, 181, |
| -1, 382, |
| 41, 35, |
| -2, 0, |
| }; |
| # define YYNPROD 182 |
| # define YYLAST 3179 |
| int yyact[]={ |
| |
| 322, 26, 198, 27, 107, 115, 116, 108, 109, 124, |
| 125, 115, 164, 108, 109, 179, 121, 122, 319, 107, |
| 88, 90, 167, 163, 94, 96, 110, 111, 121, 122, |
| 181, 107, 110, 111, 121, 122, 108, 107, 112, 146, |
| 133, 138, 153, 137, 251, 108, 109, 145, 282, 11, |
| 188, 92, 112, 108, 109, 12, 149, 121, 122, 83, |
| 107, 152, 191, 165, 110, 111, 121, 122, 300, 107, |
| 148, 171, 85, 84, 121, 122, 286, 107, 180, 101, |
| 162, 28, 182, 104, 105, 102, 189, 13, 147, 101, |
| 101, 3, 243, 101, 95, 14, 143, 21, 141, 248, |
| 101, 93, 89, 101, 209, 208, 210, 303, 113, 101, |
| 212, 214, 216, 218, 220, 222, 224, 226, 228, 229, |
| 230, 231, 232, 233, 234, 235, 236, 87, 144, 241, |
| 142, 187, 382, 287, 190, 86, 81, 323, 114, 375, |
| 101, 320, 323, 141, 166, 372, 101, 360, 320, 384, |
| 101, 329, 355, 327, 252, 406, 256, 256, 311, 404, |
| 256, 256, 256, 256, 256, 101, 359, 402, 400, 101, |
| 358, 312, 267, 268, 310, 142, 398, 28, 273, 274, |
| 275, 276, 277, 32, 28, 28, 193, 397, 195, 309, |
| 38, 250, 201, 31, 203, 30, 357, 255, 257, 101, |
| 11, 259, 260, 261, 262, 263, 12, 395, 356, 16, |
| 28, 101, 392, 352, 391, 237, 101, 291, 390, 292, |
| 387, 293, 386, 294, 374, 295, 373, 296, 370, 297, |
| 347, 298, 181, 101, 337, 365, 363, 101, 13, 164, |
| 164, 343, 264, 208, 265, 332, 14, 336, 266, 301, |
| 101, 289, 101, 331, 101, 82, 32, 324, 278, 154, |
| 325, 288, 279, 38, 101, 330, 31, 284, 30, 335, |
| 101, 321, 240, 28, 338, 239, 33, 318, 151, 326, |
| 283, 328, 270, 249, 182, 242, 333, 211, 196, 183, |
| 165, 165, 112, 339, 340, 341, 342, 178, 344, 115, |
| 116, 108, 109, 353, 99, 100, 97, 98, 155, 177, |
| 176, 175, 174, 115, 116, 108, 109, 91, 173, 172, |
| 110, 111, 121, 122, 362, 107, 170, 366, 169, 168, |
| 161, 256, 118, 256, 110, 111, 121, 122, 361, 107, |
| 376, 377, 160, 159, 158, 380, 157, 368, 113, 33, |
| 349, 156, 371, 150, 134, 199, 32, 10, 9, 2, |
| 378, 379, 17, 38, 317, 6, 31, 77, 30, 388, |
| 78, 103, 367, 15, 369, 7, 4, 123, 114, 393, |
| 385, 345, 346, 8, 348, 396, 350, 351, 389, 5, |
| 99, 100, 97, 98, 1, 401, 0, 0, 394, 0, |
| 403, 0, 0, 0, 405, 0, 24, 79, 399, 54, |
| 53, 51, 112, 0, 39, 63, 61, 62, 67, 18, |
| 19, 22, 23, 0, 0, 0, 64, 66, 20, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 381, 36, 37, 44, 33, |
| 383, 0, 0, 0, 50, 0, 40, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 0, 0, 113, 52, |
| 0, 0, 0, 0, 0, 0, 34, 35, 0, 24, |
| 79, 0, 54, 53, 51, 32, 0, 39, 63, 61, |
| 62, 67, 38, 315, 0, 31, 0, 30, 114, 64, |
| 66, 0, 55, 56, 57, 59, 58, 60, 68, 69, |
| 70, 71, 72, 73, 74, 75, 76, 65, 0, 36, |
| 37, 44, 0, 0, 0, 0, 0, 50, 29, 40, |
| 45, 43, 42, 41, 48, 47, 46, 49, 80, 0, |
| 0, 0, 52, 0, 0, 0, 0, 0, 0, 34, |
| 35, 0, 0, 115, 116, 108, 109, 0, 32, 126, |
| 127, 128, 129, 130, 131, 38, 308, 0, 31, 0, |
| 30, 119, 118, 0, 110, 111, 121, 122, 33, 107, |
| 79, 0, 54, 53, 51, 0, 0, 39, 63, 61, |
| 62, 67, 0, 0, 0, 0, 0, 0, 0, 64, |
| 66, 0, 55, 56, 57, 59, 58, 60, 68, 69, |
| 70, 71, 72, 73, 74, 75, 76, 65, 0, 36, |
| 37, 44, 0, 0, 0, 0, 0, 50, 0, 40, |
| 45, 43, 42, 41, 48, 47, 46, 49, 80, 0, |
| 0, 0, 52, 0, 0, 0, 0, 0, 0, 34, |
| 35, 33, 0, 0, 32, 0, 0, 0, 0, 0, |
| 0, 38, 306, 0, 31, 0, 30, 0, 0, 0, |
| 0, 0, 0, 115, 116, 108, 109, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 110, 111, 121, 122, 0, 107, |
| 0, 112, 0, 0, 334, 0, 0, 320, 0, 79, |
| 0, 54, 53, 51, 0, 0, 39, 63, 61, 62, |
| 67, 0, 0, 0, 106, 0, 120, 0, 64, 66, |
| 0, 55, 56, 57, 59, 58, 60, 68, 69, 70, |
| 71, 72, 73, 74, 75, 76, 65, 33, 36, 37, |
| 44, 0, 0, 0, 0, 0, 50, 113, 40, 45, |
| 43, 42, 41, 48, 47, 46, 49, 80, 0, 112, |
| 0, 52, 0, 0, 0, 0, 0, 0, 34, 35, |
| 0, 0, 79, 0, 54, 53, 51, 114, 0, 39, |
| 63, 61, 62, 67, 120, 0, 0, 0, 0, 0, |
| 0, 64, 66, 0, 55, 56, 57, 59, 58, 60, |
| 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, |
| 0, 36, 37, 44, 0, 113, 0, 0, 0, 50, |
| 0, 40, 45, 43, 42, 41, 48, 47, 46, 49, |
| 80, 0, 0, 0, 52, 0, 32, 0, 0, 0, |
| 0, 34, 35, 38, 302, 114, 31, 0, 30, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, |
| 54, 53, 51, 0, 0, 39, 63, 61, 62, 67, |
| 0, 0, 0, 0, 0, 0, 0, 64, 66, 0, |
| 55, 56, 57, 59, 58, 60, 68, 69, 70, 71, |
| 72, 73, 74, 75, 76, 65, 0, 36, 37, 44, |
| 0, 0, 0, 0, 0, 50, 0, 40, 45, 43, |
| 42, 41, 48, 47, 46, 49, 80, 0, 0, 33, |
| 52, 0, 32, 0, 0, 0, 0, 34, 35, 38, |
| 271, 0, 31, 0, 30, 0, 0, 0, 0, 0, |
| 0, 0, 115, 116, 108, 109, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, |
| 119, 118, 0, 110, 111, 121, 122, 0, 107, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, |
| 0, 0, 38, 258, 0, 31, 0, 30, 0, 0, |
| 115, 116, 108, 109, 0, 33, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 117, 119, 118, |
| 0, 110, 111, 121, 122, 0, 107, 0, 0, 112, |
| 0, 0, 0, 0, 0, 320, 0, 0, 0, 0, |
| 79, 0, 54, 53, 51, 0, 0, 39, 63, 61, |
| 62, 67, 106, 0, 120, 0, 0, 0, 0, 64, |
| 66, 0, 55, 56, 57, 59, 58, 60, 68, 69, |
| 70, 71, 72, 73, 74, 75, 76, 65, 33, 36, |
| 37, 44, 0, 0, 0, 113, 0, 50, 0, 40, |
| 45, 43, 42, 41, 48, 47, 46, 49, 80, 0, |
| 0, 0, 52, 0, 32, 0, 0, 0, 0, 34, |
| 35, 38, 0, 0, 31, 114, 30, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 227, 0, 0, 0, 79, 0, 54, 53, |
| 51, 0, 0, 39, 63, 61, 62, 67, 0, 0, |
| 0, 0, 0, 0, 0, 64, 66, 0, 55, 56, |
| 57, 59, 58, 60, 68, 69, 70, 71, 72, 73, |
| 74, 75, 76, 65, 0, 36, 37, 44, 0, 0, |
| 0, 0, 0, 50, 0, 40, 45, 43, 42, 41, |
| 48, 47, 46, 49, 80, 0, 0, 33, 52, 0, |
| 0, 0, 0, 0, 0, 34, 35, 0, 0, 253, |
| 0, 54, 53, 51, 0, 0, 39, 63, 61, 62, |
| 67, 0, 0, 0, 0, 0, 0, 0, 64, 66, |
| 0, 55, 56, 57, 59, 58, 60, 68, 69, 70, |
| 71, 72, 73, 74, 75, 76, 65, 0, 36, 37, |
| 44, 0, 0, 0, 0, 0, 50, 0, 40, 45, |
| 43, 42, 41, 48, 47, 46, 49, 80, 0, 0, |
| 0, 52, 0, 32, 0, 0, 0, 0, 34, 35, |
| 38, 0, 0, 31, 0, 30, 0, 0, 0, 0, |
| 115, 116, 108, 109, 0, 0, 0, 0, 0, 0, |
| 0, 225, 0, 0, 0, 0, 0, 117, 119, 118, |
| 0, 110, 111, 121, 122, 0, 107, 112, 0, 0, |
| 0, 0, 0, 323, 0, 0, 0, 0, 79, 0, |
| 54, 53, 51, 0, 0, 39, 63, 61, 62, 67, |
| 106, 0, 120, 0, 0, 0, 0, 64, 66, 0, |
| 55, 56, 57, 59, 58, 60, 68, 69, 70, 71, |
| 72, 73, 74, 75, 76, 65, 33, 36, 37, 44, |
| 0, 0, 0, 113, 0, 50, 0, 40, 45, 43, |
| 42, 41, 48, 47, 46, 49, 80, 0, 0, 32, |
| 52, 0, 0, 0, 0, 0, 38, 34, 35, 31, |
| 0, 30, 0, 114, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 223, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, |
| 38, 0, 0, 31, 0, 30, 0, 0, 0, 0, |
| 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, |
| 0, 221, 0, 0, 0, 0, 0, 79, 0, 54, |
| 53, 51, 0, 0, 39, 63, 61, 62, 67, 0, |
| 0, 0, 0, 0, 0, 0, 64, 66, 0, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 0, 36, 37, 44, 0, |
| 0, 0, 0, 0, 50, 0, 40, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 33, 0, 32, 52, |
| 0, 0, 0, 0, 0, 38, 34, 35, 31, 0, |
| 30, 0, 0, 0, 0, 0, 0, 0, 115, 116, |
| 108, 109, 0, 0, 0, 0, 219, 0, 0, 0, |
| 0, 0, 0, 0, 0, 117, 119, 118, 0, 110, |
| 111, 121, 122, 0, 107, 0, 0, 0, 0, 0, |
| 0, 0, 0, 79, 0, 54, 53, 51, 0, 0, |
| 39, 63, 61, 62, 67, 0, 0, 0, 0, 0, |
| 0, 0, 64, 66, 0, 55, 56, 57, 59, 58, |
| 60, 68, 69, 70, 71, 72, 73, 74, 75, 76, |
| 65, 33, 36, 37, 44, 0, 0, 0, 0, 0, |
| 50, 0, 40, 45, 43, 42, 41, 48, 47, 46, |
| 49, 80, 0, 0, 32, 52, 0, 0, 0, 0, |
| 0, 38, 34, 35, 31, 0, 30, 79, 0, 54, |
| 53, 51, 0, 0, 39, 63, 61, 62, 67, 0, |
| 0, 0, 217, 0, 0, 0, 64, 66, 0, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 0, 36, 37, 44, 0, |
| 0, 0, 0, 0, 50, 0, 40, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 0, 0, 32, 52, |
| 0, 0, 0, 0, 0, 38, 34, 35, 31, 0, |
| 30, 0, 0, 0, 0, 0, 0, 33, 0, 0, |
| 0, 0, 0, 0, 0, 0, 215, 0, 0, 0, |
| 0, 0, 79, 0, 54, 53, 51, 0, 0, 39, |
| 63, 61, 62, 67, 0, 0, 0, 0, 0, 0, |
| 0, 64, 66, 0, 55, 56, 57, 59, 58, 60, |
| 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, |
| 0, 36, 37, 44, 0, 0, 0, 0, 0, 50, |
| 0, 40, 45, 43, 42, 41, 48, 47, 46, 49, |
| 80, 33, 0, 32, 52, 0, 0, 0, 0, 0, |
| 38, 34, 35, 31, 0, 30, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 112, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, |
| 54, 53, 51, 0, 0, 39, 63, 61, 62, 67, |
| 106, 0, 120, 0, 0, 0, 0, 64, 66, 0, |
| 55, 56, 57, 59, 58, 60, 68, 69, 70, 71, |
| 72, 73, 74, 75, 76, 65, 33, 36, 37, 44, |
| 0, 0, 0, 113, 0, 50, 0, 40, 45, 43, |
| 42, 41, 48, 47, 46, 49, 80, 0, 0, 32, |
| 52, 0, 0, 0, 0, 0, 38, 34, 35, 31, |
| 0, 30, 79, 114, 54, 53, 51, 0, 0, 39, |
| 63, 61, 62, 67, 0, 0, 0, 0, 0, 0, |
| 0, 64, 66, 0, 55, 56, 57, 59, 58, 60, |
| 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, |
| 0, 36, 37, 44, 0, 0, 0, 0, 0, 50, |
| 0, 40, 45, 43, 42, 41, 48, 47, 46, 49, |
| 80, 0, 0, 0, 52, 0, 0, 0, 32, 0, |
| 0, 34, 35, 0, 0, 38, 136, 0, 31, 28, |
| 30, 0, 33, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 79, 0, 54, |
| 53, 51, 0, 0, 39, 63, 61, 62, 67, 0, |
| 0, 0, 0, 0, 0, 0, 64, 66, 0, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 0, 36, 37, 44, 0, |
| 0, 0, 0, 0, 50, 0, 40, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 0, 0, 32, 52, |
| 0, 33, 0, 0, 0, 38, 34, 35, 31, 0, |
| 30, 0, 0, 0, 0, 0, 0, 0, 115, 116, |
| 108, 109, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 117, 119, 118, 0, 110, |
| 111, 121, 122, 0, 107, 112, 0, 0, 0, 0, |
| 0, 0, 0, 139, 0, 54, 53, 51, 0, 0, |
| 39, 63, 61, 62, 67, 299, 0, 0, 106, 0, |
| 120, 0, 64, 66, 0, 55, 56, 57, 59, 58, |
| 60, 68, 69, 70, 71, 72, 73, 74, 75, 76, |
| 65, 33, 36, 37, 44, 0, 0, 0, 0, 0, |
| 50, 113, 140, 45, 43, 42, 41, 48, 47, 46, |
| 49, 80, 0, 0, 32, 52, 0, 0, 0, 0, |
| 0, 38, 34, 35, 31, 0, 30, 0, 0, 0, |
| 0, 114, 79, 0, 54, 53, 51, 0, 0, 39, |
| 63, 61, 62, 67, 0, 0, 0, 0, 0, 0, |
| 0, 64, 66, 0, 55, 56, 57, 59, 58, 60, |
| 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, |
| 0, 36, 37, 44, 0, 0, 0, 0, 0, 50, |
| 0, 40, 45, 43, 42, 41, 48, 47, 46, 49, |
| 80, 0, 0, 32, 52, 0, 0, 0, 0, 0, |
| 38, 34, 35, 31, 0, 30, 0, 33, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 253, 0, 54, 53, 51, 0, 0, 39, |
| 63, 61, 62, 67, 0, 0, 0, 0, 0, 0, |
| 0, 64, 66, 0, 55, 56, 57, 59, 58, 60, |
| 68, 69, 70, 71, 72, 73, 74, 75, 76, 65, |
| 0, 36, 37, 44, 0, 0, 0, 0, 0, 50, |
| 0, 40, 45, 43, 42, 41, 48, 47, 46, 49, |
| 80, 0, 0, 32, 52, 0, 33, 0, 0, 0, |
| 38, 34, 35, 31, 0, 30, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 115, 116, 108, 109, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 117, 119, 118, 0, 110, 111, 121, |
| 122, 0, 107, 0, 0, 0, 0, 0, 79, 0, |
| 54, 53, 51, 0, 0, 39, 63, 61, 62, 67, |
| 0, 0, 0, 0, 0, 0, 0, 64, 66, 0, |
| 55, 56, 57, 59, 58, 60, 68, 69, 70, 71, |
| 72, 73, 74, 75, 76, 65, 33, 36, 37, 44, |
| 0, 0, 0, 0, 0, 50, 0, 40, 45, 43, |
| 42, 41, 48, 47, 46, 49, 80, 0, 0, 32, |
| 52, 0, 0, 0, 0, 0, 38, 34, 35, 31, |
| 0, 30, 0, 0, 0, 0, 0, 254, 0, 54, |
| 53, 51, 0, 0, 39, 63, 61, 62, 67, 0, |
| 0, 0, 0, 0, 0, 0, 64, 66, 0, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 0, 36, 37, 44, 0, |
| 0, 0, 0, 0, 50, 0, 40, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 0, 0, 0, 52, |
| 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, |
| 0, 32, 33, 0, 0, 0, 0, 0, 38, 0, |
| 0, 31, 0, 30, 0, 0, 0, 185, 0, 54, |
| 53, 51, 0, 0, 39, 63, 61, 62, 67, 0, |
| 0, 0, 0, 0, 0, 0, 64, 66, 0, 55, |
| 56, 57, 59, 58, 60, 68, 69, 70, 71, 72, |
| 73, 74, 75, 76, 65, 0, 36, 37, 44, 141, |
| 0, 0, 0, 0, 50, 0, 186, 45, 43, 42, |
| 41, 48, 47, 46, 49, 80, 0, 0, 0, 52, |
| 0, 0, 0, 0, 0, 0, 34, 35, 0, 0, |
| 0, 142, 0, 0, 33, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 132, 0, 54, 53, 51, 0, 0, |
| 39, 63, 61, 62, 67, 0, 0, 0, 0, 0, |
| 0, 0, 64, 66, 0, 55, 56, 57, 59, 58, |
| 60, 68, 69, 70, 71, 72, 73, 74, 75, 76, |
| 65, 0, 36, 37, 44, 0, 0, 0, 0, 0, |
| 50, 0, 40, 45, 43, 42, 41, 48, 47, 46, |
| 49, 80, 0, 0, 0, 52, 0, 0, 0, 0, |
| 0, 0, 34, 35, 25, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 79, 0, 54, 53, 51, |
| 0, 0, 39, 63, 61, 62, 67, 0, 0, 0, |
| 0, 0, 0, 135, 64, 66, 0, 55, 56, 57, |
| 59, 58, 60, 68, 69, 70, 71, 72, 73, 74, |
| 75, 76, 65, 0, 36, 37, 44, 0, 0, 0, |
| 0, 0, 50, 0, 40, 45, 43, 42, 41, 48, |
| 47, 46, 49, 80, 0, 184, 0, 52, 0, 0, |
| 0, 0, 192, 0, 194, 0, 0, 197, 200, 0, |
| 202, 0, 204, 205, 206, 207, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, |
| 0, 0, 0, 0, 0, 0, 244, 245, 246, 247, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 269, 0, 0, 272, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 280, 281, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 285, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 304, 305, 307, 0, |
| 0, 0, 0, 313, 314, 316, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 354, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 364 }; |
| int yypact[]={ |
| |
| -1000, -1000, -1000, -208, -1000, -1000, 150, -1000, -1000, -1000, |
| -1000, 78, -2, -184, -185, -1000, -1000, 76, 87, 62, |
| 11, -1000, 61, 54, -1000, 121, -190, 1879, -1000, -317, |
| 2241, 2241, 2241, 2241, 2241, 2241, 2526, 314, 2035, 1956, |
| 7, -1000, -1000, 5, -259, -1000, -1000, -1000, -1000, -1000, |
| -218, -187, 2241, 313, 21, 2, 311, 306, 304, 303, |
| 302, 290, -17, -18, 289, 288, 286, 2241, 279, 278, |
| 272, 271, 270, 269, 257, -25, 249, -1000, -1000, -1000, |
| 2410, -1000, 70, -255, -42, 75, -1000, 2241, -42, 2241, |
| -42, 248, 223, 2241, -42, 2241, -42, 2241, 2241, 2241, |
| 2241, 2241, -42, -1000, -42, 247, 2241, 1840, 1745, 1671, |
| 1555, 1460, 1386, 1270, 1101, 2241, 2241, 2241, 2241, 2241, |
| 2241, 2241, 2241, -1000, -1000, -1000, -317, -317, -317, -317, |
| -1000, -1000, -1000, -256, 2241, 231, 38, -256, -1000, 245, |
| 52, 2241, 2241, 2241, 2241, -24, 243, 151, -1000, -256, |
| 2125, -1000, 2320, 982, -1000, -1000, 2125, 2125, 2125, 2125, |
| 2125, -245, -1000, -245, -1000, -1000, -1000, -245, 2241, 2241, |
| 2241, -1000, 241, 909, 2241, 2241, 2241, 2241, 2241, -227, |
| -1000, -1000, -1000, -227, 102, 2241, 2618, -257, -1000, -1000, |
| -1000, 239, 102, -1000, 226, -1000, 2241, 35, 74, -1000, |
| 220, -1000, 210, -1000, 102, 102, 102, 102, 1879, -1000, |
| -1000, 2241, 1879, 2241, -321, 2241, -306, 2241, -265, 2241, |
| -248, 2241, -248, 2241, -294, 2241, 0, 2241, 0, -256, |
| -288, 254, 374, 14, 2167, -321, -321, -57, 208, 813, |
| 16, 2241, 621, 525, 96, 49, 65, 46, 2241, 452, |
| 323, 236, 1021, -1000, 230, 93, 1879, 216, -1000, 93, |
| 97, 109, 97, 107, 93, 212, 204, 663, 1309, 206, |
| -1000, -1000, 193, 1309, 1021, 1021, 1021, 1021, 200, 97, |
| 102, 102, -1000, -42, -42, 189, -42, 2241, -42, -42, |
| 172, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 2241, |
| -1000, -1000, -1000, 2241, 59, 167, -1000, 155, -1000, -1000, |
| -1000, -1000, -1000, 45, 125, -1000, 106, -1000, -1000, 97, |
| 2241, -1000, 195, 2241, -1000, 194, 93, 2125, 97, 2125, |
| 187, -1000, -1000, 104, -1000, 185, -1000, -1000, 183, 98, |
| 93, 97, 97, -1000, 93, -1000, -1000, -42, -1000, 73, |
| -1000, -1000, -42, 731, 56, -1000, -1000, -1000, -1000, -1000, |
| -1000, 97, 1879, -1000, 102, -1000, 181, 179, 93, 97, |
| -1000, 177, -1000, -1000, -1000, -1000, 173, 171, 93, 97, |
| 166, -1000, 223, -1000, -1000, 146, -1000, -1000, 135, 97, |
| -1000, -1000, -1000, 127, 93, -1000, 126, -1000, -1000, 93, |
| -1000, 118, -42, 114, -1000, -1000, -1000 }; |
| int yypgo[]={ |
| |
| 0, 394, 389, 383, 377, 1, 91, 376, 375, 373, |
| 355, 2, 371, 2854, 3, 0, 18, 528, 44, 80, |
| 78, 62, 370, 367, 365, 97, 359, 358, 357 }; |
| int yyr1[]={ |
| |
| 0, 26, 1, 25, 25, 12, 12, 12, 5, 4, |
| 6, 6, 7, 7, 7, 7, 7, 10, 10, 10, |
| 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, |
| 8, 8, 8, 8, 8, 11, 11, 21, 21, 24, |
| 24, 2, 2, 2, 3, 3, 27, 28, 15, 13, |
| 13, 16, 14, 14, 14, 14, 14, 14, 14, 14, |
| 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, |
| 14, 14, 14, 14, 14, 14, 14, 14, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, |
| 22, 22, 22, 22, 22, 18, 18, 19, 19, 20, |
| 20, 23 }; |
| int yyr2[]={ |
| |
| 0, 1, 5, 7, 5, 1, 5, 11, 9, 1, |
| 1, 5, 3, 5, 2, 5, 7, 3, 3, 7, |
| 7, 7, 7, 11, 11, 7, 7, 13, 13, 9, |
| 9, 15, 13, 21, 5, 1, 2, 1, 2, 1, |
| 4, 3, 3, 3, 9, 7, 7, 7, 5, 7, |
| 2, 5, 7, 9, 9, 9, 9, 9, 9, 9, |
| 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
| 7, 7, 7, 7, 11, 7, 7, 3, 5, 5, |
| 5, 5, 5, 5, 5, 5, 5, 5, 3, 9, |
| 9, 7, 5, 5, 5, 3, 3, 9, 3, 3, |
| 9, 13, 11, 9, 9, 11, 3, 3, 3, 3, |
| 3, 11, 11, 9, 9, 5, 11, 11, 9, 9, |
| 5, 3, 5, 3, 5, 3, 9, 15, 5, 9, |
| 11, 9, 5, 5, 7, 3, 11, 13, 13, 15, |
| 19, 11, 5, 9, 5, 9, 3, 3, 13, 11, |
| 9, 11, 9, 5, 3, 3, 7, 7, 9, 11, |
| 11, 13, 13, 15, 17, 9, 5, 13, 2, 2, |
| 3, 5, 5, 7, 7, 3, 2, 3, 3, 3, |
| 3, 3 }; |
| int yychk[]={ |
| |
| -1000, -1, -26, -6, -7, -2, -24, -8, -3, -27, |
| -28, 257, 263, 295, 303, -9, 59, -10, 269, 270, |
| 278, -25, 271, 272, 256, -13, -5, -14, 123, -17, |
| 45, 43, 33, 126, 326, 327, 296, 297, 40, 264, |
| 306, 310, 309, 308, 298, 307, 313, 312, 311, 314, |
| 304, 261, 319, 260, 259, 279, 280, 281, 283, 282, |
| 284, 266, 267, 265, 276, 294, 277, 268, 285, 286, |
| 287, 288, 289, 290, 291, 292, 293, -23, -22, 257, |
| 315, 58, 257, 61, 257, 257, 59, 40, -5, 40, |
| -5, 306, 40, 40, -5, 40, -5, 271, 272, 269, |
| 270, 44, 275, -12, 273, 274, 61, 325, 301, 302, |
| 320, 321, 38, 94, 124, 299, 300, 316, 318, 317, |
| 63, 322, 323, -4, 326, 327, -17, -17, -17, -17, |
| -17, -17, 257, -14, 40, -13, 41, -14, -5, 257, |
| 306, 91, 123, 91, 123, 306, 257, 306, 257, -14, |
| 40, 257, 40, 40, 257, 306, 40, 40, 40, 40, |
| 40, 40, -19, 40, 257, 308, -19, 40, 40, 40, |
| 40, -14, 40, 40, 40, 40, 40, 40, 40, 40, |
| -20, 257, 309, 40, -13, 257, 306, 61, 305, -5, |
| 59, -21, -13, -25, -13, -25, 40, -13, -11, -10, |
| -13, -25, -13, -25, -13, -13, -13, -13, -14, -5, |
| -5, 40, -14, 61, -14, 61, -14, 61, -14, 61, |
| -14, 61, -14, 61, -14, 61, -14, 61, -14, -14, |
| -14, -14, -14, -14, -14, -14, -14, -6, -13, 44, |
| 41, 91, 40, 40, -13, -13, -13, -13, 123, 40, |
| 40, -18, -14, 257, 257, -18, -14, -18, 41, -18, |
| -18, -18, -18, -18, -19, -19, -19, -14, -14, -13, |
| 41, 41, -13, -14, -14, -14, -14, -14, -20, -20, |
| -13, -13, 305, 41, 41, -13, 41, 59, 41, 41, |
| -13, -14, -14, -14, -14, -14, -14, -14, -14, 58, |
| 125, 41, 41, 91, -13, -13, 41, -13, 41, 93, |
| 125, 93, 125, -13, -13, 41, -13, 41, 41, -16, |
| 44, 41, -15, 44, 41, -15, -16, 44, -16, 44, |
| -15, 41, 41, -16, 41, -15, 41, 41, -15, -16, |
| -16, -16, -16, 41, -16, -25, -25, 41, -25, -21, |
| -25, -25, 41, -14, -13, 93, 41, 41, 125, 41, |
| 41, -16, -14, 41, -13, 41, -15, -18, -16, -18, |
| 41, -16, 41, 41, 41, 41, -15, -15, -16, -16, |
| -15, -25, 59, -25, 93, -16, 41, 41, -15, -16, |
| 41, 41, 41, -15, -16, 41, -11, 41, 41, -16, |
| 41, -15, 41, -15, 41, -5, 41 }; |
| int yydef[]={ |
| |
| 1, -2, 10, -2, 11, 12, 0, 14, 41, 42, |
| 43, 0, 0, 0, 0, 13, 15, 0, 0, 0, |
| 0, 34, 0, 0, 17, 18, 5, 50, 9, 77, |
| 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, |
| 95, 96, 98, 99, 0, 106, 107, 108, 109, 110, |
| 0, 121, 123, 125, 0, 135, 0, 0, 0, 0, |
| 0, 0, 0, 146, 147, 0, 0, 154, 155, 0, |
| 0, 0, 0, 0, 0, 0, 0, 168, 169, 181, |
| 170, 40, 0, 0, 0, 0, 16, 37, 0, 0, |
| 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 0, 10, 82, 83, 78, 79, 80, 81, |
| -2, -2, 86, 87, 0, 0, 92, 93, 94, 181, |
| 95, 0, 0, 0, 0, 0, 115, 120, 122, 124, |
| 0, 128, 0, 0, 132, 133, 0, 0, 0, 0, |
| 0, 0, 142, 0, 177, 178, 144, 0, 0, 0, |
| 0, 153, 0, 0, 0, 0, 0, 0, 0, 0, |
| 166, 179, 180, 0, 171, 172, 95, 0, 45, 46, |
| 47, 0, 38, 29, 0, 30, 0, 18, 0, 36, |
| 0, 25, 0, 26, 19, 20, 21, 22, 49, 3, |
| 6, 0, 52, 0, 61, 0, 62, 0, 63, 0, |
| 64, 0, 65, 0, 68, 0, 69, 0, 70, -2, |
| -2, -2, 72, 73, 0, 75, 76, 39, 0, 0, |
| 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 0, 0, 176, -2, -2, 0, 176, 0, 134, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 156, 157, 0, 0, 0, 0, 0, 0, 0, 0, |
| 173, 174, 44, 0, 0, 0, 0, 37, 0, 0, |
| 0, 53, 54, 55, 56, 57, 58, 59, 60, 0, |
| 8, 89, 90, 0, 0, 0, 113, 0, 118, 97, |
| 100, 103, 104, 0, 0, 114, 0, 119, 126, 0, |
| 0, 129, 0, 0, 131, 0, 0, 0, 0, 0, |
| 0, 143, 145, 0, 150, 0, 152, 158, 0, 0, |
| 0, 0, 0, 165, 0, 27, 28, 0, 32, 0, |
| 23, 24, 0, 74, 0, 102, 111, 116, 105, 112, |
| 117, 0, 51, 130, 48, 136, 0, 0, 0, 0, |
| 141, 0, 149, 151, 159, 160, 0, 0, 0, 0, |
| 0, 31, -2, 7, 101, 0, 137, 138, 0, 0, |
| 148, 161, 162, 0, 0, 167, 0, 127, 139, 0, |
| 163, 0, 0, 0, 164, 33, 140 }; |
| typedef struct { char *t_name; int t_val; } yytoktype; |
| #ifndef YYDEBUG |
| # define YYDEBUG 0 /* don't allow debugging */ |
| #endif |
| |
| #if YYDEBUG |
| |
| yytoktype yytoks[] = |
| { |
| "WORD", 257, |
| "APPEND", 258, |
| "OPEN", 259, |
| "SSELECT", 260, |
| "LOOPEX", 261, |
| "USING", 262, |
| "FORMAT", 263, |
| "DO", 264, |
| "SHIFT", 265, |
| "PUSH", 266, |
| "POP", 267, |
| "LVALFUN", 268, |
| "WHILE", 269, |
| "UNTIL", 270, |
| "IF", 271, |
| "UNLESS", 272, |
| "ELSE", 273, |
| "ELSIF", 274, |
| "CONTINUE", 275, |
| "SPLIT", 276, |
| "FLIST", 277, |
| "FOR", 278, |
| "FILOP", 279, |
| "FILOP2", 280, |
| "FILOP3", 281, |
| "FILOP4", 282, |
| "FILOP22", 283, |
| "FILOP25", 284, |
| "FUNC0", 285, |
| "FUNC1", 286, |
| "FUNC2", 287, |
| "FUNC2x", 288, |
| "FUNC3", 289, |
| "FUNC4", 290, |
| "FUNC5", 291, |
| "HSHFUN", 292, |
| "HSHFUN3", 293, |
| "FLIST2", 294, |
| "SUB", 295, |
| "FILETEST", 296, |
| "LOCAL", 297, |
| "DELETE", 298, |
| "RELOP", 299, |
| "EQOP", 300, |
| "MULOP", 301, |
| "ADDOP", 302, |
| "PACKAGE", 303, |
| "AMPER", 304, |
| "FORMLIST", 305, |
| "REG", 306, |
| "ARYLEN", 307, |
| "ARY", 308, |
| "HSH", 309, |
| "STAR", 310, |
| "SUBST", 311, |
| "PATTERN", 312, |
| "RSTRING", 313, |
| "TRANS", 314, |
| "LISTOP", 315, |
| ",", 44, |
| "=", 61, |
| "?", 63, |
| ":", 58, |
| "DOTDOT", 316, |
| "OROR", 317, |
| "ANDAND", 318, |
| "|", 124, |
| "^", 94, |
| "&", 38, |
| "UNIOP", 319, |
| "LS", 320, |
| "RS", 321, |
| "MATCH", 322, |
| "NMATCH", 323, |
| "!", 33, |
| "~", 126, |
| "UMINUS", 324, |
| "POW", 325, |
| "INC", 326, |
| "DEC", 327, |
| "(", 40, |
| "-unknown-", -1 /* ends search */ |
| }; |
| |
| char * yyreds[] = |
| { |
| "-no such reduction-", |
| "prog : /* empty */", |
| "prog : lineseq", |
| "compblock : block CONTINUE block", |
| "compblock : block else", |
| "else : /* empty */", |
| "else : ELSE block", |
| "else : ELSIF '(' expr ')' compblock", |
| "block : '{' remember lineseq '}'", |
| "remember : /* empty */", |
| "lineseq : /* empty */", |
| "lineseq : lineseq line", |
| "line : decl", |
| "line : label cond", |
| "line : loop", |
| "line : label ';'", |
| "line : label sideff ';'", |
| "sideff : error", |
| "sideff : expr", |
| "sideff : expr IF expr", |
| "sideff : expr UNLESS expr", |
| "sideff : expr WHILE expr", |
| "sideff : expr UNTIL expr", |
| "cond : IF '(' expr ')' compblock", |
| "cond : UNLESS '(' expr ')' compblock", |
| "cond : IF block compblock", |
| "cond : UNLESS block compblock", |
| "loop : label WHILE '(' texpr ')' compblock", |
| "loop : label UNTIL '(' expr ')' compblock", |
| "loop : label WHILE block compblock", |
| "loop : label UNTIL block compblock", |
| "loop : label FOR REG '(' expr ')' compblock", |
| "loop : label FOR '(' expr ')' compblock", |
| "loop : label FOR '(' nexpr ';' texpr ';' nexpr ')' block", |
| "loop : label compblock", |
| "nexpr : /* empty */", |
| "nexpr : sideff", |
| "texpr : /* empty */", |
| "texpr : expr", |
| "label : /* empty */", |
| "label : WORD ':'", |
| "decl : format", |
| "decl : subrout", |
| "decl : package", |
| "format : FORMAT WORD '=' FORMLIST", |
| "format : FORMAT '=' FORMLIST", |
| "subrout : SUB WORD block", |
| "package : PACKAGE WORD ';'", |
| "cexpr : ',' expr", |
| "expr : expr ',' sexpr", |
| "expr : sexpr", |
| "csexpr : ',' sexpr", |
| "sexpr : sexpr '=' sexpr", |
| "sexpr : sexpr POW '=' sexpr", |
| "sexpr : sexpr MULOP '=' sexpr", |
| "sexpr : sexpr ADDOP '=' sexpr", |
| "sexpr : sexpr LS '=' sexpr", |
| "sexpr : sexpr RS '=' sexpr", |
| "sexpr : sexpr '&' '=' sexpr", |
| "sexpr : sexpr '^' '=' sexpr", |
| "sexpr : sexpr '|' '=' sexpr", |
| "sexpr : sexpr POW sexpr", |
| "sexpr : sexpr MULOP sexpr", |
| "sexpr : sexpr ADDOP sexpr", |
| "sexpr : sexpr LS sexpr", |
| "sexpr : sexpr RS sexpr", |
| "sexpr : sexpr RELOP sexpr", |
| "sexpr : sexpr EQOP sexpr", |
| "sexpr : sexpr '&' sexpr", |
| "sexpr : sexpr '^' sexpr", |
| "sexpr : sexpr '|' sexpr", |
| "sexpr : sexpr DOTDOT sexpr", |
| "sexpr : sexpr ANDAND sexpr", |
| "sexpr : sexpr OROR sexpr", |
| "sexpr : sexpr '?' sexpr ':' sexpr", |
| "sexpr : sexpr MATCH sexpr", |
| "sexpr : sexpr NMATCH sexpr", |
| "sexpr : term", |
| "term : '-' term", |
| "term : '+' term", |
| "term : '!' term", |
| "term : '~' term", |
| "term : term INC", |
| "term : term DEC", |
| "term : INC term", |
| "term : DEC term", |
| "term : FILETEST WORD", |
| "term : FILETEST sexpr", |
| "term : FILETEST", |
| "term : LOCAL '(' expr ')'", |
| "term : '(' expr ',' ')'", |
| "term : '(' expr ')'", |
| "term : '(' ')'", |
| "term : DO sexpr", |
| "term : DO block", |
| "term : REG", |
| "term : STAR", |
| "term : REG '[' expr ']'", |
| "term : HSH", |
| "term : ARY", |
| "term : REG '{' expr '}'", |
| "term : '(' expr ')' '[' expr ']'", |
| "term : '(' ')' '[' expr ']'", |
| "term : ARY '[' expr ']'", |
| "term : ARY '{' expr '}'", |
| "term : DELETE REG '{' expr '}'", |
| "term : ARYLEN", |
| "term : RSTRING", |
| "term : PATTERN", |
| "term : SUBST", |
| "term : TRANS", |
| "term : DO WORD '(' expr ')'", |
| "term : AMPER WORD '(' expr ')'", |
| "term : DO WORD '(' ')'", |
| "term : AMPER WORD '(' ')'", |
| "term : AMPER WORD", |
| "term : DO REG '(' expr ')'", |
| "term : AMPER REG '(' expr ')'", |
| "term : DO REG '(' ')'", |
| "term : AMPER REG '(' ')'", |
| "term : AMPER REG", |
| "term : LOOPEX", |
| "term : LOOPEX WORD", |
| "term : UNIOP", |
| "term : UNIOP sexpr", |
| "term : SSELECT", |
| "term : SSELECT '(' handle ')'", |
| "term : SSELECT '(' sexpr csexpr csexpr csexpr ')'", |
| "term : OPEN WORD", |
| "term : OPEN '(' WORD ')'", |
| "term : OPEN '(' handle cexpr ')'", |
| "term : FILOP '(' handle ')'", |
| "term : FILOP WORD", |
| "term : FILOP REG", |
| "term : FILOP '(' ')'", |
| "term : FILOP", |
| "term : FILOP2 '(' handle cexpr ')'", |
| "term : FILOP3 '(' handle csexpr cexpr ')'", |
| "term : FILOP22 '(' handle ',' handle ')'", |
| "term : FILOP4 '(' handle csexpr csexpr cexpr ')'", |
| "term : FILOP25 '(' handle ',' handle csexpr csexpr cexpr ')'", |
| "term : PUSH '(' aryword cexpr ')'", |
| "term : POP aryword", |
| "term : POP '(' aryword ')'", |
| "term : SHIFT aryword", |
| "term : SHIFT '(' aryword ')'", |
| "term : SHIFT", |
| "term : SPLIT", |
| "term : SPLIT '(' sexpr csexpr csexpr ')'", |
| "term : SPLIT '(' sexpr csexpr ')'", |
| "term : SPLIT '(' sexpr ')'", |
| "term : FLIST2 '(' sexpr cexpr ')'", |
| "term : FLIST '(' expr ')'", |
| "term : LVALFUN sexpr", |
| "term : LVALFUN", |
| "term : FUNC0", |
| "term : FUNC0 '(' ')'", |
| "term : FUNC1 '(' ')'", |
| "term : FUNC1 '(' expr ')'", |
| "term : FUNC2 '(' sexpr cexpr ')'", |
| "term : FUNC2x '(' sexpr csexpr ')'", |
| "term : FUNC2x '(' sexpr csexpr cexpr ')'", |
| "term : FUNC3 '(' sexpr csexpr cexpr ')'", |
| "term : FUNC4 '(' sexpr csexpr csexpr cexpr ')'", |
| "term : FUNC5 '(' sexpr csexpr csexpr csexpr cexpr ')'", |
| "term : HSHFUN '(' hshword ')'", |
| "term : HSHFUN hshword", |
| "term : HSHFUN3 '(' hshword csexpr cexpr ')'", |
| "term : bareword", |
| "term : listop", |
| "listop : LISTOP", |
| "listop : LISTOP expr", |
| "listop : LISTOP WORD", |
| "listop : LISTOP WORD expr", |
| "listop : LISTOP REG expr", |
| "handle : WORD", |
| "handle : sexpr", |
| "aryword : WORD", |
| "aryword : ARY", |
| "hshword : WORD", |
| "hshword : HSH", |
| "bareword : WORD", |
| }; |
| #endif /* YYDEBUG */ |
| #line 1 "/usr/lib/yaccpar" |
| /* @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10 */ |
| |
| /* |
| ** Skeleton parser driver for yacc output |
| */ |
| |
| /* |
| ** yacc user known macros and defines |
| */ |
| #define YYERROR goto yyerrlab |
| #ifdef IGNOREFREE |
| #define YYACCEPT { return(0); } |
| #define YYABORT { return(1); } |
| #else |
| #define YYACCEPT { Safefree(yys); free(yyv); return(0); } |
| #define YYABORT { Safefree(yys); free(yyv); return(1); } |
| #endif |
| #define YYBACKUP( newtoken, newvalue )\ |
| {\ |
| if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\ |
| {\ |
| yyerror( "syntax error - cannot backup" );\ |
| goto yyerrlab;\ |
| }\ |
| yychar = newtoken;\ |
| yystate = *yyps;\ |
| yylval = newvalue;\ |
| goto yynewstate;\ |
| } |
| #define YYRECOVERING() (!!yyerrflag) |
| #ifndef YYDEBUG |
| # define YYDEBUG 1 /* make debugging available */ |
| #endif |
| |
| /* |
| ** user known globals |
| */ |
| int yydebug; /* set to 1 to get debugging */ |
| |
| /* |
| ** driver internal defines |
| */ |
| #define YYFLAG (-1000) |
| |
| /* |
| ** static variables used by the parser |
| */ |
| static YYSTYPE *yyv; /* value stack */ |
| static int *yys; /* state stack */ |
| |
| static YYSTYPE *yypv; /* top of value stack */ |
| static int *yyps; /* top of state stack */ |
| |
| static int yystate; /* current state */ |
| static int yytmp; /* extra var (lasts between blocks) */ |
| |
| int yynerrs; /* number of errors */ |
| |
| int yyerrflag; /* error recovery flag */ |
| int yychar; /* current input token number */ |
| |
| |
| /* |
| ** yyparse - return 0 if worked, 1 if syntax error not recovered from |
| */ |
| int |
| yyparse() |
| { |
| register YYSTYPE *yypvt; /* top of value stack for $vars */ |
| unsigned yymaxdepth = YYMAXDEPTH; |
| |
| /* |
| ** Initialize externals - yyparse may be called more than once |
| */ |
| #ifdef BWGC |
| yyv = (YYSTYPE*)gc_malloc(yymaxdepth*sizeof(YYSTYPE)); |
| yys = (int*)gc_malloc(yymaxdepth*sizeof(int)); |
| #else |
| yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE)); |
| yys = (int*)malloc(yymaxdepth*sizeof(int)); |
| #endif |
| if (!yyv || !yys) |
| { |
| yyerror( "out of memory" ); |
| return(1); |
| } |
| yypv = &yyv[-1]; |
| yyps = &yys[-1]; |
| yystate = 0; |
| yytmp = 0; |
| yynerrs = 0; |
| yyerrflag = 0; |
| yychar = -1; |
| |
| goto yystack; |
| { |
| register YYSTYPE *yy_pv; /* top of value stack */ |
| register int *yy_ps; /* top of state stack */ |
| register int yy_state; /* current state */ |
| register int yy_n; /* internal state number info */ |
| |
| /* |
| ** get globals into registers. |
| ** branch to here only if YYBACKUP was called. |
| */ |
| yynewstate: |
| yy_pv = yypv; |
| yy_ps = yyps; |
| yy_state = yystate; |
| goto yy_newstate; |
| |
| /* |
| ** get globals into registers. |
| ** either we just started, or we just finished a reduction |
| */ |
| yystack: |
| yy_pv = yypv; |
| yy_ps = yyps; |
| yy_state = yystate; |
| |
| /* |
| ** top of for (;;) loop while no reductions done |
| */ |
| yy_stack: |
| /* |
| ** put a state and value onto the stacks |
| */ |
| #if YYDEBUG |
| /* |
| ** if debugging, look up token value in list of value vs. |
| ** name pairs. 0 and negative (-1) are special values. |
| ** Note: linear search is used since time is not a real |
| ** consideration while debugging. |
| */ |
| if ( yydebug ) |
| { |
| register int yy_i; |
| |
| (void)printf( "State %d, token ", yy_state ); |
| if ( yychar == 0 ) |
| (void)printf( "end-of-file\n" ); |
| else if ( yychar < 0 ) |
| (void)printf( "-none-\n" ); |
| else |
| { |
| for ( yy_i = 0; yytoks[yy_i].t_val >= 0; |
| yy_i++ ) |
| { |
| if ( yytoks[yy_i].t_val == yychar ) |
| break; |
| } |
| (void)printf( "%s\n", yytoks[yy_i].t_name ); |
| } |
| } |
| #endif /* YYDEBUG */ |
| if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */ |
| { |
| /* |
| ** reallocate and recover. Note that pointers |
| ** have to be reset, or bad things will happen |
| */ |
| int yyps_index = (yy_ps - yys); |
| int yypv_index = (yy_pv - yyv); |
| int yypvt_index = (yypvt - yyv); |
| yymaxdepth += YYMAXDEPTH; |
| #ifdef BWGC |
| yyv = (YYSTYPE*)gc_realloc((char*)yyv, |
| yymaxdepth * sizeof(YYSTYPE)); |
| yys = (int*)gc_realloc((char*)yys, |
| yymaxdepth * sizeof(int)); |
| #else |
| yyv = (YYSTYPE*)realloc((char*)yyv, |
| yymaxdepth * sizeof(YYSTYPE)); |
| yys = (int*)realloc((char*)yys, |
| yymaxdepth * sizeof(int)); |
| #endif |
| if (!yyv || !yys) |
| { |
| yyerror( "yacc stack overflow" ); |
| return(1); |
| } |
| yy_ps = yys + yyps_index; |
| yy_pv = yyv + yypv_index; |
| yypvt = yyv + yypvt_index; |
| } |
| *yy_ps = yy_state; |
| *++yy_pv = yyval; |
| |
| /* |
| ** we have a new state - find out what to do |
| */ |
| yy_newstate: |
| if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG ) |
| goto yydefault; /* simple state */ |
| #if YYDEBUG |
| /* |
| ** if debugging, need to mark whether new token grabbed |
| */ |
| yytmp = yychar < 0; |
| #endif |
| if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) |
| yychar = 0; /* reached EOF */ |
| #if YYDEBUG |
| if ( yydebug && yytmp ) |
| { |
| register int yy_i; |
| |
| (void)printf( "Received token " ); |
| if ( yychar == 0 ) |
| (void)printf( "end-of-file\n" ); |
| else if ( yychar < 0 ) |
| (void)printf( "-none-\n" ); |
| else |
| { |
| for ( yy_i = 0; yytoks[yy_i].t_val >= 0; |
| yy_i++ ) |
| { |
| if ( yytoks[yy_i].t_val == yychar ) |
| break; |
| } |
| (void)printf( "%s\n", yytoks[yy_i].t_name ); |
| } |
| } |
| #endif /* YYDEBUG */ |
| if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) ) |
| goto yydefault; |
| if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/ |
| { |
| yychar = -1; |
| yyval = yylval; |
| yy_state = yy_n; |
| if ( yyerrflag > 0 ) |
| yyerrflag--; |
| goto yy_stack; |
| } |
| |
| yydefault: |
| if ( ( yy_n = yydef[ yy_state ] ) == -2 ) |
| { |
| #if YYDEBUG |
| yytmp = yychar < 0; |
| #endif |
| if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) ) |
| yychar = 0; /* reached EOF */ |
| #if YYDEBUG |
| if ( yydebug && yytmp ) |
| { |
| register int yy_i; |
| |
| (void)printf( "Received token " ); |
| if ( yychar == 0 ) |
| (void)printf( "end-of-file\n" ); |
| else if ( yychar < 0 ) |
| (void)printf( "-none-\n" ); |
| else |
| { |
| for ( yy_i = 0; |
| yytoks[yy_i].t_val >= 0; |
| yy_i++ ) |
| { |
| if ( yytoks[yy_i].t_val |
| == yychar ) |
| { |
| break; |
| } |
| } |
| (void)printf( "%s\n", yytoks[yy_i].t_name ); |
| } |
| } |
| #endif /* YYDEBUG */ |
| /* |
| ** look through exception table |
| */ |
| { |
| register int *yyxi = yyexca; |
| |
| while ( ( *yyxi != -1 ) || |
| ( yyxi[1] != yy_state ) ) |
| { |
| yyxi += 2; |
| } |
| while ( ( *(yyxi += 2) >= 0 ) && |
| ( *yyxi != yychar ) ) |
| ; |
| if ( ( yy_n = yyxi[1] ) < 0 ) |
| YYACCEPT; |
| } |
| } |
| |
| /* |
| ** check for syntax error |
| */ |
| if ( yy_n == 0 ) /* have an error */ |
| { |
| /* no worry about speed here! */ |
| switch ( yyerrflag ) |
| { |
| case 0: /* new error */ |
| yyerror( "syntax error" ); |
| goto skip_init; |
| yyerrlab: |
| /* |
| ** get globals into registers. |
| ** we have a user generated syntax type error |
| */ |
| yy_pv = yypv; |
| yy_ps = yyps; |
| yy_state = yystate; |
| yynerrs++; |
| skip_init: |
| case 1: |
| case 2: /* incompletely recovered error */ |
| /* try again... */ |
| yyerrflag = 3; |
| /* |
| ** find state where "error" is a legal |
| ** shift action |
| */ |
| while ( yy_ps >= yys ) |
| { |
| yy_n = yypact[ *yy_ps ] + YYERRCODE; |
| if ( yy_n >= 0 && yy_n < YYLAST && |
| yychk[yyact[yy_n]] == YYERRCODE) { |
| /* |
| ** simulate shift of "error" |
| */ |
| yy_state = yyact[ yy_n ]; |
| goto yy_stack; |
| } |
| /* |
| ** current state has no shift on |
| ** "error", pop stack |
| */ |
| #if YYDEBUG |
| # define _POP_ "Error recovery pops state %d, uncovers state %d\n" |
| if ( yydebug ) |
| (void)printf( _POP_, *yy_ps, |
| yy_ps[-1] ); |
| # undef _POP_ |
| #endif |
| yy_ps--; |
| yy_pv--; |
| } |
| /* |
| ** there is no state on stack with "error" as |
| ** a valid shift. give up. |
| */ |
| YYABORT; |
| case 3: /* no shift yet; eat a token */ |
| #if YYDEBUG |
| /* |
| ** if debugging, look up token in list of |
| ** pairs. 0 and negative shouldn't occur, |
| ** but since timing doesn't matter when |
| ** debugging, it doesn't hurt to leave the |
| ** tests here. |
| */ |
| if ( yydebug ) |
| { |
| register int yy_i; |
| |
| (void)printf( "Error recovery discards " ); |
| if ( yychar == 0 ) |
| (void)printf( "token end-of-file\n" ); |
| else if ( yychar < 0 ) |
| (void)printf( "token -none-\n" ); |
| else |
| { |
| for ( yy_i = 0; |
| yytoks[yy_i].t_val >= 0; |
| yy_i++ ) |
| { |
| if ( yytoks[yy_i].t_val |
| == yychar ) |
| { |
| break; |
| } |
| } |
| (void)printf( "token %s\n", |
| yytoks[yy_i].t_name ); |
| } |
| } |
| #endif /* YYDEBUG */ |
| if ( yychar == 0 ) /* reached EOF. quit */ |
| YYABORT; |
| yychar = -1; |
| goto yy_newstate; |
| } |
| }/* end if ( yy_n == 0 ) */ |
| /* |
| ** reduction by production yy_n |
| ** put stack tops, etc. so things right after switch |
| */ |
| #if YYDEBUG |
| /* |
| ** if debugging, print the string that is the user's |
| ** specification of the reduction which is just about |
| ** to be done. |
| */ |
| if ( yydebug ) |
| (void)printf( "Reduce by (%d) \"%s\"\n", |
| yy_n, yyreds[ yy_n ] ); |
| #endif |
| yytmp = yy_n; /* value to switch over */ |
| yypvt = yy_pv; /* $vars top of value stack */ |
| /* |
| ** Look in goto table for next state |
| ** Sorry about using yy_state here as temporary |
| ** register variable, but why not, if it works... |
| ** If yyr2[ yy_n ] doesn't have the low order bit |
| ** set, then there is no action to be done for |
| ** this reduction. So, no saving & unsaving of |
| ** registers done. The only difference between the |
| ** code just after the if and the body of the if is |
| ** the goto yy_stack in the body. This way the test |
| ** can be made before the choice of what to do is needed. |
| */ |
| { |
| /* length of production doubled with extra bit */ |
| register int yy_len = yyr2[ yy_n ]; |
| |
| if ( !( yy_len & 01 ) ) |
| { |
| yy_len >>= 1; |
| yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ |
| yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + |
| *( yy_ps -= yy_len ) + 1; |
| if ( yy_state >= YYLAST || |
| yychk[ yy_state = |
| yyact[ yy_state ] ] != -yy_n ) |
| { |
| yy_state = yyact[ yypgo[ yy_n ] ]; |
| } |
| goto yy_stack; |
| } |
| yy_len >>= 1; |
| yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */ |
| yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] + |
| *( yy_ps -= yy_len ) + 1; |
| if ( yy_state >= YYLAST || |
| yychk[ yy_state = yyact[ yy_state ] ] != -yy_n ) |
| { |
| yy_state = yyact[ yypgo[ yy_n ] ]; |
| } |
| } |
| /* save until reenter driver code */ |
| yystate = yy_state; |
| yyps = yy_ps; |
| yypv = yy_pv; |
| } |
| /* |
| ** code supplied by user is placed in this switch |
| */ |
| switch( yytmp ) |
| { |
| |
| case 1: |
| # line 81 "perly.y" |
| { |
| #if defined(YYDEBUG) && defined(DEBUGGING) |
| yydebug = (debug & 1); |
| #endif |
| } break; |
| case 2: |
| # line 87 "perly.y" |
| { if (in_eval) |
| eval_root = block_head(yypvt[-0].cmdval); |
| else |
| main_root = block_head(yypvt[-0].cmdval); } break; |
| case 3: |
| # line 94 "perly.y" |
| { yyval.compval.comp_true = yypvt[-2].cmdval; yyval.compval.comp_alt = yypvt[-0].cmdval; } break; |
| case 4: |
| # line 96 "perly.y" |
| { yyval.compval.comp_true = yypvt[-1].cmdval; yyval.compval.comp_alt = yypvt[-0].cmdval; } break; |
| case 5: |
| # line 100 "perly.y" |
| { yyval.cmdval = Nullcmd; } break; |
| case 6: |
| # line 102 "perly.y" |
| { yyval.cmdval = yypvt[-0].cmdval; } break; |
| case 7: |
| # line 104 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| yyval.cmdval = make_ccmd(C_ELSIF,yypvt[-2].arg,yypvt[-0].compval); } break; |
| case 8: |
| # line 109 "perly.y" |
| { yyval.cmdval = block_head(yypvt[-1].cmdval); |
| if (savestack->ary_fill > yypvt[-2].ival) |
| restorelist(yypvt[-2].ival); } break; |
| case 9: |
| # line 115 "perly.y" |
| { yyval.ival = savestack->ary_fill; } break; |
| case 10: |
| # line 119 "perly.y" |
| { yyval.cmdval = Nullcmd; } break; |
| case 11: |
| # line 121 "perly.y" |
| { yyval.cmdval = append_line(yypvt[-1].cmdval,yypvt[-0].cmdval); } break; |
| case 12: |
| # line 125 "perly.y" |
| { yyval.cmdval = Nullcmd; } break; |
| case 13: |
| # line 127 "perly.y" |
| { yyval.cmdval = add_label(yypvt[-1].cval,yypvt[-0].cmdval); } break; |
| case 15: |
| # line 130 "perly.y" |
| { if (yypvt[-1].cval != Nullch) { |
| yyval.cmdval = add_label(yypvt[-1].cval, make_acmd(C_EXPR, Nullstab, |
| Nullarg, Nullarg) ); |
| } |
| else { |
| yyval.cmdval = Nullcmd; |
| cmdline = NOLINE; |
| } } break; |
| case 16: |
| # line 139 "perly.y" |
| { yyval.cmdval = add_label(yypvt[-2].cval,yypvt[-1].cmdval); } break; |
| case 17: |
| # line 143 "perly.y" |
| { yyval.cmdval = Nullcmd; } break; |
| case 18: |
| # line 145 "perly.y" |
| { yyval.cmdval = make_acmd(C_EXPR, Nullstab, yypvt[-0].arg, Nullarg); } break; |
| case 19: |
| # line 147 "perly.y" |
| { yyval.cmdval = addcond( |
| make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg), yypvt[-0].arg); } break; |
| case 20: |
| # line 150 "perly.y" |
| { yyval.cmdval = addcond(invert( |
| make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg)), yypvt[-0].arg); } break; |
| case 21: |
| # line 153 "perly.y" |
| { yyval.cmdval = addloop( |
| make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg), yypvt[-0].arg); } break; |
| case 22: |
| # line 156 "perly.y" |
| { yyval.cmdval = addloop(invert( |
| make_acmd(C_EXPR, Nullstab, Nullarg, yypvt[-2].arg)), yypvt[-0].arg); } break; |
| case 23: |
| # line 161 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| yyval.cmdval = make_icmd(C_IF,yypvt[-2].arg,yypvt[-0].compval); } break; |
| case 24: |
| # line 164 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| yyval.cmdval = invert(make_icmd(C_IF,yypvt[-2].arg,yypvt[-0].compval)); } break; |
| case 25: |
| # line 167 "perly.y" |
| { cmdline = yypvt[-2].ival; |
| yyval.cmdval = make_ccmd(C_IF,cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval); } break; |
| case 26: |
| # line 170 "perly.y" |
| { cmdline = yypvt[-2].ival; |
| yyval.cmdval = invert(make_ccmd(C_IF,cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval)); } break; |
| case 27: |
| # line 175 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| yyval.cmdval = wopt(add_label(yypvt[-5].cval, |
| make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) )); } break; |
| case 28: |
| # line 179 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| yyval.cmdval = wopt(add_label(yypvt[-5].cval, |
| invert(make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval)) )); } break; |
| case 29: |
| # line 183 "perly.y" |
| { cmdline = yypvt[-2].ival; |
| yyval.cmdval = wopt(add_label(yypvt[-3].cval, |
| make_ccmd(C_WHILE, cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval) )); } break; |
| case 30: |
| # line 187 "perly.y" |
| { cmdline = yypvt[-2].ival; |
| yyval.cmdval = wopt(add_label(yypvt[-3].cval, |
| invert(make_ccmd(C_WHILE, cmd_to_arg(yypvt[-1].cmdval),yypvt[-0].compval)) )); } break; |
| case 31: |
| # line 191 "perly.y" |
| { cmdline = yypvt[-5].ival; |
| /* |
| * The following gobbledygook catches EXPRs that |
| * aren't explicit array refs and translates |
| * foreach VAR (EXPR) { |
| * into |
| * @ary = EXPR; |
| * foreach VAR (@ary) { |
| * where @ary is a hidden array made by genstab(). |
| * (Note that @ary may become a local array if |
| * it is determined that it might be called |
| * recursively. See cmd_tosave().) |
| */ |
| if (yypvt[-2].arg->arg_type != O_ARRAY) { |
| scrstab = aadd(genstab()); |
| yyval.cmdval = append_line( |
| make_acmd(C_EXPR, Nullstab, |
| l(make_op(O_ASSIGN,2, |
| listish(make_op(O_ARRAY, 1, |
| stab2arg(A_STAB,scrstab), |
| Nullarg,Nullarg )), |
| listish(make_list(yypvt[-2].arg)), |
| Nullarg)), |
| Nullarg), |
| wopt(over(yypvt[-4].stabval,add_label(yypvt[-6].cval, |
| make_ccmd(C_WHILE, |
| make_op(O_ARRAY, 1, |
| stab2arg(A_STAB,scrstab), |
| Nullarg,Nullarg ), |
| yypvt[-0].compval))))); |
| yyval.cmdval->c_line = yypvt[-5].ival; |
| yyval.cmdval->c_head->c_line = yypvt[-5].ival; |
| } |
| else { |
| yyval.cmdval = wopt(over(yypvt[-4].stabval,add_label(yypvt[-6].cval, |
| make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) ))); |
| } |
| } break; |
| case 32: |
| # line 230 "perly.y" |
| { cmdline = yypvt[-4].ival; |
| if (yypvt[-2].arg->arg_type != O_ARRAY) { |
| scrstab = aadd(genstab()); |
| yyval.cmdval = append_line( |
| make_acmd(C_EXPR, Nullstab, |
| l(make_op(O_ASSIGN,2, |
| listish(make_op(O_ARRAY, 1, |
| stab2arg(A_STAB,scrstab), |
| Nullarg,Nullarg )), |
| listish(make_list(yypvt[-2].arg)), |
| Nullarg)), |
| Nullarg), |
| wopt(over(defstab,add_label(yypvt[-5].cval, |
| make_ccmd(C_WHILE, |
| make_op(O_ARRAY, 1, |
| stab2arg(A_STAB,scrstab), |
| Nullarg,Nullarg ), |
| yypvt[-0].compval))))); |
| yyval.cmdval->c_line = yypvt[-4].ival; |
| yyval.cmdval->c_head->c_line = yypvt[-4].ival; |
| } |
| else { /* lisp, anyone? */ |
| yyval.cmdval = wopt(over(defstab,add_label(yypvt[-5].cval, |
| make_ccmd(C_WHILE,yypvt[-2].arg,yypvt[-0].compval) ))); |
| } |
| } break; |
| case 33: |
| # line 258 "perly.y" |
| { yyval.compval.comp_true = yypvt[-0].cmdval; |
| yyval.compval.comp_alt = yypvt[-2].cmdval; |
| cmdline = yypvt[-8].ival; |
| yyval.cmdval = append_line(yypvt[-6].cmdval,wopt(add_label(yypvt[-9].cval, |
| make_ccmd(C_WHILE,yypvt[-4].arg,yyval.compval) ))); } break; |
| case 34: |
| # line 264 "perly.y" |
| { yyval.cmdval = add_label(yypvt[-1].cval,make_ccmd(C_BLOCK,Nullarg,yypvt[-0].compval)); } break; |
| case 35: |
| # line 268 "perly.y" |
| { yyval.cmdval = Nullcmd; } break; |
| case 37: |
| # line 273 "perly.y" |
| { (void)scanstr("1"); yyval.arg = yylval.arg; } break; |
| case 39: |
| # line 278 "perly.y" |
| { yyval.cval = Nullch; } break; |
| case 41: |
| # line 283 "perly.y" |
| { yyval.ival = 0; } break; |
| case 42: |
| # line 285 "perly.y" |
| { yyval.ival = 0; } break; |
| case 43: |
| # line 287 "perly.y" |
| { yyval.ival = 0; } break; |
| case 44: |
| # line 291 "perly.y" |
| { if (strEQ(yypvt[-2].cval,"stdout")) |
| make_form(stabent("STDOUT",TRUE),yypvt[-0].formval); |
| else if (strEQ(yypvt[-2].cval,"stderr")) |
| make_form(stabent("STDERR",TRUE),yypvt[-0].formval); |
| else |
| make_form(stabent(yypvt[-2].cval,TRUE),yypvt[-0].formval); |
| Safefree(yypvt[-2].cval); yypvt[-2].cval = Nullch; } break; |
| case 45: |
| # line 299 "perly.y" |
| { make_form(stabent("STDOUT",TRUE),yypvt[-0].formval); } break; |
| case 46: |
| # line 303 "perly.y" |
| { make_sub(yypvt[-1].cval,yypvt[-0].cmdval); } break; |
| case 47: |
| # line 307 "perly.y" |
| { char tmpbuf[256]; |
| STAB *tmpstab; |
| |
| savehptr(&curstash); |
| saveitem(curstname); |
| str_set(curstname,yypvt[-1].cval); |
| sprintf(tmpbuf,"'_%s",yypvt[-1].cval); |
| tmpstab = stabent(tmpbuf,TRUE); |
| if (!stab_xhash(tmpstab)) |
| stab_xhash(tmpstab) = hnew(0); |
| curstash = stab_xhash(tmpstab); |
| if (!curstash->tbl_name) |
| curstash->tbl_name = savestr(yypvt[-1].cval); |
| curstash->tbl_coeffsize = 0; |
| Safefree(yypvt[-1].cval); yypvt[-1].cval = Nullch; |
| cmdline = NOLINE; |
| } break; |
| case 48: |
| # line 327 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 49: |
| # line 331 "perly.y" |
| { yyval.arg = make_op(O_COMMA, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 51: |
| # line 336 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 52: |
| # line 340 "perly.y" |
| { yypvt[-2].arg = listish(yypvt[-2].arg); |
| if (yypvt[-2].arg->arg_type == O_ASSIGN && yypvt[-2].arg->arg_len == 1) |
| yypvt[-2].arg->arg_type = O_ITEM; /* a local() */ |
| if (yypvt[-2].arg->arg_type == O_LIST) |
| yypvt[-0].arg = listish(yypvt[-0].arg); |
| yyval.arg = l(make_op(O_ASSIGN, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 53: |
| # line 347 "perly.y" |
| { yyval.arg = l(make_op(O_POW, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 54: |
| # line 349 "perly.y" |
| { yyval.arg = l(make_op(yypvt[-2].ival, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 55: |
| # line 351 "perly.y" |
| { yyval.arg = rcatmaybe(l(make_op(yypvt[-2].ival, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)));} break; |
| case 56: |
| # line 353 "perly.y" |
| { yyval.arg = l(make_op(O_LEFT_SHIFT, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 57: |
| # line 355 "perly.y" |
| { yyval.arg = l(make_op(O_RIGHT_SHIFT, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 58: |
| # line 357 "perly.y" |
| { yyval.arg = l(make_op(O_BIT_AND, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 59: |
| # line 359 "perly.y" |
| { yyval.arg = l(make_op(O_XOR, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 60: |
| # line 361 "perly.y" |
| { yyval.arg = l(make_op(O_BIT_OR, 2, yypvt[-3].arg, yypvt[-0].arg, Nullarg)); } break; |
| case 61: |
| # line 365 "perly.y" |
| { yyval.arg = make_op(O_POW, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 62: |
| # line 367 "perly.y" |
| { if (yypvt[-1].ival == O_REPEAT) |
| yypvt[-2].arg = listish(yypvt[-2].arg); |
| yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); |
| if (yypvt[-1].ival == O_REPEAT) { |
| if (yyval.arg[1].arg_type != A_EXPR || |
| yyval.arg[1].arg_ptr.arg_arg->arg_type != O_LIST) |
| yyval.arg[1].arg_flags &= ~AF_ARYOK; |
| } } break; |
| case 63: |
| # line 376 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 64: |
| # line 378 "perly.y" |
| { yyval.arg = make_op(O_LEFT_SHIFT, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 65: |
| # line 380 "perly.y" |
| { yyval.arg = make_op(O_RIGHT_SHIFT, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 66: |
| # line 382 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 67: |
| # line 384 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 68: |
| # line 386 "perly.y" |
| { yyval.arg = make_op(O_BIT_AND, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 69: |
| # line 388 "perly.y" |
| { yyval.arg = make_op(O_XOR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 70: |
| # line 390 "perly.y" |
| { yyval.arg = make_op(O_BIT_OR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 71: |
| # line 392 "perly.y" |
| { arg4 = Nullarg; |
| yyval.arg = make_op(O_F_OR_R, 4, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 72: |
| # line 395 "perly.y" |
| { yyval.arg = make_op(O_AND, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 73: |
| # line 397 "perly.y" |
| { yyval.arg = make_op(O_OR, 2, yypvt[-2].arg, yypvt[-0].arg, Nullarg); } break; |
| case 74: |
| # line 399 "perly.y" |
| { yyval.arg = make_op(O_COND_EXPR, 3, yypvt[-4].arg, yypvt[-2].arg, yypvt[-0].arg); } break; |
| case 75: |
| # line 401 "perly.y" |
| { yyval.arg = mod_match(O_MATCH, yypvt[-2].arg, yypvt[-0].arg); } break; |
| case 76: |
| # line 403 "perly.y" |
| { yyval.arg = mod_match(O_NMATCH, yypvt[-2].arg, yypvt[-0].arg); } break; |
| case 77: |
| # line 405 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 78: |
| # line 409 "perly.y" |
| { yyval.arg = make_op(O_NEGATE, 1, yypvt[-0].arg, Nullarg, Nullarg); } break; |
| case 79: |
| # line 411 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 80: |
| # line 413 "perly.y" |
| { yyval.arg = make_op(O_NOT, 1, yypvt[-0].arg, Nullarg, Nullarg); } break; |
| case 81: |
| # line 415 "perly.y" |
| { yyval.arg = make_op(O_COMPLEMENT, 1, yypvt[-0].arg, Nullarg, Nullarg);} break; |
| case 82: |
| # line 417 "perly.y" |
| { yyval.arg = addflags(1, AF_POST|AF_UP, |
| l(make_op(O_ITEM,1,yypvt[-1].arg,Nullarg,Nullarg))); } break; |
| case 83: |
| # line 420 "perly.y" |
| { yyval.arg = addflags(1, AF_POST, |
| l(make_op(O_ITEM,1,yypvt[-1].arg,Nullarg,Nullarg))); } break; |
| case 84: |
| # line 423 "perly.y" |
| { yyval.arg = addflags(1, AF_PRE|AF_UP, |
| l(make_op(O_ITEM,1,yypvt[-0].arg,Nullarg,Nullarg))); } break; |
| case 85: |
| # line 426 "perly.y" |
| { yyval.arg = addflags(1, AF_PRE, |
| l(make_op(O_ITEM,1,yypvt[-0].arg,Nullarg,Nullarg))); } break; |
| case 86: |
| # line 429 "perly.y" |
| { opargs[yypvt[-1].ival] = 0; /* force it special */ |
| yyval.arg = make_op(yypvt[-1].ival, 1, |
| stab2arg(A_STAB,stabent(yypvt[-0].cval,TRUE)), |
| Nullarg, Nullarg); |
| } break; |
| case 87: |
| # line 435 "perly.y" |
| { opargs[yypvt[-1].ival] = 1; |
| yyval.arg = make_op(yypvt[-1].ival, 1, yypvt[-0].arg, Nullarg, Nullarg); } break; |
| case 88: |
| # line 438 "perly.y" |
| { opargs[yypvt[-0].ival] = (yypvt[-0].ival != O_FTTTY); |
| yyval.arg = make_op(yypvt[-0].ival, 1, |
| stab2arg(A_STAB, |
| yypvt[-0].ival == O_FTTTY?stabent("STDIN",TRUE):defstab), |
| Nullarg, Nullarg); } break; |
| case 89: |
| # line 444 "perly.y" |
| { yyval.arg = l(localize(make_op(O_ASSIGN, 1, |
| localize(listish(make_list(yypvt[-1].arg))), |
| Nullarg,Nullarg))); } break; |
| case 90: |
| # line 448 "perly.y" |
| { yyval.arg = make_list(yypvt[-2].arg); } break; |
| case 91: |
| # line 450 "perly.y" |
| { yyval.arg = make_list(yypvt[-1].arg); } break; |
| case 92: |
| # line 452 "perly.y" |
| { yyval.arg = make_list(Nullarg); } break; |
| case 93: |
| # line 454 "perly.y" |
| { yyval.arg = make_op(O_DOFILE,2,yypvt[-0].arg,Nullarg,Nullarg); |
| allstabs = TRUE;} break; |
| case 94: |
| # line 457 "perly.y" |
| { yyval.arg = cmd_to_arg(yypvt[-0].cmdval); } break; |
| case 95: |
| # line 459 "perly.y" |
| { yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break; |
| case 96: |
| # line 461 "perly.y" |
| { yyval.arg = stab2arg(A_STAR,yypvt[-0].stabval); } break; |
| case 97: |
| # line 463 "perly.y" |
| { yyval.arg = make_op(O_AELEM, 2, |
| stab2arg(A_STAB,aadd(yypvt[-3].stabval)), yypvt[-1].arg, Nullarg); } break; |
| case 98: |
| # line 466 "perly.y" |
| { yyval.arg = make_op(O_HASH, 1, |
| stab2arg(A_STAB,yypvt[-0].stabval), |
| Nullarg, Nullarg); } break; |
| case 99: |
| # line 470 "perly.y" |
| { yyval.arg = make_op(O_ARRAY, 1, |
| stab2arg(A_STAB,yypvt[-0].stabval), |
| Nullarg, Nullarg); } break; |
| case 100: |
| # line 474 "perly.y" |
| { yyval.arg = make_op(O_HELEM, 2, |
| stab2arg(A_STAB,hadd(yypvt[-3].stabval)), |
| jmaybe(yypvt[-1].arg), |
| Nullarg); } break; |
| case 101: |
| # line 479 "perly.y" |
| { yyval.arg = make_op(O_LSLICE, 3, |
| Nullarg, |
| listish(make_list(yypvt[-1].arg)), |
| listish(make_list(yypvt[-4].arg))); } break; |
| case 102: |
| # line 484 "perly.y" |
| { yyval.arg = make_op(O_LSLICE, 3, |
| Nullarg, |
| listish(make_list(yypvt[-1].arg)), |
| Nullarg); } break; |
| case 103: |
| # line 489 "perly.y" |
| { yyval.arg = make_op(O_ASLICE, 2, |
| stab2arg(A_STAB,aadd(yypvt[-3].stabval)), |
| listish(make_list(yypvt[-1].arg)), |
| Nullarg); } break; |
| case 104: |
| # line 494 "perly.y" |
| { yyval.arg = make_op(O_HSLICE, 2, |
| stab2arg(A_STAB,hadd(yypvt[-3].stabval)), |
| listish(make_list(yypvt[-1].arg)), |
| Nullarg); } break; |
| case 105: |
| # line 499 "perly.y" |
| { yyval.arg = make_op(O_DELETE, 2, |
| stab2arg(A_STAB,hadd(yypvt[-3].stabval)), |
| jmaybe(yypvt[-1].arg), |
| Nullarg); } break; |
| case 106: |
| # line 504 "perly.y" |
| { yyval.arg = stab2arg(A_ARYLEN,yypvt[-0].stabval); } break; |
| case 107: |
| # line 506 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 108: |
| # line 508 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 109: |
| # line 510 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 110: |
| # line 512 "perly.y" |
| { yyval.arg = yypvt[-0].arg; } break; |
| case 111: |
| # line 514 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_WORD,stabent(yypvt[-3].cval,TRUE)), |
| make_list(yypvt[-1].arg), |
| Nullarg); Safefree(yypvt[-3].cval); yypvt[-3].cval = Nullch; |
| yyval.arg->arg_flags |= AF_DEPR; } break; |
| case 112: |
| # line 520 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_WORD,stabent(yypvt[-3].cval,TRUE)), |
| make_list(yypvt[-1].arg), |
| Nullarg); Safefree(yypvt[-3].cval); yypvt[-3].cval = Nullch; } break; |
| case 113: |
| # line 525 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_WORD,stabent(yypvt[-2].cval,TRUE)), |
| make_list(Nullarg), |
| Nullarg); |
| yyval.arg->arg_flags |= AF_DEPR; } break; |
| case 114: |
| # line 531 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_WORD,stabent(yypvt[-2].cval,TRUE)), |
| make_list(Nullarg), |
| Nullarg); } break; |
| case 115: |
| # line 536 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)), |
| Nullarg, |
| Nullarg); } break; |
| case 116: |
| # line 541 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_STAB,yypvt[-3].stabval), |
| make_list(yypvt[-1].arg), |
| Nullarg); |
| yyval.arg->arg_flags |= AF_DEPR; } break; |
| case 117: |
| # line 547 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_STAB,yypvt[-3].stabval), |
| make_list(yypvt[-1].arg), |
| Nullarg); } break; |
| case 118: |
| # line 552 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_STAB,yypvt[-2].stabval), |
| make_list(Nullarg), |
| Nullarg); |
| yyval.arg->arg_flags |= AF_DEPR; } break; |
| case 119: |
| # line 558 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_STAB,yypvt[-2].stabval), |
| make_list(Nullarg), |
| Nullarg); } break; |
| case 120: |
| # line 563 "perly.y" |
| { yyval.arg = make_op((perldb ? O_DBSUBR : O_SUBR), 2, |
| stab2arg(A_STAB,yypvt[-0].stabval), |
| Nullarg, |
| Nullarg); } break; |
| case 121: |
| # line 568 "perly.y" |
| { yyval.arg = make_op(yypvt[-0].ival,0,Nullarg,Nullarg,Nullarg); } break; |
| case 122: |
| # line 570 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival,1,cval_to_arg(yypvt[-0].cval), |
| Nullarg,Nullarg); } break; |
| case 123: |
| # line 573 "perly.y" |
| { yyval.arg = make_op(yypvt[-0].ival,0,Nullarg,Nullarg,Nullarg); } break; |
| case 124: |
| # line 575 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival,1,yypvt[-0].arg,Nullarg,Nullarg); } break; |
| case 125: |
| # line 577 "perly.y" |
| { yyval.arg = make_op(O_SELECT, 0, Nullarg, Nullarg, Nullarg);} break; |
| case 126: |
| # line 579 "perly.y" |
| { yyval.arg = make_op(O_SELECT, 1, yypvt[-1].arg, Nullarg, Nullarg); } break; |
| case 127: |
| # line 581 "perly.y" |
| { arg4 = yypvt[-1].arg; |
| yyval.arg = make_op(O_SSELECT, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break; |
| case 128: |
| # line 584 "perly.y" |
| { yyval.arg = make_op(O_OPEN, 2, |
| stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)), |
| stab2arg(A_STAB,stabent(yypvt[-0].cval,TRUE)), |
| Nullarg); } break; |
| case 129: |
| # line 589 "perly.y" |
| { yyval.arg = make_op(O_OPEN, 2, |
| stab2arg(A_WORD,stabent(yypvt[-1].cval,TRUE)), |
| stab2arg(A_STAB,stabent(yypvt[-1].cval,TRUE)), |
| Nullarg); } break; |
| case 130: |
| # line 594 "perly.y" |
| { yyval.arg = make_op(O_OPEN, 2, |
| yypvt[-2].arg, |
| yypvt[-1].arg, Nullarg); } break; |
| case 131: |
| # line 598 "perly.y" |
| { yyval.arg = make_op(yypvt[-3].ival, 1, |
| yypvt[-1].arg, |
| Nullarg, Nullarg); } break; |
| case 132: |
| # line 602 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 1, |
| stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)), |
| Nullarg, Nullarg); |
| Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break; |
| case 133: |
| # line 607 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 1, |
| stab2arg(A_STAB,yypvt[-0].stabval), |
| Nullarg, Nullarg); } break; |
| case 134: |
| # line 611 "perly.y" |
| { yyval.arg = make_op(yypvt[-2].ival, 1, |
| stab2arg(A_WORD,Nullstab), |
| Nullarg, Nullarg); } break; |
| case 135: |
| # line 615 "perly.y" |
| { yyval.arg = make_op(yypvt[-0].ival, 0, |
| Nullarg, Nullarg, Nullarg); } break; |
| case 136: |
| # line 618 "perly.y" |
| { yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg); } break; |
| case 137: |
| # line 620 "perly.y" |
| { yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, make_list(yypvt[-1].arg)); } break; |
| case 138: |
| # line 622 "perly.y" |
| { yyval.arg = make_op(yypvt[-5].ival, 2, yypvt[-3].arg, yypvt[-1].arg, Nullarg); } break; |
| case 139: |
| # line 624 "perly.y" |
| { arg4 = yypvt[-1].arg; yyval.arg = make_op(yypvt[-6].ival, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break; |
| case 140: |
| # line 626 "perly.y" |
| { arg4 = yypvt[-2].arg; arg5 = yypvt[-1].arg; |
| yyval.arg = make_op(yypvt[-8].ival, 5, yypvt[-6].arg, yypvt[-4].arg, yypvt[-3].arg); } break; |
| case 141: |
| # line 629 "perly.y" |
| { yyval.arg = make_op(yypvt[-4].ival, 2, |
| yypvt[-2].arg, |
| make_list(yypvt[-1].arg), |
| Nullarg); } break; |
| case 142: |
| # line 634 "perly.y" |
| { yyval.arg = make_op(O_POP, 1, yypvt[-0].arg, Nullarg, Nullarg); } break; |
| case 143: |
| # line 636 "perly.y" |
| { yyval.arg = make_op(O_POP, 1, yypvt[-1].arg, Nullarg, Nullarg); } break; |
| case 144: |
| # line 638 "perly.y" |
| { yyval.arg = make_op(O_SHIFT, 1, yypvt[-0].arg, Nullarg, Nullarg); } break; |
| case 145: |
| # line 640 "perly.y" |
| { yyval.arg = make_op(O_SHIFT, 1, yypvt[-1].arg, Nullarg, Nullarg); } break; |
| case 146: |
| # line 642 "perly.y" |
| { yyval.arg = make_op(O_SHIFT, 1, |
| stab2arg(A_STAB, |
| aadd(stabent(subline ? "_" : "ARGV", TRUE))), |
| Nullarg, Nullarg); } break; |
| case 147: |
| # line 647 "perly.y" |
| { static char p[]="/\\s+/"; |
| char *oldend = bufend; |
| ARG *oldarg = yylval.arg; |
| |
| bufend=p+5; |
| (void)scanpat(p); |
| bufend=oldend; |
| yyval.arg = make_split(defstab,yylval.arg,Nullarg); |
| yylval.arg = oldarg; } break; |
| case 148: |
| # line 657 "perly.y" |
| { yyval.arg = mod_match(O_MATCH, yypvt[-2].arg, |
| make_split(defstab,yypvt[-3].arg,yypvt[-1].arg));} break; |
| case 149: |
| # line 660 "perly.y" |
| { yyval.arg = mod_match(O_MATCH, yypvt[-1].arg, |
| make_split(defstab,yypvt[-2].arg,Nullarg) ); } break; |
| case 150: |
| # line 663 "perly.y" |
| { yyval.arg = mod_match(O_MATCH, |
| stab2arg(A_STAB,defstab), |
| make_split(defstab,yypvt[-1].arg,Nullarg) ); } break; |
| case 151: |
| # line 667 "perly.y" |
| { yyval.arg = make_op(yypvt[-4].ival, 2, |
| yypvt[-2].arg, |
| listish(make_list(yypvt[-1].arg)), |
| Nullarg); } break; |
| case 152: |
| # line 672 "perly.y" |
| { yyval.arg = make_op(yypvt[-3].ival, 1, |
| make_list(yypvt[-1].arg), |
| Nullarg, |
| Nullarg); } break; |
| case 153: |
| # line 677 "perly.y" |
| { yyval.arg = l(make_op(yypvt[-1].ival, 1, fixl(yypvt[-1].ival,yypvt[-0].arg), |
| Nullarg, Nullarg)); } break; |
| case 154: |
| # line 680 "perly.y" |
| { yyval.arg = l(make_op(yypvt[-0].ival, 1, |
| stab2arg(A_STAB,defstab), |
| Nullarg, Nullarg)); } break; |
| case 155: |
| # line 684 "perly.y" |
| { yyval.arg = make_op(yypvt[-0].ival, 0, Nullarg, Nullarg, Nullarg); } break; |
| case 156: |
| # line 686 "perly.y" |
| { yyval.arg = make_op(yypvt[-2].ival, 0, Nullarg, Nullarg, Nullarg); } break; |
| case 157: |
| # line 688 "perly.y" |
| { yyval.arg = make_op(yypvt[-2].ival, 0, Nullarg, Nullarg, Nullarg); } break; |
| case 158: |
| # line 690 "perly.y" |
| { yyval.arg = make_op(yypvt[-3].ival, 1, yypvt[-1].arg, Nullarg, Nullarg); } break; |
| case 159: |
| # line 692 "perly.y" |
| { yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg); |
| if (yypvt[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE) |
| fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break; |
| case 160: |
| # line 696 "perly.y" |
| { yyval.arg = make_op(yypvt[-4].ival, 2, yypvt[-2].arg, yypvt[-1].arg, Nullarg); |
| if (yypvt[-4].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE) |
| fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break; |
| case 161: |
| # line 700 "perly.y" |
| { yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); |
| if (yypvt[-5].ival == O_INDEX && yyval.arg[2].arg_type == A_SINGLE) |
| fbmcompile(yyval.arg[2].arg_ptr.arg_str,0); } break; |
| case 162: |
| # line 704 "perly.y" |
| { yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } break; |
| case 163: |
| # line 706 "perly.y" |
| { arg4 = yypvt[-1].arg; |
| yyval.arg = make_op(yypvt[-6].ival, 4, yypvt[-4].arg, yypvt[-3].arg, yypvt[-2].arg); } break; |
| case 164: |
| # line 709 "perly.y" |
| { arg4 = yypvt[-2].arg; arg5 = yypvt[-1].arg; |
| yyval.arg = make_op(yypvt[-7].ival, 5, yypvt[-5].arg, yypvt[-4].arg, yypvt[-3].arg); } break; |
| case 165: |
| # line 712 "perly.y" |
| { yyval.arg = make_op(yypvt[-3].ival, 1, |
| yypvt[-1].arg, |
| Nullarg, |
| Nullarg); } break; |
| case 166: |
| # line 717 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival, 1, |
| yypvt[-0].arg, |
| Nullarg, |
| Nullarg); } break; |
| case 167: |
| # line 722 "perly.y" |
| { yyval.arg = make_op(yypvt[-5].ival, 3, yypvt[-3].arg, yypvt[-2].arg, yypvt[-1].arg); } break; |
| case 170: |
| # line 728 "perly.y" |
| { yyval.arg = make_op(yypvt[-0].ival,2, |
| stab2arg(A_WORD,Nullstab), |
| stab2arg(A_STAB,defstab), |
| Nullarg); } break; |
| case 171: |
| # line 733 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival,2, |
| stab2arg(A_WORD,Nullstab), |
| maybelistish(yypvt[-1].ival,make_list(yypvt[-0].arg)), |
| Nullarg); } break; |
| case 172: |
| # line 738 "perly.y" |
| { yyval.arg = make_op(yypvt[-1].ival,2, |
| stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)), |
| stab2arg(A_STAB,defstab), |
| Nullarg); } break; |
| case 173: |
| # line 743 "perly.y" |
| { yyval.arg = make_op(yypvt[-2].ival,2, |
| stab2arg(A_WORD,stabent(yypvt[-1].cval,TRUE)), |
| maybelistish(yypvt[-2].ival,make_list(yypvt[-0].arg)), |
| Nullarg); Safefree(yypvt[-1].cval); yypvt[-1].cval = Nullch; } break; |
| case 174: |
| # line 748 "perly.y" |
| { yyval.arg = make_op(yypvt[-2].ival,2, |
| stab2arg(A_STAB,yypvt[-1].stabval), |
| maybelistish(yypvt[-2].ival,make_list(yypvt[-0].arg)), |
| Nullarg); } break; |
| case 175: |
| # line 755 "perly.y" |
| { yyval.arg = stab2arg(A_WORD,stabent(yypvt[-0].cval,TRUE)); |
| Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch;} break; |
| case 177: |
| # line 761 "perly.y" |
| { yyval.arg = stab2arg(A_WORD,aadd(stabent(yypvt[-0].cval,TRUE))); |
| Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break; |
| case 178: |
| # line 764 "perly.y" |
| { yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break; |
| case 179: |
| # line 768 "perly.y" |
| { yyval.arg = stab2arg(A_WORD,hadd(stabent(yypvt[-0].cval,TRUE))); |
| Safefree(yypvt[-0].cval); yypvt[-0].cval = Nullch; } break; |
| case 180: |
| # line 771 "perly.y" |
| { yyval.arg = stab2arg(A_STAB,yypvt[-0].stabval); } break; |
| case 181: |
| # line 780 "perly.y" |
| { char *s; |
| yyval.arg = op_new(1); |
| yyval.arg->arg_type = O_ITEM; |
| yyval.arg[1].arg_type = A_SINGLE; |
| yyval.arg[1].arg_ptr.arg_str = str_make(yypvt[-0].cval,0); |
| for (s = yypvt[-0].cval; *s && islower(*s); s++) ; |
| if (dowarn && !*s) |
| warn( |
| "\"%s\" may clash with future reserved word", |
| yypvt[-0].cval ); |
| } break; |
| } |
| goto yystack; /* reset registers in driver code */ |
| } |