xref: /plan9/sys/src/cmd/awk/awkgram.c (revision f591d9710fae2220cec09da2812fd6db952f1a27)
1 
2 #line	26	"/sys/src/cmd/awk/awkgram.y"
3 #include <stdio.h>
4 #include <string.h>
5 #include "awk.h"
6 
7 #define	makedfa(a,b)	compre(a)
8 
9 void checkdup(Node *list, Cell *item);
yywrap(void)10 int yywrap(void) { return(1); }
11 
12 Node	*beginloc = 0;
13 Node	*endloc = 0;
14 int	infunc	= 0;	/* = 1 if in arglist or body of func */
15 int	inloop	= 0;	/* = 1 if in while, for, do */
16 char	*curfname = 0;	/* current function name */
17 Node	*arglist = 0;	/* list of args for current function */
18 
19 #line	43	"/sys/src/cmd/awk/awkgram.y"
20 typedef union  {
21 	Node	*p;
22 	Cell	*cp;
23 	int	i;
24 	char	*s;
25 } YYSTYPE;
26 extern	int	yyerrflag;
27 #ifndef	YYMAXDEPTH
28 #define	YYMAXDEPTH	150
29 #endif
30 YYSTYPE	yylval;
31 YYSTYPE	yyval;
32 #define	FIRSTTOKEN	57346
33 #define	PROGRAM	57347
34 #define	PASTAT	57348
35 #define	PASTAT2	57349
36 #define	XBEGIN	57350
37 #define	XEND	57351
38 #define	NL	57352
39 #define	ARRAY	57353
40 #define	MATCH	57354
41 #define	NOTMATCH	57355
42 #define	MATCHOP	57356
43 #define	FINAL	57357
44 #define	DOT	57358
45 #define	ALL	57359
46 #define	CCL	57360
47 #define	NCCL	57361
48 #define	CHAR	57362
49 #define	OR	57363
50 #define	STAR	57364
51 #define	QUEST	57365
52 #define	PLUS	57366
53 #define	AND	57367
54 #define	BOR	57368
55 #define	APPEND	57369
56 #define	EQ	57370
57 #define	GE	57371
58 #define	GT	57372
59 #define	LE	57373
60 #define	LT	57374
61 #define	NE	57375
62 #define	IN	57376
63 #define	ARG	57377
64 #define	BLTIN	57378
65 #define	BREAK	57379
66 #define	CLOSE	57380
67 #define	CONTINUE	57381
68 #define	DELETE	57382
69 #define	DO	57383
70 #define	EXIT	57384
71 #define	FOR	57385
72 #define	FUNC	57386
73 #define	SUB	57387
74 #define	GSUB	57388
75 #define	IF	57389
76 #define	INDEX	57390
77 #define	LSUBSTR	57391
78 #define	MATCHFCN	57392
79 #define	NEXT	57393
80 #define	NEXTFILE	57394
81 #define	ADD	57395
82 #define	MINUS	57396
83 #define	MULT	57397
84 #define	DIVIDE	57398
85 #define	MOD	57399
86 #define	ASSIGN	57400
87 #define	ASGNOP	57401
88 #define	ADDEQ	57402
89 #define	SUBEQ	57403
90 #define	MULTEQ	57404
91 #define	DIVEQ	57405
92 #define	MODEQ	57406
93 #define	POWEQ	57407
94 #define	PRINT	57408
95 #define	PRINTF	57409
96 #define	SPRINTF	57410
97 #define	ELSE	57411
98 #define	INTEST	57412
99 #define	CONDEXPR	57413
100 #define	POSTINCR	57414
101 #define	PREINCR	57415
102 #define	POSTDECR	57416
103 #define	PREDECR	57417
104 #define	VAR	57418
105 #define	IVAR	57419
106 #define	VARNF	57420
107 #define	CALL	57421
108 #define	NUMBER	57422
109 #define	STRING	57423
110 #define	REGEXPR	57424
111 #define	GETLINE	57425
112 #define	RETURN	57426
113 #define	SPLIT	57427
114 #define	SUBSTR	57428
115 #define	WHILE	57429
116 #define	CAT	57430
117 #define	NOT	57431
118 #define	UMINUS	57432
119 #define	POWER	57433
120 #define	DECR	57434
121 #define	INCR	57435
122 #define	INDIRECT	57436
123 #define	LASTTOKEN	57437
124 #define YYEOFCODE 1
125 #define YYERRCODE 2
126 
127 #line	447	"/sys/src/cmd/awk/awkgram.y"
128 
129 
setfname(Cell * p)130 void setfname(Cell *p)
131 {
132 	if (isarr(p))
133 		SYNTAX("%s is an array, not a function", p->nval);
134 	else if (isfcn(p))
135 		SYNTAX("you can't define function %s more than once", p->nval);
136 	curfname = p->nval;
137 }
138 
constnode(Node * p)139 int constnode(Node *p)
140 {
141 	return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;
142 }
143 
strnode(Node * p)144 char *strnode(Node *p)
145 {
146 	return ((Cell *)(p->narg[0]))->sval;
147 }
148 
notnull(Node * n)149 Node *notnull(Node *n)
150 {
151 	switch (n->nobj) {
152 	case LE: case LT: case EQ: case NE: case GT: case GE:
153 	case BOR: case AND: case NOT:
154 		return n;
155 	default:
156 		return op2(NE, n, nullnode);
157 	}
158 }
159 
checkdup(Node * vl,Cell * cp)160 void checkdup(Node *vl, Cell *cp)	/* check if name already in list */
161 {
162 	char *s = cp->nval;
163 	for ( ; vl; vl = vl->nnext) {
164 		if (strcmp(s, ((Cell *)(vl->narg[0]))->nval) == 0) {
165 			SYNTAX("duplicate argument %s", s);
166 			break;
167 		}
168 	}
169 }
170 short	yyexca[] =
171 {-1, 0,
172 	1, 28,
173 	8, 28,
174 	9, 28,
175 	12, 28,
176 	13, 28,
177 	16, 28,
178 	45, 28,
179 	46, 28,
180 	54, 28,
181 	55, 28,
182 	56, 28,
183 	58, 28,
184 	60, 28,
185 	78, 28,
186 	86, 28,
187 	87, 28,
188 	88, 28,
189 	89, 28,
190 	90, 28,
191 	91, 28,
192 	95, 28,
193 	97, 28,
194 	98, 28,
195 	101, 28,
196 	102, 28,
197 	105, 28,
198 	108, 28,
199 	109, 28,
200 	110, 28,
201 	-2, 0,
202 -1, 1,
203 	1, -1,
204 	-2, 0,
205 -1, 157,
206 	15, 30,
207 	-2, 0,
208 -1, 176,
209 	14, 0,
210 	24, 0,
211 	38, 0,
212 	39, 0,
213 	40, 0,
214 	41, 0,
215 	42, 0,
216 	43, 0,
217 	44, 0,
218 	-2, 63,
219 -1, 177,
220 	14, 0,
221 	24, 0,
222 	38, 0,
223 	39, 0,
224 	40, 0,
225 	41, 0,
226 	42, 0,
227 	43, 0,
228 	44, 0,
229 	-2, 64,
230 -1, 178,
231 	14, 0,
232 	24, 0,
233 	38, 0,
234 	39, 0,
235 	40, 0,
236 	41, 0,
237 	42, 0,
238 	43, 0,
239 	44, 0,
240 	-2, 65,
241 -1, 179,
242 	14, 0,
243 	24, 0,
244 	38, 0,
245 	39, 0,
246 	40, 0,
247 	41, 0,
248 	42, 0,
249 	43, 0,
250 	44, 0,
251 	-2, 66,
252 -1, 180,
253 	14, 0,
254 	24, 0,
255 	38, 0,
256 	39, 0,
257 	40, 0,
258 	41, 0,
259 	42, 0,
260 	43, 0,
261 	44, 0,
262 	-2, 67,
263 -1, 181,
264 	14, 0,
265 	24, 0,
266 	38, 0,
267 	39, 0,
268 	40, 0,
269 	41, 0,
270 	42, 0,
271 	43, 0,
272 	44, 0,
273 	-2, 68,
274 -1, 183,
275 	14, 0,
276 	24, 0,
277 	38, 0,
278 	39, 0,
279 	40, 0,
280 	41, 0,
281 	42, 0,
282 	43, 0,
283 	44, 0,
284 	-2, 70,
285 -1, 290,
286 	24, 0,
287 	44, 0,
288 	-2, 53,
289 -1, 334,
290 	17, 30,
291 	-2, 0,
292 -1, 356,
293 	17, 30,
294 	-2, 0,
295 };
296 #define	YYNPROD	185
297 #define	YYPRIVATE 57344
298 #define	YYLAST	4170
299 short	yyact[] =
300 {
301   17, 278, 254, 137, 244, 229, 102, 200,  53,  66,
302   24, 105,  42, 155, 103, 104, 100, 138, 112, 309,
303   54, 185, 215,  42, 100, 254, 100, 100, 100, 250,
304  224, 121, 122, 123,   9, 107,  82,  42, 315,  83,
305  162, 254, 107, 103, 104, 103, 104, 124, 253, 206,
306   42, 190, 245,  41,  22,  43, 113, 113, 279, 133,
307  317, 142,  10, 146,  41, 353,  43, 149, 150, 152,
308  153, 148, 352, 163, 136, 100,  42,  23,  41,  22,
309   43, 277, 147, 351, 132,  62, 156,  85, 168, 169,
310   11,  41,  22,  43, 322, 321,  50, 190,  79,  80,
311  100, 319,  23,  86, 182, 270, 259, 100, 100, 100,
312  100, 100, 100, 100, 134,  23, 276,  41, 233,  43,
313  108, 109, 110, 111, 332, 100, 112, 203, 205, 110,
314  111, 190, 190, 112, 140,  11, 211, 336, 325, 139,
315  212, 234, 100, 140, 235, 220, 100, 170, 311, 222,
316  190, 167, 100, 219, 136, 227, 279, 156, 190, 158,
317  190, 157, 190, 100, 285, 221, 266, 231, 261, 136,
318  130, 129, 100, 237, 100, 228, 100, 100, 100, 100,
319  100, 100, 100, 128, 100, 190, 252, 100, 100, 136,
320  136, 260, 190,   3, 100,   6, 127, 126, 188,  19,
321    7,   6, 100,  47, 313, 125,   7, 100,  48, 100,
322  100, 100, 120, 119, 100, 100,  51,  16,  16, 190,
323  217, 140, 275, 218, 143, 115, 271, 154, 272,   4,
324  144, 131, 318, 100, 100, 100, 100, 163,  49, 163,
325  163, 163, 163,  20, 274, 163, 348, 100, 294, 362,
326  239, 295, 289, 293, 365,   1, 100, 100,  72,  96,
327   39, 225,   5,  58,  67, 223, 240, 114,  61, 116,
328  117, 118, 164,  60, 301, 302, 249, 283,  81, 286,
329  287, 288, 290,   8, 100, 292, 159, 100, 100, 100,
330  310, 100, 136, 100, 156, 160, 314,   2, 100,   0,
331  100, 100,   0,   0, 100,   0, 100, 100, 100,   0,
332    0,   0,   0,   0, 335,   0, 165, 163,  96,   0,
333    0,   0,   0,   0,   0, 334,   0,   0, 342, 156,
334  343,   0,   0,   0, 100, 341,   0,   0,   0, 100,
335  347, 100,   0, 116, 231, 100, 100,   0, 349, 357,
336   96, 194, 195, 196, 197, 198, 199, 338,   0, 360,
337  356,   0, 361, 363, 156,   0, 231,   0, 207, 358,
338  136, 239,   0,   0, 239, 239, 239,   0, 239,   0,
339  239,   0,   0, 364,   0,  96, 366, 240,   0,  96,
340  240, 240, 240,   0, 240,  96, 240,   0,   0,   0,
341  258,   0,   0,   0, 339,   0, 243,   0,   0,   0,
342    0,   0,   0,   0,   0,  96,   0,  96,  21,  96,
343   96,  96,  96,  96,  96,  96, 239,  96,   0,   0,
344   96,  96,   0,   0,   0,   0, 164, 257, 164, 164,
345  164, 164, 240,   0, 164,  96,   0,   0,   0,   0,
346  262,   0,  96,  96,  96,   0,   0,  96,  96,   0,
347    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
348    0,   0,   0,   0,   0,   0,  96, 280, 281, 282,
349  165,   0, 165, 165, 165, 165,   0,   0, 165,   0,
350   96,   0, 166,   0,   0,   0,   0,   0,   0,  96,
351   96,   0,   0,   0,   0,  74, 189, 191,   0,   0,
352   15,   0,   0, 184,   0,   0, 164,   0,   0,   0,
353    0,   0,   0,   0, 106,   0,   0, 243,   0,   0,
354  243, 243, 243,   0, 243,   0, 243,   0,   0,   0,
355    0,  96,   0,  96,  96,   0,   0,  96,   0,  96,
356   96,  96,   0,   0,   0,  15,   0,  15,   0,   0,
357  165, 236, 141,   0,   0, 145,   0,   0,   0,   0,
358    0, 151,   0,   0,   0,   0, 230,  96,   0,   0,
359    0,   0, 243,   0,  96,   0,   0,   0,  96,  96,
360  171, 173, 175, 176, 177, 178, 179, 180, 181, 183,
361    0,   0,   0,   0,   0,   0,   0, 186, 187, 263,
362  264, 265,   0, 267, 268, 269,   0,   0,   0, 201,
363    0,   0,   0,   0,   0, 201, 201,   0,   0,   0,
364    0, 208, 209, 210, 201, 213, 214,   0, 189,   0,
365    0,   0,   0,   0,   0,   0,   0, 101,   0,   0,
366  296,   0,   0,   0,   0,   0,   0,   0, 241,   0,
367    0, 291,   0,   0, 232,   0,   0, 106,   0,  98,
368   97,   0, 298, 246,   0,   0,   0,   0, 242,  42,
369   28,   0,   0,   0, 304,   0,   0,   0,   0,  45,
370   46,   0,  33,   0,  34, 255, 312, 256,   0,   0,
371    0,   0,   0,   0,   0, 324, 327, 329, 330,   0,
372    0,   0,  37,   0,   0, 189,   0,   0,   0,   0,
373   41,  22,  43,  29,  35,  38,   0, 238, 316,  32,
374    0,  36,  40,   0, 337,  27,  26,   0,   0,  99,
375    0,   0,  30,  31,  23,   0,   0,   0,   0,   0,
376    0, 201,   0,   0,   0,   0,   0, 297,   0,   0,
377    0,   0,   0,   0, 299,   0,   0,   0,   0, 300,
378  303,   0,   0, 305, 306, 307,   0,   0,   0,   0,
379    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
380  106,   0,   0,   0,   0,   0,  75,   0,   0,   0,
381    0,   0,   0,   0,   0,   0,  16,  18,   0,  68,
382   44,   0, 359,   0,   0,   0, 333,   0,   0,   0,
383    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
384  340,   0,   0,   0,   0,   0, 344,   0, 345,  42,
385   28,  55,  56,  57,  73,  69,  59,  70,   0,  45,
386   46,  71,  33,   0,  34,  63,  64,   0,   0,   0,
387    0,   0,   0,   0,   0,  75,   0,   0,   0,   0,
388   77,  78,  37,  52,   0,  16,  18,   0,  68,  44,
389   41,  22,  43,  29,  35,  38,   0,   0,   0,  32,
390   65,  36,  40,  76,   0,  27,  26,   0,   0,  25,
391    0,   0,  30,  31,  23,   0,   0,   0,  42,  28,
392   55,  56,  57,  73,  69,  59,  70,   0,  45,  46,
393   71,  33,   0,  34,  63,  64,   0,   0,   0,   0,
394    0,   0,  75,   0,   0,   0,   0,   0,   0,  77,
395   78,  37,  16,  18,   0,  68,  44,   0, 308,  41,
396   22,  43,  29,  35,  38,   0,   0,   0,  32,  65,
397   36,  40,  76,   0,  27,  26,   0,   0,  25,   0,
398    0,  30,  31,  23,   0,  42,  28,  55,  56,  57,
399   73,  69,  59,  70,   0,  45,  46,  71,  33,   0,
400   34,  63,  64,   0,   0,   0,   0,   0,   0,   0,
401    0,  75,   0,   0,   0,   0,  77,  78,  37, 273,
402    0,  16,  18,   0,  68,  44,  41,  22,  43,  29,
403   35,  38,   0,   0,   0,  32,  65,  36,  40,  76,
404    0,  27,  26,   0,   0,  25,   0,   0,  30,  31,
405   23,   0,   0,   0,  42,  28,  55,  56,  57,  73,
406   69,  59,  70,   0,  45,  46,  71,  33,   0,  34,
407   63,  64,   0,   0,   0,   0,   0,   0,  75,   0,
408    0,   0,   0,   0,   0,  77,  78,  37,  16,  18,
409    0,  68,  44,   0, 248,  41,  22,  43,  29,  35,
410   38,   0,   0,   0,  32,  65,  36,  40,  76,   0,
411   27,  26,   0,   0,  25,   0,   0,  30,  31,  23,
412    0,  42,  28,  55,  56,  57,  73,  69,  59,  70,
413    0,  45,  46,  71,  33,   0,  34,  63,  64,   0,
414    0,   0,   0,   0,   0,  75,   0,   0,   0,   0,
415    0,   0,  77,  78,  37,  16,  18,   0,  68,  44,
416    0, 247,  41,  22,  43,  29,  35,  38,   0,   0,
417    0,  32,  65,  36,  40,  76,   0,  27,  26,   0,
418    0,  25,   0,   0,  30,  31,  23,   0,  42,  28,
419   55,  56,  57,  73,  69,  59,  70,   0,  45,  46,
420   71,  33,   0,  34,  63,  64,   0,   0,   0,   0,
421    0,   0,  75,   0,   0,   0,   0,   0,   0,  77,
422   78,  37,  16,  18,   0,  68,  44,   0, 226,  41,
423   22,  43,  29,  35,  38,   0,   0,   0,  32,  65,
424   36,  40,  76,   0,  27,  26,   0,   0,  25,   0,
425    0,  30,  31,  23,   0,  42,  28,  55,  56,  57,
426   73,  69,  59,  70,   0,  45,  46,  71,  33,   0,
427   34,  63,  64,   0,   0,   0,   0,   0,   0,  75,
428    0,   0,   0,   0,   0,   0,  77,  78,  37,  16,
429   18,   0,  68,  44,   0, 216,  41,  22,  43,  29,
430   35,  38,   0,   0,   0,  32,  65,  36,  40,  76,
431    0,  27,  26,   0,   0,  25,   0,   0,  30,  31,
432   23,   0,  42,  28,  55,  56,  57,  73,  69,  59,
433   70,   0,  45,  46,  71,  33,   0,  34,  63,  64,
434    0,   0,   0,   0,   0,   0,  75,   0,   0,   0,
435    0,   0,   0,  77,  78,  37,  16,  18,   0,  68,
436   44,   0, 135,  41,  22,  43,  29,  35,  38,   0,
437    0,   0,  32,  65,  36,  40,  76,   0,  27,  26,
438    0,   0,  25,   0,   0,  30,  31,  23,   0,  42,
439   28,  55,  56,  57,  73,  69,  59,  70,   0,  45,
440   46,  71,  33,   0,  34,  63,  64,   0,   0,   0,
441    0,   0,   0,  75,   0,   0,   0,   0,   0,   0,
442   77,  78,  37,  16,  18,   0,  68,  44,   0,   0,
443   41,  22,  43,  29,  35,  38,   0,   0,   0,  32,
444   65,  36,  40,  76,   0,  27,  26,   0,   0,  25,
445    0,   0,  30,  31,  23,   0,  42,  28,  55,  56,
446   57,  73,  69,  59,  70,   0,  45,  46,  71,  33,
447    0,  34,  63,  64,   0,   0,   0,   0,   0,   0,
448    0,   0,   0,   0,   0,   0,   0,  77,  78,  37,
449    0,   0,   0,   0,   0,   0,   0,  41,  22,  43,
450   29,  35,  38,   0,   0,   0,  32,  65,  36,  40,
451   76,   0,  27,  26,   0,   0,  25,   0,   0,  30,
452   31,  23, 190,   0, 101,  95,   0,   0, 331,   0,
453    0,   0,   0,   0,   0,  93,   0,   0,   0,   0,
454    0,   0,   0,   0,   0,   0,  98,  97,   0,  87,
455   88,  89,  90,  91,  92,  94,  42,  28,   0,   0,
456    0,   0,   0,   0,   0,   0,  45,  46,   0,  33,
457    0,  34,   0,   0,   0,   0,   0,   0,   0,   0,
458    0,   0,   0,   0,   0,   0,   0,   0,   0,  37,
459    0,   0,   0,   0,   0,   0,   0,  41,  22,  43,
460   29,  35,  38,   0,  84,   0,  32,   0,  36,  40,
461    0,   0,  27,  26,   0,   0,  99,   0,   0,  30,
462   31,  23, 190,   0, 101,  95,   0,   0, 328,   0,
463    0,   0,   0,   0,   0,  93,   0,   0,   0,   0,
464    0,   0,   0,   0,   0,   0,  98,  97,   0,  87,
465   88,  89,  90,  91,  92,  94,  42,  28,   0,   0,
466    0,   0,   0,   0,   0,   0,  45,  46,   0,  33,
467    0,  34,   0,   0,   0,   0,   0,   0,   0,   0,
468    0,   0,   0,   0,   0,   0,   0,   0,   0,  37,
469    0,   0,   0,   0,   0,   0,   0,  41,  22,  43,
470   29,  35,  38,   0,  84,   0,  32,   0,  36,  40,
471    0,   0,  27,  26,   0,   0,  99,   0,   0,  30,
472   31,  23, 190,   0, 101,  95,   0,   0, 326,   0,
473    0,   0,   0,   0,   0,  93,   0,   0,   0,   0,
474    0,   0,   0,   0,   0,   0,  98,  97,   0,  87,
475   88,  89,  90,  91,  92,  94,  42,  28,   0,   0,
476    0,   0,   0,   0,   0,   0,  45,  46,   0,  33,
477    0,  34,   0,   0,   0,   0,   0,   0,   0,   0,
478    0,   0,   0,   0,   0,   0,   0,   0,   0,  37,
479    0,   0,   0,   0,   0,   0,   0,  41,  22,  43,
480   29,  35,  38,   0,  84,   0,  32,   0,  36,  40,
481    0,   0,  27,  26,   0,   0,  99,   0,   0,  30,
482   31,  23, 140,   0,   0, 101,  95, 139,   0,   0,
483    0,   0,   0,   0,   0,   0,  93,   0,   0,   0,
484    0,   0,   0,   0,   0,   0,   0,  98,  97,   0,
485   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
486    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
487   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
488    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
489   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
490   43,  29,  35,  38,   0,  84,   0,  32,   0,  36,
491   40,   0,   0,  27,  26,   0,   0,  99,   0,   0,
492   30,  31,  23, 190,   0, 101,  95,   0,   0, 192,
493    0,   0,   0,   0,   0,   0,  93,   0,   0,   0,
494    0,   0,   0,   0,   0,   0,   0,  98,  97,   0,
495   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
496    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
497   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
498    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
499   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
500   43,  29,  35,  38,   0,  84,   0,  32,   0,  36,
501   40,   0,   0,  27,  26, 101,  95,  99,   0, 355,
502   30,  31,  23,   0,   0,   0,  93,   0,   0,   0,
503    0,   0,   0,   0,   0,   0,   0,  98,  97,   0,
504   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
505    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
506   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
507    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
508   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
509   43,  29,  35,  38,   0,  84,   0,  32,   0,  36,
510   40,   0,   0,  27,  26, 101,  95,  99,   0, 354,
511   30,  31,  23,   0,   0,   0,  93,   0,   0,   0,
512    0,   0,   0,   0,   0,   0,   0,  98,  97,   0,
513   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
514    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
515   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
516    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
517   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
518   43,  29,  35,  38,   0,  84,   0,  32,   0,  36,
519   40,   0,   0,  27,  26, 101,  95,  99,   0, 350,
520   30,  31,  23,   0,   0,   0,  93,   0,   0,   0,
521    0,   0,   0,   0,   0,   0,   0,  98,  97,   0,
522   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
523    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
524   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
525    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
526   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
527   43,  29,  35,  38,   0,  84,   0,  32,   0,  36,
528   40,   0,   0,  27,  26,   0,   0,  99,   0,   0,
529   30,  31,  23, 101,  95, 346,   0,   0,   0,   0,
530    0,   0,   0,   0,  93,   0,   0,   0,   0,   0,
531    0,   0,   0,   0,   0,  98,  97,   0,  87,  88,
532   89,  90,  91,  92,  94,  42,  28,   0,   0,   0,
533    0,   0,   0,   0,   0,  45,  46,   0,  33,   0,
534   34,   0,   0,   0,   0,   0,   0,   0,   0,   0,
535    0,   0,   0,   0,   0,   0,   0,   0,  37,   0,
536    0,   0,   0,   0,   0,   0,  41,  22,  43,  29,
537   35,  38,   0,  84,   0,  32,   0,  36,  40,   0,
538    0,  27,  26, 101,  95,  99,   0, 323,  30,  31,
539   23,   0,   0,   0,  93,   0,   0,   0,   0,   0,
540    0,   0,   0,   0,   0,  98,  97,   0,  87,  88,
541   89,  90,  91,  92,  94,  42,  28,   0,   0,   0,
542    0,   0,   0,   0,   0,  45,  46,   0,  33,   0,
543   34,   0,   0,   0,   0,   0,   0,   0,   0,   0,
544    0,   0,   0,   0,   0,   0,   0,   0,  37,   0,
545    0,   0,   0,   0,   0,   0,  41,  22,  43,  29,
546   35,  38,   0,  84,   0,  32,   0,  36,  40,   0,
547    0,  27,  26, 101,  95,  99,   0, 320,  30,  31,
548   23,   0,   0,   0,  93,   0,   0,   0,   0,   0,
549    0,   0,   0,   0,   0,  98,  97,   0,  87,  88,
550   89,  90,  91,  92,  94,  42,  28,   0,   0,   0,
551    0,   0,   0,   0,   0,  45,  46,   0,  33,   0,
552   34,   0,   0,   0,   0,   0,   0,   0,   0,   0,
553    0,   0,   0,   0,   0,   0,   0,   0,  37,   0,
554    0,   0,   0,   0,   0,   0,  41,  22,  43,  29,
555   35,  38,   0,  84,   0,  32,   0,  36,  40,   0,
556    0,  27,  26, 101,  95,  99,   0, 279,  30,  31,
557   23,   0,   0,   0,  93,   0,   0,   0,   0,   0,
558    0,   0,   0,   0,   0,  98,  97,   0,  87,  88,
559   89,  90,  91,  92,  94,  42,  28,   0,   0,   0,
560    0,   0,   0,   0,   0,  45,  46,   0,  33,   0,
561   34,   0,   0,   0,   0,   0,   0,   0,   0,   0,
562    0,   0,   0,   0,   0,   0,   0,   0,  37,   0,
563    0,   0,   0,   0,   0,   0,  41,  22,  43,  29,
564   35,  38,   0,  84,   0,  32,   0,  36,  40,   0,
565    0,  27,  26,   0, 190,  99, 101,  95,  30,  31,
566   23,   0,   0,   0,   0,   0,   0,  93,   0,   0,
567    0,   0,   0,   0,   0,   0,   0,   0,  98,  97,
568    0,  87,  88,  89,  90,  91,  92,  94,  42,  28,
569    0,   0,   0,   0,   0,   0,   0,   0,  45,  46,
570    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
571    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
572    0,  37,   0,   0,   0,   0,   0,   0,   0,  41,
573   22,  43,  29,  35,  38,   0,  84,   0,  32,   0,
574   36,  40,   0,   0,  27,  26, 101,  95,  99,   0,
575  192,  30,  31,  23,   0,   0,   0,  93,   0,   0,
576    0,   0,   0,   0,   0,   0,   0,   0,  98,  97,
577    0,  87,  88,  89,  90,  91,  92,  94,  42,  28,
578    0,   0,   0,   0,   0,   0,   0,   0,  45,  46,
579    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
580    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
581    0,  37,   0,   0,   0,   0,   0,   0,   0,  41,
582   22,  43,  29,  35,  38,   0,  84,   0,  32,   0,
583   36,  40,   0,   0,  27,  26, 101,  95,  99,   0,
584    0,  30,  31,  23,   0,   0,   0,  93,   0,   0,
585    0,   0,   0,   0,   0,   0,   0,   0,  98,  97,
586    0,  87,  88,  89,  90,  91,  92,  94,  42,  28,
587    0,   0,   0,   0,   0,   0,   0,   0,  45,  46,
588    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
589    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
590    0,  37,   0,   0,   0,   0,   0,   0,   0,  41,
591   22,  43,  29,  35,  38,   0,  84, 251,  32,   0,
592   36,  40,   0,   0,  27,  26, 101,  95,  99,   0,
593    0,  30,  31,  23,   0,   0,   0,  93,   0,   0,
594    0,   0,   0,   0,   0,   0,   0,   0,  98,  97,
595    0,  87,  88,  89,  90,  91,  92,  94,  42,  28,
596    0,   0,   0,   0,   0,   0,   0,   0,  45,  46,
597    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
598    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
599    0,  37,   0,   0,   0,   0,   0,   0,   0,  41,
600   22,  43,  29,  35,  38,   0,  84,   0,  32,   0,
601   36,  40,   0,   0,  27,  26, 101,  95,  99,   0,
602    0,  30,  31,  23,   0,   0,   0,  93,   0,   0,
603    0,   0,   0,   0,   0,   0,   0,   0,  98,   0,
604    0,  87,  88,  89,  90,  91,  92,  94,  42,  28,
605    0,   0,   0,   0,   0,   0,   0,   0,  45,  46,
606    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
607    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
608    0,  37,   0,   0,   0,   0,   0,   0,   0,  41,
609   22,  43,  29,  35,  38, 101,  95,   0,  32,   0,
610   36,  40,   0,   0,  27,  26,  93,   0,  99,   0,
611    0,  30,  31,  23,   0,   0,   0,   0,   0,   0,
612   87,  88,  89,  90,  91,  92,  94,  42,  28,   0,
613    0,   0,   0,   0,   0,   0,   0,  45,  46,   0,
614   33,   0,  34,   0,   0,  75,   0,   0,   0,   0,
615    0,   0,   0,   0,   0,   0,  18,   0,   0,  44,
616   37,   0,   0,   0,   0,   0,   0,   0,  41,  22,
617   43,  29,  35,  38,   0,   0,   0,  32,   0,  36,
618   40,   0,   0,  27,  26,   0,   0,  99,  42,  28,
619   30,  31,  23,  73,   0,   0,   0,   0,  45,  46,
620    0,  33,   0,  34,   0,   0,   0,   0,   0,   0,
621    0,   0,   0,   0,   0,   0,   0,   0,   0,  77,
622   78,  37,   0,   0, 101,   0,   0,   0,   0,  41,
623   22,  43,  29,  35,  38, 241,   0,   0,  32,   0,
624   36,  40,   0,   0,  27,  26,  98,  97,  25,   0,
625    0,  30,  31,  23,   0, 242,  42,  28,   0,   0,
626    0,   0,   0,   0,   0,   0,  45,  46,   0,  33,
627    0,  34,   0,   0,   0,   0,   0,  12,  13,   0,
628    0,  16,  18,   0,   0,  44,   0,   0,   0,  37,
629    0,   0,   0,   0,   0,   0,   0,  41,  22,  43,
630   29,  35,  38,   0, 238,   0,  32,   0,  36,  40,
631    0,   0,  27,  26,  42,  28,  99,   0,   0,  30,
632   31,  23,   0,  14,  45,  46,   0,  33,   0,  34,
633    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
634    0,   0,   0,   0,   0,   0,   0,  37,   0,   0,
635  101,   0,   0,   0,   0,  41,  22,  43,  29,  35,
636   38, 241,   0,   0,  32,   0,  36,  40,   0,   0,
637   27,  26,  98,   0,  25,   0,   0,  30,  31,  23,
638    0, 242,  42,  28,   0,   0,   0,   0,   0,   0,
639    0,   0,  45,  46,   0,  33,   0,  34,   0,   0,
640    0,   0,   0,   0,   0, 140,   0,   0,  18,   0,
641  139,  44,   0,   0,   0,  37,   0,   0,   0,   0,
642    0,   0,   0,  41,  22,  43,  29,  35,  38,   0,
643  254,   0,  32,  18,  36,  40,  44,   0,  27,  26,
644   42,  28,  99,   0,   0,  30,  31,  23,   0,   0,
645   45,  46,   0,  33,   0,  34,   0,   0,   0,   0,
646    0,   0,   0,   0,   0,  42,  28,   0,   0,   0,
647    0,   0,   0,  37,   0,  45,  46,   0,  33,   0,
648   34,  41,  22,  43,  29,  35,  38,   0,   0,   0,
649   32,   0,  36,  40,   0,   0,  27,  26,  37,   0,
650   25, 101,   0,  30,  31,  23,  41,  22,  43,  29,
651   35,  38, 241,   0,   0,  32,   0,  36,  40,   0,
652    0,  27,  26,   0,   0,  25,   0,   0,  30,  31,
653   23,   0, 242,  42,  28,   0,   0,   0,   0,   0,
654    0,   0,   0,  45,  46,   0,  33,   0,  34,   0,
655    0,   0,   0,   0,   0,   0, 174,   0,   0, 284,
656    0,   0,  44,   0,   0,   0,  37,   0,   0,   0,
657    0,   0,   0,   0,  41,  22,  43,  29,  35,  38,
658    0, 172,   0,  32, 284,  36,  40,  44,   0,  27,
659   26,  42,  28,  99,   0,   0,  30,  31,  23,   0,
660    0,  45,  46,   0,  33,   0,  34,   0,   0,   0,
661    0,   0,   0,   0,   0,   0,  42,  28,   0,   0,
662    0,   0,   0,   0,  37,   0,  45,  46,   0,  33,
663    0,  34,  41,  22,  43,  29,  35,  38,   0, 254,
664    0,  32, 284,  36,  40,  44,   0,  27,  26,  37,
665    0,  25,   0,   0,  30,  31,  23,  41,  22,  43,
666   29,  35,  38,   0,   0,   0,  32,  18,  36,  40,
667   44, 204,  27,  26,  42,  28,  25,   0,   0,  30,
668   31,  23,   0,   0,  45,  46,   0,  33,   0,  34,
669    0,   0,   0,   0,   0,   0,   0,   0,   0,  42,
670   28,   0,   0,   0,   0,   0,   0,  37,   0,  45,
671   46,   0,  33,   0,  34,  41,  22,  43,  29,  35,
672   38,   0,   0,   0,  32,  18,  36,  40,  44, 202,
673   27,  26,  37,   0,  25,   0,   0,  30,  31,  23,
674   41,  22,  43,  29,  35,  38,   0, 174,   0,  32,
675   18,  36,  40,  44,   0,  27,  26,  42,  28,  25,
676    0,   0,  30,  31,  23,   0,   0,  45,  46,   0,
677   33,   0,  34,   0,   0,   0,   0,   0,   0,   0,
678    0,   0,  42,  28,   0,   0,   0,   0,   0,   0,
679   37,   0,  45,  46,   0,  33,   0,  34,  41,  22,
680   43,  29,  35,  38,   0, 172,   0,  32,  18,  36,
681   40,  44,   0,  27,  26,  37,   0,  25,   0,   0,
682   30,  31,  23,  41,  22,  43,  29,  35,  38,   0,
683    0,   0,  32,  18,  36,  40,  44,   0,  27,  26,
684   42,  28,  25,   0,   0,  30,  31,  23,   0,   0,
685   45,  46,   0,  33,   0,  34,   0,   0,   0,   0,
686    0,   0,   0,   0,   0,  42,  28,   0,   0,   0,
687    0,   0,   0,  37,   0,  45,  46,   0,  33,   0,
688   34,  41,  22,  43,  29,  35,  38,   0,   0,   0,
689   32, 284,  36,  40,  44,   0,  27,  26,  37,   0,
690   25,   0,   0,  30,  31,  23,  41,  22,  43,  29,
691   35,  38,   0,   0,   0,  32, 101,  36,  40,   0,
692    0,  27,  26,  42,  28,  25,   0,   0,  30,  31,
693   23,   0,   0,  45,  46,   0,  33,   0,  34,   0,
694    0,   0,   0,   0,   0,   0,   0,   0,  42,  28,
695    0,   0,   0,   0,   0,   0,  37,   0,  45,  46,
696    0,  33,   0,  34,  41,  22,  43,  29,  35,  38,
697    0,   0, 193,  32, 161,  36,  40,  44,   0,  27,
698   26,  37,   0,  25,   0,   0,  30,  31,  23,  41,
699   22,  43,  29,  35,  38,   0,   0,   0,  32, 101,
700   36,  40,  44,   0,  27,  26,  42,  28,  99,   0,
701    0,  30,  31,  23,   0,   0,  45,  46,   0,  33,
702    0,  34,   0,   0,   0,   0,   0,   0,   0,   0,
703    0,  42,  28,   0,   0,   0,   0,   0,   0,  37,
704    0,  45,  46,   0,  33,   0,  34,  41,  22,  43,
705   29,  35,  38,   0,   0,   0,  32, 101,  36,  40,
706    0,   0,  27,  26,  37,   0,  25,   0,   0,  30,
707   31,  23,  41,  22,  43,  29,  35,  38,   0,   0,
708    0,  32, 101,  36,  40,   0,   0,  27,  26,  42,
709   28,  25,   0,   0,  30,  31,  23,   0,   0,  45,
710   46,   0,  33,   0,  34,   0,   0,   0,   0,   0,
711    0,   0,   0,   0,  42,  28,   0,   0,   0,   0,
712    0,   0,  37,   0,  45,  46,   0,  33,   0,  34,
713   41,  22,  43,  29,  35,  38,   0,   0,   0,  32,
714    0,  36,  40,   0,   0,  27,  26,  37,   0,  99,
715    0,   0,  30,  31,  23,  41,  22,  43,  29,  35,
716   38,   0,   0,   0,   0,   0,  36,  40,   0,   0,
717   27,  26,   0,   0,  99,   0,   0,  30,  31,  23
718 };
719 short	yypact[] =
720 {
721  191,-1000,-1000,-1000,3259, 193,-1000,-1000, 185,-1000,
722  205, 863, 206, 206, -50,2903,-1000, -63,3810,-1000,
723   19,  38,-1000,4034,-1000,3976,4034,4034, 200, 199,
724  -33, -33,   5, 192, 184,-1000, 183, 170,-1000, 158,
725  157,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,3259,
726  863,3810,-1000,1334,-1000, 124,3810, 124, 214,3385,
727 -1000,1401, 863, 124, 124,3385, 124,-1000, 211,-1000,
728  148, 146,3951, -22,2903,-1000, 138,-1000,-1000, 863,
729  863, 134,-1000,-1000,3810,3785,3727,3810,3810,3810,
730 3810,3810,3810,3810, -22, -74,  19,-1000,-1000,4034,
731  -94,3810,3810,-1000,-1000, 181,1902,3893,4034,4034,
732 4034,4034,4034,3810,-1000,-1000, -89, -89, -89,3702,
733 3644,-1000,-1000,   7,4034,3810,3810,3810,3810,3810,
734 3810, -70,-1000,1267, 206,-1000,-1000,-1000, 213, 211,
735 -1000,1802,-1000,-1000,1401,1802,-1000, -49,1200,-1000,
736 -1000,1802,-1000,-1000,1401,-1000, 213,3133,3810, 104,
737  208,3810,3201, -65,-1000,  19,  33,3810,1133,1066,
738  -57,2813,-1000,2993,-1000,3072,4059,4059,4059,4059,
739 4059,4059,-1000,4059,-1000, -33,2723,2903,   4,3410,
740 -1000,3410,-1000,4034, -89,  26,  26, -89, -89, -89,
741   86,2903,-1000, 174,-1000, 151,4034,  19,2633,2633,
742 2633, 149, 208,2633,2633,  89,-1000, 863,-1000,-1000,
743 -1000,-1000,-1000, 999,-1000, 212,-1000,-1000,-1000, 101,
744   37,-1000,2540,4034,4034,4034,3619, 147,3868,3561,
745 3536,3868, -22,  19,3868,3810,2540,-1000,-1000, 139,
746 -1000,3810,-1000, -22,-1000,2903,2903,  19,3410,-1000,
747 -1000,-1000,  19,3410,3410,  31,-1000,3410,3410,3410,
748 -1000, 930, -80,-1000,-1000,-1000, 133, -22, 194,-1000,
749   19,  19,  19,3201,3810,  -6, 634,3327,3478,-1000,
750 4059,-1000,3201,  40, 194, 194,  15,2903,-1000,2903,
751 2450,  78,  77,2360, 121,1701,1601,1501,-1000, 111,
752 3810, 211,  41,-1000, 120, -22,3868,-1000, 206,-1000,
753 -1000,-1000,-1000,-1000,3410,-1000,-1000,  -8,-1000,  -8,
754 3410,-1000,3810,2270,3133, 194,  -6,-1000,3201, 863,
755 2172,  66,  55,  48,2082,1992, 211,  41,1401, 794,
756 -1000,-1000,-1000,-1000,-1000, 124,3133, 194,-1000,-1000,
757 -1000,  41,1401, 194,-1000,1401,-1000
758 };
759 short	yypgo[] =
760 {
761    0, 297, 505,  40,  11, 295,   7, 286, 243, 199,
762   62,  34, 283,  10,   9,   5,  20,   8,   0, 418,
763  278, 276, 273, 268, 265, 264, 263,   3, 262, 229,
764   85, 261,   1, 400,  17,  13, 103,  87, 260, 258,
765  255, 254, 249, 246, 232, 231, 230, 228, 227
766 };
767 short	yyr1[] =
768 {
769    0,  40,  40,  36,  36,  37,  37,  33,  33,  26,
770   26,  24,  24,  41,  22,  42,  22,  43,  22,  20,
771   20,  23,  30,  30,  34,  34,  35,  35,  29,  29,
772   15,  15,   1,   1,  10,  11,  11,  11,  11,  11,
773   11,  11,  44,  11,  12,  12,   6,   6,   3,   3,
774    3,   3,   3,   3,   3,   3,   3,   3,   3,   2,
775    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
776    2,   2,   2,   2,   2,   2,   2,   2,   4,   4,
777    5,   5,   7,   7,   7,  39,  39,  28,  28,  28,
778   28,  31,  31,   9,   9,  45,  13,  32,  32,  14,
779   14,  14,  14,  14,  14,  14,  14,  27,  27,  16,
780   16,  16,  46,  47,  16,  16,  16,  16,  16,  16,
781   16,  16,  16,  16,  16,  16,  48,  16,  16,  17,
782   17,  38,  38,   8,   8,   8,   8,   8,   8,   8,
783    8,   8,   8,   8,   8,   8,   8,   8,   8,   8,
784    8,   8,   8,   8,   8,   8,   8,   8,   8,   8,
785    8,   8,   8,   8,   8,   8,   8,   8,   8,   8,
786    8,   8,   8,   8,  18,  18,  18,  18,  21,  21,
787   21,  19,  19,  19,  25
788 };
789 short	yyr2[] =
790 {
791    0,   1,   1,   1,   2,   1,   2,   1,   2,   1,
792    2,   1,   2,   0,  12,   0,  10,   0,   8,   1,
793    1,   4,   1,   2,   1,   2,   0,   1,   0,   1,
794    0,   1,   1,   3,   1,   1,   4,   3,   6,   3,
795    4,   4,   0,   9,   1,   3,   1,   3,   3,   5,
796    3,   3,   3,   3,   3,   5,   2,   1,   1,   3,
797    5,   3,   3,   3,   3,   3,   3,   3,   3,   3,
798    3,   3,   5,   4,   3,   2,   1,   1,   3,   3,
799    1,   3,   0,   1,   3,   1,   1,   1,   1,   2,
800    2,   1,   2,   1,   2,   0,   4,   1,   2,   4,
801    4,   4,   2,   5,   2,   1,   1,   1,   2,   2,
802    3,   2,   0,   0,   9,   3,   2,   1,   4,   2,
803    3,   2,   2,   3,   2,   2,   0,   3,   2,   1,
804    2,   1,   1,   4,   3,   3,   3,   3,   3,   3,
805    2,   2,   2,   3,   4,   1,   3,   4,   2,   2,
806    2,   2,   4,   3,   2,   1,   6,   6,   3,   6,
807    6,   1,   8,   8,   6,   4,   1,   6,   6,   8,
808    8,   8,   6,   1,   1,   4,   1,   2,   0,   1,
809    3,   1,   1,   1,   4
810 };
811 short	yychk[] =
812 {
813 -1000, -40,  -1,   2, -29, -28,  10,  15, -12, -11,
814  -10, -30,   8,   9,  54,  -2,  12, -18,  13,  -9,
815   -8, -19,  87, 110, -13, 105, 102, 101,  46,  89,
816  108, 109,  95,  58,  60,  90,  97,  78,  91, -38,
817   98,  86,  45,  88,  16,  55,  56,  10,  15, -29,
818  -30,  11,  10, -17, -16,  47,  48,  49, -26,  52,
819  -22, -23, -30,  61,  62,  96, -14, -25,  15,  51,
820   53,  57, -39,  50,  -2,   2,  99,  76,  77, -30,
821  -30, -20,  86,  89,  93, -37, -36,  38,  39,  40,
822   41,  42,  43,  24,  44,  14,  -8,  36,  35, 105,
823  -18,  13,  69, 108, 109,  -4,  -2,  16, 101, 102,
824  103, 104, 107,  19,  -8,  -9,  -8,  -8,  -8,  13,
825   13, -18, -18, -18,  42,  13,  13,  13,  13,  13,
826   13, -45, -11, -17, -10,  18, -16, -27, -34,  15,
827   10,  -2, -27,  10, -46,  -2, -27, -16, -17, -27,
828  -27,  -2, -27, -27, -48, -35, -34,  13,  13,  -7,
829   -5,  13,  -3, -18,  -9,  -8, -19,  13, -17, -17,
830   13,  -2,  10,  -2,  10,  -2,  -2,  -2,  -2,  -2,
831   -2,  -2, -13,  -2, -19,  95,  -2,  -2,  17, -33,
832   11, -33,  17,  69,  -8,  -8,  -8,  -8,  -8,  -8,
833   -6,  -2,  17,  -6,  17,  -6,  42,  -8,  -2,  -2,
834   -2,  -6, -13,  -2,  -2,  92,  18, -30,  10, -35,
835  -27, -16, -27, -24,  79, -31,  18, -27, -16, -15,
836  -19, -14,  -2,  14,  37,  40, -33,  -4,  93, -37,
837  -36,  24,  44,  -8,  69,  19,  -2,  18,  18, -21,
838   86,  94, -18,  44,  10,  -2,  -2,  -8, -33,  20,
839   17,  17,  -8, -33, -33, -33,  17, -33, -33, -33,
840   16, -17, -47,  10, -16,  10,  15,  44, -32,  17,
841   -8,  -8,  -8,  -3,  13,  17,  -3,  -3,  -3, -13,
842   -3, -19,  -3,  -6, -32, -32, -33,  -2, -19,  -2,
843   -2, -13, -13,  -2, -19,  -2,  -2,  -2,  18,  99,
844  -35,  15, -19,  10,  -4,  44,  94,  20, -44,  86,
845   17,  17,  17,  17, -33,  17,  17, -33,  17, -33,
846  -33,  17,  13,  -2, -35, -32,  17, -19,  -3, -30,
847   -2, -13, -18, -18,  -2,  -2,  15, -15, -43, -17,
848   17,  17,  17,  17,  17,  17, -35, -32, -16,  18,
849  -27, -15, -42, -32, -16, -41, -16
850 };
851 short	yydef[] =
852 {
853   -2,  -2,   1,   2,  32,  29,  87,  88,  28,  44,
854   35,   0,   0,   0,   0,  34,  22, 173,   0,  76,
855   77, 174, 176,   0,  93,   0,   0,   0, 145,   0,
856    0,   0, 155,   0,   0, 161,   0,   0, 166,   0,
857    0, 181, 182, 183,  95, 131, 132,  89,  90,  33,
858    0,   0,  23,   0, 129,   0,   0,   0, 112,   0,
859  117,   0,   0,   0,   0,   0,   0, 126,  26,   9,
860    0,   0,  82,   0, 105, 106,   0,  85,  86,   0,
861    0,   0,  19,  20,   0,   0,   0,   0,   0,   0,
862    0,   0,   0,   0,   0,   0,  75,   5,   3,   0,
863  173,   0,   0, 150, 151,   0,   0,   0,   0,   0,
864    0,   0,   0,   0, 177,  94, 142, 140, 141,   0,
865    0, 148, 149, 154,   0,   0,   0,   0,   0,   0,
866    0,   0,  45,   0,  37,  39, 130, 109, 107,  26,
867   24,   0, 111,  10,   0,   0, 116, 119,   0, 121,
868  122,   0, 124, 125,   0, 128,  27,  -2,   0, 102,
869   83,   0,  80, 173,  57,  58, 104,   0,   0,   0,
870  178,   0,   6,  61,   4,  62,  -2,  -2,  -2,  -2,
871   -2,  -2,  69,  -2,  71,  74,   0,  59,   0,   0,
872    7,   0, 158,   0, 137, 134, 135, 136, 138, 139,
873    0,  46, 143,   0, 146,   0,   0, 153,   0,   0,
874    0,   0,  93,   0,   0,   0,  36,   0,  25, 108,
875  110, 113, 115,   0,  11, 120,  91, 123, 127,   0,
876  174,  31,   0,   0,   0,   0,   0,   0,   0,   0,
877    0,   0,   0,  56,   0,   0,   0,  40,  41,   0,
878  179,   0,  73,   0,   8,  79,  78, 133,   0, 175,
879  144, 147, 152,   0,   0,   0, 165,   0,   0,   0,
880   96,   0,   0,  12, 118,  92,  26,   0,  21,  97,
881   99, 100, 101,  81,   0,  84,   0,  50,  51,  52,
882   -2,  54,  48,   0, 184,  42,   0,  60,  72,  47,
883    0,  93,  93,   0,   0,   0,   0,   0,  38,   0,
884    0,  26,   0,  98,   0,   0,   0, 103,   0, 180,
885  156, 157, 159, 160,   0, 164, 167,   0, 168,   0,
886    0, 172,   0,   0,  -2,  17,   0,  55,  49,   0,
887    0,  93,   0,   0,   0,   0,  26,   0,   0,   0,
888  162, 163, 169, 170, 171,   0,  -2,  15,  18,  43,
889  114,   0,   0,  13,  16,   0,  14
890 };
891 short	yytok1[] =
892 {
893    1,   0,   0,   0,   0,   0,   0,   0,   0,   0,
894    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
895    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
896    0,   0,   0,   0,   0,   0,   0, 104,   0,   0,
897   13,  17, 103, 101,  11, 102,   0,  16,   0,   0,
898    0,   0,   0,   0,   0,   0,   0,   0,  94,  15,
899    0,   0,   0,  93,   0,   0,   0,   0,   0,   0,
900    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
901    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
902    0,  19,   0,  20,   0,   0,   0,   0,   0,   0,
903    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
904    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
905    0,   0,   0,  12,  14,  18
906 };
907 short	yytok2[] =
908 {
909    2,   3,   4,   5,   6,   7,   8,   9,  10,  21,
910   22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
911   32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
912   42,  43,  44,  45,  46,  47,  48,  49,  50,  51,
913   52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
914   62,  63,  64,  65,  66,  67,  68,  69,  70,  71,
915   72,  73,  74,  75,  76,  77,  78,  79,  80,  81,
916   82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
917   92,  95,  96,  97,  98,  99, 100, 105, 106, 107,
918  108, 109, 110, 111
919 };
920 long	yytok3[] =
921 {
922    0
923 };
924 #define YYFLAG 		-1000
925 #define YYERROR		goto yyerrlab
926 #define YYACCEPT	return(0)
927 #define YYABORT		return(1)
928 #define	yyclearin	yychar = -1
929 #define	yyerrok		yyerrflag = 0
930 
931 #ifdef	yydebug
932 #include	"y.debug"
933 #else
934 #define	yydebug		0
935 char*	yytoknames[1];		/* for debugging */
936 char*	yystates[1];		/* for debugging */
937 #endif
938 
939 /*	parser for yacc output	*/
940 
941 int	yynerrs = 0;		/* number of errors */
942 int	yyerrflag = 0;		/* error recovery flag */
943 
944 char*
yytokname(int yyc)945 yytokname(int yyc)
946 {
947 	static char x[16];
948 
949 	if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0]))
950 	if(yytoknames[yyc-1])
951 		return yytoknames[yyc-1];
952 	sprintf(x, "<%d>", yyc);
953 	return x;
954 }
955 
956 char*
yystatname(int yys)957 yystatname(int yys)
958 {
959 	static char x[16];
960 
961 	if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0]))
962 	if(yystates[yys])
963 		return yystates[yys];
964 	sprintf(x, "<%d>\n", yys);
965 	return x;
966 }
967 
968 long
yylex1(void)969 yylex1(void)
970 {
971 	long yychar;
972 	long *t3p;
973 	int c;
974 
975 	yychar = yylex();
976 	if(yychar <= 0) {
977 		c = yytok1[0];
978 		goto out;
979 	}
980 	if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) {
981 		c = yytok1[yychar];
982 		goto out;
983 	}
984 	if(yychar >= YYPRIVATE)
985 		if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) {
986 			c = yytok2[yychar-YYPRIVATE];
987 			goto out;
988 		}
989 	for(t3p=yytok3;; t3p+=2) {
990 		c = t3p[0];
991 		if(c == yychar) {
992 			c = t3p[1];
993 			goto out;
994 		}
995 		if(c == 0)
996 			break;
997 	}
998 	c = 0;
999 
1000 out:
1001 	if(c == 0)
1002 		c = yytok2[1];	/* unknown char */
1003 	if(yydebug >= 3)
1004 		printf("lex %.4lX %s\n", yychar, yytokname(c));
1005 	return c;
1006 }
1007 
1008 int
yyparse(void)1009 yyparse(void)
1010 {
1011 	struct
1012 	{
1013 		YYSTYPE	yyv;
1014 		int	yys;
1015 	} yys[YYMAXDEPTH], *yyp, *yypt;
1016 	short *yyxi;
1017 	int yyj, yym, yystate, yyn, yyg;
1018 	YYSTYPE save1, save2;
1019 	int save3, save4;
1020 	long yychar;
1021 
1022 	save1 = yylval;
1023 	save2 = yyval;
1024 	save3 = yynerrs;
1025 	save4 = yyerrflag;
1026 
1027 	yystate = 0;
1028 	yychar = -1;
1029 	yynerrs = 0;
1030 	yyerrflag = 0;
1031 	yyp = &yys[-1];
1032 	goto yystack;
1033 
1034 ret0:
1035 	yyn = 0;
1036 	goto ret;
1037 
1038 ret1:
1039 	yyn = 1;
1040 	goto ret;
1041 
1042 ret:
1043 	yylval = save1;
1044 	yyval = save2;
1045 	yynerrs = save3;
1046 	yyerrflag = save4;
1047 	return yyn;
1048 
1049 yystack:
1050 	/* put a state and value onto the stack */
1051 	if(yydebug >= 4)
1052 		printf("char %s in %s", yytokname(yychar), yystatname(yystate));
1053 
1054 	yyp++;
1055 	if(yyp >= &yys[YYMAXDEPTH]) {
1056 		yyerror("yacc stack overflow");
1057 		goto ret1;
1058 	}
1059 	yyp->yys = yystate;
1060 	yyp->yyv = yyval;
1061 
1062 yynewstate:
1063 	yyn = yypact[yystate];
1064 	if(yyn <= YYFLAG)
1065 		goto yydefault; /* simple state */
1066 	if(yychar < 0)
1067 		yychar = yylex1();
1068 	yyn += yychar;
1069 	if(yyn < 0 || yyn >= YYLAST)
1070 		goto yydefault;
1071 	yyn = yyact[yyn];
1072 	if(yychk[yyn] == yychar) { /* valid shift */
1073 		yychar = -1;
1074 		yyval = yylval;
1075 		yystate = yyn;
1076 		if(yyerrflag > 0)
1077 			yyerrflag--;
1078 		goto yystack;
1079 	}
1080 
1081 yydefault:
1082 	/* default state action */
1083 	yyn = yydef[yystate];
1084 	if(yyn == -2) {
1085 		if(yychar < 0)
1086 			yychar = yylex1();
1087 
1088 		/* look through exception table */
1089 		for(yyxi=yyexca;; yyxi+=2)
1090 			if(yyxi[0] == -1 && yyxi[1] == yystate)
1091 				break;
1092 		for(yyxi += 2;; yyxi += 2) {
1093 			yyn = yyxi[0];
1094 			if(yyn < 0 || yyn == yychar)
1095 				break;
1096 		}
1097 		yyn = yyxi[1];
1098 		if(yyn < 0)
1099 			goto ret0;
1100 	}
1101 	if(yyn == 0) {
1102 		/* error ... attempt to resume parsing */
1103 		switch(yyerrflag) {
1104 		case 0:   /* brand new error */
1105 			yyerror("syntax error");
1106 			if(yydebug >= 1) {
1107 				printf("%s", yystatname(yystate));
1108 				printf("saw %s\n", yytokname(yychar));
1109 			}
1110 yyerrlab:
1111 			yynerrs++;
1112 
1113 		case 1:
1114 		case 2: /* incompletely recovered error ... try again */
1115 			yyerrflag = 3;
1116 
1117 			/* find a state where "error" is a legal shift action */
1118 			while(yyp >= yys) {
1119 				yyn = yypact[yyp->yys] + YYERRCODE;
1120 				if(yyn >= 0 && yyn < YYLAST) {
1121 					yystate = yyact[yyn];  /* simulate a shift of "error" */
1122 					if(yychk[yystate] == YYERRCODE)
1123 						goto yystack;
1124 				}
1125 
1126 				/* the current yyp has no shift onn "error", pop stack */
1127 				if(yydebug >= 2)
1128 					printf("error recovery pops state %d, uncovers %d\n",
1129 						yyp->yys, (yyp-1)->yys );
1130 				yyp--;
1131 			}
1132 			/* there is no state on the stack with an error shift ... abort */
1133 			goto ret1;
1134 
1135 		case 3:  /* no shift yet; clobber input char */
1136 			if(yydebug >= YYEOFCODE)
1137 				printf("error recovery discards %s\n", yytokname(yychar));
1138 			if(yychar == YYEOFCODE)
1139 				goto ret1;
1140 			yychar = -1;
1141 			goto yynewstate;   /* try again in the same state */
1142 		}
1143 	}
1144 
1145 	/* reduction by production yyn */
1146 	if(yydebug >= 2)
1147 		printf("reduce %d in:\n\t%s", yyn, yystatname(yystate));
1148 
1149 	yypt = yyp;
1150 	yyp -= yyr2[yyn];
1151 	yyval = (yyp+1)->yyv;
1152 	yym = yyn;
1153 
1154 	/* consult goto table to find next state */
1155 	yyn = yyr1[yyn];
1156 	yyg = yypgo[yyn];
1157 	yyj = yyg + yyp->yys + 1;
1158 
1159 	if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn)
1160 		yystate = yyact[yyg];
1161 	switch(yym) {
1162 
1163 case 1:
1164 #line	100	"/sys/src/cmd/awk/awkgram.y"
1165 { if (errorflag==0)
1166 			winner = (Node *)stat3(PROGRAM, beginloc, yypt[-0].yyv.p, endloc); } break;
1167 case 2:
1168 #line	102	"/sys/src/cmd/awk/awkgram.y"
1169 { yyclearin; bracecheck(); SYNTAX("bailing out"); } break;
1170 case 13:
1171 #line	126	"/sys/src/cmd/awk/awkgram.y"
1172 {inloop++;} break;
1173 case 14:
1174 #line	127	"/sys/src/cmd/awk/awkgram.y"
1175 { --inloop; yyval.p = stat4(FOR, yypt[-9].yyv.p, notnull(yypt[-6].yyv.p), yypt[-3].yyv.p, yypt[-0].yyv.p); } break;
1176 case 15:
1177 #line	128	"/sys/src/cmd/awk/awkgram.y"
1178 {inloop++;} break;
1179 case 16:
1180 #line	129	"/sys/src/cmd/awk/awkgram.y"
1181 { --inloop; yyval.p = stat4(FOR, yypt[-7].yyv.p, NIL, yypt[-3].yyv.p, yypt[-0].yyv.p); } break;
1182 case 17:
1183 #line	130	"/sys/src/cmd/awk/awkgram.y"
1184 {inloop++;} break;
1185 case 18:
1186 #line	131	"/sys/src/cmd/awk/awkgram.y"
1187 { --inloop; yyval.p = stat3(IN, yypt[-5].yyv.p, makearr(yypt[-3].yyv.p), yypt[-0].yyv.p); } break;
1188 case 19:
1189 #line	135	"/sys/src/cmd/awk/awkgram.y"
1190 { setfname(yypt[-0].yyv.cp); } break;
1191 case 20:
1192 #line	136	"/sys/src/cmd/awk/awkgram.y"
1193 { setfname(yypt[-0].yyv.cp); } break;
1194 case 21:
1195 #line	140	"/sys/src/cmd/awk/awkgram.y"
1196 { yyval.p = notnull(yypt[-1].yyv.p); } break;
1197 case 26:
1198 #line	152	"/sys/src/cmd/awk/awkgram.y"
1199 { yyval.i = 0; } break;
1200 case 28:
1201 #line	157	"/sys/src/cmd/awk/awkgram.y"
1202 { yyval.i = 0; } break;
1203 case 30:
1204 #line	163	"/sys/src/cmd/awk/awkgram.y"
1205 { yyval.p = 0; } break;
1206 case 32:
1207 #line	168	"/sys/src/cmd/awk/awkgram.y"
1208 { yyval.p = 0; } break;
1209 case 33:
1210 #line	169	"/sys/src/cmd/awk/awkgram.y"
1211 { yyval.p = yypt[-1].yyv.p; } break;
1212 case 34:
1213 #line	173	"/sys/src/cmd/awk/awkgram.y"
1214 { yyval.p = notnull(yypt[-0].yyv.p); } break;
1215 case 35:
1216 #line	177	"/sys/src/cmd/awk/awkgram.y"
1217 { yyval.p = stat2(PASTAT, yypt[-0].yyv.p, stat2(PRINT, rectonode(), NIL)); } break;
1218 case 36:
1219 #line	178	"/sys/src/cmd/awk/awkgram.y"
1220 { yyval.p = stat2(PASTAT, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1221 case 37:
1222 #line	179	"/sys/src/cmd/awk/awkgram.y"
1223 { yyval.p = pa2stat(yypt[-2].yyv.p, yypt[-0].yyv.p, stat2(PRINT, rectonode(), NIL)); } break;
1224 case 38:
1225 #line	180	"/sys/src/cmd/awk/awkgram.y"
1226 { yyval.p = pa2stat(yypt[-5].yyv.p, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1227 case 39:
1228 #line	181	"/sys/src/cmd/awk/awkgram.y"
1229 { yyval.p = stat2(PASTAT, NIL, yypt[-1].yyv.p); } break;
1230 case 40:
1231 #line	183	"/sys/src/cmd/awk/awkgram.y"
1232 { beginloc = linkum(beginloc, yypt[-1].yyv.p); yyval.p = 0; } break;
1233 case 41:
1234 #line	185	"/sys/src/cmd/awk/awkgram.y"
1235 { endloc = linkum(endloc, yypt[-1].yyv.p); yyval.p = 0; } break;
1236 case 42:
1237 #line	186	"/sys/src/cmd/awk/awkgram.y"
1238 {infunc++;} break;
1239 case 43:
1240 #line	187	"/sys/src/cmd/awk/awkgram.y"
1241 { infunc--; curfname=0; defn((Cell *)yypt[-7].yyv.p, yypt[-5].yyv.p, yypt[-1].yyv.p); yyval.p = 0; } break;
1242 case 45:
1243 #line	192	"/sys/src/cmd/awk/awkgram.y"
1244 { yyval.p = linkum(yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1245 case 47:
1246 #line	197	"/sys/src/cmd/awk/awkgram.y"
1247 { yyval.p = linkum(yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1248 case 48:
1249 #line	201	"/sys/src/cmd/awk/awkgram.y"
1250 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1251 case 49:
1252 #line	203	"/sys/src/cmd/awk/awkgram.y"
1253 { yyval.p = op3(CONDEXPR, notnull(yypt[-4].yyv.p), yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1254 case 50:
1255 #line	205	"/sys/src/cmd/awk/awkgram.y"
1256 { yyval.p = op2(BOR, notnull(yypt[-2].yyv.p), notnull(yypt[-0].yyv.p)); } break;
1257 case 51:
1258 #line	207	"/sys/src/cmd/awk/awkgram.y"
1259 { yyval.p = op2(AND, notnull(yypt[-2].yyv.p), notnull(yypt[-0].yyv.p)); } break;
1260 case 52:
1261 #line	208	"/sys/src/cmd/awk/awkgram.y"
1262 { yyval.p = op3(yypt[-1].yyv.i, NIL, yypt[-2].yyv.p, (Node*)makedfa(yypt[-0].yyv.s, 0)); } break;
1263 case 53:
1264 #line	210	"/sys/src/cmd/awk/awkgram.y"
1265 { if (constnode(yypt[-0].yyv.p))
1266 			yyval.p = op3(yypt[-1].yyv.i, NIL, yypt[-2].yyv.p, (Node*)makedfa(strnode(yypt[-0].yyv.p), 0));
1267 		  else
1268 			yyval.p = op3(yypt[-1].yyv.i, (Node *)1, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1269 case 54:
1270 #line	214	"/sys/src/cmd/awk/awkgram.y"
1271 { yyval.p = op2(INTEST, yypt[-2].yyv.p, makearr(yypt[-0].yyv.p)); } break;
1272 case 55:
1273 #line	215	"/sys/src/cmd/awk/awkgram.y"
1274 { yyval.p = op2(INTEST, yypt[-3].yyv.p, makearr(yypt[-0].yyv.p)); } break;
1275 case 56:
1276 #line	216	"/sys/src/cmd/awk/awkgram.y"
1277 { yyval.p = op2(CAT, yypt[-1].yyv.p, yypt[-0].yyv.p); } break;
1278 case 59:
1279 #line	222	"/sys/src/cmd/awk/awkgram.y"
1280 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1281 case 60:
1282 #line	224	"/sys/src/cmd/awk/awkgram.y"
1283 { yyval.p = op3(CONDEXPR, notnull(yypt[-4].yyv.p), yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1284 case 61:
1285 #line	226	"/sys/src/cmd/awk/awkgram.y"
1286 { yyval.p = op2(BOR, notnull(yypt[-2].yyv.p), notnull(yypt[-0].yyv.p)); } break;
1287 case 62:
1288 #line	228	"/sys/src/cmd/awk/awkgram.y"
1289 { yyval.p = op2(AND, notnull(yypt[-2].yyv.p), notnull(yypt[-0].yyv.p)); } break;
1290 case 63:
1291 #line	229	"/sys/src/cmd/awk/awkgram.y"
1292 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1293 case 64:
1294 #line	230	"/sys/src/cmd/awk/awkgram.y"
1295 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1296 case 65:
1297 #line	231	"/sys/src/cmd/awk/awkgram.y"
1298 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1299 case 66:
1300 #line	232	"/sys/src/cmd/awk/awkgram.y"
1301 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1302 case 67:
1303 #line	233	"/sys/src/cmd/awk/awkgram.y"
1304 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1305 case 68:
1306 #line	234	"/sys/src/cmd/awk/awkgram.y"
1307 { yyval.p = op2(yypt[-1].yyv.i, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1308 case 69:
1309 #line	235	"/sys/src/cmd/awk/awkgram.y"
1310 { yyval.p = op3(yypt[-1].yyv.i, NIL, yypt[-2].yyv.p, (Node*)makedfa(yypt[-0].yyv.s, 0)); } break;
1311 case 70:
1312 #line	237	"/sys/src/cmd/awk/awkgram.y"
1313 { if (constnode(yypt[-0].yyv.p))
1314 			yyval.p = op3(yypt[-1].yyv.i, NIL, yypt[-2].yyv.p, (Node*)makedfa(strnode(yypt[-0].yyv.p), 0));
1315 		  else
1316 			yyval.p = op3(yypt[-1].yyv.i, (Node *)1, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1317 case 71:
1318 #line	241	"/sys/src/cmd/awk/awkgram.y"
1319 { yyval.p = op2(INTEST, yypt[-2].yyv.p, makearr(yypt[-0].yyv.p)); } break;
1320 case 72:
1321 #line	242	"/sys/src/cmd/awk/awkgram.y"
1322 { yyval.p = op2(INTEST, yypt[-3].yyv.p, makearr(yypt[-0].yyv.p)); } break;
1323 case 73:
1324 #line	243	"/sys/src/cmd/awk/awkgram.y"
1325 {
1326 			if (safe) SYNTAX("cmd | getline is unsafe");
1327 			else yyval.p = op3(GETLINE, yypt[-0].yyv.p, itonp(yypt[-2].yyv.i), yypt[-3].yyv.p); } break;
1328 case 74:
1329 #line	246	"/sys/src/cmd/awk/awkgram.y"
1330 {
1331 			if (safe) SYNTAX("cmd | getline is unsafe");
1332 			else yyval.p = op3(GETLINE, (Node*)0, itonp(yypt[-1].yyv.i), yypt[-2].yyv.p); } break;
1333 case 75:
1334 #line	249	"/sys/src/cmd/awk/awkgram.y"
1335 { yyval.p = op2(CAT, yypt[-1].yyv.p, yypt[-0].yyv.p); } break;
1336 case 78:
1337 #line	255	"/sys/src/cmd/awk/awkgram.y"
1338 { yyval.p = linkum(yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1339 case 79:
1340 #line	256	"/sys/src/cmd/awk/awkgram.y"
1341 { yyval.p = linkum(yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1342 case 81:
1343 #line	261	"/sys/src/cmd/awk/awkgram.y"
1344 { yyval.p = linkum(yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1345 case 82:
1346 #line	265	"/sys/src/cmd/awk/awkgram.y"
1347 { yyval.p = rectonode(); } break;
1348 case 84:
1349 #line	267	"/sys/src/cmd/awk/awkgram.y"
1350 { yyval.p = yypt[-1].yyv.p; } break;
1351 case 93:
1352 #line	284	"/sys/src/cmd/awk/awkgram.y"
1353 { yyval.p = op3(MATCH, NIL, rectonode(), (Node*)makedfa(yypt[-0].yyv.s, 0)); } break;
1354 case 94:
1355 #line	285	"/sys/src/cmd/awk/awkgram.y"
1356 { yyval.p = op1(NOT, notnull(yypt[-0].yyv.p)); } break;
1357 case 95:
1358 #line	289	"/sys/src/cmd/awk/awkgram.y"
1359 {startreg();} break;
1360 case 96:
1361 #line	289	"/sys/src/cmd/awk/awkgram.y"
1362 { yyval.s = yypt[-1].yyv.s; } break;
1363 case 99:
1364 #line	297	"/sys/src/cmd/awk/awkgram.y"
1365 {
1366 			if (safe) SYNTAX("print | is unsafe");
1367 			else yyval.p = stat3(yypt[-3].yyv.i, yypt[-2].yyv.p, itonp(yypt[-1].yyv.i), yypt[-0].yyv.p); } break;
1368 case 100:
1369 #line	300	"/sys/src/cmd/awk/awkgram.y"
1370 {
1371 			if (safe) SYNTAX("print >> is unsafe");
1372 			else yyval.p = stat3(yypt[-3].yyv.i, yypt[-2].yyv.p, itonp(yypt[-1].yyv.i), yypt[-0].yyv.p); } break;
1373 case 101:
1374 #line	303	"/sys/src/cmd/awk/awkgram.y"
1375 {
1376 			if (safe) SYNTAX("print > is unsafe");
1377 			else yyval.p = stat3(yypt[-3].yyv.i, yypt[-2].yyv.p, itonp(yypt[-1].yyv.i), yypt[-0].yyv.p); } break;
1378 case 102:
1379 #line	306	"/sys/src/cmd/awk/awkgram.y"
1380 { yyval.p = stat3(yypt[-1].yyv.i, yypt[-0].yyv.p, NIL, NIL); } break;
1381 case 103:
1382 #line	307	"/sys/src/cmd/awk/awkgram.y"
1383 { yyval.p = stat2(DELETE, makearr(yypt[-3].yyv.p), yypt[-1].yyv.p); } break;
1384 case 104:
1385 #line	308	"/sys/src/cmd/awk/awkgram.y"
1386 { yyval.p = stat2(DELETE, makearr(yypt[-0].yyv.p), 0); } break;
1387 case 105:
1388 #line	309	"/sys/src/cmd/awk/awkgram.y"
1389 { yyval.p = exptostat(yypt[-0].yyv.p); } break;
1390 case 106:
1391 #line	310	"/sys/src/cmd/awk/awkgram.y"
1392 { yyclearin; SYNTAX("illegal statement"); } break;
1393 case 109:
1394 #line	319	"/sys/src/cmd/awk/awkgram.y"
1395 { if (!inloop) SYNTAX("break illegal outside of loops");
1396 				  yyval.p = stat1(BREAK, NIL); } break;
1397 case 110:
1398 #line	321	"/sys/src/cmd/awk/awkgram.y"
1399 { yyval.p = stat1(CLOSE, yypt[-1].yyv.p); } break;
1400 case 111:
1401 #line	322	"/sys/src/cmd/awk/awkgram.y"
1402 {  if (!inloop) SYNTAX("continue illegal outside of loops");
1403 				  yyval.p = stat1(CONTINUE, NIL); } break;
1404 case 112:
1405 #line	324	"/sys/src/cmd/awk/awkgram.y"
1406 {inloop++;} break;
1407 case 113:
1408 #line	324	"/sys/src/cmd/awk/awkgram.y"
1409 {--inloop;} break;
1410 case 114:
1411 #line	325	"/sys/src/cmd/awk/awkgram.y"
1412 { yyval.p = stat2(DO, yypt[-6].yyv.p, notnull(yypt[-2].yyv.p)); } break;
1413 case 115:
1414 #line	326	"/sys/src/cmd/awk/awkgram.y"
1415 { yyval.p = stat1(EXIT, yypt[-1].yyv.p); } break;
1416 case 116:
1417 #line	327	"/sys/src/cmd/awk/awkgram.y"
1418 { yyval.p = stat1(EXIT, NIL); } break;
1419 case 118:
1420 #line	329	"/sys/src/cmd/awk/awkgram.y"
1421 { yyval.p = stat3(IF, yypt[-3].yyv.p, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1422 case 119:
1423 #line	330	"/sys/src/cmd/awk/awkgram.y"
1424 { yyval.p = stat3(IF, yypt[-1].yyv.p, yypt[-0].yyv.p, NIL); } break;
1425 case 120:
1426 #line	331	"/sys/src/cmd/awk/awkgram.y"
1427 { yyval.p = yypt[-1].yyv.p; } break;
1428 case 121:
1429 #line	332	"/sys/src/cmd/awk/awkgram.y"
1430 { if (infunc)
1431 				SYNTAX("next is illegal inside a function");
1432 			  yyval.p = stat1(NEXT, NIL); } break;
1433 case 122:
1434 #line	335	"/sys/src/cmd/awk/awkgram.y"
1435 { if (infunc)
1436 				SYNTAX("nextfile is illegal inside a function");
1437 			  yyval.p = stat1(NEXTFILE, NIL); } break;
1438 case 123:
1439 #line	338	"/sys/src/cmd/awk/awkgram.y"
1440 { yyval.p = stat1(RETURN, yypt[-1].yyv.p); } break;
1441 case 124:
1442 #line	339	"/sys/src/cmd/awk/awkgram.y"
1443 { yyval.p = stat1(RETURN, NIL); } break;
1444 case 126:
1445 #line	341	"/sys/src/cmd/awk/awkgram.y"
1446 {inloop++;} break;
1447 case 127:
1448 #line	341	"/sys/src/cmd/awk/awkgram.y"
1449 { --inloop; yyval.p = stat2(WHILE, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1450 case 128:
1451 #line	342	"/sys/src/cmd/awk/awkgram.y"
1452 { yyval.p = 0; } break;
1453 case 130:
1454 #line	347	"/sys/src/cmd/awk/awkgram.y"
1455 { yyval.p = linkum(yypt[-1].yyv.p, yypt[-0].yyv.p); } break;
1456 case 133:
1457 #line	355	"/sys/src/cmd/awk/awkgram.y"
1458 { yyval.p = op2(DIVEQ, yypt[-3].yyv.p, yypt[-0].yyv.p); } break;
1459 case 134:
1460 #line	356	"/sys/src/cmd/awk/awkgram.y"
1461 { yyval.p = op2(ADD, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1462 case 135:
1463 #line	357	"/sys/src/cmd/awk/awkgram.y"
1464 { yyval.p = op2(MINUS, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1465 case 136:
1466 #line	358	"/sys/src/cmd/awk/awkgram.y"
1467 { yyval.p = op2(MULT, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1468 case 137:
1469 #line	359	"/sys/src/cmd/awk/awkgram.y"
1470 { yyval.p = op2(DIVIDE, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1471 case 138:
1472 #line	360	"/sys/src/cmd/awk/awkgram.y"
1473 { yyval.p = op2(MOD, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1474 case 139:
1475 #line	361	"/sys/src/cmd/awk/awkgram.y"
1476 { yyval.p = op2(POWER, yypt[-2].yyv.p, yypt[-0].yyv.p); } break;
1477 case 140:
1478 #line	362	"/sys/src/cmd/awk/awkgram.y"
1479 { yyval.p = op1(UMINUS, yypt[-0].yyv.p); } break;
1480 case 141:
1481 #line	363	"/sys/src/cmd/awk/awkgram.y"
1482 { yyval.p = yypt[-0].yyv.p; } break;
1483 case 142:
1484 #line	364	"/sys/src/cmd/awk/awkgram.y"
1485 { yyval.p = op1(NOT, notnull(yypt[-0].yyv.p)); } break;
1486 case 143:
1487 #line	365	"/sys/src/cmd/awk/awkgram.y"
1488 { yyval.p = op2(BLTIN, itonp(yypt[-2].yyv.i), rectonode()); } break;
1489 case 144:
1490 #line	366	"/sys/src/cmd/awk/awkgram.y"
1491 { yyval.p = op2(BLTIN, itonp(yypt[-3].yyv.i), yypt[-1].yyv.p); } break;
1492 case 145:
1493 #line	367	"/sys/src/cmd/awk/awkgram.y"
1494 { yyval.p = op2(BLTIN, itonp(yypt[-0].yyv.i), rectonode()); } break;
1495 case 146:
1496 #line	368	"/sys/src/cmd/awk/awkgram.y"
1497 { yyval.p = op2(CALL, celltonode(yypt[-2].yyv.cp,CVAR), NIL); } break;
1498 case 147:
1499 #line	369	"/sys/src/cmd/awk/awkgram.y"
1500 { yyval.p = op2(CALL, celltonode(yypt[-3].yyv.cp,CVAR), yypt[-1].yyv.p); } break;
1501 case 148:
1502 #line	370	"/sys/src/cmd/awk/awkgram.y"
1503 { yyval.p = op1(PREDECR, yypt[-0].yyv.p); } break;
1504 case 149:
1505 #line	371	"/sys/src/cmd/awk/awkgram.y"
1506 { yyval.p = op1(PREINCR, yypt[-0].yyv.p); } break;
1507 case 150:
1508 #line	372	"/sys/src/cmd/awk/awkgram.y"
1509 { yyval.p = op1(POSTDECR, yypt[-1].yyv.p); } break;
1510 case 151:
1511 #line	373	"/sys/src/cmd/awk/awkgram.y"
1512 { yyval.p = op1(POSTINCR, yypt[-1].yyv.p); } break;
1513 case 152:
1514 #line	374	"/sys/src/cmd/awk/awkgram.y"
1515 { yyval.p = op3(GETLINE, yypt[-2].yyv.p, itonp(yypt[-1].yyv.i), yypt[-0].yyv.p); } break;
1516 case 153:
1517 #line	375	"/sys/src/cmd/awk/awkgram.y"
1518 { yyval.p = op3(GETLINE, NIL, itonp(yypt[-1].yyv.i), yypt[-0].yyv.p); } break;
1519 case 154:
1520 #line	376	"/sys/src/cmd/awk/awkgram.y"
1521 { yyval.p = op3(GETLINE, yypt[-0].yyv.p, NIL, NIL); } break;
1522 case 155:
1523 #line	377	"/sys/src/cmd/awk/awkgram.y"
1524 { yyval.p = op3(GETLINE, NIL, NIL, NIL); } break;
1525 case 156:
1526 #line	379	"/sys/src/cmd/awk/awkgram.y"
1527 { yyval.p = op2(INDEX, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1528 case 157:
1529 #line	381	"/sys/src/cmd/awk/awkgram.y"
1530 { SYNTAX("index() doesn't permit regular expressions");
1531 		  yyval.p = op2(INDEX, yypt[-3].yyv.p, (Node*)yypt[-1].yyv.s); } break;
1532 case 158:
1533 #line	383	"/sys/src/cmd/awk/awkgram.y"
1534 { yyval.p = yypt[-1].yyv.p; } break;
1535 case 159:
1536 #line	385	"/sys/src/cmd/awk/awkgram.y"
1537 { yyval.p = op3(MATCHFCN, NIL, yypt[-3].yyv.p, (Node*)makedfa(yypt[-1].yyv.s, 1)); } break;
1538 case 160:
1539 #line	387	"/sys/src/cmd/awk/awkgram.y"
1540 { if (constnode(yypt[-1].yyv.p))
1541 			yyval.p = op3(MATCHFCN, NIL, yypt[-3].yyv.p, (Node*)makedfa(strnode(yypt[-1].yyv.p), 1));
1542 		  else
1543 			yyval.p = op3(MATCHFCN, (Node *)1, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1544 case 161:
1545 #line	391	"/sys/src/cmd/awk/awkgram.y"
1546 { yyval.p = celltonode(yypt[-0].yyv.cp, CCON); } break;
1547 case 162:
1548 #line	393	"/sys/src/cmd/awk/awkgram.y"
1549 { yyval.p = op4(SPLIT, yypt[-5].yyv.p, makearr(yypt[-3].yyv.p), yypt[-1].yyv.p, (Node*)STRING); } break;
1550 case 163:
1551 #line	395	"/sys/src/cmd/awk/awkgram.y"
1552 { yyval.p = op4(SPLIT, yypt[-5].yyv.p, makearr(yypt[-3].yyv.p), (Node*)makedfa(yypt[-1].yyv.s, 1), (Node *)REGEXPR); } break;
1553 case 164:
1554 #line	397	"/sys/src/cmd/awk/awkgram.y"
1555 { yyval.p = op4(SPLIT, yypt[-3].yyv.p, makearr(yypt[-1].yyv.p), NIL, (Node*)STRING); } break;
1556 case 165:
1557 #line	398	"/sys/src/cmd/awk/awkgram.y"
1558 { yyval.p = op1(yypt[-3].yyv.i, yypt[-1].yyv.p); } break;
1559 case 166:
1560 #line	399	"/sys/src/cmd/awk/awkgram.y"
1561 { yyval.p = celltonode(yypt[-0].yyv.cp, CCON); } break;
1562 case 167:
1563 #line	401	"/sys/src/cmd/awk/awkgram.y"
1564 { yyval.p = op4(yypt[-5].yyv.i, NIL, (Node*)makedfa(yypt[-3].yyv.s, 1), yypt[-1].yyv.p, rectonode()); } break;
1565 case 168:
1566 #line	403	"/sys/src/cmd/awk/awkgram.y"
1567 { if (constnode(yypt[-3].yyv.p))
1568 			yyval.p = op4(yypt[-5].yyv.i, NIL, (Node*)makedfa(strnode(yypt[-3].yyv.p), 1), yypt[-1].yyv.p, rectonode());
1569 		  else
1570 			yyval.p = op4(yypt[-5].yyv.i, (Node *)1, yypt[-3].yyv.p, yypt[-1].yyv.p, rectonode()); } break;
1571 case 169:
1572 #line	408	"/sys/src/cmd/awk/awkgram.y"
1573 { yyval.p = op4(yypt[-7].yyv.i, NIL, (Node*)makedfa(yypt[-5].yyv.s, 1), yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1574 case 170:
1575 #line	410	"/sys/src/cmd/awk/awkgram.y"
1576 { if (constnode(yypt[-5].yyv.p))
1577 			yyval.p = op4(yypt[-7].yyv.i, NIL, (Node*)makedfa(strnode(yypt[-5].yyv.p), 1), yypt[-3].yyv.p, yypt[-1].yyv.p);
1578 		  else
1579 			yyval.p = op4(yypt[-7].yyv.i, (Node *)1, yypt[-5].yyv.p, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1580 case 171:
1581 #line	415	"/sys/src/cmd/awk/awkgram.y"
1582 { yyval.p = op3(SUBSTR, yypt[-5].yyv.p, yypt[-3].yyv.p, yypt[-1].yyv.p); } break;
1583 case 172:
1584 #line	417	"/sys/src/cmd/awk/awkgram.y"
1585 { yyval.p = op3(SUBSTR, yypt[-3].yyv.p, yypt[-1].yyv.p, NIL); } break;
1586 case 175:
1587 #line	423	"/sys/src/cmd/awk/awkgram.y"
1588 { yyval.p = op2(ARRAY, makearr(yypt[-3].yyv.p), yypt[-1].yyv.p); } break;
1589 case 176:
1590 #line	424	"/sys/src/cmd/awk/awkgram.y"
1591 { yyval.p = op1(INDIRECT, celltonode(yypt[-0].yyv.cp, CVAR)); } break;
1592 case 177:
1593 #line	425	"/sys/src/cmd/awk/awkgram.y"
1594 { yyval.p = op1(INDIRECT, yypt[-0].yyv.p); } break;
1595 case 178:
1596 #line	429	"/sys/src/cmd/awk/awkgram.y"
1597 { arglist = yyval.p = 0; } break;
1598 case 179:
1599 #line	430	"/sys/src/cmd/awk/awkgram.y"
1600 { arglist = yyval.p = celltonode(yypt[-0].yyv.cp,CVAR); } break;
1601 case 180:
1602 #line	431	"/sys/src/cmd/awk/awkgram.y"
1603 {
1604 			checkdup(yypt[-2].yyv.p, yypt[-0].yyv.cp);
1605 			arglist = yyval.p = linkum(yypt[-2].yyv.p,celltonode(yypt[-0].yyv.cp,CVAR)); } break;
1606 case 181:
1607 #line	437	"/sys/src/cmd/awk/awkgram.y"
1608 { yyval.p = celltonode(yypt[-0].yyv.cp, CVAR); } break;
1609 case 182:
1610 #line	438	"/sys/src/cmd/awk/awkgram.y"
1611 { yyval.p = op1(ARG, itonp(yypt[-0].yyv.i)); } break;
1612 case 183:
1613 #line	439	"/sys/src/cmd/awk/awkgram.y"
1614 { yyval.p = op1(VARNF, (Node *) yypt[-0].yyv.cp); } break;
1615 case 184:
1616 #line	444	"/sys/src/cmd/awk/awkgram.y"
1617 { yyval.p = notnull(yypt[-1].yyv.p); } break;
1618 	}
1619 	goto yystack;  /* stack new state and value */
1620 }
1621