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