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