home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 11 / AUCD11B.iso / LANGUAGES / WraithSet / AwkStuff / MawkSrc / c / parse < prev    next >
Encoding:
Text File  |  1996-11-08  |  88.2 KB  |  2,622 lines

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