home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / MAWK113.ZIP / mawk113 / parse.c < prev    next >
C/C++ Source or Header  |  1993-02-06  |  91KB  |  2,629 lines

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