386BSD 0.1 development
[unix-history] / usr / src / usr.bin / awk / parse.c
index a58f1f3..423eabe 100644 (file)
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)parse.c    4.2 8/11/83";
+static char yyid[] = "@(#)modification of yaccpar 1.8 (Berkeley) 01/20/90";
 #endif
 #endif
+#define YYXBYACC 1  /* XBYACC -- modified Berkeley yacc */
+/*
+ Berkeley yacc modified so only tables and
+ yydebug and yylval are global
+ #define YYGLOBAL -- gives standard byacc
+ #define YYPURE -- gives a reentrant parser
+
+ Mike Brennan 11/05/91
+*/
+#line 24 "parse.y"
+#include <stdio.h>
+#include "mawk.h"
+#include "code.h"
+#include "symtype.h"
+#include "memory.h"
+#include "bi_funct.h"
+#include "bi_vars.h"
+#include "jmp.h"
+#include "field.h"
+#include "files.h"
+
+#ifdef  YYXBYACC
+#define YYBYACC                1
+#endif
+
+#define  YYMAXDEPTH    200
+
+/* Bison's use of MSDOS and ours clashes */
+#undef   MSDOS
+
+extern void  PROTO( eat_nl, (void) ) ;
+static void  PROTO( resize_fblock, (FBLOCK *, INST *) ) ;
+static void  PROTO( code_array, (SYMTAB *) ) ;
+static void  PROTO( code_call_id, (CA_REC *, SYMTAB *) ) ;
+static void  PROTO( field_A2I, (void)) ;
+static int   PROTO( current_offset, (void) ) ;
+static void  PROTO( check_var, (SYMTAB *) ) ;
+static void  PROTO( check_array, (SYMTAB *) ) ;
+static void  PROTO( RE_as_arg, (void)) ;
+
+static int scope ;
+static FBLOCK *active_funct ;
+      /* when scope is SCOPE_FUNCT  */
+
+#define  code_address(x)  if( is_local(x) )\
+                          { code1(L_PUSHA) ; code1((x)->offset) ; }\
+                          else  code2(_PUSHA, (x)->stval.cp) 
+
+/* this nonsense caters to MSDOS large model */
+#define  CODE_FE_PUSHA()  code_ptr->ptr = (PTR) 0 ; code1(FE_PUSHA)
+
+#line 67 "parse.y"
+typedef union{
+CELL *cp ;
+SYMTAB *stp ;
+INST  *start ; /* code starting address */
+PF_CP  fp ;  /* ptr to a (print/printf) or (sub/gsub) function */
+BI_REC *bip ; /* ptr to info about a builtin */
+FBLOCK  *fbp  ; /* ptr to a function block */
+ARG2_REC *arg2p ;
+CA_REC   *ca_p  ;
+int   ival ;
+PTR   ptr ;
+} YYSTYPE;
+#line 69 "y.tab.c"
+#define UNEXPECTED 257
+#define BAD_DECIMAL 258
+#define NL 259
+#define SEMI_COLON 260
+#define LBRACE 261
+#define RBRACE 262
+#define LBOX 263
+#define RBOX 264
+#define COMMA 265
+#define IO_OUT 266
+#define ASSIGN 267
+#define ADD_ASG 268
+#define SUB_ASG 269
+#define MUL_ASG 270
+#define DIV_ASG 271
+#define MOD_ASG 272
+#define POW_ASG 273
+#define QMARK 274
+#define COLON 275
+#define OR 276
+#define AND 277
+#define IN 278
+#define MATCH 279
+#define EQ 280
+#define NEQ 281
+#define LT 282
+#define LTE 283
+#define GT 284
+#define GTE 285
+#define CAT 286
+#define GETLINE 287
+#define PLUS 288
+#define MINUS 289
+#define MUL 290
+#define DIV 291
+#define MOD 292
+#define NOT 293
+#define UMINUS 294
+#define IO_IN 295
+#define PIPE 296
+#define POW 297
+#define INC_or_DEC 298
+#define DOLLAR 299
+#define FIELD 300
+#define LPAREN 301
+#define RPAREN 302
+#define DOUBLE 303
+#define STRING_ 304
+#define RE 305
+#define ID 306
+#define D_ID 307
+#define FUNCT_ID 308
+#define BUILTIN 309
+#define PRINT 310
+#define PRINTF 311
+#define SPLIT 312
+#define MATCH_FUNC 313
+#define SUB 314
+#define GSUB 315
+#define DO 316
+#define WHILE 317
+#define FOR 318
+#define BREAK 319
+#define CONTINUE 320
+#define IF 321
+#define ELSE 322
+#define DELETE 323
+#define BEGIN 324
+#define END 325
+#define EXIT 326
+#define NEXT 327
+#define RETURN 328
+#define FUNCTION 329
+#define YYERRCODE 256
+short yylhs[] = {                                        -1,
+    0,    0,   36,   36,   36,   37,   39,   37,   40,   37,
+   41,   37,   42,   43,   37,    1,    1,    2,    2,    3,
+    3,    4,    4,    4,    4,    4,    4,    4,    4,   44,
+   44,   13,   13,   13,   13,   13,   13,   13,   13,   13,
+   13,   13,   13,   13,   13,   13,   45,   13,   46,   13,
+   47,   48,   13,   14,   14,   15,   15,   15,   15,   15,
+   15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
+   15,   15,   15,   15,   10,   25,   25,   26,   26,    8,
+    5,    4,   27,   27,    6,    6,    6,    7,    7,   49,
+   49,   17,    4,   50,    4,   51,    4,   16,    4,    4,
+   18,   18,   19,   19,   52,   52,   13,   13,   10,   15,
+   15,    4,   20,    4,   11,   11,   11,   11,   11,   15,
+   13,   13,   13,   13,   13,   13,   13,   15,   22,   53,
+   53,   15,   23,    4,    4,   21,   21,   15,   15,   15,
+   15,   15,   54,   12,   12,    9,    9,   15,   28,   28,
+   24,   24,   38,   29,   30,   30,   34,   34,   35,   35,
+   15,   31,   31,   32,   32,   32,   33,   33,
+};
+short yylen[] = {                                         2,
+    1,    2,    1,    1,    2,    1,    0,    3,    0,    3,
+    0,    3,    0,    0,    6,    3,    3,    1,    1,    1,
+    2,    1,    2,    1,    2,    2,    2,    1,    2,    1,
+    1,    1,    3,    3,    3,    3,    3,    3,    3,    3,
+    3,    3,    3,    3,    3,    3,    0,    4,    0,    4,
+    0,    0,    7,    1,    2,    1,    1,    1,    3,    1,
+    3,    3,    3,    3,    3,    3,    2,    2,    2,    1,
+    2,    2,    2,    2,    1,    0,    1,    1,    3,    5,
+    0,    5,    1,    1,    1,    3,    2,    3,    3,    0,
+    2,    4,    2,    1,    4,    1,    7,    4,    2,    4,
+    3,    4,    1,    2,    1,    2,    3,    5,    5,    5,
+    6,    7,    6,    2,    1,    2,    6,    2,    3,    1,
+    3,    3,    3,    3,    3,    3,    3,    2,    5,    1,
+    3,    6,    1,    2,    3,    2,    3,    1,    2,    2,
+    3,    4,    1,    1,    1,    2,    3,    6,    1,    1,
+    1,    3,    2,    4,    2,    2,    0,    1,    1,    3,
+    3,    2,    2,    1,    3,    3,    2,    2,
+};
+short yydefred[] = {                                      0,
+    0,    0,  143,    0,    0,    0,    0,    0,  115,    0,
+   56,   57,   60,    0,   81,   81,    0,    0,  149,  150,
+    7,    9,    0,    0,    6,   70,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    1,    3,    4,    0,
+    5,    0,   30,   31,   83,   84,   96,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   22,    0,   20,    0,
+    0,    0,    0,    0,   28,   81,   24,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   72,   74,    0,  118,
+    0,    0,    0,   71,    0,    0,    0,    0,    0,    0,
+    0,  155,  156,    2,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,   73,
+   13,   51,   47,   49,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,  130,  128,    0,  153,    0,  146,  144,  145,
+    0,   17,   25,    0,    0,   26,   27,    0,   81,    0,
+  134,   29,    0,  136,    0,   16,   21,   23,   99,    0,
+  103,    0,    0,  114,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  119,    0,   59,    0,    0,  161,    0,
+    0,    0,    0,    8,   10,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  107,    0,   40,   41,   42,   43,   44,
+   45,   18,   12,   19,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  159,    0,    0,  147,    0,  101,
+    0,    0,    0,    0,  135,  137,   94,    0,  104,  105,
+    0,    0,    0,    0,    0,   85,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  162,    0,    0,  163,    0,
+    0,    0,    0,    0,    0,    0,  142,  131,    0,  154,
+    0,   98,    0,  102,   92,    0,   95,  106,  100,   87,
+    0,    0,    0,    0,    0,    0,    0,    0,  108,    0,
+  166,  168,  165,  167,   80,  129,    0,    0,   52,    0,
+  160,    0,    0,    0,    0,   82,    0,    0,    0,  109,
+  117,  111,  132,   15,    0,    0,  151,  148,  113,    0,
+    0,    0,    0,  112,   97,  152,
+};
+short yydgoto[] = {                                      24,
+   57,  213,   58,   59,   85,  244,   81,   26,   27,   28,
+   29,  141,   60,   31,   32,   61,   62,   63,  163,   64,
+   65,   33,  224,  318,  246,  247,   66,   34,   35,   36,
+  179,  180,  259,  226,  227,   37,   38,   39,   90,   91,
+  123,  200,  298,   67,  202,  203,  201,  315,  283,  238,
+   68,  242,  134,   40,
+};
+short yysindex[] = {                                     38,
+ -259,  276,    0, 2215, 2215, 2215, -158, 2128,    0, 2244,
+    0,    0,    0, -290,    0,    0, -286, -274,    0,    0,
+    0,    0, -212,   38,    0,    0, 2215,  282, 2122, 2514,
+ 2215,  116, -242, -270, -259, -261,    0,    0,    0, -223,
+    0, -125,    0,    0,    0,    0,    0, -255, -250, -197,
+ -197, -234, -222, 1702, -197, 1702,    0,  130,    0, 2466,
+  349,  349, 1792,  349,    0,    0,    0,  349, 2244, -290,
+ -210, -260, -260, -260, -103,    0,    0,    0,    0,    0,
+ -241,  -84, 2069,    0, -147, -169, -143, 2244, 2244, -259,
+ -259,    0,    0,    0, -130, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244,    0,
+    0,    0,    0,    0, -135, 2244, 2244, 2244, 2244, 2244,
+ 2244, 2244,  -44,  116, 2215, 2215, 2215, 2215, 2215, -110,
+ 2215, 2244,    0,    0, 2244,    0, -106,    0,    0,    0,
+  -69,    0,    0, 2244, 1822,    0,    0, 2244,    0, 2466,
+    0,    0, 2466,    0, -197,    0,    0,    0,    0,  -95,
+    0, 2478, 2157,    0, 2273,  -88, 2373,  -22,  -59,  -14,
+  -10, 2244,  -24,    0, 2244,    0, 2244,  -46,    0, 2302,
+ 2244, 2535, 2556,    0,    0, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2244,
+ 2244, 2244, 2244,    0,  204,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,  -25,  -25, -260, -260, -260, -158,
+ -130, 2385, 2580,   -8,    0,  -43,   -4,    0, 2400,    0,
+ -266, 2493, 2412,    5,    0,    0,    0,  349,    0,    0,
+ 2427,  349, 2186,   -2, 2580,    0,   -3,  -32, 2244, 2244,
+ 2244, 2580,  -31, 2580, -184,    0, -248, 2096,    0,  -28,
+  -19, 2244, 2580, 2568, 2589,  197,    0,    0, 2244,    0,
+  -18,    0,   -6,    0,    0, 2244,    0,    0,    0,    0,
+ -237, 2244, -197, 2244, 2244, -126, -111, -102,    0,  -17,
+    0,    0,    0,    0,    0,    0,  -20,  -44,    0, 2123,
+    0,    2,  -90,  -24, 2580,    0, 2580, 2439,  -17,    0,
+    0,    0,    0,    0, 2244, -158,    0,    0,    0, -197,
+ -197, 2580,    6,    0,    0,    0,
+};
+short yyrindex[] = {                                      0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  590,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0, 1559,   19,
+   95, 1616,    0,    0,    0,    0,    0,    0,    0, 1388,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  533,
+  647,  875,  932,  989,    0,  419,    0,    0,  476,    0,
+    0, 1917,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, 1046,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0, 1673,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,   11,    0,    0,    0,
+  704,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,  203,
+    0,    0,    0,    0, -109,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0, 2331,    0,    0,
+   12,    0,    0,    0,    0, -217,  135,  208,  281,  354,
+ 1974, 1982, 1994, 2002, 2014, 2022, 2034, 2042, 2054,    0,
+    0,    0,    0,    0,  -54,    0,    0,    0,    0,    0,
+    0,    0,    0,    0, 1445, 1502, 1103, 1160, 1217, 1331,
+  761,    0, -236,    0,    0,    0,   15,    0,    0,    0,
+ 1758,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  -80, -173,    0, -207,    0,    0,    0,
+    0, -231,    0, -227,    0,    0, 1875,    0,    0,    0,
+    0,    0,   37,    0,  -29,   46,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0, 1274,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,  -67,  -51,    0,  -26,    0,  818,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0, 2062,    0,    0,    0,    0,
+};
+short yygindex[] = {                                      0,
+   21,    4,    0,  -48,    3,    0,   41,    0,    0,   -7,
+   -1, -185,    1,    0,  164,    0,    0,    0,    0,    0,
+    0,    0,   39,    0,  122, -136,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  294,    0,    0,    0,    0,
+    0,    0,    0,  105,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,
+};
+#define YYTABLESIZE 2874
+short yytable[] = {                                      77,
+   30,    2,   71,   71,   71,   78,   71,   84,   82,  157,
+   83,  273,  159,  160,   88,  164,  291,   86,   87,  166,
+   25,   41,  132,  172,   30,   71,   89,  172,  133,   71,
+  135,   84,  139,   89,  267,  130,  131,   88,  140,  137,
+  255,   33,   33,   33,   25,  144,   33,   33,   33,   84,
+  145,   77,   77,  292,  150,  136,  153,   33,   77,  133,
+  173,   43,   44,  162,  304,  133,  148,   82,  165,  167,
+   89,  138,  168,  169,   88,    8,    9,   75,  170,  290,
+  284,  171,   76,  149,   33,   78,   78,  110,  182,  183,
+   78,   78,   78,   92,   77,   93,  186,  187,  188,  189,
+  190,  191,  192,  193,  194,  195,  196,  197,  198,  199,
+  184,  185,  286,  287,  288,  177,  205,  206,  207,  208,
+  209,  210,  211,   71,   71,   71,   71,   71,   78,   71,
+  323,  178,  222,   43,   44,  223,  142,  309,  284,  303,
+    8,    9,   75,  212,  229,  232,  143,   76,  233,   76,
+   76,  234,  310,  284,  146,  147,   76,  181,  151,  152,
+  154,  311,  284,  241,  158,  245,  131,   72,   73,   74,
+  204,   80,  252,  320,  284,  254,  220,  245,   90,   90,
+  258,  245,  103,  104,  105,  106,  107,  108,  109,  277,
+   95,   86,   86,  279,  124,    8,    9,   75,   86,  225,
+  263,  264,  265,  266,   46,   46,   46,   91,   91,   46,
+   46,   46,  139,  110,   43,   44,    2,  174,  140,   46,
+   46,   46,   46,   46,   46,  228,  237,  214,  248,   48,
+   48,   48,   79,   79,   48,   48,   48,   79,   79,   79,
+  249,   82,  174,   83,   48,   48,   48,   46,  250,  245,
+  245,  245,  251,  253,  235,  256,  269,  236,  270,  143,
+  271,  284,  223,  282,  127,  128,  129,  276,  285,  300,
+  130,  131,   48,  295,  289,   79,  245,   11,   11,   11,
+  312,  313,  305,  281,  307,  308,  296,  301,  215,  216,
+  217,  218,  219,    1,  221,   14,   14,   14,    2,  302,
+  297,  314,  260,  319,   50,   50,   50,  326,  139,   50,
+   50,   50,  157,   76,  140,  322,  158,   94,  212,   50,
+   50,   50,   50,    0,    3,    4,    5,    0,    0,    0,
+    6,    0,    0,    0,    0,    7,    8,    9,   10,    0,
+   11,   12,   13,   14,    0,   15,   16,   50,    0,   17,
+   18,   19,   20,   32,   32,   32,    0,    0,   32,   32,
+   32,   21,   22,    0,    0,    0,   23,    0,   32,   32,
+   32,   32,   32,   32,   32,   32,   32,   32,   32,   32,
+    0,    0,    0,    0,    0,  155,    0,  306,   43,   44,
+    2,  156,    0,   34,   34,   34,   32,    0,   34,   34,
+   34,    0,  214,  125,  126,  127,  128,  129,    0,   34,
+    0,  130,  131,    0,    0,    0,    3,    4,    5,    0,
+    0,    0,    6,    0,  324,  325,    0,    7,    8,    9,
+   10,    0,   11,   12,   13,   14,   34,   15,   16,   45,
+   46,   17,   18,   19,   20,   47,   48,   49,   50,   51,
+   52,    0,   53,    0,    0,   54,   55,   56,   93,    0,
+    0,   93,   93,   93,   93,    0,   35,   35,   35,    0,
+    0,   35,   35,   35,  115,  116,  117,  118,  119,  120,
+  121,  122,   35,  117,  118,  119,  120,  121,  122,   93,
+   93,   93,    0,    0,    0,   93,    0,    0,    0,    0,
+   93,   93,   93,   93,    0,   93,   93,   93,   93,   35,
+   93,   93,   93,   93,   93,   93,   93,   93,   93,   93,
+   93,   93,   93,   93,    0,   93,    0,    0,   93,   93,
+   93,   42,    0,    0,   43,   44,    2,    0,    0,   36,
+   36,   36,    0,    0,   36,   36,   36,    0,   96,   97,
+   98,   99,  100,  101,  102,   36,    0,    0,    0,    0,
+    0,    0,    3,    4,    5,    0,    0,    0,    6,    0,
+    0,    0,    0,    7,    8,    9,   10,    0,   11,   12,
+   13,   14,   36,   15,   16,   45,   46,   17,   18,   19,
+   20,   47,   48,   49,   50,   51,   52,    0,   53,    0,
+    0,   54,   55,   56,  155,    0,    0,   43,   44,    2,
+    0,    0,   37,   37,   37,    0,    0,   37,   37,   37,
+    0,    0,    0,    0,    0,    0,    0,    0,   37,    0,
+    0,    0,    0,    0,    0,    3,    4,    5,    0,    0,
+    0,    6,    0,    0,    0,    0,    7,    8,    9,   10,
+    0,   11,   12,   13,   14,   37,   15,   16,   45,   46,
+   17,   18,   19,   20,   47,   48,   49,   50,   51,   52,
+    0,   53,    0,    0,   54,   55,   56,   75,   75,   75,
+    0,   81,   75,   75,   75,   75,   75,   75,   75,   75,
+   75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
+   75,   75,   75,   75,    0,   75,   75,   75,   75,   75,
+   75,   75,    0,   75,   75,   75,   75,   75,   75,   75,
+   75,   75,   75,   75,   75,    0,   75,   75,    0,    0,
+   75,   75,   75,   75,  116,  116,  116,    0,   81,  116,
+  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+  116,    0,  116,  116,  116,  116,  116,  116,  116,    0,
+  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+  116,  116,    0,  116,  116,    0,    0,  116,  116,  116,
+  116,   58,   58,   58,    0,   81,   58,   58,   58,   58,
+   58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+   58,   58,   58,   58,   58,   58,   58,   58,    0,   58,
+   58,   58,   58,   58,   58,   58,    0,   58,   58,   58,
+    0,   58,   58,   58,   58,   58,   58,   58,   58,    0,
+   58,   58,    0,    0,   58,   58,   58,   58,   58,   58,
+   58,    0,   81,   58,   58,   58,   75,   75,   75,   75,
+   75,   75,   75,   58,   58,   58,   58,   58,   58,   58,
+   58,   58,   58,   58,   58,    0,   58,   58,   58,   58,
+   58,   58,   58,    0,    0,   58,   58,    0,   58,   58,
+   58,   58,   58,   58,   58,   58,    0,   58,   58,    0,
+    0,   58,   58,   58,   58,  120,  120,  120,    0,    0,
+  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
+  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,
+  120,  120,    0,  120,  120,  120,  120,  120,  120,  120,
+    0,  120,  120,  120,    0,  120,  120,  120,  120,  120,
+  120,  120,  120,    0,  120,  120,    0,    0,  120,  120,
+  120,  120,  139,  139,  139,    0,    0,  139,  139,  139,
+  139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+  139,  139,  139,  139,  139,  139,  139,  139,  139,    0,
+  139,  139,  139,  139,  139,  139,  139,    0,    0,  139,
+  139,  139,  139,  139,  139,  139,  139,  139,  139,  139,
+    0,  139,  139,    0,    0,  139,  139,  139,  139,   66,
+   66,   66,    0,    0,   66,   66,   66,   66,   66,   66,
+   66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+   66,   66,   66,   66,   66,   66,    0,   66,   66,   66,
+   66,   66,   66,   66,    0,   66,   66,    0,   66,   66,
+   66,   66,   66,   66,   66,   66,   66,    0,   66,   66,
+    0,    0,   66,   66,   66,   66,  110,  110,  110,    0,
+    0,  110,  110,  110,  110,  110,  110,  110,  110,  110,
+  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
+  110,  110,  110,    0,  110,  110,  110,  110,  110,  110,
+  110,    0,  110,  110,  110,    0,  110,  110,  110,  110,
+  110,  110,  110,  110,    0,  110,  110,    0,    0,  110,
+  110,  110,  110,   68,   68,   68,    0,    0,   68,   68,
+   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+   68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
+    0,   68,   68,   68,   68,   68,   68,   68,    0,   68,
+    0,    0,   68,   68,   68,   68,   68,   68,   68,   68,
+   68,    0,   68,   68,    0,    0,   68,   68,   68,   68,
+   69,   69,   69,    0,    0,   69,   69,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
+   69,   69,   69,   69,   69,   69,   69,    0,   69,   69,
+   69,   69,   69,   69,   69,    0,   69,    0,    0,   69,
+   69,   69,   69,   69,   69,   69,   69,   69,    0,   69,
+   69,    0,    0,   69,   69,   69,   69,   67,   67,   67,
+    0,    0,   67,   67,   67,   67,   67,   67,   67,   67,
+   67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
+   67,   67,   67,   67,    0,   67,   67,   67,   67,   67,
+   67,   67,    0,   67,    0,    0,   67,   67,   67,   67,
+   67,   67,   67,   67,   67,    0,   67,   67,    0,    0,
+   67,   67,   67,   67,  140,  140,  140,    0,    0,  140,
+  140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+  140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
+  140,    0,  140,  140,  140,  140,  140,  140,  140,    0,
+  140,    0,    0,  140,  140,  140,  140,  140,  140,  140,
+  140,  140,    0,  140,  140,    0,    0,  140,  140,  140,
+  140,   63,   63,   63,    0,    0,   63,   63,   63,   63,
+   63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
+   63,   63,   63,   63,   63,   63,   63,   63,    0,   63,
+   63,   63,   63,   63,   63,   63,    0,   63,    0,    0,
+   63,   63,   63,   63,   63,   63,   63,   63,   63,    0,
+   63,   63,    0,    0,   63,   63,   63,   63,   64,   64,
+   64,    0,    0,   64,   64,   64,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+   64,   64,   64,   64,   64,    0,   64,   64,   64,   64,
+   64,   64,   64,    0,   64,    0,    0,   64,   64,   64,
+   64,   64,   64,   64,   64,   64,    0,   64,   64,    0,
+    0,   64,   64,   64,   64,   65,   65,   65,    0,    0,
+   65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+   65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
+   65,   65,    0,   65,   65,   65,   65,   65,   65,   65,
+    0,   65,    0,    0,   65,   65,   65,   65,   65,   65,
+   65,   65,   65,    0,   65,   65,    0,    0,   65,   65,
+   65,   65,  110,  110,  110,    0,    0,  110,  110,  110,
+  109,  109,  109,  109,  109,  109,  109,  110,  110,  110,
+  110,  110,  110,  110,  110,  110,  110,  110,  110,    0,
+  110,  110,  110,  110,  110,  110,  110,    0,    0,  110,
+  110,    0,  110,  110,  110,  110,  110,  110,  110,  110,
+    0,  110,  110,    0,    0,  110,  110,  110,  110,  141,
+  141,  141,    0,    0,  141,  141,  141,  141,  141,  141,
+  141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
+  141,  141,  141,  141,  141,  141,    0,  141,  141,  141,
+  141,  141,  141,  141,    0,  141,  141,  141,  141,    0,
+    0,    0,  141,  141,  141,  141,    0,    0,  141,  141,
+    0,    0,  141,  141,  141,  141,  138,  138,  138,    0,
+    0,  138,  138,  138,  138,  138,  138,  138,  138,  138,
+  138,  138,  138,  138,  138,  138,  138,  138,  138,  138,
+  138,  138,  138,    0,  138,  138,  138,  138,  138,  138,
+  138,    0,    0,  138,  138,  138,    0,    0,    0,  138,
+  138,  138,  138,    0,    0,  138,  138,    0,    0,  138,
+  138,  138,  138,   61,   61,   61,    0,    0,   61,   61,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
+    0,   61,   61,   61,    0,    0,    0,   61,    0,   61,
+    0,    0,   61,   61,   61,   61,   61,   61,   61,   61,
+   61,    0,   61,   61,    0,    0,   61,   61,   61,   61,
+   62,   62,   62,    0,    0,   62,   62,   62,   62,   62,
+   62,   62,   62,   62,   62,   62,   62,   62,   62,   62,
+   62,   62,   62,   62,   62,   62,   62,    0,   62,   62,
+   62,    0,    0,    0,   62,    0,   62,    0,    0,   62,
+   62,   62,   62,   62,   62,   62,   62,   62,    0,   62,
+   62,    0,    0,   62,   62,   62,   62,  120,  120,  120,
+    0,    0,  120,  120,  120,    0,    0,    0,    0,    0,
+    0,    0,  120,  120,  120,  120,  120,  120,  120,  120,
+  120,  120,  120,  120,    0,  120,  120,  120,  120,  120,
+  120,  120,    0,    0,  120,  120,    0,  120,  120,  120,
+  120,  120,  120,  120,  120,    0,  120,  120,    0,    0,
+  120,  120,  120,  120,   54,   54,   54,    0,    0,   54,
+   54,   54,    0,    0,    0,    0,    0,    0,    0,   54,
+   54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
+   54,    0,   54,    0,    0,    0,    0,    0,   54,    0,
+    0,    0,    0,   54,   54,   54,   54,   54,   54,   54,
+   54,   54,    0,   54,   54,    0,    0,   54,   54,   54,
+   54,   55,   55,   55,    0,    0,   55,   55,   55,    0,
+    0,    0,    0,    0,    0,    0,   55,   55,   55,   55,
+   55,   55,   55,   55,   55,   55,   55,   55,    0,   55,
+   43,   44,    0,    0,    0,   55,    0,    0,    0,    0,
+   55,   55,   55,   55,   55,   55,   55,   55,   55,    0,
+   55,   55,    0,    0,   55,   55,   55,   55,    3,    4,
+    5,    0,    0,    0,    6,    0,    0,    0,    0,    7,
+    8,    9,   10,    0,   11,   12,   13,   14,    0,   15,
+   16,    0,    0,   17,   18,   19,   20,   58,    0,    0,
+   81,    0,    0,    0,   75,   75,   75,   75,   75,   75,
+   75,   58,    0,   58,   58,    0,   58,   58,   58,   58,
+   58,   58,   58,    0,   58,   58,   58,   58,   58,   58,
+   58,  161,    0,   58,   58,    0,   58,   58,   58,    0,
+   58,   58,   58,   58,    0,   58,   58,    0,    0,   58,
+   58,   58,   58,    0,    0,    0,    0,    0,    3,    4,
+    5,  230,    0,    0,    6,    0,    0,    0,    0,    7,
+    8,    9,   10,    0,   11,   12,   13,   14,    0,   15,
+   16,    0,    0,   17,   18,   19,   20,    0,    3,    4,
+    5,    0,    0,    0,    6,    0,    0,    0,    0,    7,
+    8,    9,   10,    0,   11,   12,   13,  231,    0,   15,
+   16,    0,    0,   17,   18,   19,   20,   81,    0,    0,
+    0,   75,   75,   75,   75,   75,   75,   75,   58,    0,
+   58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
+    0,   58,   58,   58,   58,   58,   58,   58,    0,    0,
+   58,   58,    0,   58,   58,   58,    0,   58,   58,   58,
+   58,  120,   58,   58,    0,    0,   58,   58,   58,   58,
+  120,    0,  120,  120,  120,  120,  120,  120,  120,  120,
+  120,  120,    0,  120,  120,  120,  120,  120,  120,  120,
+    0,    0,  120,  120,    0,  120,  120,  120,    0,  120,
+  120,  120,  120,    0,  120,  120,    0,    0,  120,  120,
+  120,  120,   38,   38,   38,    0,    0,   38,   38,   38,
+   39,   39,   39,    0,    0,   39,   39,   39,   38,    0,
+    0,    0,  121,  121,  121,    0,   39,  121,  121,  121,
+  122,  122,  122,    0,    0,  122,  122,  122,  121,    0,
+    0,    0,  123,  123,  123,   38,  122,  123,  123,  123,
+  124,  124,  124,   39,    0,  124,  124,  124,  123,    0,
+    0,    0,  125,  125,  125,  121,  124,  125,  125,  125,
+  126,  126,  126,  122,    0,  126,  126,  126,  125,    0,
+    0,    0,  127,  127,  127,  123,  126,  127,  127,  127,
+   53,   53,   53,  124,    0,   53,   53,   53,  127,    0,
+    0,    0,    0,  175,    0,  125,   53,    0,    0,    0,
+    0,    0,  112,  126,  113,  114,  115,  116,  117,  118,
+  119,  120,  121,  122,    0,  127,    0,    0,    0,    0,
+  293,    0,    0,   53,    0,    0,    0,    0,    0,  112,
+  176,  113,  114,  115,  116,  117,  118,  119,  120,  121,
+  122,    0,    0,    0,    0,    0,    0,  316,  103,  104,
+  105,  106,  107,  108,  109,    0,  112,  294,  113,  114,
+  115,  116,  117,  118,  119,  120,  121,  122,    0,    0,
+    0,    0,    0,    0,    3,    4,    5,    0,    0,  110,
+    6,    0,    0,    0,  317,    7,    8,    9,   69,    0,
+   11,   12,   13,   70,   79,   15,   16,    0,    0,   17,
+   18,   19,   20,    3,    4,    5,    0,    0,    0,    6,
+    0,    0,    0,    0,    7,    8,    9,   10,  240,   11,
+   12,   13,   14,    0,   15,   16,    0,    0,   17,   18,
+   19,   20,    3,    4,    5,    0,    0,    0,    6,    0,
+    0,    0,    0,    7,    8,    9,   10,  280,   11,   12,
+   13,   14,    0,   15,   16,    0,    0,   17,   18,   19,
+   20,    3,    4,    5,    0,    0,    0,    6,    0,    0,
+    0,    0,    7,    8,    9,   69,    0,   11,   12,   13,
+   70,    0,   15,   16,    0,    0,   17,   18,   19,   20,
+    3,    4,    5,    0,    0,    0,    6,    0,    0,    0,
+    0,    7,    8,    9,   10,    0,   11,   12,   13,   14,
+    0,   15,   16,    0,    0,   17,   18,   19,   20,    3,
+    4,    5,    0,    0,    0,    6,    0,    0,    0,    0,
+    7,    8,    9,  243,    0,   11,   12,   13,   14,    0,
+   15,   16,    0,    0,   17,   18,   19,   20,    3,    4,
+    5,    0,    0,    0,    6,    0,    0,    0,    0,    7,
+    8,    9,   10,    0,   11,   12,   13,  257,    0,   15,
+   16,    0,    0,   17,   18,   19,   20,  164,  164,  164,
+    0,    0,    0,  164,    0,    0,    0,    0,  164,  164,
+  164,  164,    0,  164,  164,  164,  164,    0,  164,  164,
+    0,    0,  164,  164,  164,  164,  112,    0,  113,  114,
+  115,  116,  117,  118,  119,  120,  121,  122,  112,    0,
+  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
+    0,    0,    0,  112,  176,  113,  114,  115,  116,  117,
+  118,  119,  120,  121,  122,  112,  268,  113,  114,  115,
+  116,  117,  118,  119,  120,  121,  122,    0,    0,    0,
+  112,  272,  113,  114,  115,  116,  117,  118,  119,  120,
+  121,  122,  112,  275,  113,  114,  115,  116,  117,  118,
+  119,  120,  121,  122,   43,   44,    0,    0,  278,    0,
+    0,    0,    0,    0,    0,    0,    0,  239,    0,  112,
+  321,  113,  114,  115,  116,  117,  118,  119,  120,  121,
+  122,  112,  274,  113,  114,  115,  116,  117,  118,  119,
+  120,  121,  122,    0,    0,    0,  112,    0,  113,  114,
+  115,  116,  117,  118,  119,  120,  121,  122,  111,    0,
+    0,    0,    0,    0,    0,    0,    0,  112,    0,  113,
+  114,  115,  116,  117,  118,  119,  120,  121,  122,  261,
+    0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
+  113,  114,  115,  116,  117,  118,  119,  120,  121,  122,
+  262,    0,    0,    0,    0,    0,    0,    0,    0,  112,
+    0,  113,  114,  115,  116,  117,  118,  119,  120,  121,
+  122,  112,  299,  113,  114,  115,  116,  117,  118,  119,
+  120,  121,  122,  112,    0,  113,  114,  115,  116,  117,
+  118,  119,  120,  121,  122,  114,  115,  116,  117,  118,
+  119,  120,  121,  122,
+};
+short yycheck[] = {                                       7,
+    0,  261,    4,    5,    6,    7,    8,  298,   10,   58,
+   10,  278,   61,   62,  301,   64,  265,   15,   16,   68,
+    0,    1,  265,  265,   24,   27,  301,  265,  265,   31,
+  301,  298,   40,  265,  220,  296,  297,  265,   40,  301,
+  177,  259,  260,  261,   24,  301,  264,  265,  266,  298,
+  301,  259,  260,  302,   54,   35,   56,  275,  266,  302,
+  302,  259,  260,   63,  302,  302,  301,   69,   66,   69,
+  302,  295,   70,   75,  302,  299,  300,  301,   76,  264,
+  265,   79,  306,  306,  302,  259,  260,  298,   88,   89,
+  264,  265,  266,  306,  302,  308,   96,   97,   98,   99,
+  100,  101,  102,  103,  104,  105,  106,  107,  108,  109,
+   90,   91,  249,  250,  251,  263,  116,  117,  118,  119,
+  120,  121,  122,  125,  126,  127,  128,  129,  302,  131,
+  316,  301,  132,  259,  260,  135,  262,  264,  265,  276,
+  299,  300,  301,  123,  144,  145,   42,  306,  148,  259,
+  260,  149,  264,  265,   50,   51,  266,  301,   54,   55,
+   56,  264,  265,  163,   60,  165,  297,    4,    5,    6,
+  306,    8,  172,  264,  265,  175,  287,  177,  259,  260,
+  180,  181,  267,  268,  269,  270,  271,  272,  273,  238,
+   27,  259,  260,  242,   31,  299,  300,  301,  266,  306,
+  200,  201,  202,  203,  259,  260,  261,  259,  260,  264,
+  265,  266,  220,  298,  259,  260,  261,  302,  220,  274,
+  275,  276,  277,  278,  279,  295,  322,  123,  317,  259,
+  260,  261,  259,  260,  264,  265,  266,  264,  265,  266,
+  263,  243,  302,  243,  274,  275,  276,  302,  263,  249,
+  250,  251,  263,  278,  150,  302,  265,  153,  302,  155,
+  265,  265,  262,  266,  290,  291,  292,  263,  301,  269,
+  296,  297,  302,  302,  306,  302,  276,  259,  260,  261,
+  298,  302,  282,  243,  284,  285,  306,  306,  125,  126,
+  127,  128,  129,  256,  131,  259,  260,  261,  261,  306,
+  262,  298,  181,  302,  259,  260,  261,  302,  316,  264,
+  265,  266,  302,  302,  316,  315,  302,   24,  298,  274,
+  275,  276,  277,   -1,  287,  288,  289,   -1,   -1,   -1,
+  293,   -1,   -1,   -1,   -1,  298,  299,  300,  301,   -1,
+  303,  304,  305,  306,   -1,  308,  309,  302,   -1,  312,
+  313,  314,  315,  259,  260,  261,   -1,   -1,  264,  265,
+  266,  324,  325,   -1,   -1,   -1,  329,   -1,  274,  275,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+   -1,   -1,   -1,   -1,   -1,  256,   -1,  283,  259,  260,
+  261,  262,   -1,  259,  260,  261,  302,   -1,  264,  265,
+  266,   -1,  298,  288,  289,  290,  291,  292,   -1,  275,
+   -1,  296,  297,   -1,   -1,   -1,  287,  288,  289,   -1,
+   -1,   -1,  293,   -1,  320,  321,   -1,  298,  299,  300,
+  301,   -1,  303,  304,  305,  306,  302,  308,  309,  310,
+  311,  312,  313,  314,  315,  316,  317,  318,  319,  320,
+  321,   -1,  323,   -1,   -1,  326,  327,  328,  256,   -1,
+   -1,  259,  260,  261,  262,   -1,  259,  260,  261,   -1,
+   -1,  264,  265,  266,  278,  279,  280,  281,  282,  283,
+  284,  285,  275,  280,  281,  282,  283,  284,  285,  287,
+  288,  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,
+  298,  299,  300,  301,   -1,  303,  304,  305,  306,  302,
+  308,  309,  310,  311,  312,  313,  314,  315,  316,  317,
+  318,  319,  320,  321,   -1,  323,   -1,   -1,  326,  327,
+  328,  256,   -1,   -1,  259,  260,  261,   -1,   -1,  259,
+  260,  261,   -1,   -1,  264,  265,  266,   -1,  267,  268,
+  269,  270,  271,  272,  273,  275,   -1,   -1,   -1,   -1,
+   -1,   -1,  287,  288,  289,   -1,   -1,   -1,  293,   -1,
+   -1,   -1,   -1,  298,  299,  300,  301,   -1,  303,  304,
+  305,  306,  302,  308,  309,  310,  311,  312,  313,  314,
+  315,  316,  317,  318,  319,  320,  321,   -1,  323,   -1,
+   -1,  326,  327,  328,  256,   -1,   -1,  259,  260,  261,
+   -1,   -1,  259,  260,  261,   -1,   -1,  264,  265,  266,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  275,   -1,
+   -1,   -1,   -1,   -1,   -1,  287,  288,  289,   -1,   -1,
+   -1,  293,   -1,   -1,   -1,   -1,  298,  299,  300,  301,
+   -1,  303,  304,  305,  306,  302,  308,  309,  310,  311,
+  312,  313,  314,  315,  316,  317,  318,  319,  320,  321,
+   -1,  323,   -1,   -1,  326,  327,  328,  259,  260,  261,
+   -1,  263,  264,  265,  266,  267,  268,  269,  270,  271,
+  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,   -1,  287,  288,  289,  290,  291,
+  292,  293,   -1,  295,  296,  297,  298,  299,  300,  301,
+  302,  303,  304,  305,  306,   -1,  308,  309,   -1,   -1,
+  312,  313,  314,  315,  259,  260,  261,   -1,  263,  264,
+  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
+  275,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,   -1,  287,  288,  289,  290,  291,  292,  293,   -1,
+  295,  296,  297,  298,  299,  300,  301,  302,  303,  304,
+  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,
+  315,  259,  260,  261,   -1,  263,  264,  265,  266,  267,
+  268,  269,  270,  271,  272,  273,  274,  275,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,   -1,  287,
+  288,  289,  290,  291,  292,  293,   -1,  295,  296,  297,
+   -1,  299,  300,  301,  302,  303,  304,  305,  306,   -1,
+  308,  309,   -1,   -1,  312,  313,  314,  315,  259,  260,
+  261,   -1,  263,  264,  265,  266,  267,  268,  269,  270,
+  271,  272,  273,  274,  275,  276,  277,  278,  279,  280,
+  281,  282,  283,  284,  285,   -1,  287,  288,  289,  290,
+  291,  292,  293,   -1,   -1,  296,  297,   -1,  299,  300,
+  301,  302,  303,  304,  305,  306,   -1,  308,  309,   -1,
+   -1,  312,  313,  314,  315,  259,  260,  261,   -1,   -1,
+  264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
+  274,  275,  276,  277,  278,  279,  280,  281,  282,  283,
+  284,  285,   -1,  287,  288,  289,  290,  291,  292,  293,
+   -1,  295,  296,  297,   -1,  299,  300,  301,  302,  303,
+  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,
+  314,  315,  259,  260,  261,   -1,   -1,  264,  265,  266,
+  267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
+  277,  278,  279,  280,  281,  282,  283,  284,  285,   -1,
+  287,  288,  289,  290,  291,  292,  293,   -1,   -1,  296,
+  297,  298,  299,  300,  301,  302,  303,  304,  305,  306,
+   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,  259,
+  260,  261,   -1,   -1,  264,  265,  266,  267,  268,  269,
+  270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
+  280,  281,  282,  283,  284,  285,   -1,  287,  288,  289,
+  290,  291,  292,  293,   -1,  295,  296,   -1,  298,  299,
+  300,  301,  302,  303,  304,  305,  306,   -1,  308,  309,
+   -1,   -1,  312,  313,  314,  315,  259,  260,  261,   -1,
+   -1,  264,  265,  266,  267,  268,  269,  270,  271,  272,
+  273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
+  283,  284,  285,   -1,  287,  288,  289,  290,  291,  292,
+  293,   -1,  295,  296,  297,   -1,  299,  300,  301,  302,
+  303,  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,
+  313,  314,  315,  259,  260,  261,   -1,   -1,  264,  265,
+  266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+   -1,  287,  288,  289,  290,  291,  292,  293,   -1,  295,
+   -1,   -1,  298,  299,  300,  301,  302,  303,  304,  305,
+  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,
+  259,  260,  261,   -1,   -1,  264,  265,  266,  267,  268,
+  269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
+  279,  280,  281,  282,  283,  284,  285,   -1,  287,  288,
+  289,  290,  291,  292,  293,   -1,  295,   -1,   -1,  298,
+  299,  300,  301,  302,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,  259,  260,  261,
+   -1,   -1,  264,  265,  266,  267,  268,  269,  270,  271,
+  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,   -1,  287,  288,  289,  290,  291,
+  292,  293,   -1,  295,   -1,   -1,  298,  299,  300,  301,
+  302,  303,  304,  305,  306,   -1,  308,  309,   -1,   -1,
+  312,  313,  314,  315,  259,  260,  261,   -1,   -1,  264,
+  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,
+  275,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,   -1,  287,  288,  289,  290,  291,  292,  293,   -1,
+  295,   -1,   -1,  298,  299,  300,  301,  302,  303,  304,
+  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,
+  315,  259,  260,  261,   -1,   -1,  264,  265,  266,  267,
+  268,  269,  270,  271,  272,  273,  274,  275,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,   -1,  287,
+  288,  289,  290,  291,  292,  293,   -1,  295,   -1,   -1,
+  298,  299,  300,  301,  302,  303,  304,  305,  306,   -1,
+  308,  309,   -1,   -1,  312,  313,  314,  315,  259,  260,
+  261,   -1,   -1,  264,  265,  266,  267,  268,  269,  270,
+  271,  272,  273,  274,  275,  276,  277,  278,  279,  280,
+  281,  282,  283,  284,  285,   -1,  287,  288,  289,  290,
+  291,  292,  293,   -1,  295,   -1,   -1,  298,  299,  300,
+  301,  302,  303,  304,  305,  306,   -1,  308,  309,   -1,
+   -1,  312,  313,  314,  315,  259,  260,  261,   -1,   -1,
+  264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
+  274,  275,  276,  277,  278,  279,  280,  281,  282,  283,
+  284,  285,   -1,  287,  288,  289,  290,  291,  292,  293,
+   -1,  295,   -1,   -1,  298,  299,  300,  301,  302,  303,
+  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,
+  314,  315,  259,  260,  261,   -1,   -1,  264,  265,  266,
+  267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
+  277,  278,  279,  280,  281,  282,  283,  284,  285,   -1,
+  287,  288,  289,  290,  291,  292,  293,   -1,   -1,  296,
+  297,   -1,  299,  300,  301,  302,  303,  304,  305,  306,
+   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,  259,
+  260,  261,   -1,   -1,  264,  265,  266,  267,  268,  269,
+  270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
+  280,  281,  282,  283,  284,  285,   -1,  287,  288,  289,
+  290,  291,  292,  293,   -1,  295,  296,  297,  298,   -1,
+   -1,   -1,  302,  303,  304,  305,   -1,   -1,  308,  309,
+   -1,   -1,  312,  313,  314,  315,  259,  260,  261,   -1,
+   -1,  264,  265,  266,  267,  268,  269,  270,  271,  272,
+  273,  274,  275,  276,  277,  278,  279,  280,  281,  282,
+  283,  284,  285,   -1,  287,  288,  289,  290,  291,  292,
+  293,   -1,   -1,  296,  297,  298,   -1,   -1,   -1,  302,
+  303,  304,  305,   -1,   -1,  308,  309,   -1,   -1,  312,
+  313,  314,  315,  259,  260,  261,   -1,   -1,  264,  265,
+  266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+   -1,  287,  288,  289,   -1,   -1,   -1,  293,   -1,  295,
+   -1,   -1,  298,  299,  300,  301,  302,  303,  304,  305,
+  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,
+  259,  260,  261,   -1,   -1,  264,  265,  266,  267,  268,
+  269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
+  279,  280,  281,  282,  283,  284,  285,   -1,  287,  288,
+  289,   -1,   -1,   -1,  293,   -1,  295,   -1,   -1,  298,
+  299,  300,  301,  302,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,  259,  260,  261,
+   -1,   -1,  264,  265,  266,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,  274,  275,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,   -1,  287,  288,  289,  290,  291,
+  292,  293,   -1,   -1,  296,  297,   -1,  299,  300,  301,
+  302,  303,  304,  305,  306,   -1,  308,  309,   -1,   -1,
+  312,  313,  314,  315,  259,  260,  261,   -1,   -1,  264,
+  265,  266,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,
+  275,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,   -1,  287,   -1,   -1,   -1,   -1,   -1,  293,   -1,
+   -1,   -1,   -1,  298,  299,  300,  301,  302,  303,  304,
+  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,
+  315,  259,  260,  261,   -1,   -1,  264,  265,  266,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,  274,  275,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,   -1,  287,
+  259,  260,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,
+  298,  299,  300,  301,  302,  303,  304,  305,  306,   -1,
+  308,  309,   -1,   -1,  312,  313,  314,  315,  287,  288,
+  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,  298,
+  299,  300,  301,   -1,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,  260,   -1,   -1,
+  263,   -1,   -1,   -1,  267,  268,  269,  270,  271,  272,
+  273,  274,   -1,  276,  277,   -1,  279,  280,  281,  282,
+  283,  284,  285,   -1,  287,  288,  289,  290,  291,  292,
+  293,  260,   -1,  296,  297,   -1,  299,  300,  301,   -1,
+  303,  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,
+  313,  314,  315,   -1,   -1,   -1,   -1,   -1,  287,  288,
+  289,  260,   -1,   -1,  293,   -1,   -1,   -1,   -1,  298,
+  299,  300,  301,   -1,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,   -1,  287,  288,
+  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,  298,
+  299,  300,  301,   -1,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,  263,   -1,   -1,
+   -1,  267,  268,  269,  270,  271,  272,  273,  274,   -1,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+   -1,  287,  288,  289,  290,  291,  292,  293,   -1,   -1,
+  296,  297,   -1,  299,  300,  301,   -1,  303,  304,  305,
+  306,  265,  308,  309,   -1,   -1,  312,  313,  314,  315,
+  274,   -1,  276,  277,  278,  279,  280,  281,  282,  283,
+  284,  285,   -1,  287,  288,  289,  290,  291,  292,  293,
+   -1,   -1,  296,  297,   -1,  299,  300,  301,   -1,  303,
+  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,
+  314,  315,  259,  260,  261,   -1,   -1,  264,  265,  266,
+  259,  260,  261,   -1,   -1,  264,  265,  266,  275,   -1,
+   -1,   -1,  259,  260,  261,   -1,  275,  264,  265,  266,
+  259,  260,  261,   -1,   -1,  264,  265,  266,  275,   -1,
+   -1,   -1,  259,  260,  261,  302,  275,  264,  265,  266,
+  259,  260,  261,  302,   -1,  264,  265,  266,  275,   -1,
+   -1,   -1,  259,  260,  261,  302,  275,  264,  265,  266,
+  259,  260,  261,  302,   -1,  264,  265,  266,  275,   -1,
+   -1,   -1,  259,  260,  261,  302,  275,  264,  265,  266,
+  259,  260,  261,  302,   -1,  264,  265,  266,  275,   -1,
+   -1,   -1,   -1,  265,   -1,  302,  275,   -1,   -1,   -1,
+   -1,   -1,  274,  302,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,   -1,  302,   -1,   -1,   -1,   -1,
+  265,   -1,   -1,  302,   -1,   -1,   -1,   -1,   -1,  274,
+  302,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,   -1,   -1,   -1,   -1,   -1,   -1,  265,  267,  268,
+  269,  270,  271,  272,  273,   -1,  274,  302,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,   -1,   -1,
+   -1,   -1,   -1,   -1,  287,  288,  289,   -1,   -1,  298,
+  293,   -1,   -1,   -1,  302,  298,  299,  300,  301,   -1,
+  303,  304,  305,  306,  307,  308,  309,   -1,   -1,  312,
+  313,  314,  315,  287,  288,  289,   -1,   -1,   -1,  293,
+   -1,   -1,   -1,   -1,  298,  299,  300,  301,  302,  303,
+  304,  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,
+  314,  315,  287,  288,  289,   -1,   -1,   -1,  293,   -1,
+   -1,   -1,   -1,  298,  299,  300,  301,  302,  303,  304,
+  305,  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,
+  315,  287,  288,  289,   -1,   -1,   -1,  293,   -1,   -1,
+   -1,   -1,  298,  299,  300,  301,   -1,  303,  304,  305,
+  306,   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,
+  287,  288,  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,
+   -1,  298,  299,  300,  301,   -1,  303,  304,  305,  306,
+   -1,  308,  309,   -1,   -1,  312,  313,  314,  315,  287,
+  288,  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,
+  298,  299,  300,  301,   -1,  303,  304,  305,  306,   -1,
+  308,  309,   -1,   -1,  312,  313,  314,  315,  287,  288,
+  289,   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,  298,
+  299,  300,  301,   -1,  303,  304,  305,  306,   -1,  308,
+  309,   -1,   -1,  312,  313,  314,  315,  287,  288,  289,
+   -1,   -1,   -1,  293,   -1,   -1,   -1,   -1,  298,  299,
+  300,  301,   -1,  303,  304,  305,  306,   -1,  308,  309,
+   -1,   -1,  312,  313,  314,  315,  274,   -1,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,  274,   -1,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+   -1,   -1,   -1,  274,  302,  276,  277,  278,  279,  280,
+  281,  282,  283,  284,  285,  274,  302,  276,  277,  278,
+  279,  280,  281,  282,  283,  284,  285,   -1,   -1,   -1,
+  274,  302,  276,  277,  278,  279,  280,  281,  282,  283,
+  284,  285,  274,  302,  276,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,  259,  260,   -1,   -1,  302,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,   -1,  274,
+  302,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,  274,  260,  276,  277,  278,  279,  280,  281,  282,
+  283,  284,  285,   -1,   -1,   -1,  274,   -1,  276,  277,
+  278,  279,  280,  281,  282,  283,  284,  285,  265,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,   -1,  276,
+  277,  278,  279,  280,  281,  282,  283,  284,  285,  265,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,   -1,
+  276,  277,  278,  279,  280,  281,  282,  283,  284,  285,
+  265,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  274,
+   -1,  276,  277,  278,  279,  280,  281,  282,  283,  284,
+  285,  274,  275,  276,  277,  278,  279,  280,  281,  282,
+  283,  284,  285,  274,   -1,  276,  277,  278,  279,  280,
+  281,  282,  283,  284,  285,  277,  278,  279,  280,  281,
+  282,  283,  284,  285,
+};
+#define YYFINAL 24
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 329
+#if YYDEBUG
+char *yyname[] = {
+"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,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+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",
+"SEMI_COLON","LBRACE","RBRACE","LBOX","RBOX","COMMA","IO_OUT","ASSIGN",
+"ADD_ASG","SUB_ASG","MUL_ASG","DIV_ASG","MOD_ASG","POW_ASG","QMARK","COLON",
+"OR","AND","IN","MATCH","EQ","NEQ","LT","LTE","GT","GTE","CAT","GETLINE","PLUS",
+"MINUS","MUL","DIV","MOD","NOT","UMINUS","IO_IN","PIPE","POW","INC_or_DEC",
+"DOLLAR","FIELD","LPAREN","RPAREN","DOUBLE","STRING_","RE","ID","D_ID",
+"FUNCT_ID","BUILTIN","PRINT","PRINTF","SPLIT","MATCH_FUNC","SUB","GSUB","DO",
+"WHILE","FOR","BREAK","CONTINUE","IF","ELSE","DELETE","BEGIN","END","EXIT",
+"NEXT","RETURN","FUNCTION",
+};
+char *yyrule[] = {
+"$accept : program",
+"program : program_block",
+"program : program program_block",
+"program_block : PA_block",
+"program_block : function_def",
+"program_block : error block",
+"PA_block : block",
+"$$1 :",
+"PA_block : BEGIN $$1 block",
+"$$2 :",
+"PA_block : END $$2 block",
+"$$3 :",
+"PA_block : expr $$3 block_or_separator",
+"$$4 :",
+"$$5 :",
+"PA_block : expr COMMA $$4 expr $$5 block_or_separator",
+"block : LBRACE statement_list RBRACE",
+"block : LBRACE error RBRACE",
+"block_or_separator : block",
+"block_or_separator : separator",
+"statement_list : statement",
+"statement_list : statement_list statement",
+"statement : block",
+"statement : expr separator",
+"statement : separator",
+"statement : error separator",
+"statement : BREAK separator",
+"statement : CONTINUE separator",
+"statement : return_statement",
+"statement : NEXT separator",
+"separator : NL",
+"separator : SEMI_COLON",
+"expr : cat_expr",
+"expr : lvalue ASSIGN expr",
+"expr : lvalue ADD_ASG expr",
+"expr : lvalue SUB_ASG expr",
+"expr : lvalue MUL_ASG expr",
+"expr : lvalue DIV_ASG expr",
+"expr : lvalue MOD_ASG expr",
+"expr : lvalue POW_ASG expr",
+"expr : expr EQ expr",
+"expr : expr NEQ expr",
+"expr : expr LT expr",
+"expr : expr LTE expr",
+"expr : expr GT expr",
+"expr : expr GTE expr",
+"expr : expr MATCH expr",
+"$$6 :",
+"expr : expr OR $$6 expr",
+"$$7 :",
+"expr : expr AND $$7 expr",
+"$$8 :",
+"$$9 :",
+"expr : expr QMARK $$8 expr COLON $$9 expr",
+"cat_expr : p_expr",
+"cat_expr : cat_expr p_expr",
+"p_expr : DOUBLE",
+"p_expr : STRING_",
+"p_expr : ID",
+"p_expr : LPAREN expr RPAREN",
+"p_expr : RE",
+"p_expr : p_expr PLUS p_expr",
+"p_expr : p_expr MINUS p_expr",
+"p_expr : p_expr MUL p_expr",
+"p_expr : p_expr DIV p_expr",
+"p_expr : p_expr MOD p_expr",
+"p_expr : p_expr POW p_expr",
+"p_expr : NOT p_expr",
+"p_expr : PLUS p_expr",
+"p_expr : MINUS p_expr",
+"p_expr : builtin",
+"p_expr : ID INC_or_DEC",
+"p_expr : INC_or_DEC lvalue",
+"p_expr : field INC_or_DEC",
+"p_expr : INC_or_DEC field",
+"lvalue : ID",
+"arglist :",
+"arglist : args",
+"args : expr",
+"args : args COMMA expr",
+"builtin : BUILTIN mark LPAREN arglist RPAREN",
+"mark :",
+"statement : print mark pr_args pr_direction separator",
+"print : PRINT",
+"print : PRINTF",
+"pr_args : arglist",
+"pr_args : LPAREN arg2 RPAREN",
+"pr_args : LPAREN RPAREN",
+"arg2 : expr COMMA expr",
+"arg2 : arg2 COMMA expr",
+"pr_direction :",
+"pr_direction : IO_OUT expr",
+"if_front : IF LPAREN expr RPAREN",
+"statement : if_front statement",
+"else : ELSE",
+"statement : if_front statement else statement",
+"do : DO",
+"statement : do statement WHILE LPAREN expr RPAREN separator",
+"while_front : WHILE LPAREN expr RPAREN",
+"statement : while_front statement",
+"statement : for1 for2 for3 statement",
+"for1 : FOR LPAREN SEMI_COLON",
+"for1 : FOR LPAREN expr SEMI_COLON",
+"for2 : SEMI_COLON",
+"for2 : expr SEMI_COLON",
+"for3 : RPAREN",
+"for3 : expr RPAREN",
+"expr : expr IN ID",
+"expr : LPAREN arg2 RPAREN IN ID",
+"lvalue : ID mark LBOX args RBOX",
+"p_expr : ID mark LBOX args RBOX",
+"p_expr : ID mark LBOX args RBOX INC_or_DEC",
+"statement : DELETE ID mark LBOX args RBOX separator",
+"array_loop_front : FOR LPAREN ID IN ID RPAREN",
+"statement : array_loop_front statement",
+"field : FIELD",
+"field : DOLLAR D_ID",
+"field : DOLLAR D_ID mark LBOX args RBOX",
+"field : DOLLAR p_expr",
+"field : LPAREN field RPAREN",
+"p_expr : field",
+"expr : field ASSIGN expr",
+"expr : field ADD_ASG expr",
+"expr : field SUB_ASG expr",
+"expr : field MUL_ASG expr",
+"expr : field DIV_ASG expr",
+"expr : field MOD_ASG expr",
+"expr : field POW_ASG expr",
+"p_expr : split_front split_back",
+"split_front : SPLIT LPAREN expr COMMA ID",
+"split_back : RPAREN",
+"split_back : COMMA expr RPAREN",
+"p_expr : MATCH_FUNC LPAREN expr COMMA re_arg RPAREN",
+"re_arg : expr",
+"statement : EXIT separator",
+"statement : EXIT expr separator",
+"return_statement : RETURN separator",
+"return_statement : RETURN expr separator",
+"p_expr : getline",
+"p_expr : getline fvalue",
+"p_expr : getline_file p_expr",
+"p_expr : p_expr PIPE GETLINE",
+"p_expr : p_expr PIPE GETLINE fvalue",
+"getline : GETLINE",
+"fvalue : lvalue",
+"fvalue : field",
+"getline_file : getline IO_IN",
+"getline_file : getline fvalue IO_IN",
+"p_expr : sub_or_gsub LPAREN re_arg COMMA expr sub_back",
+"sub_or_gsub : SUB",
+"sub_or_gsub : GSUB",
+"sub_back : RPAREN",
+"sub_back : COMMA fvalue RPAREN",
+"function_def : funct_start block",
+"funct_start : funct_head LPAREN f_arglist RPAREN",
+"funct_head : FUNCTION ID",
+"funct_head : FUNCTION FUNCT_ID",
+"f_arglist :",
+"f_arglist : f_args",
+"f_args : ID",
+"f_args : f_args COMMA ID",
+"p_expr : FUNCT_ID mark call_args",
+"call_args : LPAREN RPAREN",
+"call_args : ca_front ca_back",
+"ca_front : LPAREN",
+"ca_front : ca_front expr COMMA",
+"ca_front : ca_front ID COMMA",
+"ca_back : expr RPAREN",
+"ca_back : ID RPAREN",
+};
+#endif
+#ifdef  YYPURE
+#undef  YYGLOBAL
+#define YYLEX()        yylex(&yylval)
+#else
+#define YYLEX()        yylex()
+#endif
+
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#ifdef YYSTACKSIZE
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#endif
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+int yydebug;
+#ifndef  YYPURE
+YYSTYPE yylval;
+#endif
+
+#ifdef  YYGLOBAL
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#endif
+#define yystacksize YYSTACKSIZE
+#line 1041 "parse.y"
+
+/* resize the code for a user function */
+
+static void  resize_fblock( fbp, code_ptr )
+  FBLOCK *fbp ;
+  INST *code_ptr ;
+{ int size ;
+
+  code1(_RET0) ; /* make sure there is always a return statement */
+
+#if !SM_DOS
+  if ( dump_code )  
+  { code1(_HALT) ; /*stops da() */
+    add_to_fdump_list(fbp) ;
+  }
+#endif
+
+  if ( (size = code_ptr - fbp->code) > PAGE_SZ-1 )
+        overflow("function code size", PAGE_SZ ) ;
+
+  /* resize the code */
+  fbp->code = (INST*) zrealloc(fbp->code, PAGE_SZ*sizeof(INST),
+                       size * sizeof(INST) ) ;
 
 
-#include "awk.def"
-#include "awk.h"
-#include "stdio.h"
-node *ALLOC(n)
-{
-       register node *x;
-       x = (node *) malloc(sizeof(node) + (n-1)*sizeof(node *));
-       if (x == NULL)
-               error(FATAL, "out of space in ALLOC");
-       return(x);
-}
-node *exptostat(a) node *a;
-{
-       a->ntype = NSTAT;
-       return(a);
-}
-node   *nullstat;
-node *node0(a)
-{
-       register node *x;
-       x=ALLOC(0);
-       x->nnext = NULL;
-       x->nobj=a;
-       return(x);
-}
-node *node1(a,b) node *b;
-{
-       register node *x;
-       x=ALLOC(1);
-       x->nnext = NULL;
-       x->nobj=a;
-       x->narg[0]=b;
-       return(x);
-}
-node *node2(a,b,c) node *b, *c;
-{
-       register node *x;
-       x = ALLOC(2);
-       x->nnext = NULL;
-       x->nobj = a;
-       x->narg[0] = b;
-       x->narg[1] = c;
-       return(x);
 }
 }
-node *node3(a,b,c,d) node *b, *c, *d;
-{
-       register node *x;
-       x = ALLOC(3);
-       x->nnext = NULL;
-       x->nobj = a;
-       x->narg[0] = b;
-       x->narg[1] = c;
-       x->narg[2] = d;
-       return(x);
+
+
+/* convert FE_PUSHA  to  FE_PUSHI
+   or F_PUSH to F_PUSHI
+*/
+
+static void  field_A2I()
+{ CELL *cp ;
+
+  if ( code_ptr[-1].op == FE_PUSHA &&
+       code_ptr[-1].ptr == (PTR) 0)
+  /* On most architectures, the two tests are the same; a good
+     compiler might eliminate one.  On LM_DOS, and possibly other
+     segmented architectures, they are not */
+  { code_ptr[-1].op = FE_PUSHI ; }
+  else
+  {
+    cp = (CELL *) code_ptr[-1].ptr ;
+
+    if ( cp == field  ||
+
+#if  LM_DOS
+        SAMESEG(cp,field) &&
+#endif
+         cp > NF && cp <= LAST_PFIELD )
+    {
+         code_ptr[-2].op = _PUSHI  ;
+    }
+    else if ( cp == NF )
+    { code_ptr[-2].op = NF_PUSHI ; code_ptr-- ; }
+
+    else
+    { 
+      code_ptr[-2].op = F_PUSHI ;
+      code_ptr -> op = field_addr_to_index( code_ptr[-1].ptr ) ;
+      code_ptr++ ;
+    }
+  }
 }
 }
-node *node4(a,b,c,d,e) node *b, *c, *d, *e;
+
+/* we've seen an ID in a context where it should be a VAR,
+   check that's consistent with previous usage */
+
+static void check_var( p )
+  register SYMTAB *p ;
 {
 {
-       register node *x;
-       x = ALLOC(4);
-       x->nnext = NULL;
-       x->nobj = a;
-       x->narg[0] = b;
-       x->narg[1] = c;
-       x->narg[2] = d;
-       x->narg[3] = e;
-       return(x);
+      switch(p->type)
+      {
+        case ST_NONE : /* new id */
+            p->type = ST_VAR ;
+            p->stval.cp = new_CELL() ;
+            p->stval.cp->type = C_NOINIT ;
+            break ;
+
+        case ST_LOCAL_NONE :
+            p->type = ST_LOCAL_VAR ;
+            active_funct->typev[p->offset] = ST_LOCAL_VAR ;
+            break ;
+
+        case ST_VAR :
+        case ST_LOCAL_VAR :  break ;
+
+        default :
+            type_error(p) ;
+            break ;
+      }
 }
 }
-node *stat3(a,b,c,d) node *b, *c, *d;
+
+/* we've seen an ID in a context where it should be an ARRAY,
+   check that's consistent with previous usage */
+static  void  check_array(p)
+  register SYMTAB *p ;
 {
 {
-       register node *x;
-       x = node3(a,b,c,d);
-       x->ntype = NSTAT;
-       return(x);
+      switch(p->type)
+      {
+        case ST_NONE :  /* a new array */
+            p->type = ST_ARRAY ;
+            p->stval.array = new_ARRAY() ;
+            break ;
+
+        case  ST_ARRAY :
+        case  ST_LOCAL_ARRAY :
+            break ;
+
+        case  ST_LOCAL_NONE  :
+            p->type = ST_LOCAL_ARRAY ;
+            active_funct->typev[p->offset] = ST_LOCAL_ARRAY ;
+            break ;
+
+        default : type_error(p) ; break ;
+      }
 }
 }
-node *op2(a,b,c) node *b, *c;
-{
-       register node *x;
-       x = node2(a,b,c);
-       x->ntype = NEXPR;
-       return(x);
+
+static void code_array(p)
+  register SYMTAB *p ;
+{ if ( is_local(p) )
+  { code1(LA_PUSHA) ; code1(p->offset) ; }
+  else  code2(A_PUSHA, p->stval.array) ;
 }
 }
-node *op1(a,b) node *b;
+
+
+static  int  current_offset()
 {
 {
-       register node *x;
-       x = node1(a,b);
-       x->ntype = NEXPR;
-       return(x);
+  switch( scope )
+  { 
+    case  SCOPE_MAIN :  return code_ptr - main_start ;
+    case  SCOPE_BEGIN :  return code_ptr - begin_code.start ;
+    case  SCOPE_END   :  return code_ptr - end_code.start ;
+    case  SCOPE_FUNCT :  return code_ptr - active_funct->code ;
+  }
+  /* can't get here */
+  return 0 ;
 }
 }
-node *stat1(a,b) node *b;
-{
-       register node *x;
-       x = node1(a,b);
-       x->ntype = NSTAT;
-       return(x);
+
+/* we've seen an ID as an argument to a user defined function */
+
+static void  code_call_id( p, ip )
+  register CA_REC *p ;
+  register SYMTAB *ip ;
+{ static CELL dummy ;
+
+  switch( ip->type )
+  {
+    case  ST_VAR  :
+            p->type = CA_EXPR ;
+            code2(_PUSHI, ip->stval.cp) ;
+            break ;
+
+    case  ST_LOCAL_VAR  :
+            p->type = CA_EXPR ;
+            code1(L_PUSHI) ;
+            code1(ip->offset) ;
+            break ;
+
+    case  ST_ARRAY  :
+            p->type = CA_ARRAY ;
+            code2(A_PUSHA, ip->stval.array) ;
+            break ;
+
+    case  ST_LOCAL_ARRAY :
+            p->type = CA_ARRAY ;
+            code1(LA_PUSHA) ;
+            code1(ip->offset) ;
+            break ;
+
+    /* not enough info to code it now; it will have to
+       be patched later */
+
+    case  ST_NONE :
+            p->type = ST_NONE ;
+            p->call_offset = current_offset() ;
+            p->sym_p = ip ;
+            code2(_PUSHI, &dummy) ;
+            break ;
+
+    case  ST_LOCAL_NONE :
+            p->type = ST_LOCAL_NONE ;
+            p->call_offset = current_offset() ;
+            p->type_p = & active_funct->typev[ip->offset] ;
+            code1(L_PUSHI) ; 
+            code1(ip->offset) ;
+            break ;
+
+  
+#ifdef   DEBUG
+    default :
+            bozo("code_call_id") ;
+#endif
+
+  }
 }
 }
-node *op3(a,b,c,d) node *b, *c, *d;
-{
-       register node *x;
-       x = node3(a,b,c,d);
-       x->ntype = NEXPR;
-       return(x);
+
+/* an RE by itself was coded as _MATCH0 , change to
+   push as an expression */
+
+static void RE_as_arg()
+{ CELL *cp = ZMALLOC(CELL) ;
+
+  code_ptr -= 2 ;
+  cp->type = C_RE ;
+  cp->ptr = code_ptr[1].ptr ;
+  code2(_PUSHC, cp) ;
 }
 }
-node *stat2(a,b,c) node *b, *c;
-{
-       register node *x;
-       x = node2(a,b,c);
-       x->ntype = NSTAT;
-       return(x);
+
+
+int parse()
+{ int yy = yyparse() ;
+
+#if  YYBYACC
+  extern struct yacc_mem *yacc_memp ;
+
+  yacc_memp++  ; /* puts parser tables in mem pool */
+#endif
+
+  if ( resolve_list )  resolve_fcalls() ;
+  return yy ;
 }
 }
-node *stat4(a,b,c,d,e) node *b, *c, *d, *e;
+
+#line 1340 "y.tab.c"
+#define YYABORT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse()
 {
 {
-       register node *x;
-       x = node4(a,b,c,d,e);
-       x->ntype = NSTAT;
-       return(x);
-}
-node *valtonode(a, b) cell *a;
+    register int yyn, yystate;
+    int yym ;
+#ifdef  YYPURE
+    YYSTYPE yylval ;
+#endif
+
+#ifndef  YYGLOBAL
+    int yynerrs;
+    int yyerrflag;
+    int yychar;
+    register short *yyssp;
+    register YYSTYPE *yyvsp;
+    YYSTYPE yyval;
+    short yyss[YYSTACKSIZE];
+    YYSTYPE yyvs[YYSTACKSIZE];
+#endif
+#if YYDEBUG
+    register char *yys;
+    extern char *getenv();
+
+    if (yys = getenv("YYDEBUG"))
+    {
+        yyn = *yys;
+        if (yyn >= '0' && yyn <= '9')
+            yydebug = yyn - '0';
+    }
+#endif
+
+    yynerrs = 0;
+    yyerrflag = 0;
+    yychar = (-1);
+
+    yyssp = yyss;
+    yyvsp = yyvs;
+    *yyssp = yystate = 0;
+
+yyloop:
+    if (yyn = yydefred[yystate]) goto yyreduce;
+    if (yychar < 0)
+    {
+        if ((yychar = YYLEX()) < 0) yychar = 0;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("yydebug: state %d, reading %d (%s)\n", yystate,
+                    yychar, yys);
+        }
+#endif
+    }
+    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("yydebug: state %d, shifting to state %d\n",
+                    yystate, yytable[yyn]);
+#endif
+        if (yyssp >= yyss + yystacksize - 1)
+        {
+            goto yyoverflow;
+        }
+        *++yyssp = yystate = yytable[yyn];
+        *++yyvsp = yylval;
+        yychar = (-1);
+        if (yyerrflag > 0)  --yyerrflag;
+        goto yyloop;
+    }
+    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+    {
+        yyn = yytable[yyn];
+        goto yyreduce;
+    }
+    if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+    goto yynewerror;
+#endif
+yynewerror:
+    yyerror("syntax error");
+#ifdef lint
+    goto yyerrlab;
+#endif
+yyerrlab:
+    ++yynerrs;
+yyinrecovery:
+    if (yyerrflag < 3)
+    {
+        yyerrflag = 3;
+        for (;;)
+        {
+            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("yydebug: state %d, error recovery shifting\
+ to state %d\n", *yyssp, yytable[yyn]);
+#endif
+                if (yyssp >= yyss + yystacksize - 1)
+                {
+                    goto yyoverflow;
+                }
+                *++yyssp = yystate = yytable[yyn];
+                *++yyvsp = yylval;
+                goto yyloop;
+            }
+            else
+            {
+#if YYDEBUG
+                if (yydebug)
+                    printf("yydebug: error recovery discarding state %d\n",
+                            *yyssp);
+#endif
+                if (yyssp <= yyss) goto yyabort;
+                --yyssp;
+                --yyvsp;
+            }
+        }
+    }
+    else
+    {
+        if (yychar == 0) goto yyabort;
+#if YYDEBUG
+        if (yydebug)
+        {
+            yys = 0;
+            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+            if (!yys) yys = "illegal-symbol";
+            printf("yydebug: state %d, error recovery discards token %d (%s)\n",
+                    yystate, yychar, yys);
+        }
+#endif
+        yychar = (-1);
+        goto yyloop;
+    }
+yyreduce:
+#if YYDEBUG
+    if (yydebug)
+        printf("yydebug: state %d, reducing by rule %d (%s)\n",
+                yystate, yyn, yyrule[yyn]);
+#endif
+    yym = yylen[yyn];
+    yyval = yyvsp[1-yym];
+    switch (yyn)
+    {
+case 5:
+#line 150 "parse.y"
+{ if (scope == SCOPE_FUNCT)
+                   { restore_ids() ; scope = SCOPE_MAIN ; }
+                   code_ptr = main_code_ptr ;
+                 }
+break;
+case 6:
+#line 157 "parse.y"
+{ /* this do nothing action removes a vacuous warning
+                  from Bison */
+             }
+break;
+case 7:
+#line 162 "parse.y"
+{ 
+                 be_expand(&begin_code) ;
+                  scope = SCOPE_BEGIN ;
+                }
+break;
+case 8:
+#line 168 "parse.y"
+{ be_shrink(&begin_code) ;
+                  scope = SCOPE_MAIN ;
+                }
+break;
+case 9:
+#line 173 "parse.y"
+{ 
+                 be_expand(&end_code) ;
+                  scope = SCOPE_END ;
+                }
+break;
+case 10:
+#line 179 "parse.y"
+{ be_shrink(&end_code) ;
+                  scope = SCOPE_MAIN ;
+                }
+break;
+case 11:
+#line 184 "parse.y"
+{ code_jmp(_JZ, (INST*)0) ; }
+break;
+case 12:
+#line 187 "parse.y"
+{ patch_jmp( code_ptr ) ; }
+break;
+case 13:
+#line 191 "parse.y"
+{ code_push(yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
+               code_ptr = yyvsp[-1].start ;
+               code1(_RANGE) ; code1(1) ;
+               code_ptr += 3 ;
+               code_ptr += code_pop(code_ptr) ;
+               code1(_STOP) ;
+               yyvsp[-1].start[2].op = code_ptr - (yyvsp[-1].start+1) ;
+             }
+break;
+case 14:
+#line 200 "parse.y"
+{ code1(_STOP) ; }
+break;
+case 15:
+#line 203 "parse.y"
+{ yyvsp[-5].start[3].op = yyvsp[0].start - (yyvsp[-5].start+1) ;
+               yyvsp[-5].start[4].op = code_ptr - (yyvsp[-5].start+1) ;
+             }
+break;
+case 16:
+#line 211 "parse.y"
+{ yyval.start = yyvsp[-1].start ; }
+break;
+case 17:
+#line 213 "parse.y"
+{ yyval.start = code_ptr ; /* does nothing won't be executed */
+              print_flag = getline_flag = paren_cnt = 0 ;
+              yyerrok ; }
+break;
+case 19:
+#line 220 "parse.y"
+{ yyval.start = code_ptr ;
+                       code1(_PUSHINT) ; code1(0) ;
+                       code2(_PRINT, bi_print) ;
+                     }
+break;
+case 23:
+#line 232 "parse.y"
+{ code1(_POP) ; }
+break;
+case 24:
+#line 234 "parse.y"
+{ yyval.start = code_ptr ; }
+break;
+case 25:
+#line 236 "parse.y"
+{ yyval.start = code_ptr ;
+                print_flag = getline_flag = 0 ;
+                paren_cnt = 0 ;
+                yyerrok ;
+              }
+break;
+case 26:
+#line 242 "parse.y"
+{ yyval.start = code_ptr ; BC_insert('B', code_ptr+1) ;
+               code2(_JMP, 0) /* don't use code_jmp ! */ ; }
+break;
+case 27:
+#line 245 "parse.y"
+{ yyval.start = code_ptr ; BC_insert('C', code_ptr+1) ;
+               code2(_JMP, 0) ; }
+break;
+case 28:
+#line 248 "parse.y"
+{ if ( scope != SCOPE_FUNCT )
+                     compile_error("return outside function body") ;
+             }
+break;
+case 29:
+#line 252 "parse.y"
+{ if ( scope != SCOPE_MAIN )
+                   compile_error( "improper use of next" ) ;
+                yyval.start = code_ptr ; 
+                code1(_NEXT) ;
+              }
+break;
+case 33:
+#line 263 "parse.y"
+{ code1(_ASSIGN) ; }
+break;
+case 34:
+#line 264 "parse.y"
+{ code1(_ADD_ASG) ; }
+break;
+case 35:
+#line 265 "parse.y"
+{ code1(_SUB_ASG) ; }
+break;
+case 36:
+#line 266 "parse.y"
+{ code1(_MUL_ASG) ; }
+break;
+case 37:
+#line 267 "parse.y"
+{ code1(_DIV_ASG) ; }
+break;
+case 38:
+#line 268 "parse.y"
+{ code1(_MOD_ASG) ; }
+break;
+case 39:
+#line 269 "parse.y"
+{ code1(_POW_ASG) ; }
+break;
+case 40:
+#line 270 "parse.y"
+{ code1(_EQ) ; }
+break;
+case 41:
+#line 271 "parse.y"
+{ code1(_NEQ) ; }
+break;
+case 42:
+#line 272 "parse.y"
+{ code1(_LT) ; }
+break;
+case 43:
+#line 273 "parse.y"
+{ code1(_LTE) ; }
+break;
+case 44:
+#line 274 "parse.y"
+{ code1(_GT) ; }
+break;
+case 45:
+#line 275 "parse.y"
+{ code1(_GTE) ; }
+break;
+case 46:
+#line 278 "parse.y"
 {
 {
-       register node *x;
-       x = node0(a);
-       x->ntype = NVALUE;
-       x->subtype = b;
-       return(x);
-}
-node *pa2stat(a,b,c) node *a, *b, *c;
+            if ( yyvsp[0].start == code_ptr - 2 )
+            {
+               if ( yyvsp[0].start->op == _MATCH0 )  yyvsp[0].start->op = _MATCH1 ;
+
+               else /* check for string */
+               if ( yyvsp[0].start->op == _PUSHS )
+               { CELL *cp = ZMALLOC(CELL) ;
+
+                 cp->type = C_STRING ; 
+                 cp->ptr = yyvsp[0].start[1].ptr ;
+                 cast_to_RE(cp) ;
+                 code_ptr -= 2 ;
+                 code2(_MATCH1, cp->ptr) ;
+                 ZFREE(cp) ;
+               }
+               else  code1(_MATCH2) ;
+            }
+            else code1(_MATCH2) ;
+
+            if ( !yyvsp[-1].ival ) code1(_NOT) ;
+          }
+break;
+case 47:
+#line 303 "parse.y"
+{ code1(_DUP) ;
+                code_jmp(_JNZ, (INST*)0) ;
+                code1(_POP) ;
+              }
+break;
+case 48:
+#line 308 "parse.y"
+{ patch_jmp(code_ptr) ; code1(_TEST) ; }
+break;
+case 49:
+#line 311 "parse.y"
+{ code1(_DUP) ; code_jmp(_JZ, (INST*)0) ;
+                code1(_POP) ; }
+break;
+case 50:
+#line 314 "parse.y"
+{ patch_jmp(code_ptr) ; code1(_TEST) ; }
+break;
+case 51:
+#line 316 "parse.y"
+{ code_jmp(_JZ, (INST*)0) ; }
+break;
+case 52:
+#line 317 "parse.y"
+{ code_jmp(_JMP, (INST*)0) ; }
+break;
+case 53:
+#line 319 "parse.y"
+{ patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
+break;
+case 55:
+#line 324 "parse.y"
+{ code1(_CAT) ; }
+break;
+case 56:
+#line 328 "parse.y"
+{  yyval.start = code_ptr ; code2(_PUSHD, yyvsp[0].ptr) ; }
+break;
+case 57:
+#line 330 "parse.y"
+{ yyval.start = code_ptr ; code2(_PUSHS, yyvsp[0].ptr) ; }
+break;
+case 58:
+#line 332 "parse.y"
+{ check_var(yyvsp[0].stp) ;
+            yyval.start = code_ptr ;
+            if ( is_local(yyvsp[0].stp) )
+            { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
+            else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
+          }
+break;
+case 59:
+#line 340 "parse.y"
+{ yyval.start = yyvsp[-1].start ; }
+break;
+case 60:
+#line 344 "parse.y"
+{ yyval.start = code_ptr ; code2(_MATCH0, yyvsp[0].ptr) ; }
+break;
+case 61:
+#line 347 "parse.y"
+{ code1(_ADD) ; }
+break;
+case 62:
+#line 348 "parse.y"
+{ code1(_SUB) ; }
+break;
+case 63:
+#line 349 "parse.y"
+{ code1(_MUL) ; }
+break;
+case 64:
+#line 350 "parse.y"
+{ code1(_DIV) ; }
+break;
+case 65:
+#line 351 "parse.y"
+{ code1(_MOD) ; }
+break;
+case 66:
+#line 352 "parse.y"
+{ code1(_POW) ; }
+break;
+case 67:
+#line 354 "parse.y"
+{ yyval.start = yyvsp[0].start ; code1(_NOT) ; }
+break;
+case 68:
+#line 356 "parse.y"
+{ yyval.start = yyvsp[0].start ; code1(_UPLUS) ; }
+break;
+case 69:
+#line 358 "parse.y"
+{ yyval.start = yyvsp[0].start ; code1(_UMINUS) ; }
+break;
+case 71:
+#line 363 "parse.y"
+{ check_var(yyvsp[-1].stp) ;
+             yyval.start = code_ptr ;
+             code_address(yyvsp[-1].stp) ;
+
+             if ( yyvsp[0].ival == '+' )  code1(_POST_INC) ;
+             else  code1(_POST_DEC) ;
+           }
+break;
+case 72:
+#line 371 "parse.y"
+{ yyval.start = yyvsp[0].start ; 
+              if ( yyvsp[-1].ival == '+' ) code1(_PRE_INC) ;
+              else  code1(_PRE_DEC) ;
+            }
+break;
+case 73:
+#line 378 "parse.y"
+{ if (yyvsp[0].ival == '+' ) code1(F_POST_INC ) ; 
+             else  code1(F_POST_DEC) ;
+           }
+break;
+case 74:
+#line 382 "parse.y"
+{ yyval.start = yyvsp[0].start ; 
+             if ( yyvsp[-1].ival == '+' ) code1(F_PRE_INC) ;
+             else  code1( F_PRE_DEC) ; 
+           }
+break;
+case 75:
+#line 389 "parse.y"
+{ yyval.start = code_ptr ; 
+          check_var(yyvsp[0].stp) ;
+          code_address(yyvsp[0].stp) ;
+        }
+break;
+case 76:
+#line 397 "parse.y"
+{ yyval.ival = 0 ; }
+break;
+case 78:
+#line 402 "parse.y"
+{ yyval.ival = 1 ; }
+break;
+case 79:
+#line 404 "parse.y"
+{ yyval.ival = yyvsp[-2].ival + 1 ; }
+break;
+case 80:
+#line 409 "parse.y"
+{ BI_REC *p = yyvsp[-4].bip ;
+          yyval.start = yyvsp[-3].start ;
+          if ( p-> min_args > yyvsp[-1].ival || p->max_args < yyvsp[-1].ival )
+            compile_error(
+            "wrong number of arguments in call to %s" ,
+            p->name ) ;
+          if ( p->min_args != p->max_args ) /* variable args */
+              { code1(_PUSHINT) ;  code1(yyvsp[-1].ival) ; }
+          code2(_BUILTIN , p->fp) ;
+        }
+break;
+case 81:
+#line 423 "parse.y"
+{ yyval.start = code_ptr ; }
+break;
+case 82:
+#line 427 "parse.y"
+{ code2(_PRINT, yyvsp[-4].fp) ; yyval.start = yyvsp[-3].start ;
+              if ( yyvsp[-4].fp == bi_printf && yyvsp[-2].ival == 0 )
+                    compile_error("no arguments in call to printf") ;
+              print_flag = 0 ;
+              yyval.start = yyvsp[-3].start ;
+            }
+break;
+case 83:
+#line 435 "parse.y"
+{ yyval.fp = bi_print ; print_flag = 1 ;}
+break;
+case 84:
+#line 436 "parse.y"
+{ yyval.fp = bi_printf ; print_flag = 1 ; }
+break;
+case 85:
+#line 439 "parse.y"
+{ code1(_PUSHINT) ; code1(yyvsp[0].ival) ; }
+break;
+case 86:
+#line 441 "parse.y"
+{ yyval.ival = yyvsp[-1].arg2p->cnt ; zfree(yyvsp[-1].arg2p,sizeof(ARG2_REC)) ; 
+             code1(_PUSHINT) ; code1(yyval.ival) ; 
+           }
+break;
+case 87:
+#line 445 "parse.y"
+{ yyval.ival=0 ; code1(_PUSHINT) ; code1(0) ; }
+break;
+case 88:
+#line 449 "parse.y"
+{ yyval.arg2p = (ARG2_REC*) zmalloc(sizeof(ARG2_REC)) ;
+             yyval.arg2p->start = yyvsp[-2].start ;
+             yyval.arg2p->cnt = 2 ;
+           }
+break;
+case 89:
+#line 454 "parse.y"
+{ yyval.arg2p = yyvsp[-2].arg2p ; yyval.arg2p->cnt++ ; }
+break;
+case 91:
+#line 459 "parse.y"
+{ code1(_PUSHINT) ; code1(yyvsp[-1].ival) ; }
+break;
+case 92:
+#line 466 "parse.y"
+{  yyval.start = yyvsp[-1].start ; eat_nl() ; code_jmp(_JZ, (INST*)0) ; }
+break;
+case 93:
+#line 471 "parse.y"
+{ patch_jmp( code_ptr ) ;  }
+break;
+case 94:
+#line 474 "parse.y"
+{ eat_nl() ; code_jmp(_JMP, (INST*)0) ; }
+break;
+case 95:
+#line 479 "parse.y"
+{ patch_jmp(code_ptr) ; patch_jmp(yyvsp[0].start) ; }
+break;
+case 96:
+#line 485 "parse.y"
+{ eat_nl() ; BC_new() ; }
+break;
+case 97:
+#line 490 "parse.y"
+{ yyval.start = yyvsp[-5].start ;
+          code_jmp(_JNZ, yyvsp[-5].start) ; 
+          BC_clear(code_ptr, yyvsp[-2].start) ; }
+break;
+case 98:
+#line 496 "parse.y"
+{ eat_nl() ; BC_new() ;
+                  yyval.start = yyvsp[-1].start ;
+
+                  /* check if const expression */
+                  if ( code_ptr - 2 == yyvsp[-1].start &&
+                       code_ptr[-2].op == _PUSHD &&
+                       *(double*)code_ptr[-1].ptr != 0.0 
+                     )
+                     code_ptr -= 2 ;
+                  else
+                 {
+                   code_push(yyvsp[-1].start, code_ptr-yyvsp[-1].start) ;
+                   code_ptr = yyvsp[-1].start ;
+                    code2(_JMP, (INST*)0) ; /* code2() not code_jmp() */
+                 }
+                }
+break;
+case 99:
+#line 516 "parse.y"
+{ 
+                 INST *c_addr ; int len ;
+
+                  if ( yyvsp[-1].start != yyvsp[0].start )  /* real test in loop */
+                 {
+                   yyvsp[-1].start[1].op = code_ptr-(yyvsp[-1].start+1) ;
+                   c_addr = code_ptr ;
+                   len = code_pop(code_ptr) ;
+                   code_ptr += len ;
+                   code_jmp(_JNZ, yyvsp[0].start) ;
+                   BC_clear(code_ptr, c_addr) ;
+                 }
+                 else /* while(1) */
+                 {
+                   code_jmp(_JMP, yyvsp[-1].start) ;
+                   BC_clear(code_ptr, yyvsp[0].start) ;
+                 }
+                }
+break;
+case 100:
+#line 539 "parse.y"
+{ 
+                  INST *cont_address = code_ptr ;
+                  unsigned len = code_pop(code_ptr) ;
+
+                  code_ptr += len ;
+
+                 if ( yyvsp[-2].start != yyvsp[0].start )  /* real test in for2 */
+                 {
+                    yyvsp[0].start[-1].op = code_ptr - yyvsp[0].start + 1 ;
+                   len = code_pop(code_ptr) ;
+                   code_ptr += len ;
+                    code_jmp(_JNZ, yyvsp[0].start) ;
+                 }
+                 else /*  for(;;) */
+                 code_jmp(_JMP, yyvsp[0].start) ;
+
+                 BC_clear(code_ptr, cont_address) ;
+
+                }
+break;
+case 101:
+#line 560 "parse.y"
+{ yyval.start = code_ptr ; }
+break;
+case 102:
+#line 562 "parse.y"
+{ yyval.start = yyvsp[-1].start ; code1(_POP) ; }
+break;
+case 103:
+#line 565 "parse.y"
+{ yyval.start = code_ptr ; }
+break;
+case 104:
+#line 567 "parse.y"
+{ 
+             if ( code_ptr - 2 == yyvsp[-1].start &&
+                  code_ptr[-2].op == _PUSHD &&
+                  * (double*) code_ptr[-1].ptr != 0.0
+                )
+                    code_ptr -= 2 ;
+             else   
+            {
+              code_push(yyvsp[-1].start, code_ptr-yyvsp[-1].start) ;
+              code_ptr = yyvsp[-1].start ;
+              code2(_JMP, (INST*)0) ;
+            }
+           }
+break;
+case 105:
+#line 583 "parse.y"
+{ eat_nl() ; BC_new() ; code_push((INST*)0,0) ; }
+break;
+case 106:
+#line 585 "parse.y"
+{ eat_nl() ; BC_new() ; 
+             code1(_POP) ;
+             code_push(yyvsp[-1].start, code_ptr - yyvsp[-1].start) ;
+             code_ptr -= code_ptr - yyvsp[-1].start ;
+           }
+break;
+case 107:
+#line 596 "parse.y"
+{ check_array(yyvsp[0].stp) ;
+             code_array(yyvsp[0].stp) ; 
+             code1(A_TEST) ; 
+            }
+break;
+case 108:
+#line 601 "parse.y"
+{ yyval.start = yyvsp[-3].arg2p->start ;
+             code1(A_CAT) ; code1(yyvsp[-3].arg2p->cnt) ;
+             zfree(yyvsp[-3].arg2p, sizeof(ARG2_REC)) ;
+
+             check_array(yyvsp[0].stp) ;
+             code_array(yyvsp[0].stp) ;
+             code1(A_TEST) ;
+           }
+break;
+case 109:
+#line 612 "parse.y"
+{ 
+             if ( yyvsp[-1].ival > 1 )
+             { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
+
+             check_array(yyvsp[-4].stp) ;
+             if( is_local(yyvsp[-4].stp) )
+             { code1(LAE_PUSHA) ; code1(yyvsp[-4].stp->offset) ; }
+             else code2(AE_PUSHA, yyvsp[-4].stp->stval.array) ;
+             yyval.start = yyvsp[-3].start ;
+           }
+break;
+case 110:
+#line 625 "parse.y"
+{ 
+             if ( yyvsp[-1].ival > 1 )
+             { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
+
+             check_array(yyvsp[-4].stp) ;
+             if( is_local(yyvsp[-4].stp) )
+             { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
+             else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
+             yyval.start = yyvsp[-3].start ;
+           }
+break;
+case 111:
+#line 637 "parse.y"
+{ 
+             if ( yyvsp[-2].ival > 1 )
+             { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
+
+             check_array(yyvsp[-5].stp) ;
+             if( is_local(yyvsp[-5].stp) )
+             { code1(LAE_PUSHA) ; code1(yyvsp[-5].stp->offset) ; }
+             else code2(AE_PUSHA, yyvsp[-5].stp->stval.array) ;
+             if ( yyvsp[0].ival == '+' )  code1(_POST_INC) ;
+             else  code1(_POST_DEC) ;
+
+             yyval.start = yyvsp[-4].start ;
+           }
+break;
+case 112:
+#line 654 "parse.y"
+{ 
+               yyval.start = yyvsp[-4].start ;
+               if ( yyvsp[-2].ival > 1 ) { code1(A_CAT) ; code1(yyvsp[-2].ival) ; }
+               check_array(yyvsp[-5].stp) ;
+               code_array(yyvsp[-5].stp) ;
+               code1(A_DEL) ;
+             }
+break;
+case 113:
+#line 667 "parse.y"
+{ eat_nl() ; BC_new() ;
+                      yyval.start = code_ptr ;
+
+                      check_var(yyvsp[-3].stp) ;
+                      code_address(yyvsp[-3].stp) ;
+                      check_array(yyvsp[-1].stp) ;
+                      code_array(yyvsp[-1].stp) ;
+
+                      code2(SET_ALOOP, (INST*)0) ;
+                    }
+break;
+case 114:
+#line 681 "parse.y"
+{ 
+               yyvsp[0].start[-1].op = code_ptr - yyvsp[0].start + 1 ;
+                BC_clear( code_ptr+3 , code_ptr) ;
+               code_jmp(ALOOP, yyvsp[0].start) ;
+               code_ptr++->ptr = (PTR) ZMALLOC(ALOOP_STATE) ;
+              }
+break;
+case 115:
+#line 696 "parse.y"
+{ yyval.start = code_ptr ; code2(F_PUSHA, yyvsp[0].cp) ; }
+break;
+case 116:
+#line 698 "parse.y"
+{ check_var(yyvsp[0].stp) ;
+             yyval.start = code_ptr ;
+             if ( is_local(yyvsp[0].stp) )
+             { code1(L_PUSHI) ; code1(yyvsp[0].stp->offset) ; }
+             else code2(_PUSHI, yyvsp[0].stp->stval.cp) ;
+
+            CODE_FE_PUSHA() ;
+           }
+break;
+case 117:
+#line 707 "parse.y"
+{ 
+             if ( yyvsp[-1].ival > 1 )
+             { code1(A_CAT) ; code1(yyvsp[-1].ival) ; }
+
+             check_array(yyvsp[-4].stp) ;
+             if( is_local(yyvsp[-4].stp) )
+             { code1(LAE_PUSHI) ; code1(yyvsp[-4].stp->offset) ; }
+             else code2(AE_PUSHI, yyvsp[-4].stp->stval.array) ;
+
+            CODE_FE_PUSHA()  ;
+
+             yyval.start = yyvsp[-3].start ;
+           }
+break;
+case 118:
+#line 721 "parse.y"
+{ yyval.start = yyvsp[0].start ;  CODE_FE_PUSHA() ; }
+break;
+case 119:
+#line 723 "parse.y"
+{ yyval.start = yyvsp[-1].start ; }
+break;
+case 120:
+#line 727 "parse.y"
+{ field_A2I() ; }
+break;
+case 121:
+#line 730 "parse.y"
+{ code1(F_ASSIGN) ; }
+break;
+case 122:
+#line 731 "parse.y"
+{ code1(F_ADD_ASG) ; }
+break;
+case 123:
+#line 732 "parse.y"
+{ code1(F_SUB_ASG) ; }
+break;
+case 124:
+#line 733 "parse.y"
+{ code1(F_MUL_ASG) ; }
+break;
+case 125:
+#line 734 "parse.y"
+{ code1(F_DIV_ASG) ; }
+break;
+case 126:
+#line 735 "parse.y"
+{ code1(F_MOD_ASG) ; }
+break;
+case 127:
+#line 736 "parse.y"
+{ code1(F_POW_ASG) ; }
+break;
+case 128:
+#line 743 "parse.y"
+{ code2(_BUILTIN, bi_split) ; }
+break;
+case 129:
+#line 747 "parse.y"
+{ yyval.start = yyvsp[-2].start ;
+              check_array(yyvsp[0].stp) ;
+              code_array(yyvsp[0].stp)  ;
+            }
+break;
+case 130:
+#line 754 "parse.y"
+{ code2(_PUSHI, &fs_shadow) ; }
+break;
+case 131:
+#line 756 "parse.y"
+{ 
+                  if ( yyvsp[-1].start == code_ptr - 2 )
+                  {
+                    if ( code_ptr[-2].op == _MATCH0 )
+                        RE_as_arg() ;
+                    else
+                    if ( code_ptr[-2].op == _PUSHS )
+                    { CELL *cp = ZMALLOC(CELL) ;
+
+                      cp->type = C_STRING ;
+                      cp->ptr = code_ptr[-1].ptr ;
+                      cast_for_split(cp) ;
+                      code_ptr[-2].op = _PUSHC ;
+                      code_ptr[-1].ptr = (PTR) cp ;
+                    }
+                  }
+                }
+break;
+case 132:
+#line 780 "parse.y"
+{ yyval.start = yyvsp[-3].start ; 
+          code2(_BUILTIN, bi_match) ;
+        }
+break;
+case 133:
+#line 787 "parse.y"
 {
 {
-       register node *x;
-       x = node3(paircnt++, a, b, c);
-       x->ntype = NPA2;
-       return(x);
-}
-node *linkum(a,b) node *a, *b;
+               if ( yyvsp[0].start == code_ptr - 2 ) 
+               {
+                 if ( yyvsp[0].start->op == _MATCH0 ) RE_as_arg() ;
+                 else
+                 if ( yyvsp[0].start->op == _PUSHS )
+                 { CELL *cp = ZMALLOC(CELL) ;
+
+                   cp->type = C_STRING ;
+                   cp->ptr = yyvsp[0].start[1].ptr ;
+                   cast_to_RE(cp) ;
+                   yyvsp[0].start->op = _PUSHC ;
+                   yyvsp[0].start[1].ptr = (PTR) cp ;
+                 } 
+               }
+             }
+break;
+case 134:
+#line 808 "parse.y"
+{ yyval.start = code_ptr ;
+                      code1(_EXIT0) ; }
+break;
+case 135:
+#line 811 "parse.y"
+{ yyval.start = yyvsp[-1].start ; code1(_EXIT) ; }
+break;
+case 136:
+#line 814 "parse.y"
+{ yyval.start = code_ptr ;
+                      code1(_RET0) ; }
+break;
+case 137:
+#line 817 "parse.y"
+{ yyval.start = yyvsp[-1].start ; code1(_RET) ; }
+break;
+case 138:
+#line 822 "parse.y"
+{ yyval.start = code_ptr ;
+            code2(F_PUSHA, &field[0]) ;
+            code1(_PUSHINT) ; code1(0) ; 
+            code2(_BUILTIN, bi_getline) ;
+            getline_flag = 0 ;
+          }
+break;
+case 139:
+#line 829 "parse.y"
+{ yyval.start = yyvsp[0].start ;
+            code1(_PUSHINT) ; code1(0) ;
+            code2(_BUILTIN, bi_getline) ;
+            getline_flag = 0 ;
+          }
+break;
+case 140:
+#line 835 "parse.y"
+{ code1(_PUSHINT) ; code1(F_IN) ;
+            code2(_BUILTIN, bi_getline) ;
+            /* getline_flag already off in yylex() */
+          }
+break;
+case 141:
+#line 840 "parse.y"
+{ code2(F_PUSHA, &field[0]) ;
+            code1(_PUSHINT) ; code1(PIPE_IN) ;
+            code2(_BUILTIN, bi_getline) ;
+          }
+break;
+case 142:
+#line 845 "parse.y"
+{ 
+            code1(_PUSHINT) ; code1(PIPE_IN) ;
+            code2(_BUILTIN, bi_getline) ;
+          }
+break;
+case 143:
+#line 851 "parse.y"
+{ getline_flag = 1 ; }
+break;
+case 146:
+#line 856 "parse.y"
+{ yyval.start = code_ptr ;
+                   code2(F_PUSHA, field+0) ;
+                 }
+break;
+case 147:
+#line 860 "parse.y"
+{ yyval.start = yyvsp[-1].start ; }
+break;
+case 148:
+#line 868 "parse.y"
 {
 {
-       register node *c;
-       if(a == NULL) return(b);
-       else if(b == NULL) return(a);
-       for(c=a; c->nnext != NULL; c=c->nnext);
-       c->nnext = b;
-       return(a);
+             if ( yyvsp[0].start - yyvsp[-1].start == 2 && yyvsp[-1].start->op == _PUSHS  )
+             { /* cast from STRING to REPL at compile time */
+               CELL *cp = ZMALLOC(CELL) ;
+               cp->type = C_STRING ;
+               cp->ptr = yyvsp[-1].start[1].ptr ;
+               cast_to_REPL(cp) ;
+               yyvsp[-1].start->op = _PUSHC ;
+               yyvsp[-1].start[1].ptr = (PTR) cp ;
+             }
+             code2(_BUILTIN, yyvsp[-5].fp) ;
+             yyval.start = yyvsp[-3].start ;
+           }
+break;
+case 149:
+#line 883 "parse.y"
+{ yyval.fp = bi_sub ; }
+break;
+case 150:
+#line 884 "parse.y"
+{ yyval.fp = bi_gsub ; }
+break;
+case 151:
+#line 889 "parse.y"
+{ yyval.start = code_ptr ;
+                  code2(F_PUSHA, &field[0]) ; 
+                }
+break;
+case 152:
+#line 894 "parse.y"
+{ yyval.start = yyvsp[-1].start ; }
+break;
+case 153:
+#line 902 "parse.y"
+{ resize_fblock(yyvsp[-1].fbp, code_ptr) ;
+                   code_ptr = main_code_ptr ;
+                   scope = SCOPE_MAIN ;
+                   active_funct = (FBLOCK *) 0 ;
+                   restore_ids() ;
+                 }
+break;
+case 154:
+#line 912 "parse.y"
+{ eat_nl() ;
+                   scope = SCOPE_FUNCT ;
+                   active_funct = yyvsp[-3].fbp ;
+                   main_code_ptr = code_ptr ;
+
+                   if ( yyvsp[-3].fbp->nargs = yyvsp[-1].ival )
+                        yyvsp[-3].fbp->typev = (char *)
+                       memset( zmalloc(yyvsp[-1].ival), ST_LOCAL_NONE, SIZE_T(yyvsp[-1].ival)) ;
+                   else yyvsp[-3].fbp->typev = (char *) 0 ;
+                   code_ptr = yyvsp[-3].fbp->code = 
+                       (INST *) zmalloc(PAGE_SZ*sizeof(INST)) ;
+                 }
+break;
+case 155:
+#line 927 "parse.y"
+{ FBLOCK  *fbp ;
+
+                   if ( yyvsp[0].stp->type == ST_NONE )
+                   {
+                         yyvsp[0].stp->type = ST_FUNCT ;
+                         fbp = yyvsp[0].stp->stval.fbp = 
+                             (FBLOCK *) zmalloc(sizeof(FBLOCK)) ;
+                         fbp->name = yyvsp[0].stp->name ;
+                   }
+                   else
+                   {
+                         type_error( yyvsp[0].stp ) ;
+
+                         /* this FBLOCK will not be put in
+                            the symbol table */
+                         fbp = (FBLOCK*) zmalloc(sizeof(FBLOCK)) ;
+                         fbp->name = "" ;
+                   }
+                   yyval.fbp = fbp ;
+                 }
+break;
+case 156:
+#line 949 "parse.y"
+{ yyval.fbp = yyvsp[0].fbp ; 
+                   if ( yyvsp[0].fbp->code ) 
+                       compile_error("redefinition of %s" , yyvsp[0].fbp->name) ;
+                 }
+break;
+case 157:
+#line 955 "parse.y"
+{ yyval.ival = 0 ; }
+break;
+case 159:
+#line 960 "parse.y"
+{ yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
+                yyvsp[0].stp->type = ST_LOCAL_NONE ;
+                yyvsp[0].stp->offset = 0 ;
+                yyval.ival = 1 ;
+              }
+break;
+case 160:
+#line 966 "parse.y"
+{ if ( is_local(yyvsp[0].stp) ) 
+                  compile_error("%s is duplicated in argument list",
+                    yyvsp[0].stp->name) ;
+                else
+                { yyvsp[0].stp = save_id(yyvsp[0].stp->name) ;
+                  yyvsp[0].stp->type = ST_LOCAL_NONE ;
+                  yyvsp[0].stp->offset = yyvsp[-2].ival ;
+                  yyval.ival = yyvsp[-2].ival + 1 ;
+                }
+              }
+break;
+case 161:
+#line 981 "parse.y"
+{ yyval.start = yyvsp[-1].start ;
+             code2(_CALL, yyvsp[-2].fbp) ;
+
+             if ( yyvsp[0].ca_p )  code1(yyvsp[0].ca_p->arg_num+1) ;
+             else  code1(0) ;
+               
+             check_fcall(yyvsp[-2].fbp, scope, active_funct, 
+                         yyvsp[0].ca_p, token_lineno) ;
+           }
+break;
+case 162:
+#line 993 "parse.y"
+{ yyval.ca_p = (CA_REC *) 0 ; }
+break;
+case 163:
+#line 995 "parse.y"
+{ yyval.ca_p = yyvsp[0].ca_p ;
+                 yyval.ca_p->link = yyvsp[-1].ca_p ;
+                 yyval.ca_p->arg_num = yyvsp[-1].ca_p ? yyvsp[-1].ca_p->arg_num+1 : 0 ;
+               }
+break;
+case 164:
+#line 1010 "parse.y"
+{ yyval.ca_p = (CA_REC *) 0 ; }
+break;
+case 165:
+#line 1012 "parse.y"
+{ yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
+                yyval.ca_p->link = yyvsp[-2].ca_p ;
+                yyval.ca_p->type = CA_EXPR  ;
+                yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
+              }
+break;
+case 166:
+#line 1018 "parse.y"
+{ yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
+                yyval.ca_p->link = yyvsp[-2].ca_p ;
+                yyval.ca_p->arg_num = yyvsp[-2].ca_p ? yyvsp[-2].ca_p->arg_num+1 : 0 ;
+
+                code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
+              }
+break;
+case 167:
+#line 1027 "parse.y"
+{ yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
+                yyval.ca_p->type = CA_EXPR ;
+              }
+break;
+case 168:
+#line 1032 "parse.y"
+{ yyval.ca_p = (CA_REC *) zmalloc(sizeof(CA_REC)) ;
+                code_call_id(yyval.ca_p, yyvsp[-1].stp) ;
+              }
+break;
+#line 2496 "y.tab.c"
+    }
+    yyssp -= yym;
+    yystate = *yyssp;
+    yyvsp -= yym;
+    yym = yylhs[yyn];
+    if (yystate == 0 && yym == 0)
+    {
+#if YYDEBUG
+        if (yydebug)
+            printf("yydebug: after reduction, shifting from state 0 to\
+ state %d\n", YYFINAL);
+#endif
+        yystate = YYFINAL;
+        *++yyssp = YYFINAL;
+        *++yyvsp = yyval;
+        if (yychar < 0)
+        {
+            if ((yychar = YYLEX()) < 0) yychar = 0;
+#if YYDEBUG
+            if (yydebug)
+            {
+                yys = 0;
+                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+                if (!yys) yys = "illegal-symbol";
+                printf("yydebug: state %d, reading %d (%s)\n",
+                        YYFINAL, yychar, yys);
+            }
+#endif
+        }
+        if (yychar == 0) goto yyaccept;
+        goto yyloop;
+    }
+    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+        yystate = yytable[yyn];
+    else
+        yystate = yydgoto[yym];
+#if YYDEBUG
+    if (yydebug)
+        printf("yydebug: after reduction, shifting from state %d \
+to state %d\n", *yyssp, yystate);
+#endif
+    if (yyssp >= yyss + yystacksize - 1)
+    {
+        goto yyoverflow;
+    }
+    *++yyssp = yystate;
+    *++yyvsp = yyval;
+    goto yyloop;
+yyoverflow:
+    yyerror("yacc stack overflow");
+yyabort:
+    return (1);
+yyaccept:
+    return (0);
 }
 }
-node *genprint()
+
+/********************************************
+parse2.xc
+copyright 1991, Michael D. Brennan
+
+This is a source file for mawk, an implementation of
+the AWK programming language.
+
+Mawk is distributed without warranty under the terms of
+the GNU General Public License, version 2, 1991.
+********************************************/
+
+/* $Log:       parse.c,v $
+ * Revision 1.5  92/01/09  08:45:30  brennan
+ * pr patch1
+ * 
+Revision 5.1  91/12/05  07:52:38  brennan
+1.1 pre-release
+
+*/
+
+/* If using Berkeley yacc, we can put the parser table 
+   memory to the zmalloc pool.  This is kind of ugly and
+   with paged vm probably a nop, but for DOS and MINIX and ??
+   it frees a considerably amount of memory.
+
+   This file is part of parse.c via
+      cat  y.tab.c  parse2.xc  > parse.c
+*/
+
+static struct yacc_mem   yacc_mem[] = 
 {
 {
-       register node *x;
-       x = stat2(PRINT,valtonode(lookup("$record", symtab, 0), CFLD), nullstat);
-       return(x);
-}
+0 , 0 ,  /* don't remove this */
+
+#ifdef   YYBYACC
+(PTR) yycheck, sizeof(yycheck)/ZBLOCKSZ,
+(PTR) yytable, sizeof(yytable)/ZBLOCKSZ,
+#ifndef  YYXBYACC  /* with xbyacc these are storage auto */
+(PTR) yyvs , sizeof(yyvs)/ZBLOCKSZ,
+(PTR) yyss, sizeof(yyss)/ZBLOCKSZ,
+#endif
+(PTR) yydefred, sizeof(yydefred)/ZBLOCKSZ,
+(PTR) yydgoto, sizeof(yydgoto)/ZBLOCKSZ,
+(PTR) yygindex, sizeof(yygindex)/ZBLOCKSZ,
+(PTR) yylen, sizeof(yylen)/ZBLOCKSZ,
+(PTR) yylhs, sizeof(yylhs)/ZBLOCKSZ,
+(PTR) yyrindex, sizeof(yyrindex)/ZBLOCKSZ,
+(PTR) yysindex, sizeof(yysindex)/ZBLOCKSZ,
+#endif
+
+0,0 } ;
+
+struct yacc_mem  *yacc_memp = yacc_mem ;
+