blob: f214b6c3069fbf4853cb85d43c784a4735d02d69 [file] [log] [blame]
#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 */
}