Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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);
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
 
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
 
139
int constnode(Node *p)
140
{
141
	return isvalue(p) && ((Cell *) (p->narg[0]))->csub == CCON;
142
}
143
 
144
char *strnode(Node *p)
145
{
146
	return ((Cell *)(p->narg[0]))->sval;
147
}
148
 
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
 
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
 
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*
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*
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
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
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
}