~ubuntu-branches/ubuntu/feisty/mawk/feisty

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