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