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