1 #ifndef lint
2 static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
3 #endif
4 #define YYBYACC 1
5 #define YYMAJOR 1
6 #define YYMINOR 9
7 #define yyclearin (yychar=(-1))
8 #define yyerrok (yyerrflag=0)
9 #define YYRECOVERING (yyerrflag!=0)
10 #define YYPREFIX "yy"
11 #line 31 "parse.y"
12 #include <stdio.h>
13 #include "awka.h"
14 #include "symtype.h"
15 #include "code.h"
16 #include "memory.h"
17 #include "bi_funct.h"
18 #include "bi_vars.h"
19 #include "jmp.h"
20 #include "field.h"
21 #include "files.h"
22
23
24 #define YYMAXDEPTH 200
25
26
27 extern void PROTO( eat_nl, (void) ) ;
28 static void PROTO( resize_fblock, (FBLOCK *) ) ;
29 static void PROTO( switch_code_to_main, (void)) ;
30 static void PROTO( code_array, (SYMTAB *) ) ;
31 static void PROTO( code_call_id, (CA_REC *, SYMTAB *) ) ;
32 static void PROTO( field_A2I, (void)) ;
33 static void PROTO( check_var, (SYMTAB *) ) ;
34 static void PROTO( check_array, (SYMTAB *) ) ;
35 static void PROTO( RE_as_arg, (void)) ;
36
37 static int scope ;
38 static FBLOCK *active_funct ;
39 /* when scope is SCOPE_FUNCT */
40
41 #define code_address(x) if( is_local(x) ) \
42 code2op(L_PUSHA, (x)->offset) ;\
43 else code2(_PUSHA, (x)->stval.cp)
44
45 #define CDP(x) (code_base+(x))
46 /* WARNING: These CDP() calculations become invalid after calls
47 that might change code_base. Which are: code2(), code2op(),
48 code_jmp() and code_pop().
49 */
50
51 /* this nonsense caters to MSDOS large model */
52 #define CODE_FE_PUSHA() code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA)
53
54 #line 75 "parse.y"
55 typedef union{
56 CELL *cp ;
57 SYMTAB *stp ;
58 int start ; /* code starting address as offset from code_base */
59 PF_CP fp ; /* ptr to a (print/printf) or (sub/gsub) function */
60 BI_REC *bip ; /* ptr to info about a builtin */
61 FBLOCK *fbp ; /* ptr to a function block */
62 ARG2_REC *arg2p ;
63 CA_REC *ca_p ;
64 int ival ;
65 PTR ptr ;
66 } YYSTYPE;
67 #line 68 "y.tab.c"
68 #define UNEXPECTED 257
69 #define BAD_DECIMAL 258
70 #define NL 259
71 #define SEMI_COLON 260
72 #define LBRACE 261
73 #define RBRACE 262
74 #define LBOX 263
75 #define RBOX 264
76 #define COMMA 265
77 #define IO_OUT 266
78 #define COPROCESS_OUT 267
79 #define ASSIGN 268
80 #define ADD_ASG 269
81 #define SUB_ASG 270
82 #define MUL_ASG 271
83 #define DIV_ASG 272
84 #define MOD_ASG 273
85 #define POW_ASG 274
86 #define QMARK 275
87 #define COLON 276
88 #define OR 277
89 #define AND 278
90 #define IN 279
91 #define MATCH 280
92 #define EQ 281
93 #define NEQ 282
94 #define LT 283
95 #define LTE 284
96 #define GT 285
97 #define GTE 286
98 #define CAT 287
99 #define GETLINE 288
100 #define PLUS 289
101 #define MINUS 290
102 #define MUL 291
103 #define DIV 292
104 #define MOD 293
105 #define NOT 294
106 #define UMINUS 295
107 #define IO_IN 296
108 #define PIPE 297
109 #define COPROCESS 298
110 #define POW 299
111 #define INC_or_DEC 300
112 #define DOLLAR 301
113 #define FIELD 302
114 #define LPAREN 303
115 #define RPAREN 304
116 #define DOUBLE 305
117 #define STRING_ 306
118 #define RE 307
119 #define ID 308
120 #define D_ID 309
121 #define FUNCT_ID 310
122 #define BUILTIN 311
123 #define LENGTH 312
124 #define PRINT 313
125 #define PRINTF 314
126 #define SPLIT 315
127 #define MATCH_FUNC 316
128 #define SUB 317
129 #define GSUB 318
130 #define GENSUB 319
131 #define ALENGTH_FUNC 320
132 #define ASORT_FUNC 321
133 #define DO 322
134 #define WHILE 323
135 #define FOR 324
136 #define BREAK 325
137 #define CONTINUE 326
138 #define IF 327
139 #define ELSE 328
140 #define DELETE 329
141 #define a_BEGIN 330
142 #define a_END 331
143 #define EXIT 332
144 #define ABORT 333
145 #define NEXT 334
146 #define NEXTFILE 335
147 #define RETURN 336
148 #define FUNCTION 337
149 #define YYERRCODE 256
150 short yylhs[] = { -1,
151 0, 0, 38, 38, 38, 39, 42, 39, 43, 39,
152 44, 39, 45, 46, 39, 1, 1, 2, 2, 3,
153 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
154 47, 47, 13, 13, 13, 13, 13, 13, 13, 13,
155 13, 13, 13, 13, 13, 13, 13, 48, 13, 49,
156 13, 50, 51, 13, 14, 14, 15, 15, 15, 15,
157 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
158 15, 15, 15, 15, 15, 10, 10, 26, 26, 27,
159 27, 8, 8, 5, 4, 28, 28, 6, 6, 6,
160 7, 7, 52, 52, 52, 17, 4, 53, 4, 54,
161 4, 16, 4, 4, 18, 18, 19, 19, 55, 55,
162 13, 13, 10, 15, 15, 4, 4, 20, 4, 11,
163 11, 11, 11, 11, 15, 13, 13, 13, 13, 13,
164 13, 13, 15, 22, 56, 56, 15, 15, 15, 15,
165 15, 23, 4, 4, 4, 4, 21, 21, 15, 15,
166 15, 15, 15, 15, 15, 57, 12, 12, 9, 9,
167 15, 30, 15, 29, 29, 24, 24, 25, 25, 40,
168 31, 32, 32, 36, 36, 37, 37, 41, 15, 33,
169 33, 34, 34, 34, 35, 35,
170 };
171 short yylen[] = { 2,
172 1, 2, 1, 1, 2, 1, 0, 3, 0, 3,
173 0, 3, 0, 0, 6, 3, 3, 1, 1, 1,
174 2, 1, 2, 1, 2, 2, 2, 1, 2, 2,
175 1, 1, 1, 3, 3, 3, 3, 3, 3, 3,
176 3, 3, 3, 3, 3, 3, 3, 0, 4, 0,
177 4, 0, 0, 7, 1, 2, 1, 1, 1, 3,
178 1, 3, 3, 3, 3, 3, 3, 2, 2, 2,
179 1, 2, 2, 2, 2, 1, 5, 0, 1, 1,
180 3, 5, 1, 0, 5, 1, 1, 1, 3, 2,
181 3, 3, 0, 2, 2, 4, 2, 1, 4, 1,
182 7, 4, 2, 4, 3, 4, 1, 2, 1, 2,
183 3, 5, 5, 5, 6, 7, 3, 6, 2, 1,
184 2, 6, 2, 3, 1, 3, 3, 3, 3, 3,
185 3, 3, 2, 5, 1, 3, 4, 5, 7, 8,
186 6, 1, 2, 3, 2, 3, 2, 3, 1, 2,
187 2, 3, 4, 3, 4, 1, 1, 1, 2, 3,
188 8, 1, 6, 1, 1, 1, 3, 1, 3, 2,
189 4, 2, 2, 0, 1, 1, 3, 1, 3, 2,
190 2, 1, 3, 3, 2, 2,
191 };
192 short yydefred[] = { 0,
193 178, 0, 156, 0, 0, 0, 0, 0, 120, 0,
194 57, 58, 61, 0, 84, 84, 83, 0, 0, 164,
195 165, 162, 0, 84, 7, 9, 0, 0, 6, 71,
196 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
197 0, 1, 3, 4, 0, 0, 0, 31, 32, 86,
198 87, 100, 0, 0, 0, 0, 0, 0, 0, 0,
199 0, 0, 0, 22, 0, 20, 0, 0, 0, 0,
200 0, 28, 84, 24, 0, 0, 0, 84, 0, 0,
201 0, 0, 0, 0, 84, 73, 75, 0, 123, 0,
202 0, 0, 72, 0, 0, 0, 0, 0, 0, 0,
203 0, 0, 172, 173, 2, 0, 0, 0, 0, 0,
204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205 74, 13, 52, 48, 50, 0, 0, 0, 0, 0,
206 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207 0, 0, 0, 0, 135, 133, 0, 0, 170, 0,
208 5, 159, 157, 158, 0, 17, 25, 0, 0, 26,
209 27, 0, 0, 0, 143, 0, 145, 29, 30, 0,
210 147, 0, 16, 21, 23, 103, 0, 107, 0, 0,
211 119, 0, 0, 0, 0, 0, 0, 0, 0, 0,
212 0, 0, 124, 0, 60, 0, 0, 179, 0, 0,
213 0, 0, 0, 0, 8, 10, 0, 0, 0, 0,
214 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
215 0, 0, 0, 0, 111, 0, 41, 42, 43, 44,
216 45, 46, 18, 12, 19, 0, 0, 0, 0, 0,
217 0, 0, 0, 0, 0, 0, 0, 176, 0, 0,
218 160, 0, 105, 0, 0, 0, 0, 117, 144, 146,
219 148, 98, 0, 108, 109, 0, 0, 0, 0, 0,
220 88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
221 0, 0, 180, 0, 0, 181, 0, 0, 0, 137,
222 0, 0, 0, 0, 0, 155, 153, 136, 0, 0,
223 171, 0, 102, 0, 106, 96, 0, 99, 110, 104,
224 90, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225 0, 0, 112, 0, 184, 186, 183, 185, 0, 134,
226 0, 0, 138, 0, 53, 0, 0, 177, 0, 0,
227 0, 0, 0, 85, 0, 0, 0, 82, 113, 77,
228 122, 115, 0, 141, 0, 15, 0, 0, 166, 163,
229 0, 118, 0, 0, 0, 139, 0, 0, 0, 116,
230 101, 140, 167, 0, 168, 161, 0, 169,
231 };
232 short yydgoto[] = { 28,
233 64, 234, 65, 66, 94, 269, 90, 30, 31, 32,
234 33, 155, 270, 35, 36, 68, 69, 70, 180, 71,
235 72, 37, 246, 360, 376, 271, 272, 73, 38, 39,
236 40, 41, 198, 199, 286, 249, 250, 42, 43, 44,
237 45, 101, 102, 134, 221, 334, 74, 223, 224, 222,
238 357, 315, 263, 75, 267, 146, 46,
239 };
240 short yysindex[] = { 83,
241 0, 354, 0, 2652, 2652, 2652, -57, 2550, 0, 2686,
242 0, 0, 0, -272, 0, 0, 0, -262, -260, 0,
243 0, 0, -258, 0, 0, 0, -270, 83, 0, 0,
244 2652, -143, 2390, 2981, 2652, 339, -252, -254, -247, -228,
245 -225, 0, 0, 0, -228, -103, -159, 0, 0, 0,
246 0, 0, -222, -217, -150, -150, -213, -224, 2061, 2061,
247 -150, -150, 2061, 0, 192, 0, 2931, 435, 435, 2158,
248 435, 0, 0, 0, 435, 2686, -272, 0, -203, -148,
249 -148, -148, -132, 0, 0, 0, 0, 0, 0, -233,
250 2543, 1, 0, -164, -188, -166, 2686, 2686, -204, -151,
251 -228, -228, 0, 0, 0, -193, 2686, 2686, 2686, 2686,
252 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686, 2686,
253 0, 0, 0, 0, 0, -154, 2686, 2686, 2686, 2686,
254 2686, 2686, 2686, -58, 339, 2652, 2652, 2652, 2652, 2652,
255 -116, -97, 2652, 2686, 0, 0, 2686, 2686, 0, -111,
256 0, 0, 0, 0, -92, 0, 0, 2686, 2193, 0,
257 0, 2686, -150, 2931, 0, 2931, 0, 0, 0, 2931,
258 0, -150, 0, 0, 0, 0, -119, 0, 2943, 2584,
259 0, 2720, -112, 2835, -20, -86, -56, -6, -38, 5,
260 2686, -12, 0, 2686, 0, 2686, -27, 0, 2754, 2686,
261 3003, 3025, -10, -16, 0, 0, 3071, 3071, 3071, 3071,
262 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071,
263 2686, 2686, 2686, 2686, 0, -59, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 186, 186, -148, -148, -148,
265 -57, -57, -193, 2847, 3071, 33, 35, 0, 6, 39,
266 0, 2863, 0, -256, 2959, 2875, 75, 0, 0, 0,
267 0, 0, 435, 0, 0, 2891, 435, 2618, -197, 3071,
268 0, 80, 46, 2686, 2686, 2686, 2686, 2686, 3071, 47,
269 3071, -80, 0, -249, 185, 0, 56, 55, 2686, 0,
270 -219, 3071, 3059, 2969, 429, 0, 0, 0, 2686, 2686,
271 0, 59, 0, 60, 0, 0, 2686, 0, 0, 0,
272 0, -212, 2686, 2686, -150, 2686, 2686, -29, 65, -24,
273 71, -9, 0, 50, 0, 0, 0, 0, 0, 0,
274 -208, 66, 0, -58, 0, 2517, 3047, 0, 77, -2,
275 -12, 3071, 3071, 0, 3071, 2903, 50, 0, 0, 0,
276 0, 0, 68, 0, 78, 0, 2686, -57, 0, 0,
277 2686, 0, -150, -150, 88, 0, 3071, 93, 2545, 0,
278 0, 0, 0, 2652, 0, 0, 267, 0,
279 };
280 short yyrindex[] = { 0,
281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
282 0, 0, 0, 702, 0, 0, 0, 0, 0, 0,
283 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
284 0, 0, 1899, 14, 42, 1962, 0, 0, 0, 0,
285 0, 0, 0, 0, 0, 1710, 0, 0, 0, 0,
286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
288 0, 0, 0, 0, 0, 0, 639, 0, 765, 1143,
289 1206, 1269, 0, 513, 0, 0, 0, 576, 0, 0,
290 2300, 0, 0, 0, 0, 0, 0, 0, 0, 0,
291 0, 0, 0, 0, 0, 1332, 0, 0, 0, 0,
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
294 0, 0, 0, 0, 2025, 0, 0, 0, 0, 0,
295 0, 0, 0, 0, 0, 0, 0, 0, 0, 102,
296 0, 0, 0, 0, 828, 0, 0, 0, 0, 0,
297 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
298 0, 0, 0, 0, 0, 0, 273, 0, 0, 0,
299 0, -7, 0, 0, 0, 0, 0, 0, 0, 0,
300 0, 0, 0, 0, 0, 0, 2788, 0, 0, 103,
301 0, 0, 0, 0, 0, 0, -199, 171, 359, 440,
302 2363, 2376, 2389, 2409, 2422, 2435, 2455, 2468, 2481, 2501,
303 0, 0, 0, 0, 0, -46, 0, 0, 0, 0,
304 0, 0, 0, 0, 0, 1773, 1836, 1395, 1458, 1521,
305 1584, 1647, 891, 0, -202, 0, 0, 0, 0, 104,
306 0, 0, 0, 2123, 0, 0, 0, 0, 0, 0,
307 0, 0, 0, 0, 0, 0, 0, 0, 70, 76,
308 0, -230, 0, 0, 103, 0, 103, 0, -192, 0,
309 -190, 0, 0, 2252, 0, 0, 0, 0, 0, 0,
310 0, 53, 0, 278, 151, 0, 0, 0, 0, 0,
311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
312 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
313 0, 0, 0, 1080, 0, 0, 0, 0, 954, 0,
314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
315 29, 72, 74, 0, 92, 0, 1017, 0, 0, 0,
316 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
317 0, 0, 0, 0, 0, 0, 2514, 0, 0, 0,
318 0, 0, 0, 0, 0, 0, 0, 0,
319 };
320 short yygindex[] = { 0,
321 19, 85, 0, -51, 10, 0, 119, 0, 0, 8,
322 -4, -220, 48, 0, 4, 0, 0, 0, 0, 0,
323 0, 0, -141, 0, 0, -195, -185, 0, 0, 0,
324 0, 0, 0, 0, 0, 0, 0, 393, 0, 0,
325 0, 0, 0, 0, 0, 0, 127, 0, 0, 0,
326 0, 0, 0, 0, 0, 0, 0,
327 };
328 #define YYTABLESIZE 3357
329 short yytable[] = { 79,
330 79, 79, 87, 79, 287, 91, 247, 80, 81, 82,
331 282, 89, 144, 174, 86, 325, 176, 177, 29, 181,
332 296, 297, 304, 183, 95, 96, 79, 93, 79, 79,
333 79, 191, 2, 100, 106, 79, 79, 103, 135, 104,
334 97, 154, 98, 93, 99, 332, 29, 34, 147, 67,
335 93, 145, 191, 153, 326, 148, 353, 92, 149, 34,
336 34, 34, 142, 151, 34, 34, 34, 34, 313, 314,
337 192, 91, 92, 79, 91, 34, 34, 150, 187, 319,
338 158, 321, 182, 163, 333, 159, 185, 186, 318, 162,
339 320, 341, 322, 188, 189, 354, 121, 190, 196, 48,
340 49, 142, 156, 203, 34, 143, 164, 166, 48, 49,
341 170, 92, 67, 91, 197, 67, 67, 179, 67, 205,
342 206, 340, 67, 184, 107, 108, 109, 110, 111, 112,
343 113, 79, 79, 79, 79, 79, 200, 368, 79, 236,
344 237, 238, 239, 240, 201, 202, 243, 331, 141, 142,
345 143, 204, 233, 225, 207, 208, 209, 210, 211, 212,
346 213, 214, 215, 216, 217, 218, 219, 220, 8, 9,
347 83, 241, 257, 157, 226, 227, 228, 229, 230, 231,
348 232, 160, 161, 324, 316, 165, 167, 168, 169, 171,
349 242, 244, 152, 175, 245, 245, 248, 8, 9, 83,
350 48, 49, 2, 251, 84, 252, 255, 85, 262, 256,
351 273, 308, 47, 47, 47, 310, 275, 47, 47, 47,
352 47, 128, 129, 130, 131, 132, 133, 266, 47, 47,
353 47, 47, 47, 47, 347, 316, 154, 154, 279, 349,
354 316, 281, 274, 8, 9, 83, 285, 193, 153, 153,
355 84, 78, 78, 85, 351, 316, 276, 47, 78, 78,
356 235, 363, 316, 91, 277, 194, 280, 278, 292, 293,
357 294, 295, 11, 11, 11, 123, 283, 124, 125, 126,
358 127, 128, 129, 130, 131, 132, 133, 89, 89, 258,
359 259, 291, 260, 290, 89, 89, 261, 299, 157, 300,
360 33, 33, 33, 302, 195, 33, 33, 33, 33, 301,
361 67, 14, 14, 14, 67, 92, 33, 33, 33, 33,
362 33, 33, 33, 33, 33, 33, 33, 33, 93, 93,
363 94, 94, 95, 95, 80, 80, 245, 307, 1, 80,
364 80, 80, 80, 2, 316, 33, 336, 337, 317, 352,
365 81, 81, 233, 154, 323, 81, 81, 81, 81, 329,
366 342, 343, 330, 345, 346, 153, 338, 339, 348, 79,
367 3, 4, 5, 355, 350, 365, 6, 377, 84, 80,
368 362, 366, 7, 8, 9, 10, 312, 11, 12, 13,
369 14, 372, 15, 16, 17, 81, 373, 18, 19, 20,
370 21, 22, 23, 24, 367, 174, 78, 175, 369, 51,
371 51, 51, 25, 26, 51, 51, 51, 51, 356, 27,
372 105, 0, 0, 0, 0, 51, 51, 51, 51, 35,
373 35, 35, 0, 0, 35, 35, 35, 35, 0, 0,
374 0, 344, 0, 0, 0, 0, 35, 172, 0, 327,
375 48, 49, 2, 173, 51, 0, 0, 0, 0, 123,
376 235, 124, 125, 126, 127, 128, 129, 130, 131, 132,
377 133, 0, 0, 0, 35, 0, 138, 139, 140, 3,
378 4, 5, 141, 142, 143, 6, 0, 0, 328, 370,
379 371, 7, 8, 9, 10, 0, 11, 12, 13, 14,
380 0, 15, 16, 17, 50, 51, 18, 19, 20, 21,
381 22, 23, 24, 52, 53, 54, 55, 56, 57, 0,
382 58, 0, 0, 59, 60, 61, 62, 63, 97, 0,
383 0, 97, 97, 97, 97, 0, 49, 49, 49, 0,
384 0, 49, 49, 49, 49, 0, 0, 0, 0, 0,
385 0, 0, 49, 49, 49, 136, 137, 138, 139, 140,
386 97, 97, 97, 141, 142, 143, 97, 0, 0, 0,
387 378, 0, 97, 97, 97, 97, 0, 97, 97, 97,
388 97, 49, 97, 97, 97, 97, 97, 97, 97, 97,
389 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
390 0, 97, 0, 0, 97, 97, 97, 97, 97, 47,
391 0, 0, 48, 49, 2, 0, 0, 36, 36, 36,
392 0, 0, 36, 36, 36, 36, 0, 136, 137, 138,
393 139, 140, 0, 0, 36, 141, 142, 143, 0, 0,
394 0, 3, 4, 5, 0, 0, 0, 6, 0, 0,
395 0, 0, 0, 7, 8, 9, 10, 0, 11, 12,
396 13, 14, 36, 15, 16, 17, 50, 51, 18, 19,
397 20, 21, 22, 23, 24, 52, 53, 54, 55, 56,
398 57, 0, 58, 0, 0, 59, 60, 61, 62, 63,
399 172, 0, 0, 48, 49, 2, 0, 0, 37, 37,
400 37, 0, 0, 37, 37, 37, 37, 126, 127, 128,
401 129, 130, 131, 132, 133, 37, 0, 0, 0, 0,
402 0, 0, 3, 4, 5, 0, 0, 0, 6, 0,
403 0, 0, 0, 0, 7, 8, 9, 10, 0, 11,
404 12, 13, 14, 37, 15, 16, 17, 50, 51, 18,
405 19, 20, 21, 22, 23, 24, 52, 53, 54, 55,
406 56, 57, 0, 58, 0, 0, 59, 60, 61, 62,
407 63, 76, 76, 76, 0, 84, 76, 76, 76, 76,
408 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
409 76, 76, 76, 76, 76, 76, 76, 76, 76, 0,
410 76, 76, 76, 76, 76, 76, 76, 0, 76, 76,
411 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
412 76, 0, 76, 76, 76, 0, 0, 76, 76, 76,
413 76, 76, 76, 76, 121, 121, 121, 0, 84, 121,
414 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
415 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
416 121, 121, 0, 121, 121, 121, 121, 121, 121, 121,
417 0, 121, 121, 121, 121, 121, 121, 121, 121, 121,
418 121, 121, 121, 121, 0, 121, 121, 121, 0, 0,
419 121, 121, 121, 121, 121, 121, 121, 59, 59, 59,
420 0, 84, 59, 59, 59, 59, 59, 59, 59, 59,
421 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
422 59, 59, 59, 59, 59, 0, 59, 59, 59, 59,
423 59, 59, 59, 0, 59, 59, 59, 59, 0, 59,
424 59, 59, 59, 59, 59, 59, 59, 0, 59, 59,
425 59, 0, 0, 59, 59, 59, 59, 59, 59, 59,
426 59, 59, 59, 0, 84, 59, 59, 59, 59, 76,
427 76, 76, 76, 76, 76, 76, 59, 59, 59, 59,
428 59, 59, 59, 59, 59, 59, 59, 59, 0, 59,
429 59, 59, 59, 59, 59, 59, 0, 0, 59, 59,
430 59, 0, 59, 59, 59, 59, 59, 59, 59, 59,
431 0, 59, 59, 59, 0, 0, 59, 59, 59, 59,
432 59, 59, 59, 125, 125, 125, 0, 0, 125, 125,
433 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
434 125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
435 125, 0, 125, 125, 125, 125, 125, 125, 125, 0,
436 125, 125, 125, 125, 0, 125, 125, 125, 125, 125,
437 125, 125, 125, 0, 125, 125, 125, 0, 0, 125,
438 125, 125, 125, 125, 125, 125, 150, 150, 150, 0,
439 0, 150, 150, 150, 150, 150, 150, 150, 150, 150,
440 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
441 150, 150, 150, 150, 0, 150, 150, 150, 150, 150,
442 150, 150, 0, 0, 150, 150, 150, 150, 150, 150,
443 150, 150, 150, 150, 150, 150, 0, 150, 150, 150,
444 0, 0, 150, 150, 150, 150, 150, 150, 150, 67,
445 67, 67, 0, 0, 67, 67, 67, 67, 67, 67,
446 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
447 67, 67, 67, 67, 67, 67, 67, 0, 67, 67,
448 67, 67, 67, 67, 67, 0, 67, 67, 67, 0,
449 67, 67, 67, 67, 67, 67, 67, 67, 67, 0,
450 67, 67, 67, 0, 0, 67, 67, 67, 67, 67,
451 67, 67, 82, 82, 82, 0, 0, 82, 82, 82,
452 82, 77, 77, 77, 77, 77, 77, 77, 82, 82,
453 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
454 0, 82, 82, 82, 82, 82, 82, 82, 0, 0,
455 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
456 82, 82, 0, 82, 82, 82, 0, 0, 82, 82,
457 82, 82, 82, 82, 82, 114, 114, 114, 0, 0,
458 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
459 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
460 114, 114, 114, 0, 114, 114, 114, 114, 114, 114,
461 114, 0, 114, 114, 114, 114, 0, 114, 114, 114,
462 114, 114, 114, 114, 114, 0, 114, 114, 114, 0,
463 0, 114, 114, 114, 114, 114, 114, 114, 114, 114,
464 114, 0, 0, 114, 114, 114, 114, 113, 113, 113,
465 113, 113, 113, 113, 114, 114, 114, 114, 114, 114,
466 114, 114, 114, 114, 114, 114, 0, 114, 114, 114,
467 114, 114, 114, 114, 0, 0, 114, 114, 114, 0,
468 114, 114, 114, 114, 114, 114, 114, 114, 0, 114,
469 114, 114, 0, 0, 114, 114, 114, 114, 114, 114,
470 114, 69, 69, 69, 0, 0, 69, 69, 69, 69,
471 69, 69, 69, 69, 69, 69, 69, 69, 69, 69,
472 69, 69, 69, 69, 69, 69, 69, 69, 69, 0,
473 69, 69, 69, 69, 69, 69, 69, 0, 69, 0,
474 0, 0, 69, 69, 69, 69, 69, 69, 69, 69,
475 69, 0, 69, 69, 69, 0, 0, 69, 69, 69,
476 69, 69, 69, 69, 70, 70, 70, 0, 0, 70,
477 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
478 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
479 70, 70, 0, 70, 70, 70, 70, 70, 70, 70,
480 0, 70, 0, 0, 0, 70, 70, 70, 70, 70,
481 70, 70, 70, 70, 0, 70, 70, 70, 0, 0,
482 70, 70, 70, 70, 70, 70, 70, 68, 68, 68,
483 0, 0, 68, 68, 68, 68, 68, 68, 68, 68,
484 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
485 68, 68, 68, 68, 68, 0, 68, 68, 68, 68,
486 68, 68, 68, 0, 68, 0, 0, 0, 68, 68,
487 68, 68, 68, 68, 68, 68, 68, 0, 68, 68,
488 68, 0, 0, 68, 68, 68, 68, 68, 68, 68,
489 151, 151, 151, 0, 0, 151, 151, 151, 151, 151,
490 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
491 151, 151, 151, 151, 151, 151, 151, 151, 0, 151,
492 151, 151, 151, 151, 151, 151, 0, 151, 0, 0,
493 0, 151, 151, 151, 151, 151, 151, 151, 151, 151,
494 0, 151, 151, 151, 0, 0, 151, 151, 151, 151,
495 151, 151, 151, 64, 64, 64, 0, 0, 64, 64,
496 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
497 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
498 64, 0, 64, 64, 64, 64, 64, 64, 64, 0,
499 64, 0, 0, 0, 64, 64, 64, 64, 64, 64,
500 64, 64, 64, 0, 64, 64, 64, 0, 0, 64,
501 64, 64, 64, 64, 64, 64, 65, 65, 65, 0,
502 0, 65, 65, 65, 65, 65, 65, 65, 65, 65,
503 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
504 65, 65, 65, 65, 0, 65, 65, 65, 65, 65,
505 65, 65, 0, 65, 0, 0, 0, 65, 65, 65,
506 65, 65, 65, 65, 65, 65, 0, 65, 65, 65,
507 0, 0, 65, 65, 65, 65, 65, 65, 65, 66,
508 66, 66, 0, 0, 66, 66, 66, 66, 66, 66,
509 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
510 66, 66, 66, 66, 66, 66, 66, 0, 66, 66,
511 66, 66, 66, 66, 66, 0, 66, 0, 0, 0,
512 66, 66, 66, 66, 66, 66, 66, 66, 66, 0,
513 66, 66, 66, 0, 0, 66, 66, 66, 66, 66,
514 66, 66, 154, 154, 154, 0, 0, 154, 154, 154,
515 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
516 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
517 0, 154, 154, 154, 154, 154, 154, 154, 0, 154,
518 154, 154, 154, 154, 0, 0, 0, 154, 154, 154,
519 154, 0, 0, 154, 0, 154, 0, 0, 154, 154,
520 154, 154, 154, 154, 154, 152, 152, 152, 0, 0,
521 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
522 152, 152, 152, 152, 152, 152, 152, 152, 152, 152,
523 152, 152, 152, 0, 152, 152, 152, 152, 152, 152,
524 152, 0, 152, 152, 152, 152, 152, 0, 0, 0,
525 152, 152, 152, 152, 0, 0, 152, 0, 152, 0,
526 0, 152, 152, 152, 152, 152, 152, 152, 149, 149,
527 149, 0, 0, 149, 149, 149, 149, 149, 149, 149,
528 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
529 149, 149, 149, 149, 149, 149, 0, 149, 149, 149,
530 149, 149, 149, 149, 0, 0, 149, 149, 149, 149,
531 0, 0, 0, 149, 149, 149, 149, 0, 0, 149,
532 0, 149, 0, 0, 149, 149, 149, 149, 149, 149,
533 149, 62, 62, 62, 0, 0, 62, 62, 62, 62,
534 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
535 62, 62, 62, 62, 62, 62, 62, 62, 62, 0,
536 62, 62, 62, 0, 0, 0, 62, 0, 62, 0,
537 0, 0, 62, 62, 62, 62, 62, 62, 62, 62,
538 62, 0, 62, 62, 62, 0, 0, 62, 62, 62,
539 62, 62, 62, 62, 63, 63, 63, 0, 0, 63,
540 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
541 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
542 63, 63, 0, 63, 63, 63, 0, 0, 0, 63,
543 0, 63, 0, 0, 0, 63, 63, 63, 63, 63,
544 63, 63, 63, 63, 0, 63, 63, 63, 0, 0,
545 63, 63, 63, 63, 63, 63, 63, 125, 125, 125,
546 0, 0, 125, 125, 125, 125, 0, 0, 0, 0,
547 0, 0, 0, 125, 125, 125, 125, 125, 125, 125,
548 125, 125, 125, 125, 125, 0, 125, 125, 125, 125,
549 125, 125, 125, 0, 0, 125, 125, 125, 0, 125,
550 125, 125, 125, 125, 125, 125, 125, 0, 125, 125,
551 125, 0, 0, 125, 125, 125, 125, 125, 125, 125,
552 55, 55, 55, 0, 0, 55, 55, 55, 55, 0,
553 0, 0, 0, 0, 0, 0, 55, 55, 55, 55,
554 55, 55, 55, 55, 55, 55, 55, 55, 0, 55,
555 0, 0, 0, 0, 0, 55, 0, 0, 0, 0,
556 0, 55, 55, 55, 55, 55, 55, 55, 55, 55,
557 0, 55, 55, 55, 0, 0, 55, 55, 55, 55,
558 55, 55, 55, 56, 56, 56, 0, 0, 56, 56,
559 56, 56, 0, 0, 0, 0, 0, 0, 0, 56,
560 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
561 56, 0, 56, 0, 0, 0, 0, 0, 56, 48,
562 49, 0, 0, 0, 56, 56, 56, 56, 56, 56,
563 56, 56, 56, 0, 56, 56, 56, 0, 0, 56,
564 56, 56, 56, 56, 56, 56, 0, 0, 3, 4,
565 5, 0, 0, 0, 6, 0, 0, 0, 0, 0,
566 7, 8, 9, 10, 0, 11, 12, 13, 14, 0,
567 15, 16, 17, 0, 0, 18, 19, 20, 21, 22,
568 23, 24, 59, 0, 0, 84, 0, 0, 0, 0,
569 76, 76, 76, 76, 76, 76, 76, 59, 0, 59,
570 59, 0, 59, 59, 59, 59, 59, 59, 59, 0,
571 59, 59, 59, 59, 59, 59, 59, 178, 0, 59,
572 59, 59, 0, 59, 59, 59, 0, 59, 59, 59,
573 59, 0, 59, 59, 59, 0, 0, 59, 59, 59,
574 59, 59, 59, 59, 0, 3, 4, 5, 0, 0,
575 0, 6, 253, 0, 0, 0, 0, 7, 8, 9,
576 10, 0, 11, 12, 13, 14, 0, 15, 16, 17,
577 0, 0, 18, 19, 20, 21, 22, 23, 24, 0,
578 3, 4, 5, 0, 0, 0, 6, 0, 0, 0,
579 0, 0, 7, 8, 9, 10, 0, 11, 12, 13,
580 254, 0, 15, 16, 17, 0, 0, 18, 19, 20,
581 21, 22, 23, 24, 84, 0, 0, 0, 0, 76,
582 76, 76, 76, 76, 76, 76, 59, 0, 59, 59,
583 59, 59, 59, 59, 59, 59, 59, 59, 0, 59,
584 59, 59, 59, 59, 59, 59, 0, 0, 59, 59,
585 59, 0, 59, 59, 59, 0, 59, 59, 59, 59,
586 0, 59, 59, 59, 125, 0, 59, 59, 59, 59,
587 59, 59, 59, 0, 125, 0, 125, 125, 125, 125,
588 125, 125, 125, 125, 125, 125, 0, 125, 125, 125,
589 125, 125, 125, 125, 0, 0, 125, 125, 125, 0,
590 125, 125, 125, 0, 125, 125, 125, 125, 0, 125,
591 125, 125, 0, 0, 125, 125, 125, 125, 125, 125,
592 125, 38, 38, 38, 0, 0, 38, 38, 38, 38,
593 0, 0, 0, 0, 39, 39, 39, 0, 38, 39,
594 39, 39, 39, 0, 0, 0, 0, 40, 40, 40,
595 0, 39, 40, 40, 40, 40, 0, 114, 115, 116,
596 117, 118, 119, 120, 40, 0, 38, 126, 126, 126,
597 0, 0, 126, 126, 126, 126, 0, 0, 0, 39,
598 127, 127, 127, 0, 126, 127, 127, 127, 127, 121,
599 0, 0, 40, 128, 128, 128, 0, 127, 128, 128,
600 128, 128, 0, 0, 0, 0, 0, 0, 0, 0,
601 128, 0, 126, 129, 129, 129, 0, 0, 129, 129,
602 129, 129, 0, 0, 0, 127, 130, 130, 130, 0,
603 129, 130, 130, 130, 130, 0, 0, 0, 128, 131,
604 131, 131, 0, 130, 131, 131, 131, 131, 0, 0,
605 0, 0, 0, 0, 0, 0, 131, 0, 129, 132,
606 132, 132, 0, 0, 132, 132, 132, 132, 0, 0,
607 0, 130, 54, 54, 54, 0, 132, 54, 54, 54,
608 54, 358, 0, 0, 131, 0, 0, 0, 0, 54,
609 0, 123, 0, 124, 125, 126, 127, 128, 129, 130,
610 131, 132, 133, 0, 132, 0, 0, 0, 0, 374,
611 114, 115, 116, 117, 118, 119, 120, 54, 0, 123,
612 359, 124, 125, 126, 127, 128, 129, 130, 131, 132,
613 133, 0, 0, 0, 0, 0, 0, 3, 4, 5,
614 0, 0, 121, 6, 0, 0, 193, 0, 375, 7,
615 8, 9, 76, 0, 11, 12, 13, 77, 88, 15,
616 78, 17, 0, 0, 18, 19, 20, 21, 22, 23,
617 24, 3, 4, 5, 0, 0, 0, 6, 0, 0,
618 0, 0, 0, 7, 8, 9, 10, 265, 11, 12,
619 13, 14, 0, 15, 16, 17, 0, 0, 18, 19,
620 20, 21, 22, 23, 24, 3, 4, 5, 0, 0,
621 0, 6, 0, 0, 0, 0, 0, 7, 8, 9,
622 10, 311, 11, 12, 13, 14, 0, 15, 16, 17,
623 0, 0, 18, 19, 20, 21, 22, 23, 24, 3,
624 4, 5, 0, 0, 0, 6, 0, 0, 0, 0,
625 0, 7, 8, 9, 76, 0, 11, 12, 13, 77,
626 0, 15, 78, 17, 0, 0, 18, 19, 20, 21,
627 22, 23, 24, 3, 4, 5, 0, 0, 0, 6,
628 0, 0, 0, 0, 0, 7, 8, 9, 10, 0,
629 11, 12, 13, 14, 0, 15, 16, 17, 0, 0,
630 18, 19, 20, 21, 22, 23, 24, 3, 4, 5,
631 0, 0, 0, 6, 0, 0, 0, 0, 0, 7,
632 8, 9, 268, 0, 11, 12, 13, 14, 0, 15,
633 16, 17, 0, 0, 18, 19, 20, 21, 22, 23,
634 24, 3, 4, 5, 0, 0, 0, 6, 0, 0,
635 0, 0, 0, 7, 8, 9, 10, 0, 11, 12,
636 13, 284, 0, 15, 16, 17, 0, 0, 18, 19,
637 20, 21, 22, 23, 24, 182, 182, 182, 0, 0,
638 0, 182, 0, 0, 0, 0, 0, 182, 182, 182,
639 182, 0, 182, 182, 182, 182, 0, 182, 182, 182,
640 0, 0, 182, 182, 182, 182, 182, 182, 182, 123,
641 0, 124, 125, 126, 127, 128, 129, 130, 131, 132,
642 133, 123, 0, 124, 125, 126, 127, 128, 129, 130,
643 131, 132, 133, 0, 0, 0, 0, 123, 195, 124,
644 125, 126, 127, 128, 129, 130, 131, 132, 133, 123,
645 298, 124, 125, 126, 127, 128, 129, 130, 131, 132,
646 133, 0, 0, 0, 0, 123, 303, 124, 125, 126,
647 127, 128, 129, 130, 131, 132, 133, 123, 306, 124,
648 125, 126, 127, 128, 129, 130, 131, 132, 133, 48,
649 49, 0, 0, 0, 309, 0, 0, 0, 0, 0,
650 0, 0, 264, 0, 0, 123, 364, 124, 125, 126,
651 127, 128, 129, 130, 131, 132, 133, 123, 305, 124,
652 125, 126, 127, 128, 129, 130, 131, 132, 133, 0,
653 0, 0, 0, 123, 0, 124, 125, 126, 127, 128,
654 129, 130, 131, 132, 133, 122, 125, 126, 127, 128,
655 129, 130, 131, 132, 133, 123, 0, 124, 125, 126,
656 127, 128, 129, 130, 131, 132, 133, 288, 0, 0,
657 0, 0, 0, 0, 0, 0, 0, 123, 0, 124,
658 125, 126, 127, 128, 129, 130, 131, 132, 133, 289,
659 0, 0, 0, 0, 0, 0, 0, 0, 0, 123,
660 0, 124, 125, 126, 127, 128, 129, 130, 131, 132,
661 133, 361, 0, 0, 0, 0, 0, 0, 0, 0,
662 0, 123, 0, 124, 125, 126, 127, 128, 129, 130,
663 131, 132, 133, 123, 335, 124, 125, 126, 127, 128,
664 129, 130, 131, 132, 133, 123, 0, 124, 125, 126,
665 127, 128, 129, 130, 131, 132, 133,
666 };
667 short yycheck[] = { 4,
668 5, 6, 7, 8, 200, 10, 148, 4, 5, 6,
669 196, 8, 265, 65, 7, 265, 68, 69, 0, 71,
670 241, 242, 279, 75, 15, 16, 31, 300, 259, 260,
671 35, 265, 261, 24, 31, 266, 267, 308, 35, 310,
672 303, 46, 303, 300, 303, 265, 28, 0, 303, 2,
673 300, 304, 265, 46, 304, 303, 265, 10, 40, 259,
674 260, 261, 265, 45, 264, 265, 266, 267, 266, 267,
675 304, 76, 265, 304, 265, 28, 276, 303, 83, 275,
676 303, 277, 73, 308, 304, 303, 77, 78, 274, 303,
677 276, 304, 278, 84, 85, 304, 300, 88, 263, 259,
678 260, 304, 262, 308, 304, 299, 59, 60, 259, 260,
679 63, 304, 65, 304, 303, 68, 69, 70, 71, 101,
680 102, 307, 75, 76, 268, 269, 270, 271, 272, 273,
681 274, 136, 137, 138, 139, 140, 303, 358, 143, 136,
682 137, 138, 139, 140, 97, 98, 143, 289, 297, 298,
683 299, 303, 134, 308, 107, 108, 109, 110, 111, 112,
684 113, 114, 115, 116, 117, 118, 119, 120, 301, 302,
685 303, 288, 163, 47, 127, 128, 129, 130, 131, 132,
686 133, 55, 56, 264, 265, 59, 60, 61, 62, 63,
687 288, 144, 296, 67, 147, 148, 308, 301, 302, 303,
688 259, 260, 261, 296, 308, 158, 159, 311, 328, 162,
689 323, 263, 259, 260, 261, 267, 303, 264, 265, 266,
690 267, 281, 282, 283, 284, 285, 286, 180, 275, 276,
691 277, 278, 279, 280, 264, 265, 241, 242, 191, 264,
692 265, 194, 263, 301, 302, 303, 199, 304, 241, 242,
693 308, 259, 260, 311, 264, 265, 263, 304, 266, 267,
694 134, 264, 265, 268, 303, 265, 279, 263, 221, 222,
695 223, 224, 259, 260, 261, 275, 304, 277, 278, 279,
696 280, 281, 282, 283, 284, 285, 286, 259, 260, 163,
697 164, 308, 166, 304, 266, 267, 170, 265, 172, 265,
698 259, 260, 261, 265, 304, 264, 265, 266, 267, 304,
699 263, 259, 260, 261, 267, 268, 275, 276, 277, 278,
700 279, 280, 281, 282, 283, 284, 285, 286, 259, 260,
701 259, 260, 259, 260, 259, 260, 289, 263, 256, 264,
702 265, 266, 267, 261, 265, 304, 299, 300, 303, 300,
703 259, 260, 334, 358, 308, 264, 265, 266, 267, 304,
704 313, 314, 308, 316, 317, 358, 308, 308, 304, 374,
705 288, 289, 290, 308, 304, 308, 294, 374, 263, 304,
706 304, 304, 300, 301, 302, 303, 268, 305, 306, 307,
707 308, 304, 310, 311, 312, 304, 304, 315, 316, 317,
708 318, 319, 320, 321, 357, 304, 304, 304, 361, 259,
709 260, 261, 330, 331, 264, 265, 266, 267, 334, 337,
710 28, -1, -1, -1, -1, 275, 276, 277, 278, 259,
711 260, 261, -1, -1, 264, 265, 266, 267, -1, -1,
712 -1, 315, -1, -1, -1, -1, 276, 256, -1, 265,
713 259, 260, 261, 262, 304, -1, -1, -1, -1, 275,
714 334, 277, 278, 279, 280, 281, 282, 283, 284, 285,
715 286, -1, -1, -1, 304, -1, 291, 292, 293, 288,
716 289, 290, 297, 298, 299, 294, -1, -1, 304, 363,
717 364, 300, 301, 302, 303, -1, 305, 306, 307, 308,
718 -1, 310, 311, 312, 313, 314, 315, 316, 317, 318,
719 319, 320, 321, 322, 323, 324, 325, 326, 327, -1,
720 329, -1, -1, 332, 333, 334, 335, 336, 256, -1,
721 -1, 259, 260, 261, 262, -1, 259, 260, 261, -1,
722 -1, 264, 265, 266, 267, -1, -1, -1, -1, -1,
723 -1, -1, 275, 276, 277, 289, 290, 291, 292, 293,
724 288, 289, 290, 297, 298, 299, 294, -1, -1, -1,
725 304, -1, 300, 301, 302, 303, -1, 305, 306, 307,
726 308, 304, 310, 311, 312, 313, 314, 315, 316, 317,
727 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
728 -1, 329, -1, -1, 332, 333, 334, 335, 336, 256,
729 -1, -1, 259, 260, 261, -1, -1, 259, 260, 261,
730 -1, -1, 264, 265, 266, 267, -1, 289, 290, 291,
731 292, 293, -1, -1, 276, 297, 298, 299, -1, -1,
732 -1, 288, 289, 290, -1, -1, -1, 294, -1, -1,
733 -1, -1, -1, 300, 301, 302, 303, -1, 305, 306,
734 307, 308, 304, 310, 311, 312, 313, 314, 315, 316,
735 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
736 327, -1, 329, -1, -1, 332, 333, 334, 335, 336,
737 256, -1, -1, 259, 260, 261, -1, -1, 259, 260,
738 261, -1, -1, 264, 265, 266, 267, 279, 280, 281,
739 282, 283, 284, 285, 286, 276, -1, -1, -1, -1,
740 -1, -1, 288, 289, 290, -1, -1, -1, 294, -1,
741 -1, -1, -1, -1, 300, 301, 302, 303, -1, 305,
742 306, 307, 308, 304, 310, 311, 312, 313, 314, 315,
743 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
744 326, 327, -1, 329, -1, -1, 332, 333, 334, 335,
745 336, 259, 260, 261, -1, 263, 264, 265, 266, 267,
746 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
747 278, 279, 280, 281, 282, 283, 284, 285, 286, -1,
748 288, 289, 290, 291, 292, 293, 294, -1, 296, 297,
749 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
750 308, -1, 310, 311, 312, -1, -1, 315, 316, 317,
751 318, 319, 320, 321, 259, 260, 261, -1, 263, 264,
752 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
753 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
754 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
755 -1, 296, 297, 298, 299, 300, 301, 302, 303, 304,
756 305, 306, 307, 308, -1, 310, 311, 312, -1, -1,
757 315, 316, 317, 318, 319, 320, 321, 259, 260, 261,
758 -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
759 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
760 282, 283, 284, 285, 286, -1, 288, 289, 290, 291,
761 292, 293, 294, -1, 296, 297, 298, 299, -1, 301,
762 302, 303, 304, 305, 306, 307, 308, -1, 310, 311,
763 312, -1, -1, 315, 316, 317, 318, 319, 320, 321,
764 259, 260, 261, -1, 263, 264, 265, 266, 267, 268,
765 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
766 279, 280, 281, 282, 283, 284, 285, 286, -1, 288,
767 289, 290, 291, 292, 293, 294, -1, -1, 297, 298,
768 299, -1, 301, 302, 303, 304, 305, 306, 307, 308,
769 -1, 310, 311, 312, -1, -1, 315, 316, 317, 318,
770 319, 320, 321, 259, 260, 261, -1, -1, 264, 265,
771 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
772 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
773 286, -1, 288, 289, 290, 291, 292, 293, 294, -1,
774 296, 297, 298, 299, -1, 301, 302, 303, 304, 305,
775 306, 307, 308, -1, 310, 311, 312, -1, -1, 315,
776 316, 317, 318, 319, 320, 321, 259, 260, 261, -1,
777 -1, 264, 265, 266, 267, 268, 269, 270, 271, 272,
778 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
779 283, 284, 285, 286, -1, 288, 289, 290, 291, 292,
780 293, 294, -1, -1, 297, 298, 299, 300, 301, 302,
781 303, 304, 305, 306, 307, 308, -1, 310, 311, 312,
782 -1, -1, 315, 316, 317, 318, 319, 320, 321, 259,
783 260, 261, -1, -1, 264, 265, 266, 267, 268, 269,
784 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
785 280, 281, 282, 283, 284, 285, 286, -1, 288, 289,
786 290, 291, 292, 293, 294, -1, 296, 297, 298, -1,
787 300, 301, 302, 303, 304, 305, 306, 307, 308, -1,
788 310, 311, 312, -1, -1, 315, 316, 317, 318, 319,
789 320, 321, 259, 260, 261, -1, -1, 264, 265, 266,
790 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
791 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
792 -1, 288, 289, 290, 291, 292, 293, 294, -1, -1,
793 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
794 307, 308, -1, 310, 311, 312, -1, -1, 315, 316,
795 317, 318, 319, 320, 321, 259, 260, 261, -1, -1,
796 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
797 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
798 284, 285, 286, -1, 288, 289, 290, 291, 292, 293,
799 294, -1, 296, 297, 298, 299, -1, 301, 302, 303,
800 304, 305, 306, 307, 308, -1, 310, 311, 312, -1,
801 -1, 315, 316, 317, 318, 319, 320, 321, 259, 260,
802 261, -1, -1, 264, 265, 266, 267, 268, 269, 270,
803 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
804 281, 282, 283, 284, 285, 286, -1, 288, 289, 290,
805 291, 292, 293, 294, -1, -1, 297, 298, 299, -1,
806 301, 302, 303, 304, 305, 306, 307, 308, -1, 310,
807 311, 312, -1, -1, 315, 316, 317, 318, 319, 320,
808 321, 259, 260, 261, -1, -1, 264, 265, 266, 267,
809 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
810 278, 279, 280, 281, 282, 283, 284, 285, 286, -1,
811 288, 289, 290, 291, 292, 293, 294, -1, 296, -1,
812 -1, -1, 300, 301, 302, 303, 304, 305, 306, 307,
813 308, -1, 310, 311, 312, -1, -1, 315, 316, 317,
814 318, 319, 320, 321, 259, 260, 261, -1, -1, 264,
815 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
816 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
817 285, 286, -1, 288, 289, 290, 291, 292, 293, 294,
818 -1, 296, -1, -1, -1, 300, 301, 302, 303, 304,
819 305, 306, 307, 308, -1, 310, 311, 312, -1, -1,
820 315, 316, 317, 318, 319, 320, 321, 259, 260, 261,
821 -1, -1, 264, 265, 266, 267, 268, 269, 270, 271,
822 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
823 282, 283, 284, 285, 286, -1, 288, 289, 290, 291,
824 292, 293, 294, -1, 296, -1, -1, -1, 300, 301,
825 302, 303, 304, 305, 306, 307, 308, -1, 310, 311,
826 312, -1, -1, 315, 316, 317, 318, 319, 320, 321,
827 259, 260, 261, -1, -1, 264, 265, 266, 267, 268,
828 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
829 279, 280, 281, 282, 283, 284, 285, 286, -1, 288,
830 289, 290, 291, 292, 293, 294, -1, 296, -1, -1,
831 -1, 300, 301, 302, 303, 304, 305, 306, 307, 308,
832 -1, 310, 311, 312, -1, -1, 315, 316, 317, 318,
833 319, 320, 321, 259, 260, 261, -1, -1, 264, 265,
834 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
835 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
836 286, -1, 288, 289, 290, 291, 292, 293, 294, -1,
837 296, -1, -1, -1, 300, 301, 302, 303, 304, 305,
838 306, 307, 308, -1, 310, 311, 312, -1, -1, 315,
839 316, 317, 318, 319, 320, 321, 259, 260, 261, -1,
840 -1, 264, 265, 266, 267, 268, 269, 270, 271, 272,
841 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
842 283, 284, 285, 286, -1, 288, 289, 290, 291, 292,
843 293, 294, -1, 296, -1, -1, -1, 300, 301, 302,
844 303, 304, 305, 306, 307, 308, -1, 310, 311, 312,
845 -1, -1, 315, 316, 317, 318, 319, 320, 321, 259,
846 260, 261, -1, -1, 264, 265, 266, 267, 268, 269,
847 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
848 280, 281, 282, 283, 284, 285, 286, -1, 288, 289,
849 290, 291, 292, 293, 294, -1, 296, -1, -1, -1,
850 300, 301, 302, 303, 304, 305, 306, 307, 308, -1,
851 310, 311, 312, -1, -1, 315, 316, 317, 318, 319,
852 320, 321, 259, 260, 261, -1, -1, 264, 265, 266,
853 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
854 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
855 -1, 288, 289, 290, 291, 292, 293, 294, -1, 296,
856 297, 298, 299, 300, -1, -1, -1, 304, 305, 306,
857 307, -1, -1, 310, -1, 312, -1, -1, 315, 316,
858 317, 318, 319, 320, 321, 259, 260, 261, -1, -1,
859 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
860 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
861 284, 285, 286, -1, 288, 289, 290, 291, 292, 293,
862 294, -1, 296, 297, 298, 299, 300, -1, -1, -1,
863 304, 305, 306, 307, -1, -1, 310, -1, 312, -1,
864 -1, 315, 316, 317, 318, 319, 320, 321, 259, 260,
865 261, -1, -1, 264, 265, 266, 267, 268, 269, 270,
866 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
867 281, 282, 283, 284, 285, 286, -1, 288, 289, 290,
868 291, 292, 293, 294, -1, -1, 297, 298, 299, 300,
869 -1, -1, -1, 304, 305, 306, 307, -1, -1, 310,
870 -1, 312, -1, -1, 315, 316, 317, 318, 319, 320,
871 321, 259, 260, 261, -1, -1, 264, 265, 266, 267,
872 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
873 278, 279, 280, 281, 282, 283, 284, 285, 286, -1,
874 288, 289, 290, -1, -1, -1, 294, -1, 296, -1,
875 -1, -1, 300, 301, 302, 303, 304, 305, 306, 307,
876 308, -1, 310, 311, 312, -1, -1, 315, 316, 317,
877 318, 319, 320, 321, 259, 260, 261, -1, -1, 264,
878 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
879 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
880 285, 286, -1, 288, 289, 290, -1, -1, -1, 294,
881 -1, 296, -1, -1, -1, 300, 301, 302, 303, 304,
882 305, 306, 307, 308, -1, 310, 311, 312, -1, -1,
883 315, 316, 317, 318, 319, 320, 321, 259, 260, 261,
884 -1, -1, 264, 265, 266, 267, -1, -1, -1, -1,
885 -1, -1, -1, 275, 276, 277, 278, 279, 280, 281,
886 282, 283, 284, 285, 286, -1, 288, 289, 290, 291,
887 292, 293, 294, -1, -1, 297, 298, 299, -1, 301,
888 302, 303, 304, 305, 306, 307, 308, -1, 310, 311,
889 312, -1, -1, 315, 316, 317, 318, 319, 320, 321,
890 259, 260, 261, -1, -1, 264, 265, 266, 267, -1,
891 -1, -1, -1, -1, -1, -1, 275, 276, 277, 278,
892 279, 280, 281, 282, 283, 284, 285, 286, -1, 288,
893 -1, -1, -1, -1, -1, 294, -1, -1, -1, -1,
894 -1, 300, 301, 302, 303, 304, 305, 306, 307, 308,
895 -1, 310, 311, 312, -1, -1, 315, 316, 317, 318,
896 319, 320, 321, 259, 260, 261, -1, -1, 264, 265,
897 266, 267, -1, -1, -1, -1, -1, -1, -1, 275,
898 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
899 286, -1, 288, -1, -1, -1, -1, -1, 294, 259,
900 260, -1, -1, -1, 300, 301, 302, 303, 304, 305,
901 306, 307, 308, -1, 310, 311, 312, -1, -1, 315,
902 316, 317, 318, 319, 320, 321, -1, -1, 288, 289,
903 290, -1, -1, -1, 294, -1, -1, -1, -1, -1,
904 300, 301, 302, 303, -1, 305, 306, 307, 308, -1,
905 310, 311, 312, -1, -1, 315, 316, 317, 318, 319,
906 320, 321, 260, -1, -1, 263, -1, -1, -1, -1,
907 268, 269, 270, 271, 272, 273, 274, 275, -1, 277,
908 278, -1, 280, 281, 282, 283, 284, 285, 286, -1,
909 288, 289, 290, 291, 292, 293, 294, 260, -1, 297,
910 298, 299, -1, 301, 302, 303, -1, 305, 306, 307,
911 308, -1, 310, 311, 312, -1, -1, 315, 316, 317,
912 318, 319, 320, 321, -1, 288, 289, 290, -1, -1,
913 -1, 294, 260, -1, -1, -1, -1, 300, 301, 302,
914 303, -1, 305, 306, 307, 308, -1, 310, 311, 312,
915 -1, -1, 315, 316, 317, 318, 319, 320, 321, -1,
916 288, 289, 290, -1, -1, -1, 294, -1, -1, -1,
917 -1, -1, 300, 301, 302, 303, -1, 305, 306, 307,
918 308, -1, 310, 311, 312, -1, -1, 315, 316, 317,
919 318, 319, 320, 321, 263, -1, -1, -1, -1, 268,
920 269, 270, 271, 272, 273, 274, 275, -1, 277, 278,
921 279, 280, 281, 282, 283, 284, 285, 286, -1, 288,
922 289, 290, 291, 292, 293, 294, -1, -1, 297, 298,
923 299, -1, 301, 302, 303, -1, 305, 306, 307, 308,
924 -1, 310, 311, 312, 265, -1, 315, 316, 317, 318,
925 319, 320, 321, -1, 275, -1, 277, 278, 279, 280,
926 281, 282, 283, 284, 285, 286, -1, 288, 289, 290,
927 291, 292, 293, 294, -1, -1, 297, 298, 299, -1,
928 301, 302, 303, -1, 305, 306, 307, 308, -1, 310,
929 311, 312, -1, -1, 315, 316, 317, 318, 319, 320,
930 321, 259, 260, 261, -1, -1, 264, 265, 266, 267,
931 -1, -1, -1, -1, 259, 260, 261, -1, 276, 264,
932 265, 266, 267, -1, -1, -1, -1, 259, 260, 261,
933 -1, 276, 264, 265, 266, 267, -1, 268, 269, 270,
934 271, 272, 273, 274, 276, -1, 304, 259, 260, 261,
935 -1, -1, 264, 265, 266, 267, -1, -1, -1, 304,
936 259, 260, 261, -1, 276, 264, 265, 266, 267, 300,
937 -1, -1, 304, 259, 260, 261, -1, 276, 264, 265,
938 266, 267, -1, -1, -1, -1, -1, -1, -1, -1,
939 276, -1, 304, 259, 260, 261, -1, -1, 264, 265,
940 266, 267, -1, -1, -1, 304, 259, 260, 261, -1,
941 276, 264, 265, 266, 267, -1, -1, -1, 304, 259,
942 260, 261, -1, 276, 264, 265, 266, 267, -1, -1,
943 -1, -1, -1, -1, -1, -1, 276, -1, 304, 259,
944 260, 261, -1, -1, 264, 265, 266, 267, -1, -1,
945 -1, 304, 259, 260, 261, -1, 276, 264, 265, 266,
946 267, 265, -1, -1, 304, -1, -1, -1, -1, 276,
947 -1, 275, -1, 277, 278, 279, 280, 281, 282, 283,
948 284, 285, 286, -1, 304, -1, -1, -1, -1, 265,
949 268, 269, 270, 271, 272, 273, 274, 304, -1, 275,
950 304, 277, 278, 279, 280, 281, 282, 283, 284, 285,
951 286, -1, -1, -1, -1, -1, -1, 288, 289, 290,
952 -1, -1, 300, 294, -1, -1, 304, -1, 304, 300,
953 301, 302, 303, -1, 305, 306, 307, 308, 309, 310,
954 311, 312, -1, -1, 315, 316, 317, 318, 319, 320,
955 321, 288, 289, 290, -1, -1, -1, 294, -1, -1,
956 -1, -1, -1, 300, 301, 302, 303, 304, 305, 306,
957 307, 308, -1, 310, 311, 312, -1, -1, 315, 316,
958 317, 318, 319, 320, 321, 288, 289, 290, -1, -1,
959 -1, 294, -1, -1, -1, -1, -1, 300, 301, 302,
960 303, 304, 305, 306, 307, 308, -1, 310, 311, 312,
961 -1, -1, 315, 316, 317, 318, 319, 320, 321, 288,
962 289, 290, -1, -1, -1, 294, -1, -1, -1, -1,
963 -1, 300, 301, 302, 303, -1, 305, 306, 307, 308,
964 -1, 310, 311, 312, -1, -1, 315, 316, 317, 318,
965 319, 320, 321, 288, 289, 290, -1, -1, -1, 294,
966 -1, -1, -1, -1, -1, 300, 301, 302, 303, -1,
967 305, 306, 307, 308, -1, 310, 311, 312, -1, -1,
968 315, 316, 317, 318, 319, 320, 321, 288, 289, 290,
969 -1, -1, -1, 294, -1, -1, -1, -1, -1, 300,
970 301, 302, 303, -1, 305, 306, 307, 308, -1, 310,
971 311, 312, -1, -1, 315, 316, 317, 318, 319, 320,
972 321, 288, 289, 290, -1, -1, -1, 294, -1, -1,
973 -1, -1, -1, 300, 301, 302, 303, -1, 305, 306,
974 307, 308, -1, 310, 311, 312, -1, -1, 315, 316,
975 317, 318, 319, 320, 321, 288, 289, 290, -1, -1,
976 -1, 294, -1, -1, -1, -1, -1, 300, 301, 302,
977 303, -1, 305, 306, 307, 308, -1, 310, 311, 312,
978 -1, -1, 315, 316, 317, 318, 319, 320, 321, 275,
979 -1, 277, 278, 279, 280, 281, 282, 283, 284, 285,
980 286, 275, -1, 277, 278, 279, 280, 281, 282, 283,
981 284, 285, 286, -1, -1, -1, -1, 275, 304, 277,
982 278, 279, 280, 281, 282, 283, 284, 285, 286, 275,
983 304, 277, 278, 279, 280, 281, 282, 283, 284, 285,
984 286, -1, -1, -1, -1, 275, 304, 277, 278, 279,
985 280, 281, 282, 283, 284, 285, 286, 275, 304, 277,
986 278, 279, 280, 281, 282, 283, 284, 285, 286, 259,
987 260, -1, -1, -1, 304, -1, -1, -1, -1, -1,
988 -1, -1, 260, -1, -1, 275, 304, 277, 278, 279,
989 280, 281, 282, 283, 284, 285, 286, 275, 260, 277,
990 278, 279, 280, 281, 282, 283, 284, 285, 286, -1,
991 -1, -1, -1, 275, -1, 277, 278, 279, 280, 281,
992 282, 283, 284, 285, 286, 265, 278, 279, 280, 281,
993 282, 283, 284, 285, 286, 275, -1, 277, 278, 279,
994 280, 281, 282, 283, 284, 285, 286, 265, -1, -1,
995 -1, -1, -1, -1, -1, -1, -1, 275, -1, 277,
996 278, 279, 280, 281, 282, 283, 284, 285, 286, 265,
997 -1, -1, -1, -1, -1, -1, -1, -1, -1, 275,
998 -1, 277, 278, 279, 280, 281, 282, 283, 284, 285,
999 286, 265, -1, -1, -1, -1, -1, -1, -1, -1,
1000 -1, 275, -1, 277, 278, 279, 280, 281, 282, 283,
1001 284, 285, 286, 275, 276, 277, 278, 279, 280, 281,
1002 282, 283, 284, 285, 286, 275, -1, 277, 278, 279,
1003 280, 281, 282, 283, 284, 285, 286,
1004 };
1005 #define YYFINAL 28
1006 #ifndef YYDEBUG
1007 #define YYDEBUG 0
1008 #endif
1009 #define YYMAXTOKEN 337
1010 #if YYDEBUG
1011 char *yyname[] = {
1012 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1013 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1014 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1015 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1016 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1017 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1018 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"UNEXPECTED","BAD_DECIMAL","NL",
1019 "SEMI_COLON","LBRACE","RBRACE","LBOX","RBOX","COMMA","IO_OUT","COPROCESS_OUT",
1020 "ASSIGN","ADD_ASG","SUB_ASG","MUL_ASG","DIV_ASG","MOD_ASG","POW_ASG","QMARK",
1021 "COLON","OR","AND","IN","MATCH","EQ","NEQ","LT","LTE","GT","GTE","CAT",
1022 "GETLINE","PLUS","MINUS","MUL","DIV","MOD","NOT","UMINUS","IO_IN","PIPE",
1023 "COPROCESS","POW","INC_or_DEC","DOLLAR","FIELD","LPAREN","RPAREN","DOUBLE",
1024 "STRING_","RE","ID","D_ID","FUNCT_ID","BUILTIN","LENGTH","PRINT","PRINTF",
1025 "SPLIT","MATCH_FUNC","SUB","GSUB","GENSUB","ALENGTH_FUNC","ASORT_FUNC","DO",
1026 "WHILE","FOR","BREAK","CONTINUE","IF","ELSE","DELETE","a_BEGIN","a_END","EXIT",
1027 "ABORT","NEXT","NEXTFILE","RETURN","FUNCTION",
1028 };
1029 char *yyrule[] = {
1030 "$accept : program",
1031 "program : program_block",
1032 "program : program program_block",
1033 "program_block : PA_block",
1034 "program_block : function_def",
1035 "program_block : outside_error block",
1036 "PA_block : block",
1037 "$$1 :",
1038 "PA_block : a_BEGIN $$1 block",
1039 "$$2 :",
1040 "PA_block : a_END $$2 block",
1041 "$$3 :",
1042 "PA_block : expr $$3 block_or_separator",
1043 "$$4 :",
1044 "$$5 :",
1045 "PA_block : expr COMMA $$4 expr $$5 block_or_separator",
1046 "block : LBRACE statement_list RBRACE",
1047 "block : LBRACE error RBRACE",
1048 "block_or_separator : block",
1049 "block_or_separator : separator",
1050 "statement_list : statement",
1051 "statement_list : statement_list statement",
1052 "statement : block",
1053 "statement : expr separator",
1054 "statement : separator",
1055 "statement : error separator",
1056 "statement : BREAK separator",
1057 "statement : CONTINUE separator",
1058 "statement : return_statement",
1059 "statement : NEXT separator",
1060 "statement : NEXTFILE separator",
1061 "separator : NL",
1062 "separator : SEMI_COLON",
1063 "expr : cat_expr",
1064 "expr : lvalue ASSIGN expr",
1065 "expr : lvalue ADD_ASG expr",
1066 "expr : lvalue SUB_ASG expr",
1067 "expr : lvalue MUL_ASG expr",
1068 "expr : lvalue DIV_ASG expr",
1069 "expr : lvalue MOD_ASG expr",
1070 "expr : lvalue POW_ASG expr",
1071 "expr : expr EQ expr",
1072 "expr : expr NEQ expr",
1073 "expr : expr LT expr",
1074 "expr : expr LTE expr",
1075 "expr : expr GT expr",
1076 "expr : expr GTE expr",
1077 "expr : expr MATCH expr",
1078 "$$6 :",
1079 "expr : expr OR $$6 expr",
1080 "$$7 :",
1081 "expr : expr AND $$7 expr",
1082 "$$8 :",
1083 "$$9 :",
1084 "expr : expr QMARK $$8 expr COLON $$9 expr",
1085 "cat_expr : p_expr",
1086 "cat_expr : cat_expr p_expr",
1087 "p_expr : DOUBLE",
1088 "p_expr : STRING_",
1089 "p_expr : ID",
1090 "p_expr : LPAREN expr RPAREN",
1091 "p_expr : RE",
1092 "p_expr : p_expr PLUS p_expr",
1093 "p_expr : p_expr MINUS p_expr",
1094 "p_expr : p_expr MUL p_expr",
1095 "p_expr : p_expr DIV p_expr",
1096 "p_expr : p_expr MOD p_expr",
1097 "p_expr : p_expr POW p_expr",
1098 "p_expr : NOT p_expr",
1099 "p_expr : PLUS p_expr",
1100 "p_expr : MINUS p_expr",
1101 "p_expr : builtin",
1102 "p_expr : ID INC_or_DEC",
1103 "p_expr : INC_or_DEC lvalue",
1104 "p_expr : field INC_or_DEC",
1105 "p_expr : INC_or_DEC field",
1106 "lvalue : ID",
1107 "lvalue : BUILTIN mark LPAREN arglist RPAREN",
1108 "arglist :",
1109 "arglist : args",
1110 "args : expr",
1111 "args : args COMMA expr",
1112 "builtin : BUILTIN mark LPAREN arglist RPAREN",
1113 "builtin : LENGTH",
1114 "mark :",
1115 "statement : print mark pr_args pr_direction separator",
1116 "print : PRINT",
1117 "print : PRINTF",
1118 "pr_args : arglist",
1119 "pr_args : LPAREN arg2 RPAREN",
1120 "pr_args : LPAREN RPAREN",
1121 "arg2 : expr COMMA expr",
1122 "arg2 : arg2 COMMA expr",
1123 "pr_direction :",
1124 "pr_direction : IO_OUT expr",
1125 "pr_direction : COPROCESS_OUT expr",
1126 "if_front : IF LPAREN expr RPAREN",
1127 "statement : if_front statement",
1128 "else : ELSE",
1129 "statement : if_front statement else statement",
1130 "do : DO",
1131 "statement : do statement WHILE LPAREN expr RPAREN separator",
1132 "while_front : WHILE LPAREN expr RPAREN",
1133 "statement : while_front statement",
1134 "statement : for1 for2 for3 statement",
1135 "for1 : FOR LPAREN SEMI_COLON",
1136 "for1 : FOR LPAREN expr SEMI_COLON",
1137 "for2 : SEMI_COLON",
1138 "for2 : expr SEMI_COLON",
1139 "for3 : RPAREN",
1140 "for3 : expr RPAREN",
1141 "expr : expr IN ID",
1142 "expr : LPAREN arg2 RPAREN IN ID",
1143 "lvalue : ID mark LBOX args RBOX",
1144 "p_expr : ID mark LBOX args RBOX",
1145 "p_expr : ID mark LBOX args RBOX INC_or_DEC",
1146 "statement : DELETE ID mark LBOX args RBOX separator",
1147 "statement : DELETE ID separator",
1148 "array_loop_front : FOR LPAREN ID IN ID RPAREN",
1149 "statement : array_loop_front statement",
1150 "field : FIELD",
1151 "field : DOLLAR D_ID",
1152 "field : DOLLAR D_ID mark LBOX args RBOX",
1153 "field : DOLLAR p_expr",
1154 "field : LPAREN field RPAREN",
1155 "p_expr : field",
1156 "expr : field ASSIGN expr",
1157 "expr : field ADD_ASG expr",
1158 "expr : field SUB_ASG expr",
1159 "expr : field MUL_ASG expr",
1160 "expr : field DIV_ASG expr",
1161 "expr : field MOD_ASG expr",
1162 "expr : field POW_ASG expr",
1163 "p_expr : split_front split_back",
1164 "split_front : SPLIT LPAREN expr COMMA ID",
1165 "split_back : RPAREN",
1166 "split_back : COMMA expr RPAREN",
1167 "p_expr : ALENGTH_FUNC LPAREN ID RPAREN",
1168 "p_expr : ASORT_FUNC mark LPAREN ID RPAREN",
1169 "p_expr : ASORT_FUNC mark LPAREN ID COMMA ID RPAREN",
1170 "p_expr : MATCH_FUNC LPAREN expr COMMA re_arg COMMA ID RPAREN",
1171 "p_expr : MATCH_FUNC LPAREN expr COMMA re_arg RPAREN",
1172 "re_arg : expr",
1173 "statement : EXIT separator",
1174 "statement : EXIT expr separator",
1175 "statement : ABORT separator",
1176 "statement : ABORT expr separator",
1177 "return_statement : RETURN separator",
1178 "return_statement : RETURN expr separator",
1179 "p_expr : getline",
1180 "p_expr : getline fvalue",
1181 "p_expr : getline_file p_expr",
1182 "p_expr : p_expr COPROCESS GETLINE",
1183 "p_expr : p_expr COPROCESS GETLINE fvalue",
1184 "p_expr : p_expr PIPE GETLINE",
1185 "p_expr : p_expr PIPE GETLINE fvalue",
1186 "getline : GETLINE",
1187 "fvalue : lvalue",
1188 "fvalue : field",
1189 "getline_file : getline IO_IN",
1190 "getline_file : getline fvalue IO_IN",
1191 "p_expr : gensub LPAREN re_arg COMMA expr COMMA expr gensub_back",
1192 "gensub : GENSUB",
1193 "p_expr : sub_or_gsub LPAREN re_arg COMMA expr sub_back",
1194 "sub_or_gsub : SUB",
1195 "sub_or_gsub : GSUB",
1196 "sub_back : RPAREN",
1197 "sub_back : COMMA fvalue RPAREN",
1198 "gensub_back : RPAREN",
1199 "gensub_back : COMMA p_expr RPAREN",
1200 "function_def : funct_start block",
1201 "funct_start : funct_head LPAREN f_arglist RPAREN",
1202 "funct_head : FUNCTION ID",
1203 "funct_head : FUNCTION FUNCT_ID",
1204 "f_arglist :",
1205 "f_arglist : f_args",
1206 "f_args : ID",
1207 "f_args : f_args COMMA ID",
1208 "outside_error : error",
1209 "p_expr : FUNCT_ID mark call_args",
1210 "call_args : LPAREN RPAREN",
1211 "call_args : ca_front ca_back",
1212 "ca_front : LPAREN",
1213 "ca_front : ca_front expr COMMA",
1214 "ca_front : ca_front ID COMMA",
1215 "ca_back : expr RPAREN",
1216 "ca_back : ID RPAREN",
1217 };
1218 #endif
1219 #ifdef YYSTACKSIZE
1220 #undef YYMAXDEPTH
1221 #define YYMAXDEPTH YYSTACKSIZE
1222 #else
1223 #ifdef YYMAXDEPTH
1224 #define YYSTACKSIZE YYMAXDEPTH
1225 #else
1226 #define YYSTACKSIZE 500
1227 #define YYMAXDEPTH 500
1228 #endif
1229 #endif
1230 int yydebug;
1231 int yynerrs;
1232 int yyerrflag;
1233 int yychar;
1234 short *yyssp;
1235 YYSTYPE *yyvsp;
1236 YYSTYPE yyval;
1237 YYSTYPE yylval;
1238 short yyss[YYSTACKSIZE];
1239 YYSTYPE yyvs[YYSTACKSIZE];
1240 #define yystacksize YYSTACKSIZE
1241 #line 1219 "parse.y"
1242
1243 /* resize the code for a user function */
1244
resize_fblock(fbp)1245 static void resize_fblock( fbp )
1246 FBLOCK *fbp ;
1247 {
1248 CODEBLOCK *p = ZMALLOC(CODEBLOCK) ;
1249 unsigned dummy ;
1250
1251 code2op(_RET0, _HALT) ;
1252 /* make sure there is always a return */
1253
1254 *p = active_code ;
1255 fbp->code = code_shrink(p, &dummy) ;
1256 /* code_shrink() zfrees p */
1257
1258 add_to_fdump_list(fbp) ;
1259 }
1260
1261
1262 /* convert FE_PUSHA to FE_PUSHI
1263 or F_PUSH to F_PUSHI
1264 */
1265
field_A2I()1266 static void field_A2I()
1267 { CELL *cp ;
1268
1269 if ( code_ptr[-1].op == FE_PUSHA &&
1270 code_ptr[-1].ptr == (PTR) 0)
1271 /* On most architectures, the two tests are the same; a good
1272 compiler might eliminate one. On LM_DOS, and possibly other
1273 segmented architectures, they are not */
1274 { code_ptr[-1].op = FE_PUSHI ; }
1275 else
1276 {
1277 cp = (CELL *) code_ptr[-1].ptr ;
1278
1279 if ( cp == field ||
1280 ( cp > NF && cp <= LAST_PFIELD ))
1281 {
1282 code_ptr[-2].op = _PUSHI ;
1283 }
1284 else if ( cp == NF )
1285 { code_ptr[-2].op = NF_PUSHI ;
1286 code_ptr-- ; }
1287
1288 else
1289 {
1290 code_ptr[-2].op = F_PUSHI ;
1291 code_ptr -> op = field_addr_to_index( code_ptr[-1].ptr ) ;
1292 code_ptr++ ;
1293 }
1294 }
1295 }
1296
1297 /* we've seen an ID in a context where it should be a VAR,
1298 check that's consistent with previous usage */
1299
check_var(p)1300 static void check_var( p )
1301 register SYMTAB *p ;
1302 {
1303 switch(p->type)
1304 {
1305 case ST_NONE : /* new id */
1306 st_none:
1307 p->type = ST_VAR ;
1308 p->stval.cp = ZMALLOC(CELL) ;
1309 p->stval.cp->type = C_NOINIT ;
1310 break ;
1311
1312 case ST_LOCAL_NONE :
1313 p->type = ST_LOCAL_VAR ;
1314 active_funct->typev[p->offset] = ST_LOCAL_VAR ;
1315 break ;
1316
1317 case ST_VAR :
1318 case ST_LOCAL_VAR : break ;
1319
1320 case ST_BUILTIN :
1321 if (is_ext_builtin(p->name))
1322 goto st_none;
1323
1324 default :
1325 type_error(p) ;
1326 break ;
1327 }
1328 }
1329
1330 /* we've seen an ID in a context where it should be an ARRAY,
1331 check that's consistent with previous usage */
check_array(p)1332 static void check_array(p)
1333 register SYMTAB *p ;
1334 {
1335 switch(p->type)
1336 {
1337 case ST_NONE : /* a new array */
1338 st_none:
1339 p->type = ST_ARRAY ;
1340 p->stval.array = new_ARRAY() ;
1341 break ;
1342
1343 case ST_ARRAY :
1344 case ST_LOCAL_ARRAY :
1345 break ;
1346
1347 case ST_LOCAL_NONE :
1348 p->type = ST_LOCAL_ARRAY ;
1349 active_funct->typev[p->offset] = ST_LOCAL_ARRAY ;
1350 break ;
1351
1352 case ST_BUILTIN :
1353 if (is_ext_builtin(p->name))
1354 goto st_none;
1355
1356 default : type_error(p) ; break ;
1357 }
1358 }
1359
code_array(p)1360 static void code_array(p)
1361 register SYMTAB *p ;
1362 {
1363 if ( is_local(p) ) code2op(LA_PUSHA, p->offset) ;
1364 else code2(A_PUSHA, p->stval.array) ;
1365 }
1366
1367
1368 /* we've seen an ID as an argument to a user defined function */
1369
code_call_id(p,ip)1370 static void code_call_id( p, ip )
1371 register CA_REC *p ;
1372 register SYMTAB *ip ;
1373 { static CELL dummy ;
1374
1375 p->call_offset = code_offset ;
1376 /* This always get set now. So that fcall:relocate_arglist
1377 works. */
1378
1379 switch( ip->type )
1380 {
1381 case ST_VAR :
1382 p->type = CA_EXPR ;
1383 code2(_PUSHI, ip->stval.cp) ;
1384 break ;
1385
1386 case ST_LOCAL_VAR :
1387 p->type = CA_EXPR ;
1388 code2op(L_PUSHI, ip->offset) ;
1389 break ;
1390
1391 case ST_ARRAY :
1392 p->type = CA_ARRAY ;
1393 code2(A_PUSHA, ip->stval.array) ;
1394 break ;
1395
1396 case ST_LOCAL_ARRAY :
1397 p->type = CA_ARRAY ;
1398 code2op(LA_PUSHA, ip->offset) ;
1399 break ;
1400
1401 /* not enough info to code it now; it will have to
1402 be patched later */
1403
1404 case ST_NONE :
1405 p->type = ST_NONE ;
1406 p->sym_p = ip ;
1407 code2(_PUSHI, &dummy) ;
1408 break ;
1409
1410 case ST_LOCAL_NONE :
1411 p->type = ST_LOCAL_NONE ;
1412 p->type_p = & active_funct->typev[ip->offset] ;
1413 code2op(L_PUSHI, ip->offset) ;
1414 break ;
1415
1416
1417 #ifdef DEBUG
1418 default :
1419 bozo("code_call_id") ;
1420 #endif
1421
1422 }
1423 }
1424
1425 /* an RE by itself was coded as _MATCH0 , change to
1426 push as an expression */
1427
RE_as_arg()1428 static void RE_as_arg()
1429 { CELL *cp = ZMALLOC(CELL) ;
1430
1431 code_ptr -= 2 ;
1432 cp->type = C_RE ;
1433 cp->ptr = code_ptr[1].ptr ;
1434 code2(_PUSHC, cp) ;
1435 }
1436
1437 /* reset the active_code back to the MAIN block */
1438 static void
switch_code_to_main()1439 switch_code_to_main()
1440 {
1441 switch(scope)
1442 {
1443 case SCOPE_BEGIN :
1444 *begin_code_p = active_code ;
1445 active_code = *main_code_p ;
1446 break ;
1447
1448 case SCOPE_END :
1449 *end_code_p = active_code ;
1450 active_code = *main_code_p ;
1451 break ;
1452
1453 case SCOPE_FUNCT :
1454 active_code = *main_code_p ;
1455 break ;
1456
1457 case SCOPE_MAIN :
1458 break ;
1459 }
1460 active_funct = (FBLOCK*) 0 ;
1461 scope = SCOPE_MAIN ;
1462 }
1463
1464
1465 void
parse()1466 parse()
1467 {
1468 if ( yyparse() || compile_error_count != 0 ) exit(2) ;
1469 scan_cleanup() ;
1470 set_code() ;
1471
1472 /* code must be set before call to resolve_fcalls() */
1473 if ( resolve_list ) resolve_fcalls() ;
1474
1475 if ( compile_error_count != 0 ) exit(2) ;
1476 dump_code() ;
1477 }
1478
1479 #line 1480 "y.tab.c"
1480 #define YYABORT goto yyabort
1481 #define YYREJECT goto yyabort
1482 #define YYACCEPT goto yyaccept
1483 #define YYERROR goto yyerrlab
1484 int
yyparse()1485 yyparse()
1486 {
1487 register int yym, yyn, yystate;
1488 #if YYDEBUG
1489 register char *yys;
1490 extern char *getenv();
1491
1492 if (yys = getenv("YYDEBUG"))
1493 {
1494 yyn = *yys;
1495 if (yyn >= '0' && yyn <= '9')
1496 yydebug = yyn - '0';
1497 }
1498 #endif
1499
1500 yynerrs = 0;
1501 yyerrflag = 0;
1502 yychar = (-1);
1503
1504 yyssp = yyss;
1505 yyvsp = yyvs;
1506 *yyssp = yystate = 0;
1507
1508 yyloop:
1509 if (yyn = yydefred[yystate]) goto yyreduce;
1510 if (yychar < 0)
1511 {
1512 if ((yychar = yylex()) < 0) yychar = 0;
1513 #if YYDEBUG
1514 if (yydebug)
1515 {
1516 yys = 0;
1517 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1518 if (!yys) yys = "illegal-symbol";
1519 printf("%sdebug: state %d, reading %d (%s)\n",
1520 YYPREFIX, yystate, yychar, yys);
1521 }
1522 #endif
1523 }
1524 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
1525 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
1526 {
1527 #if YYDEBUG
1528 if (yydebug)
1529 printf("%sdebug: state %d, shifting to state %d\n",
1530 YYPREFIX, yystate, yytable[yyn]);
1531 #endif
1532 if (yyssp >= yyss + yystacksize - 1)
1533 {
1534 goto yyoverflow;
1535 }
1536 *++yyssp = yystate = yytable[yyn];
1537 *++yyvsp = yylval;
1538 yychar = (-1);
1539 if (yyerrflag > 0) --yyerrflag;
1540 goto yyloop;
1541 }
1542 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
1543 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
1544 {
1545 yyn = yytable[yyn];
1546 goto yyreduce;
1547 }
1548 if (yyerrflag) goto yyinrecovery;
1549 #ifdef lint
1550 goto yynewerror;
1551 #endif
1552 yynewerror:
1553 yyerror("syntax error");
1554 #ifdef lint
1555 goto yyerrlab;
1556 #endif
1557 yyerrlab:
1558 ++yynerrs;
1559 yyinrecovery:
1560 if (yyerrflag < 3)
1561 {
1562 yyerrflag = 3;
1563 for (;;)
1564 {
1565 if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
1566 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
1567 {
1568 #if YYDEBUG
1569 if (yydebug)
1570 printf("%sdebug: state %d, error recovery shifting\
1571 to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
1572 #endif
1573 if (yyssp >= yyss + yystacksize - 1)
1574 {
1575 goto yyoverflow;
1576 }
1577 *++yyssp = yystate = yytable[yyn];
1578 *++yyvsp = yylval;
1579 goto yyloop;
1580 }
1581 else
1582 {
1583 #if YYDEBUG
1584 if (yydebug)
1585 printf("%sdebug: error recovery discarding state %d\n",
1586 YYPREFIX, *yyssp);
1587 #endif
1588 if (yyssp <= yyss) goto yyabort;
1589 --yyssp;
1590 --yyvsp;
1591 }
1592 }
1593 }
1594 else
1595 {
1596 if (yychar == 0) goto yyabort;
1597 #if YYDEBUG
1598 if (yydebug)
1599 {
1600 yys = 0;
1601 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1602 if (!yys) yys = "illegal-symbol";
1603 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
1604 YYPREFIX, yystate, yychar, yys);
1605 }
1606 #endif
1607 yychar = (-1);
1608 goto yyloop;
1609 }
1610 yyreduce:
1611 #if YYDEBUG
1612 if (yydebug)
1613 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
1614 YYPREFIX, yystate, yyn, yyrule[yyn]);
1615 #endif
1616 yym = yylen[yyn];
1617 yyval = yyvsp[1-yym];
1618 switch (yyn)
1619 {
1620 case 6:
1621 #line 161 "parse.y"
1622 { /* this do nothing action removes a vacuous warning
1623 from Bison */
1624 }
1625 break;
1626 case 7:
1627 #line 166 "parse.y"
1628 { be_setup(scope = SCOPE_BEGIN) ; }
1629 break;
1630 case 8:
1631 #line 169 "parse.y"
1632 { switch_code_to_main() ; }
1633 break;
1634 case 9:
1635 #line 172 "parse.y"
1636 { be_setup(scope = SCOPE_END) ; }
1637 break;
1638 case 10:
1639 #line 175 "parse.y"
1640 { switch_code_to_main() ; }
1641 break;
1642 case 11:
1643 #line 178 "parse.y"
1644 { code_jmp(_JZ, (INST*)0) ; }
1645 break;
1646 case 12:
1647 #line 181 "parse.y"
1648 { patch_jmp( code_ptr ) ; }
1649 break;
1650 case 13:
1651 #line 185 "parse.y"
1652 {
1653 INST *p1 = CDP(yyvsp[-1].start) ;
1654 int len ;
1655
1656 code_push(p1, code_ptr - p1, scope, active_funct) ;
1657 code_ptr = p1 ;
1658
1659 code2op(_RANGE, 1) ;
1660 code_ptr += 3 ;
1661 len = code_pop(code_ptr) ;
1662 code_ptr += len ;
1663 code1(_STOP) ;
1664 p1 = CDP(yyvsp[-1].start) ;
1665 p1[2].op = code_ptr - (p1+1) ;
1666 }
1667 break;
1668 case 14:
1669 #line 201 "parse.y"
1670 { code1(_STOP) ; }
1671 break;
1672 case 15:
1673 #line 204 "parse.y"
1674 {
1675 INST *p1 = CDP(yyvsp[-5].start) ;
1676
1677 p1[3].op = CDP(yyvsp[0].start) - (p1+1) ;
1678 p1[4].op = code_ptr - (p1+1) ;
1679 }
1680 break;
1681 case 16:
1682 #line 215 "parse.y"
1683 { yyval.start = yyvsp[-1].start ; }
1684 break;
1685 case 17:
1686 #line 217 "parse.y"
1687 { yyval.start = code_offset ; /* does nothing won't be executed */
1688 print_flag = getline_flag = paren_cnt = 0 ;
1689 yyerrok ; }
1690 break;
1691 case 19:
1692 #line 224 "parse.y"
1693 { yyval.start = code_offset ;
1694 code1(_PUSHINT) ; code1(0) ;
1695 code2(_PRINT, bi_print) ;
1696 }
1697 break;
1698 case 23:
1699 #line 236 "parse.y"
1700 { code1(_POP) ; }
1701 break;
1702 case 24:
1703 #line 238 "parse.y"
1704 { yyval.start = code_offset ; }
1705 break;
1706 case 25:
1707 #line 240 "parse.y"
1708 { yyval.start = code_offset ;
1709 print_flag = getline_flag = 0 ;
1710 paren_cnt = 0 ;
1711 yyerrok ;
1712 }
1713 break;
1714 case 26:
1715 #line 246 "parse.y"
1716 { yyval.start = code_offset ; BC_insert('B', code_ptr+1) ;
1717 code2(_BREAK, 0) /* don't use code_jmp ! */ ; }
1718 break;
1719 case 27:
1720 #line 249 "parse.y"
1721 { yyval.start = code_offset ; BC_insert('C', code_ptr+1) ;
1722 code2(_GOTO, 0) ; }
1723 break;
1724 case 28:
1725 #line 252 "parse.y"
1726 { if ( scope != SCOPE_FUNCT )
1727 compile_error("return outside function body") ;
1728 }
1729 break;
1730 case 29:
1731 #line 256 "parse.y"
1732 { if ( scope != SCOPE_MAIN && scope != SCOPE_FUNCT )
1733 compile_error( "improper use of next" ) ;
1734 yyval.start = code_offset ;
1735 code1(_NEXT) ;
1736 }
1737 break;
1738 case 30:
1739 #line 262 "parse.y"
1740 { if ( scope != SCOPE_MAIN && scope != SCOPE_FUNCT )
1741 compile_error( "improper use of nextfile" ) ;
1742 yyval.start = code_offset ;
1743 code1(_NEXTFILE) ;
1744 }
1745 break;
1746 case 34:
1747 #line 273 "parse.y"
1748 { code1(_ASSIGN) ; }
1749 break;
1750 case 35:
1751 #line 274 "parse.y"
1752 { code1(_ADD_ASG) ; }
1753 break;
1754 case 36:
1755 #line 275 "parse.y"
1756 { code1(_SUB_ASG) ; }
1757 break;
1758 case 37:
1759 #line 276 "parse.y"
1760 { code1(_MUL_ASG) ; }
1761 break;
1762 case 38:
1763 #line 277 "parse.y"
1764 { code1(_DIV_ASG) ; }
1765 break;
1766 case 39:
1767 #line 278 "parse.y"
1768 { code1(_MOD_ASG) ; }
1769 break;
1770 case 40:
1771 #line 279 "parse.y"
1772 { code1(_POW_ASG) ; }
1773 break;
1774 case 41:
1775 #line 280 "parse.y"
1776 { code1(_EQ) ; }
1777 break;
1778 case 42:
1779 #line 281 "parse.y"
1780 { code1(_NEQ) ; }
1781 break;
1782 case 43:
1783 #line 282 "parse.y"
1784 { code1(_LT) ; }
1785 break;
1786 case 44:
1787 #line 283 "parse.y"
1788 { code1(_LTE) ; }
1789 break;
1790 case 45:
1791 #line 284 "parse.y"
1792 { code1(_GT) ; }
1793 break;
1794 case 46:
1795 #line 285 "parse.y"
1796 { code1(_GTE) ; }
1797 break;
1798 case 47:
1799 #line 288 "parse.y"
1800 {
1801 INST *p3 = CDP(yyvsp[0].start) ;
1802
1803 if ( p3 == code_ptr - 2 )
1804 {
1805 if ( p3->op == _MATCH0 ) p3->op = _MATCH1 ;
1806
1807 else /* check for string */
1808 if ( p3->op == _PUSHS )
1809 { CELL *cp = ZMALLOC(CELL) ;
1810
1811 cp->type = C_STRING ;
1812 cp->ptr = p3[1].ptr ;
1813 cast_to_RE(cp) ;
1814 code_ptr -= 2 ;
1815 code2(_MATCH1, cp->ptr) ;
1816 ZFREE(cp) ;
1817 }
1818 else code1(_MATCH2) ;
1819 }
1820 else code1(_MATCH2) ;
1821
1822 if ( !yyvsp[-1].ival ) code1(_NOT) ;
1823 }
1824 break;
1825 case 48:
1826 #line 315 "parse.y"
1827 { code1(_TEST) ;
1828 code_jmp(_LJNZ, (INST*)0) ;
1829 }
1830 break;
1831 case 49:
1832 #line 319 "parse.y"
1833 { code1(_TEST) ; patch_jmp(code_ptr) ; }
1834 break;
1835 case 50:
1836 #line 322 "parse.y"
1837 { code1(_TEST) ;
1838 code_jmp(_LJZ, (INST*)0) ;
1839 }
1840 break;
1841 case 51:
1842 #line 326 "parse.y"
1843 { code1(_TEST) ; patch_jmp(code_ptr) ; }
1844 break;
1845 case 52:
1846 #line 328 "parse.y"
1847 { code_jmp(_QMARK, (INST*)0) ; }
1848 break;
1849 case 53:
1850 #line 329 "parse.y"
1851 { code_jmp(_COLON, (INST*)0) ; }
1852 break;
1853 case 54:
1854 #line 331 "parse.y"
1855 { patch_jmp(code_ptr) ; patch_jmp(CDP(yyvsp[0].start)) ; }
1856 break;
1857 case 56:
1858 #line 336 "parse.y"
1859 { code1(_CAT) ; }
1860 break;
1861 case 57:
1862 #line 340 "parse.y"
1863 { yyval.start = code_offset ; code2(_PUSHD, yyvsp[0].ptr) ; }
1864 break;
1865 case 58:
1866 #line 342 "parse.y"
1867 { yyval.start = code_offset ; code2(_PUSHS, yyvsp[0].ptr) ; }
1868 break;
1869 case 59:
1870 #line 344 "parse.y"
1871 { check_var(yyvsp[0].stp) ;
1872 yyval.start = code_offset ;
1873 if ( is_local(yyvsp[0].stp) )
1874 { code2op(L_PUSHI, yyvsp[0].stp->offset) ; }
1875 else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
1876 }
1877 break;
1878 case 60:
1879 #line 352 "parse.y"
1880 { yyval.start = yyvsp[-1].start ; }
1881 break;
1882 case 61:
1883 #line 356 "parse.y"
1884 { yyval.start = code_offset ; code2(_MATCH0, yyvsp[0].ptr) ; }
1885 break;
1886 case 62:
1887 #line 359 "parse.y"
1888 { code1(_ADD) ; }
1889 break;
1890 case 63:
1891 #line 360 "parse.y"
1892 { code1(_SUB) ; }
1893 break;
1894 case 64:
1895 #line 361 "parse.y"
1896 { code1(_MUL) ; }
1897 break;
1898 case 65:
1899 #line 362 "parse.y"
1900 { code1(_DIV) ; }
1901 break;
1902 case 66:
1903 #line 363 "parse.y"
1904 { code1(_MOD) ; }
1905 break;
1906 case 67:
1907 #line 364 "parse.y"
1908 { code1(_POW) ; }
1909 break;
1910 case 68:
1911 #line 366 "parse.y"
1912 { yyval.start = yyvsp[0].start ; code1(_NOT) ; }
1913 break;
1914 case 69:
1915 #line 368 "parse.y"
1916 { yyval.start = yyvsp[0].start ; code1(_UPLUS) ; }
1917 break;
1918 case 70:
1919 #line 370 "parse.y"
1920 { yyval.start = yyvsp[0].start ; code1(_UMINUS) ; }
1921 break;
1922 case 72:
1923 #line 375 "parse.y"
1924 { check_var(yyvsp[-1].stp) ;
1925 yyval.start = code_offset ;
1926 code_address(yyvsp[-1].stp) ;
1927
1928 if ( yyvsp[0].ival == '+' ) code1(_POST_INC) ;
1929 else code1(_POST_DEC) ;
1930 }
1931 break;
1932 case 73:
1933 #line 383 "parse.y"
1934 { yyval.start = yyvsp[0].start ;
1935 if ( yyvsp[-1].ival == '+' ) code1(_PRE_INC) ;
1936 else code1(_PRE_DEC) ;
1937 }
1938 break;
1939 case 74:
1940 #line 390 "parse.y"
1941 { if (yyvsp[0].ival == '+' ) code1(F_POST_INC ) ;
1942 else code1(F_POST_DEC) ;
1943 }
1944 break;
1945 case 75:
1946 #line 394 "parse.y"
1947 { yyval.start = yyvsp[0].start ;
1948 if ( yyvsp[-1].ival == '+' ) code1(F_PRE_INC) ;
1949 else code1( F_PRE_DEC) ;
1950 }
1951 break;
1952 case 76:
1953 #line 401 "parse.y"
1954 { yyval.start = code_offset ;
1955 check_var(yyvsp[0].stp) ;
1956 code_address(yyvsp[0].stp) ;
1957 }
1958 break;
1959 case 77:
1960 #line 406 "parse.y"
1961 {
1962 BI_REC *p = yyvsp[-4].bip ;
1963 yyval.start = yyvsp[-3].start;
1964 if (strcmp(p->name, "argval"))
1965 compile_error("builtin function '%s' used as an lvalue", p->name);
1966 if ( (int)p->min_args > yyvsp[-1].ival || (int)p->max_args < yyvsp[-1].ival )
1967 compile_error(
1968 "wrong number of arguments in call to %s" ,
1969 p->name ) ;
1970 if ( p->min_args != p->max_args ) /* variable args */
1971 { code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
1972 code2(_BUILTIN , p->fp) ;
1973 }
1974 break;
1975 case 78:
1976 #line 424 "parse.y"
1977 { yyval.ival = 0 ; }
1978 break;
1979 case 80:
1980 #line 429 "parse.y"
1981 { yyval.ival = 1 ; }
1982 break;
1983 case 81:
1984 #line 431 "parse.y"
1985 { yyval.ival = yyvsp[-2].ival + 1 ; }
1986 break;
1987 case 82:
1988 #line 436 "parse.y"
1989 {
1990 BI_REC *p = yyvsp[-4].bip ;
1991 yyval.start = yyvsp[-3].start ;
1992 if ( (int)p->min_args > yyvsp[-1].ival || (int)p->max_args < yyvsp[-1].ival )
1993 compile_error(
1994 "wrong number of arguments in call to %s" ,
1995 p->name ) ;
1996 if ( p->min_args != p->max_args ) /* variable args */
1997 { code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
1998 code2(_BUILTIN , p->fp) ;
1999 }
2000 break;
2001 case 83:
2002 #line 448 "parse.y"
2003 {
2004 yyval.start = code_offset ;
2005 code1(_PUSHINT) ; code1(0) ;
2006 code2(_BUILTIN, yyvsp[0].bip->fp) ;
2007 }
2008 break;
2009 case 84:
2010 #line 457 "parse.y"
2011 { yyval.start = code_offset ; }
2012 break;
2013 case 85:
2014 #line 461 "parse.y"
2015 { code2(_PRINT, yyvsp[-4].fp) ;
2016 if ( yyvsp[-4].fp == bi_printf && yyvsp[-2].ival == 0 )
2017 compile_error("no arguments in call to printf") ;
2018 print_flag = 0 ;
2019 yyval.start = yyvsp[-3].start ;
2020 }
2021 break;
2022 case 86:
2023 #line 469 "parse.y"
2024 { yyval.fp = bi_print ; print_flag = 1 ;}
2025 break;
2026 case 87:
2027 #line 470 "parse.y"
2028 { yyval.fp = bi_printf ; print_flag = 1 ; }
2029 break;
2030 case 88:
2031 #line 473 "parse.y"
2032 { code2op(_PUSHINT, yyvsp[0].ival) ; }
2033 break;
2034 case 89:
2035 #line 475 "parse.y"
2036 { yyval.ival = yyvsp[-1].arg2p->cnt ; zfree(yyvsp[-1].arg2p,sizeof(ARG2_REC)) ;
2037 code2op(_PUSHINT, yyval.ival) ;
2038 }
2039 break;
2040 case 90:
2041 #line 479 "parse.y"
2042 { yyval.ival=0 ; code2op(_PUSHINT, 0) ; }
2043 break;
2044 case 91:
2045 #line 483 "parse.y"
2046 { yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ;
2047 yyval.arg2p->start = yyvsp[-2].start ;
2048 yyval.arg2p->cnt = 2 ;
2049 }
2050 break;
2051 case 92:
2052 #line 488 "parse.y"
2053 { yyval.arg2p = yyvsp[-2].arg2p ; yyval.arg2p->cnt++ ; }
2054 break;
2055 case 94:
2056 #line 493 "parse.y"
2057 { code2op(_PUSHINT, yyvsp[-1].ival) ; }
2058 break;
2059 case 95:
2060 #line 495 "parse.y"
2061 { code2op(_PUSHINT, yyvsp[-1].ival) ; }
2062 break;
2063 case 96:
2064 #line 502 "parse.y"
2065 { yyval.start = yyvsp[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; }
2066 break;
2067 case 97:
2068 #line 507 "parse.y"
2069 { patch_jmp( code_ptr ) ; }
2070 break;
2071 case 98:
2072 #line 510 "parse.y"
2073 { eat_nl() ; code_jmp(_ELSE, (INST*)0) ; }
2074 break;
2075 case 99:
2076 #line 515 "parse.y"
2077 { patch_jmp(code_ptr) ;
2078 patch_jmp(CDP(yyvsp[0].start)) ;
2079 }
2080 break;
2081 case 100:
2082 #line 523 "parse.y"
2083 { eat_nl() ; BC_new() ; }
2084 break;
2085 case 101:
2086 #line 528 "parse.y"
2087 { yyval.start = yyvsp[-5].start ;
2088 code_jmp(_JNZ, CDP(yyvsp[-5].start)) ;
2089 BC_clear(code_ptr, CDP(yyvsp[-2].start)) ; }
2090 break;
2091 case 102:
2092 #line 534 "parse.y"
2093 { eat_nl() ; BC_new() ;
2094 yyval.start = yyvsp[-1].start ;
2095
2096 /* check if const expression */
2097 if ( code_ptr - 2 == CDP(yyvsp[-1].start) &&
2098 code_ptr[-2].op == _PUSHD &&
2099 *(double*)code_ptr[-1].ptr != 0.0
2100 )
2101 code_ptr -= 2 ;
2102 else
2103 { INST *p3 = CDP(yyvsp[-1].start) ;
2104 code_push(p3, code_ptr-p3, scope, active_funct) ;
2105 code_ptr = p3 ;
2106 code2(_JMP, (INST*)0) ; /* code2() not code_jmp() */
2107 }
2108 }
2109 break;
2110 case 103:
2111 #line 554 "parse.y"
2112 {
2113 int saved_offset ;
2114 int len ;
2115 INST *p1 = CDP(yyvsp[-1].start) ;
2116 INST *p2 = CDP(yyvsp[0].start) ;
2117
2118 if ( p1 != p2 ) /* real test in loop */
2119 {
2120 p1[1].op = code_ptr-(p1+1) ;
2121 saved_offset = code_offset ;
2122 len = code_pop(code_ptr) ;
2123 code_ptr += len ;
2124 code_jmp(_JNZ, CDP(yyvsp[0].start)) ;
2125 BC_clear(code_ptr, CDP(saved_offset)) ;
2126 }
2127 else /* while(1) */
2128 {
2129 code_jmp(_JMP, p1) ;
2130 BC_clear(code_ptr, CDP(yyvsp[0].start)) ;
2131 }
2132 }
2133 break;
2134 case 104:
2135 #line 580 "parse.y"
2136 {
2137 int cont_offset = code_offset ;
2138 unsigned len = code_pop(code_ptr) ;
2139 INST *p2 = CDP(yyvsp[-2].start) ;
2140 INST *p4 = CDP(yyvsp[0].start) ;
2141
2142 code_ptr += len ;
2143
2144 if ( p2 != p4 ) /* real test in for2 */
2145 {
2146 p4[-1].op = code_ptr - p4 + 1 ;
2147 len = code_pop(code_ptr) ;
2148 code_ptr += len ;
2149 code_jmp(_JNZ, CDP(yyvsp[0].start)) ;
2150 }
2151 else /* for(;;) */
2152 code_jmp(_JMP, p4) ;
2153
2154 BC_clear(code_ptr, CDP(cont_offset)) ;
2155
2156 }
2157 break;
2158 case 105:
2159 #line 603 "parse.y"
2160 { yyval.start = code_offset ; }
2161 break;
2162 case 106:
2163 #line 605 "parse.y"
2164 { yyval.start = yyvsp[-1].start ; code1(_POP) ; }
2165 break;
2166 case 107:
2167 #line 608 "parse.y"
2168 { yyval.start = code_offset ; }
2169 break;
2170 case 108:
2171 #line 610 "parse.y"
2172 {
2173 if ( code_ptr - 2 == CDP(yyvsp[-1].start) &&
2174 code_ptr[-2].op == _PUSHD &&
2175 * (double*) code_ptr[-1].ptr != 0.0
2176 )
2177 code_ptr -= 2 ;
2178 else
2179 {
2180 INST *p1 = CDP(yyvsp[-1].start) ;
2181 code_push(p1, code_ptr-p1, scope, active_funct) ;
2182 code_ptr = p1 ;
2183 code2(_JMP, (INST*)0) ;
2184 }
2185 }
2186 break;
2187 case 109:
2188 #line 627 "parse.y"
2189 { eat_nl() ; BC_new() ;
2190 code_push((INST*)0,0, scope, active_funct) ;
2191 }
2192 break;
2193 case 110:
2194 #line 631 "parse.y"
2195 { INST *p1 = CDP(yyvsp[-1].start) ;
2196
2197 eat_nl() ; BC_new() ;
2198 code1(_POP) ;
2199 code_push(p1, code_ptr - p1, scope, active_funct) ;
2200 code_ptr -= code_ptr - p1 ;
2201 }
2202 break;
2203 case 111:
2204 #line 644 "parse.y"
2205 { check_array(yyvsp[0].stp) ;
2206 code_array(yyvsp[0].stp) ;
2207 code1(A_TEST) ;
2208 }
2209 break;
2210 case 112:
2211 #line 649 "parse.y"
2212 { yyval.start = yyvsp[-3].arg2p->start ;
2213 code2op(A_CAT, yyvsp[-3].arg2p->cnt) ;
2214 zfree(yyvsp[-3].arg2p, sizeof(ARG2_REC)) ;
2215
2216 check_array(yyvsp[0].stp) ;
2217 code_array(yyvsp[0].stp) ;
2218 code1(A_TEST) ;
2219 }
2220 break;
2221 case 113:
2222 #line 660 "parse.y"
2223 {
2224 if ( yyvsp[-1].ival > 1 )
2225 { code2op(A_CAT, yyvsp[-1].ival) ; }
2226
2227 check_array(yyvsp[-4].stp) ;
2228 if( is_local(yyvsp[-4].stp) )
2229 { code2op(LAE_PUSHA, yyvsp[-4].stp->offset) ; }
2230 else code2(AE_PUSHA, yyvsp[-4].stp->stval.array) ;
2231 yyval.start = yyvsp[-3].start ;
2232 }
2233 break;
2234 case 114:
2235 #line 673 "parse.y"
2236 {
2237 if ( yyvsp[-1].ival > 1 )
2238 { code2op(A_CAT, yyvsp[-1].ival) ; }
2239
2240 check_array(yyvsp[-4].stp) ;
2241 if( is_local(yyvsp[-4].stp) )
2242 { code2op(LAE_PUSHI, yyvsp[-4].stp->offset) ; }
2243 else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
2244 yyval.start = yyvsp[-3].start ;
2245 }
2246 break;
2247 case 115:
2248 #line 685 "parse.y"
2249 {
2250 if ( yyvsp[-2].ival > 1 )
2251 { code2op(A_CAT,yyvsp[-2].ival) ; }
2252
2253 check_array(yyvsp[-5].stp) ;
2254 if( is_local(yyvsp[-5].stp) )
2255 { code2op(LAE_PUSHA, yyvsp[-5].stp->offset) ; }
2256 else code2(AE_PUSHA, yyvsp[-5].stp->stval.array) ;
2257 if ( yyvsp[0].ival == '+' ) code1(_POST_INC) ;
2258 else code1(_POST_DEC) ;
2259
2260 yyval.start = yyvsp[-4].start ;
2261 }
2262 break;
2263 case 116:
2264 #line 702 "parse.y"
2265 {
2266 yyval.start = yyvsp[-4].start ;
2267 if ( yyvsp[-2].ival > 1 ) { code2op(A_CAT, yyvsp[-2].ival) ; }
2268 check_array(yyvsp[-5].stp) ;
2269 code_array(yyvsp[-5].stp) ;
2270 code1(A_DEL) ;
2271 }
2272 break;
2273 case 117:
2274 #line 710 "parse.y"
2275 {
2276 yyval.start = code_offset ;
2277 check_array(yyvsp[-1].stp) ;
2278 code_array(yyvsp[-1].stp) ;
2279 code1(DEL_A) ;
2280 }
2281 break;
2282 case 118:
2283 #line 721 "parse.y"
2284 { eat_nl() ; BC_new() ;
2285 yyval.start = code_offset ;
2286
2287 check_var(yyvsp[-3].stp) ;
2288 code_address(yyvsp[-3].stp) ;
2289 check_array(yyvsp[-1].stp) ;
2290 code_array(yyvsp[-1].stp) ;
2291
2292 code2(SET_ALOOP, (INST*)0) ;
2293 }
2294 break;
2295 case 119:
2296 #line 735 "parse.y"
2297 {
2298 INST *p2 = CDP(yyvsp[0].start) ;
2299
2300 p2[-1].op = code_ptr - p2 + 1 ;
2301 BC_clear( code_ptr+2 , code_ptr) ;
2302 code_jmp(ALOOP, p2) ;
2303 code1(POP_AL) ;
2304 }
2305 break;
2306 case 120:
2307 #line 752 "parse.y"
2308 { yyval.start = code_offset ; code2(F_PUSHA, yyvsp[0].cp) ; }
2309 break;
2310 case 121:
2311 #line 754 "parse.y"
2312 {
2313 check_var(yyvsp[0].stp) ;
2314 yyval.start = code_offset ;
2315 if ( is_local(yyvsp[0].stp) )
2316 { code2op(L_PUSHI, yyvsp[0].stp->offset) ; }
2317 else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
2318
2319 CODE_FE_PUSHA() ;
2320 }
2321 break;
2322 case 122:
2323 #line 764 "parse.y"
2324 {
2325 if ( yyvsp[-1].ival > 1 )
2326 { code2op(A_CAT, yyvsp[-1].ival) ; }
2327
2328 check_array(yyvsp[-4].stp) ;
2329 if( is_local(yyvsp[-4].stp) )
2330 { code2op(LAE_PUSHI, yyvsp[-4].stp->offset) ; }
2331 else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
2332
2333 CODE_FE_PUSHA() ;
2334
2335 yyval.start = yyvsp[-3].start ;
2336 }
2337 break;
2338 case 123:
2339 #line 778 "parse.y"
2340 {
2341 yyval.start = yyvsp[0].start ; CODE_FE_PUSHA() ;
2342 }
2343 break;
2344 case 124:
2345 #line 782 "parse.y"
2346 { yyval.start = yyvsp[-1].start ; }
2347 break;
2348 case 125:
2349 #line 786 "parse.y"
2350 { field_A2I() ; }
2351 break;
2352 case 126:
2353 #line 789 "parse.y"
2354 { code1(F_ASSIGN) ; }
2355 break;
2356 case 127:
2357 #line 790 "parse.y"
2358 { code1(F_ADD_ASG) ; }
2359 break;
2360 case 128:
2361 #line 791 "parse.y"
2362 { code1(F_SUB_ASG) ; }
2363 break;
2364 case 129:
2365 #line 792 "parse.y"
2366 { code1(F_MUL_ASG) ; }
2367 break;
2368 case 130:
2369 #line 793 "parse.y"
2370 { code1(F_DIV_ASG) ; }
2371 break;
2372 case 131:
2373 #line 794 "parse.y"
2374 { code1(F_MOD_ASG) ; }
2375 break;
2376 case 132:
2377 #line 795 "parse.y"
2378 { code1(F_POW_ASG) ; }
2379 break;
2380 case 133:
2381 #line 802 "parse.y"
2382 { code2(_BUILTIN, bi_split) ; }
2383 break;
2384 case 134:
2385 #line 806 "parse.y"
2386 { yyval.start = yyvsp[-2].start ;
2387 check_array(yyvsp[0].stp) ;
2388 code_array(yyvsp[0].stp) ;
2389 }
2390 break;
2391 case 135:
2392 #line 813 "parse.y"
2393 { code2(_PUSHI, &fs_shadow) ; }
2394 break;
2395 case 136:
2396 #line 815 "parse.y"
2397 {
2398 if ( CDP(yyvsp[-1].start) == code_ptr - 2 )
2399 {
2400 if ( code_ptr[-2].op == _MATCH0 )
2401 RE_as_arg() ;
2402 else
2403 if ( code_ptr[-2].op == _PUSHS )
2404 { CELL *cp = ZMALLOC(CELL) ;
2405
2406 cp->type = C_STRING ;
2407 cp->ptr = code_ptr[-1].ptr ;
2408 cast_for_split(cp) ;
2409 code_ptr[-2].op = _PUSHC ;
2410 code_ptr[-1].ptr = (PTR) cp ;
2411 }
2412 }
2413 }
2414 break;
2415 case 137:
2416 #line 839 "parse.y"
2417 {
2418 check_array(yyvsp[-1].stp) ;
2419 code_array(yyvsp[-1].stp) ;
2420 code2(_BUILTIN, bi_alength) ;
2421 }
2422 break;
2423 case 138:
2424 #line 849 "parse.y"
2425 {
2426 yyval.start = yyvsp[-3].start ;
2427 check_array(yyvsp[-1].stp) ;
2428 code_array(yyvsp[-1].stp) ;
2429 code1(_PUSHINT) ; code1(1) ;
2430 code2(_BUILTIN, bi_asort) ;
2431 }
2432 break;
2433 case 139:
2434 #line 857 "parse.y"
2435 {
2436 yyval.start = yyvsp[-5].start ;
2437 check_array(yyvsp[-1].stp) ;
2438 code_array(yyvsp[-1].stp) ;
2439 check_array(yyvsp[-3].stp) ;
2440 code_array(yyvsp[-3].stp) ;
2441 code1(_PUSHINT) ; code1(2) ;
2442 code2(_BUILTIN, bi_asort) ;
2443 }
2444 break;
2445 case 140:
2446 #line 871 "parse.y"
2447 { yyval.start = yyvsp[-5].start ;
2448 check_array(yyvsp[-1].stp);
2449 code_array(yyvsp[-1].stp);
2450 code1(_PUSHINT); code1(3);
2451 code2(_BUILTIN, bi_match) ;
2452 }
2453 break;
2454 case 141:
2455 #line 878 "parse.y"
2456 { yyval.start = yyvsp[-3].start ;
2457 code1(_PUSHINT); code1(2);
2458 code2(_BUILTIN, bi_match) ;
2459 }
2460 break;
2461 case 142:
2462 #line 893 "parse.y"
2463 {
2464 INST *p1 = CDP(yyvsp[0].start) ;
2465
2466 if ( p1 == code_ptr - 2 )
2467 {
2468 if ( p1->op == _MATCH0 ) RE_as_arg() ;
2469 else
2470 if ( p1->op == _PUSHS )
2471 { CELL *cp = ZMALLOC(CELL) ;
2472
2473 cp->type = C_STRING ;
2474 cp->ptr = p1[1].ptr ;
2475 cast_to_RE(cp) ;
2476 p1->op = _PUSHC ;
2477 p1[1].ptr = (PTR) cp ;
2478 }
2479 }
2480 }
2481 break;
2482 case 143:
2483 #line 916 "parse.y"
2484 { yyval.start = code_offset ;
2485 code1(_EXIT0) ; }
2486 break;
2487 case 144:
2488 #line 919 "parse.y"
2489 { yyval.start = yyvsp[-1].start ; code1(_EXIT) ; }
2490 break;
2491 case 145:
2492 #line 921 "parse.y"
2493 { yyval.start = code_offset ;
2494 code1(_ABORT0) ; }
2495 break;
2496 case 146:
2497 #line 924 "parse.y"
2498 { yyval.start = yyvsp[-1].start ; code1(_ABORT) ; }
2499 break;
2500 case 147:
2501 #line 927 "parse.y"
2502 { yyval.start = code_offset ;
2503 code1(_RET0) ; }
2504 break;
2505 case 148:
2506 #line 930 "parse.y"
2507 { yyval.start = yyvsp[-1].start ; code1(_RET) ; }
2508 break;
2509 case 149:
2510 #line 936 "parse.y"
2511 { yyval.start = code_offset ;
2512 code2(F_PUSHA, &field[0]) ;
2513 code1(_PUSHINT) ; code1(0) ;
2514 code2(_BUILTIN, bi_getline) ;
2515 getline_flag = 0 ;
2516 }
2517 break;
2518 case 150:
2519 #line 943 "parse.y"
2520 { yyval.start = yyvsp[0].start ;
2521 code1(_PUSHINT) ; code1(0) ;
2522 code2(_BUILTIN, bi_getline) ;
2523 getline_flag = 0 ;
2524 }
2525 break;
2526 case 151:
2527 #line 949 "parse.y"
2528 { code1(_PUSHINT) ; code1(F_IN) ;
2529 code2(_BUILTIN, bi_getline) ;
2530 /* getline_flag already off in yylex() */
2531 }
2532 break;
2533 case 152:
2534 #line 954 "parse.y"
2535 { code2(F_PUSHA, &field[0]) ;
2536 code1(_PUSHINT) ; code1(COP_IN) ;
2537 code2(_BUILTIN, bi_getline) ;
2538 }
2539 break;
2540 case 153:
2541 #line 959 "parse.y"
2542 {
2543 code1(_PUSHINT) ; code1(COP_IN) ;
2544 code2(_BUILTIN, bi_getline) ;
2545 }
2546 break;
2547 case 154:
2548 #line 964 "parse.y"
2549 { code2(F_PUSHA, &field[0]) ;
2550 code1(_PUSHINT) ; code1(PIPE_IN) ;
2551 code2(_BUILTIN, bi_getline) ;
2552 }
2553 break;
2554 case 155:
2555 #line 969 "parse.y"
2556 {
2557 code1(_PUSHINT) ; code1(PIPE_IN) ;
2558 code2(_BUILTIN, bi_getline) ;
2559 }
2560 break;
2561 case 156:
2562 #line 975 "parse.y"
2563 { getline_flag = 1 ; }
2564 break;
2565 case 159:
2566 #line 980 "parse.y"
2567 { yyval.start = code_offset ;
2568 code2(F_PUSHA, field+0) ;
2569 }
2570 break;
2571 case 160:
2572 #line 984 "parse.y"
2573 { yyval.start = yyvsp[-1].start ; }
2574 break;
2575 case 161:
2576 #line 992 "parse.y"
2577 {
2578 INST *p5 = CDP(yyvsp[-3].start) ;
2579 INST *p8 = CDP(yyvsp[0].start) ;
2580
2581 if ( p8 - p5 == 2 && p5->op == _PUSHS )
2582 { /* cast from STRING to REPL at compile time */
2583 CELL *cp = ZMALLOC(CELL) ;
2584 cp->type = C_STRING ;
2585 cp->ptr = p5[1].ptr ;
2586 cast_to_REPL(cp) ;
2587 p5->op = _PUSHC ;
2588 p5[1].ptr = (PTR) cp ;
2589 }
2590 code2(_BUILTIN, yyvsp[-7].fp) ;
2591 yyval.start = yyvsp[-5].start ;
2592 }
2593 break;
2594 case 162:
2595 #line 1010 "parse.y"
2596 { yyval.fp = bi_gensub ; }
2597 break;
2598 case 163:
2599 #line 1014 "parse.y"
2600 {
2601 INST *p5 = CDP(yyvsp[-1].start) ;
2602 INST *p6 = CDP(yyvsp[0].start) ;
2603
2604 if ( p6 - p5 == 2 && p5->op == _PUSHS )
2605 { /* cast from STRING to REPL at compile time */
2606 CELL *cp = ZMALLOC(CELL) ;
2607 cp->type = C_STRING ;
2608 cp->ptr = p5[1].ptr ;
2609 cast_to_REPL(cp) ;
2610 p5->op = _PUSHC ;
2611 p5[1].ptr = (PTR) cp ;
2612 }
2613 code2(_BUILTIN, yyvsp[-5].fp) ;
2614 yyval.start = yyvsp[-3].start ;
2615 }
2616 break;
2617 case 164:
2618 #line 1032 "parse.y"
2619 { yyval.fp = bi_sub ; }
2620 break;
2621 case 165:
2622 #line 1033 "parse.y"
2623 { yyval.fp = bi_gsub ; }
2624 break;
2625 case 166:
2626 #line 1038 "parse.y"
2627 { yyval.start = code_offset ;
2628 code2(F_PUSHA, &field[0]) ;
2629 }
2630 break;
2631 case 167:
2632 #line 1043 "parse.y"
2633 { yyval.start = yyvsp[-1].start ; }
2634 break;
2635 case 168:
2636 #line 1047 "parse.y"
2637 { yyval.start = code_offset ;
2638 code2(F_PUSHA, &field[0]) ;
2639 }
2640 break;
2641 case 169:
2642 #line 1051 "parse.y"
2643 { yyval.start = yyvsp[-1].start ; }
2644 break;
2645 case 170:
2646 #line 1059 "parse.y"
2647 {
2648 resize_fblock(yyvsp[-1].fbp) ;
2649 restore_ids() ;
2650 switch_code_to_main() ;
2651 }
2652 break;
2653 case 171:
2654 #line 1068 "parse.y"
2655 {
2656 eat_nl() ;
2657 scope = SCOPE_FUNCT ;
2658 active_funct = yyvsp[-3].fbp ;
2659 *main_code_p = active_code ;
2660
2661 yyvsp[-3].fbp->nargs = yyvsp[-1].ival ;
2662 if ( yyvsp[-1].ival )
2663 yyvsp[-3].fbp->typev = (char *)
2664 memset( zmalloc(yyvsp[-1].ival), ST_LOCAL_NONE, yyvsp[-1].ival) ;
2665 else yyvsp[-3].fbp->typev = (char *) 0 ;
2666
2667 code_ptr = code_base =
2668 (INST *) zmalloc(INST_BYTES(PAGESZ));
2669 code_limit = code_base + PAGESZ ;
2670 code_warn = code_limit - CODEWARN ;
2671 }
2672 break;
2673 case 172:
2674 #line 1088 "parse.y"
2675 { FBLOCK *fbp ;
2676
2677 if ( yyvsp[0].stp->type == ST_NONE )
2678 {
2679 yyvsp[0].stp->type = ST_FUNCT ;
2680 fbp = yyvsp[0].stp->stval.fbp =
2681 (FBLOCK *) zmalloc(sizeof(FBLOCK)) ;
2682 fbp->name = yyvsp[0].stp->name ;
2683 fbp->code = (INST*) 0 ;
2684 }
2685 else
2686 {
2687 type_error( yyvsp[0].stp ) ;
2688
2689 /* this FBLOCK will not be put in
2690 the symbol table */
2691 fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ;
2692 fbp->name = "" ;
2693 }
2694 yyval.fbp = fbp ;
2695 }
2696 break;
2697 case 173:
2698 #line 1111 "parse.y"
2699 {
2700 yyval.fbp = yyvsp[0].fbp ;
2701 if ( yyvsp[0].fbp->code )
2702 compile_error("redefinition of %s" , yyvsp[0].fbp->name) ;
2703 }
2704 break;
2705 case 174:
2706 #line 1118 "parse.y"
2707 { yyval.ival = 0 ; }
2708 break;
2709 case 176:
2710 #line 1123 "parse.y"
2711 {
2712 yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
2713 yyvsp[0].stp->type = ST_LOCAL_NONE ;
2714 yyvsp[0].stp->offset = 0 ;
2715 yyval.ival = 1 ;
2716 }
2717 break;
2718 case 177:
2719 #line 1130 "parse.y"
2720 {
2721 if ( is_local(yyvsp[0].stp) )
2722 compile_error("%s is duplicated in argument list",
2723 yyvsp[0].stp->name) ;
2724 else
2725 { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
2726 yyvsp[0].stp->type = ST_LOCAL_NONE ;
2727 yyvsp[0].stp->offset = yyvsp[-2].ival ;
2728 yyval.ival = yyvsp[-2].ival + 1 ;
2729 }
2730 }
2731 break;
2732 case 178:
2733 #line 1144 "parse.y"
2734 { /* we may have to recover from a bungled function
2735 definition */
2736 /* can have local ids, before code scope
2737 changes */
2738 restore_ids() ;
2739
2740 switch_code_to_main() ;
2741 }
2742 break;
2743 case 179:
2744 #line 1157 "parse.y"
2745 { yyval.start = yyvsp[-1].start ;
2746 code2(_CALL, yyvsp[-2].fbp) ;
2747
2748 if ( yyvsp[0].ca_p ) code1(yyvsp[0].ca_p->arg_num+1) ;
2749 else code1(0) ;
2750
2751 check_fcall(yyvsp[-2].fbp, scope, code_move_level, active_funct,
2752 yyvsp[0].ca_p, token_lineno) ;
2753 }
2754 break;
2755 case 180:
2756 #line 1169 "parse.y"
2757 { yyval.ca_p = (CA_REC *) 0 ; }
2758 break;
2759 case 181:
2760 #line 1171 "parse.y"
2761 { yyval.ca_p = yyvsp[0].ca_p ;
2762 yyval.ca_p->link = yyvsp[-1].ca_p ;
2763 yyval.ca_p->arg_num = yyvsp[-1].ca_p ? yyvsp[-1].ca_p->arg_num+1 : 0 ;
2764 }
2765 break;
2766 case 182:
2767 #line 1186 "parse.y"
2768 { yyval.ca_p = (CA_REC *) 0 ; }
2769 break;
2770 case 183:
2771 #line 1188 "parse.y"
2772 { yyval.ca_p = ZMALLOC(CA_REC) ;
2773 yyval.ca_p->link = yyvsp[-2].ca_p ;
2774 yyval.ca_p->type = CA_EXPR ;
2775 yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
2776 yyval.ca_p->call_offset = code_offset ;
2777 }
2778 break;
2779 case 184:
2780 #line 1195 "parse.y"
2781 { yyval.ca_p = ZMALLOC(CA_REC) ;
2782 yyval.ca_p->link = yyvsp[-2].ca_p ;
2783 yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
2784
2785 code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
2786 }
2787 break;
2788 case 185:
2789 #line 1204 "parse.y"
2790 { yyval.ca_p = ZMALLOC(CA_REC) ;
2791 yyval.ca_p->type = CA_EXPR ;
2792 yyval.ca_p->call_offset = code_offset ;
2793 }
2794 break;
2795 case 186:
2796 #line 1210 "parse.y"
2797 { yyval.ca_p = ZMALLOC(CA_REC) ;
2798 code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
2799 }
2800 break;
2801 #line 2802 "y.tab.c"
2802 }
2803 yyssp -= yym;
2804 yystate = *yyssp;
2805 yyvsp -= yym;
2806 yym = yylhs[yyn];
2807 if (yystate == 0 && yym == 0)
2808 {
2809 #if YYDEBUG
2810 if (yydebug)
2811 printf("%sdebug: after reduction, shifting from state 0 to\
2812 state %d\n", YYPREFIX, YYFINAL);
2813 #endif
2814 yystate = YYFINAL;
2815 *++yyssp = YYFINAL;
2816 *++yyvsp = yyval;
2817 if (yychar < 0)
2818 {
2819 if ((yychar = yylex()) < 0) yychar = 0;
2820 #if YYDEBUG
2821 if (yydebug)
2822 {
2823 yys = 0;
2824 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2825 if (!yys) yys = "illegal-symbol";
2826 printf("%sdebug: state %d, reading %d (%s)\n",
2827 YYPREFIX, YYFINAL, yychar, yys);
2828 }
2829 #endif
2830 }
2831 if (yychar == 0) goto yyaccept;
2832 goto yyloop;
2833 }
2834 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
2835 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
2836 yystate = yytable[yyn];
2837 else
2838 yystate = yydgoto[yym];
2839 #if YYDEBUG
2840 if (yydebug)
2841 printf("%sdebug: after reduction, shifting from state %d \
2842 to state %d\n", YYPREFIX, *yyssp, yystate);
2843 #endif
2844 if (yyssp >= yyss + yystacksize - 1)
2845 {
2846 goto yyoverflow;
2847 }
2848 *++yyssp = yystate;
2849 *++yyvsp = yyval;
2850 goto yyloop;
2851 yyoverflow:
2852 yyerror("yacc stack overflow");
2853 yyabort:
2854 return (1);
2855 yyaccept:
2856 return (0);
2857 }
2858