home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perlkt40.zip / A2P.C < prev    next >
C/C++ Source or Header  |  1996-06-13  |  41KB  |  1,261 lines

  1. #line 1 "c:/home/bin/kmyacc.par"
  2. /* -*-c-*-  KM-yacc parser model file (standard version) */
  3.  
  4. /* -p option renames following identifiers */
  5.  
  6. /* User declarations and token definitions */
  7. #line 1 "a2p.y"
  8.  
  9. /* $RCSfile: a2p.y,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:13:03 $
  10.  
  11.  
  12.       Copyright (c) 1991, Larry Wall
  13.  
  14.  
  15.       You may distribute under the terms of either the GNU General Public
  16.       License or the Artistic License, as specified in the README file.
  17.  
  18.  
  19.    $Log:    a2p.y,v $
  20.    Revision 4.0.1.2  92/06/08  16:13:03  lwall
  21.    patch20: in a2p, getline should allow variable to be array element
  22.    
  23.    Revision 4.0.1.1  91/06/07  12:12:41  lwall
  24.    patch4: new copyright notice
  25.    
  26.    Revision 4.0  91/03/20  01:57:21  lwall
  27.    4.0 baseline.
  28.    
  29.  */
  30.  
  31. #include "INTERN.h"
  32. #include "a2p.h"
  33.  
  34. int root;
  35. int begins = Nullop;
  36. int ends = Nullop;
  37.  
  38.  
  39. #ifndef YYSTYPE
  40. #define YYSTYPE int
  41. #endif
  42.  
  43. #define YYERRTOK 256
  44. #define BEGIN 257
  45. #define END 258
  46. #define REGEX 259
  47. #define SEMINEW 260
  48. #define NEWLINE 261
  49. #define COMMENT 262
  50. #define FUN1 263
  51. #define FUNN 264
  52. #define GRGR 265
  53. #define PRINT 266
  54. #define PRINTF 267
  55. #define SPRINTF 268
  56. #define SPLIT 269
  57. #define IF 270
  58. #define ELSE 271
  59. #define WHILE 272
  60. #define FOR 273
  61. #define IN 274
  62. #define EXIT 275
  63. #define NEXT 276
  64. #define BREAK 277
  65. #define CONTINUE 278
  66. #define RET 279
  67. #define GETLINE 280
  68. #define DO 281
  69. #define SUB 282
  70. #define GSUB 283
  71. #define MATCH 284
  72. #define FUNCTION 285
  73. #define USERFUN 286
  74. #define DELETE 287
  75. #define ASGNOP 288
  76. #define OROR 289
  77. #define ANDAND 290
  78. #define NUMBER 291
  79. #define VAR 292
  80. #define SUBSTR 293
  81. #define INDEX 294
  82. #define MATCHOP 295
  83. #define RELOP 296
  84. #define OR 297
  85. #define STRING 298
  86. #define UMINUS 299
  87. #define NOT 300
  88. #define INCR 301
  89. #define DECR 302
  90. #define FIELD 303
  91. #define VFIELD 304
  92. #line 12 "c:/home/bin/kmyacc.par"
  93.  
  94.  
  95. #ifndef YYMAXDEPTH
  96. # define YYMAXDEPTH 200
  97. #endif /* !YYMAXDEPTH */
  98.  
  99. #ifndef YYASP
  100. # define YYASP(n) yyasp[-n]
  101. #endif /* !YYASP */
  102.  
  103. #define yyclearin (yychar = -1)
  104. #define yyerrok (yyerrflag = 0)
  105. #define YYRECOVERING (yyerrflag != 0)
  106.  
  107. #if YYACTFUN
  108. # include <setjmp.h>
  109.   static jmp_buf yyjmp;
  110. # define YYACCEPT  longjmp(yyjmp, 1)
  111. # define YYABORT  longjmp(yyjmp, 2)
  112. #endif /* YYACTFUN */
  113.  
  114. #if !YYACTFUN
  115. # define YYACCEPT  return (0)
  116. # define YYABORT  return (1)
  117. # define YYERROR  goto yyerrlab
  118. #endif /* !YYACTFUN */
  119.  
  120.  
  121. int yychar;
  122. static int yyerrflag;
  123.  
  124. #if YYDEBUG
  125. int yydebug;
  126. #endif /* YYDEBUG */
  127.  
  128. int yylex();
  129. int yyparse();
  130. int yyerror();
  131.  
  132. YYSTYPE yylval;
  133.  
  134. static YYSTYPE *yyasp, yyval;
  135.  
  136. #if YYACTFUN
  137.  
  138. static void yydef()
  139. {
  140. }
  141. #endif /* YYACTFUN */
  142.  
  143.  
  144. /* Following line will be replaced by parser tables */
  145. #line 402 "a2p.y"
  146.  
  147. #include "a2py.c"
  148.  
  149. #ifdef YYDEBUG
  150. #define YYMINTOK 256
  151. #define YYMAXTOK 304
  152. static char *yytnames[] = {
  153.  "error",
  154.  "BEGIN",
  155.  "END",
  156.  "REGEX",
  157.  "SEMINEW",
  158.  "NEWLINE",
  159.  "COMMENT",
  160.  "FUN1",
  161.  "FUNN",
  162.  "GRGR",
  163.  "PRINT",
  164.  "PRINTF",
  165.  "SPRINTF",
  166.  "SPLIT",
  167.  "IF",
  168.  "ELSE",
  169.  "WHILE",
  170.  "FOR",
  171.  "IN",
  172.  "EXIT",
  173.  "NEXT",
  174.  "BREAK",
  175.  "CONTINUE",
  176.  "RET",
  177.  "GETLINE",
  178.  "DO",
  179.  "SUB",
  180.  "GSUB",
  181.  "MATCH",
  182.  "FUNCTION",
  183.  "USERFUN",
  184.  "DELETE",
  185.  "ASGNOP",
  186.  "OROR",
  187.  "ANDAND",
  188.  "NUMBER",
  189.  "VAR",
  190.  "SUBSTR",
  191.  "INDEX",
  192.  "MATCHOP",
  193.  "RELOP",
  194.  "OR",
  195.  "STRING",
  196.  "UMINUS",
  197.  "NOT",
  198.  "INCR",
  199.  "DECR",
  200.  "FIELD",
  201.  "VFIELD",
  202.   0 };
  203.  
  204. static char *yyntnames[] = {
  205.   "$start",
  206.   "program",
  207.   "junk",
  208.   "hunks",
  209.   "begin",
  210.   "maybe",
  211.   "states",
  212.   "end",
  213.   "hunk",
  214.   "patpat",
  215.   "arg_list",
  216.   "expr_list",
  217.   "cond",
  218.   "expr",
  219.   "match",
  220.   "rel",
  221.   "compound_cond",
  222.   "term",
  223.   "variable",
  224.   "clist",
  225.   "hunksep",
  226.   "nlstuff",
  227.   "separator",
  228.   "statement",
  229.   "simple",
  230.   "compound",
  231.   "simpnull",
  232.   "redir",
  233. };
  234.  
  235. static short yyrstates[] = {
  236.     14,    27,    28,    29,    30,    31,    33,    35,    41,    45,
  237.     49,    50,    51,    53,    55,    56,    58,    59,    60,    62,
  238.     63,    64,    65,    66,    68,    74,    75,    84,    85,    86,
  239.     87,    88,    89,    91,    92,    93,    94,    95,    96,    97,
  240.     99,   102,   103,   105,   107,   108,   112,   113,   114,   116,
  241.    118,   119,   120,   123,   127,   133,   136,   138,   139,   140,
  242.    141,   144,   145,   150,   151,   152,   153,   157,   158,   160,
  243.    161,   162,   163,   164,   165,   170,   171,   173,   174,   178,
  244.    182,   188,   192,   195,   199,   200,   202,   203,   204,   205,
  245.    207,   210,   211,   214,   215,   216,   217,   218,   221,   222,
  246.    229,   232,   234,   236,   238,   240,   245,   250,   251,   252,
  247.    253,   254,   258,   259,   260,   261,   262,   263,   264,   266,
  248.    267,   268,   269,   270,   273,   274,   278,   280,   288,   293,
  249.    295,   297,   298,   303,     1,     2,     7,     9,    10,    12,
  250.     13,    15,    16,    17,    18,    19,    20,    21,    23,    24,
  251.     25,    37,    39,    40,    46,    54,    57,    61,    67,    69,
  252.     73,    76,    77,    78,    80,    90,    98,   106,   109,   115,
  253.    117,   121,   122,   124,   134,   135,   143,   146,   147,   148,
  254.    149,   159,   166,   175,   176,   177,   184,   190,   193,   201,
  255.    206,   209,   212,   213,   219,   220,   230,   243,   256,   257,
  256.    265,   272,   279,   290,   291,   292,   294,   299,   302,   304,
  257.    308,   310,   311,   315,     0,     3,     4,     5,     6,     8,
  258.     11,    22,    26,    32,    34,    36,    38,    42,    43,    44,
  259.     47,    48,    52,    70,    71,    72,    79,    81,    82,    83,
  260.    100,   101,   104,   110,   111,   125,   126,   128,   129,   130,
  261.    131,   132,   137,   142,   154,   155,   156,   167,   168,   169,
  262.    172,   179,   180,   181,   183,   185,   186,   187,   189,   191,
  263.    194,   196,   197,   198,   208,   223,   224,   225,   226,   227,
  264.    228,   231,   233,   235,   237,   239,   241,   242,   244,   246,
  265.    247,   248,   249,   255,   271,   275,   276,   277,   281,   282,
  266.    283,   284,   285,   286,   287,   289,   296,   300,   301,   305,
  267.    306,   307,   309,   312,   313,   314,   316,
  268. };
  269. #endif /* YYDEBUG */
  270.  
  271. #define YYPASS 16384
  272. #define YYLAST 862
  273. static short yynext[] = {
  274.     13,    27, 16425,     8,    44,    15,   232,     8,   218, 16425,
  275.     43,    13,    45,   129,    46,    47,    49,    50,    51,    13,
  276.     13,    53,   173,     8,   199,   171,   172,     8,    57,    58,
  277.     59,    60,   312,   207,   307,   308, 16427,    39, 16429,   108,
  278.      8,   314,   315,   316,    45,   133,    40,   291,    69,   230,
  279.  16425, 16442,    13,   164,   293,   166, 16447,   168,   257,   240,
  280.    241, 16425,   317,   163,    23,   294,    23,    84,    85,   278,
  281.     86,    87,    88,    89,    90,   191,    91,    13,    13,    96,
  282.     97,   266,   231,   192,   193,   272, 16425,   273,   293,   168,
  283.  16425,    10,   293,     8,     8,   111,   162,   161,    11,   196,
  284.    163,   119,   120,   121,   122,   123,   201,   124,   125,   292,
  285.     24,    24,   127,   234,   235,    24,   208,    24,   256,   306,
  286.    210,   244,    24,    14,   280,    16,     8,    65,    66,   281,
  287.      8,    17,   101,   162,   161,   282,     8,   298,   102,    12,
  288.  16425,    82,    24,    24,    24,    24,    24,    24,    24,   157,
  289.    283,    18,    24,   103,    24,    24,    24,    19,    24,    24,
  290.     24,   309,    24, 16645, 16646,    20,    24,    24,    24,    24,
  291.    284,    21,   271,   104,     8,     8,   285,    22,    24,   105,
  292.      7,    38,   236,     1,   113,     2,    36,    34,   237,    35,
  293.     24,    37,    24,    24,    24,    24,    24,    24,    24,    24,
  294.     24,   244,    83,   245,   246,    24,    24,    33,    48,   215,
  295.    216,   217,    52,   166,   132, 16645, 16646, 16645, 16646,   249,
  296.     24, 16645, 16646, 16645, 16646, 16645, 16646,   169,    24,    24,
  297.     24,    24,    24,    24,    24,   250,    24,   148,    39,   251,
  298.     23,   233,   253,     1,   255,     2,   238,   239,   223,     6,
  299.    290,   156, 16675, 16676, 16677, 16678,   166,   158,   159,   267,
  300.  16645, 16646,   160,   224,    32,    56,    70, 16658,   170,    32,
  301.    275,   276,   277, 16645, 16646,   238,   239,    63,    64,   252,
  302.    238,   239,    24, 16643,    72, 16643,   258, 16645, 16646,   176,
  303.     61,    62,   177,   178,   179,   180,   189, 16645, 16646,    32,
  304.     24,    32,    32,    32,   190,    32,    32,    32,   200,    32,
  305.     24,   259,   274,    32,    32,    32,    32,     7,    93,    94,
  306.      1, 16443,     2,   265, 16684,    32, 16684,    95,   239,   195,
  307.    286,   109,   110,   112,   126,   202,   299,    32,   130,   100,
  308.     32,    32,    32,    32,    32,    32,    32,    32,   311,   310,
  309.    313, 16507,    32,    32, 16672, 16428, 16444,   248,   295,   296,
  310.  16442, 16425,   242,   243,   206,   254,   181,    32,   209,    71,
  311.     73,    74,    75,   287,   153,    32,    32,    32,    32,    32,
  312.     32,    32,   289,    32,   297, 16507,   300,   301,   302,   303,
  313.    304, 32767, 32767, 32767, 32767, 32767, 32767,   137,   138,   220,
  314.  32767, 32767, 32767,   139,   140, 32767, 32767, 32767,     0,   141,
  315.  32767, 32767,   188,   270, 32767, 32767, 32767, 32767,   165, 32767,
  316.    142, 32767,   143,   144,   145,   146,   147, 32767, 32767,    32,
  317.  32767,   221,   148,   149,   150, 32767, 32767, 32767,   222, 32767,
  318.      3,     4,     5,   223,     6,    23,   288,    32,     1,   106,
  319.      2, 32767, 32767, 32767, 32767, 32767, 32767,    32, 32767, 32767,
  320.    260,   245,   246,   139,   140, 32767,    77,    78,     0,   141,
  321.    183, 32767,   184,   185, 32767,    79,   261,   262,   263,    80,
  322.    142,   264,   143,   144,   145, 32767,   147,   186, 32767, 32767,
  323.  32767,   221,   148,   149,   150, 32767, 32767, 32767,   222, 32767,
  324.  32767,     4,     5,   223,     6,    23, 32767, 32767,     1,    76,
  325.      2, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  326.  32767, 32767, 16644, 16645, 16646, 32767, 32767, 32767, 32767, 32767,
  327.  32767, 32767, 16654, 32767, 16656, 16657,   220, 32767,   245,   246,
  328.    139,   140, 32767, 16665, 32767,     0,   141,    23,   305, 32767,
  329.      1, 32767,     2, 32767, 32767, 32767, 32767,   142, 32767,   143,
  330.    144,   145, 32767,   147, 32767, 32767, 32767, 32767,   221,   148,
  331.    149,   150, 32767, 32767, 32767,   222, 32767,     3,     4,     5,
  332.    223,     6,    41,    42, 32767, 32767, 32767, 32767, 32767,    55,
  333.    174,   175, 32767, 32767, 32767,    67,    68, 32767,    23, 32767,
  334.  32767,    23,   243, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  335.  32767, 32767,    92, 32767, 32767, 32767,   194,    98,    30,    99,
  336.     31,    30, 32767,    31, 32767, 32767,   197,   114,   115,   116,
  337.    117,   118, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  338.  32767, 32767, 32767, 32767, 32767, 32767,   128,   203,   204,   205,
  339.    131, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  340.  32767, 32767,   211,   212, 32767,   213, 32767, 32767,   139,   140,
  341.  32767, 32767, 32767,     0,   141, 32767, 32767, 32767, 32767, 32767,
  342.  32767, 16507, 32767, 32767, 16507,   142, 32767,   143,   144,   145,
  343.  32767,   147, 32767, 32767, 32767, 32767,   221,   148,   149,   150,
  344.  32767, 32767, 32767,   222, 32767, 32767,     4,     5,   223,     6,
  345.  32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  346.  32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,   139,   140,
  347.  32767, 32767, 32767,     0,   141, 32767, 32767, 32767, 32767, 32767,
  348.  32767, 32767, 32767, 32767, 32767,   142, 32767,   143,   144,   145,
  349.  32767,   147, 32767, 32767, 32767, 32767,   221,   148,   149,   150,
  350.  32767, 32767, 32767,   222, 32767, 32767,     4,     5,   223,     6,
  351.    139,   140, 32767, 32767, 32767,     0,   141, 32767, 32767, 32767,
  352.  32767, 32767, 32767, 32767, 32767, 32767, 32767,   142, 32767,   143,
  353.    144,   145, 32767,   147, 32767, 32767, 32767, 32767,   221,   148,
  354.    149,   150, 32767, 32767, 32767,   222, 32767, 32767,     4,     5,
  355.    223,     6, 32767, 32767, 32767, 16641, 16642, 16643, 16641, 16642,
  356.  16643, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  357.  32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,
  358.  32767, 32767, 32767, 16669, 32767, 32767, 16669, 32767, 32767, 32767,
  359.  32767, 32767, 32767,    28,    29, 32767,    28,    29, 16684, 32767,
  360.  32767, 16684,
  361. };
  362.  
  363. #define YY2TABSTATES 134
  364. #define YYLR1STATES 214
  365. #define YYNSTATES 317
  366. #define YYNXR 318
  367. #define YYSTATE0 214
  368. static short yybase[] = {
  369.     99,   320,   320,   -98,   296,   296,   320,   -98,   561,   302,
  370.    321,    99,   -36,   319,   320,   320,   -32,     9,   320,    99,
  371.     99,   320,   320,   -98,    66,   228,   316,   -98,    20,   320,
  372.    320,   320,   302,   320,   320,   320,   320,   320,   320,   320,
  373.    -98,   228,   228,   324,   -36,   558,   322,   -39,   320,   325,
  374.    326,   327,    99,   328,   -44,   228,   311,   -39,   -39,   -39,
  375.    -39,    -7,    -7,   296,   311,   -40,   -38,    24,    24,   -39,
  376.    320,   320,   320,   320,    45,   320,   320,    99,    99,   320,
  377.    320,   320,    -1,   320,   320,   320,    94,   109,   129,   135,
  378.    332,   341,   228,   -98,   -98,   262,   320,   320,   228,   228,
  379.    302,    49,   320,   320,   320,   320,   320,   320,   320,   317,
  380.    318,   343,   320,    12,   228,   228,   228,   228,   228,   345,
  381.    346,   347,   348,   349,   320,   320,   -46,    26,   228,   262,
  382.    -98,   228,    36,   262,    62,   -51,   140,   -74,   -41,    51,
  383.     58,    83,   -55,    85,    91,   111,  -137,   117,    74,   131,
  384.    137,   -79,    65,   -43,  -242,   157,   148,   172,   -57,   -57,
  385.    101,   178,   194,   198,   -51,   -50,    -3,   203,    77,   222,
  386.    240,   245,   218,   465,   277,   277,   144,   -57,   -57,   -57,
  387.    -57,     4,   271,   278,   279,   287,    37,    10,    38,    88,
  388.    289,   405,   -15,   -15,   200,   242,   -51,   -58,   275,    63,
  389.    295,   507,   298,   200,   200,   200,   -14,    78,   307,    -9,
  390.    309,   200,   200,   200,
  391. };
  392.  
  393. static short yybase2[] = {
  394.    507,   507,   507,   277,   -55,   -55,   507,   277,   140,   144,
  395.    507,   507,   277,   465,   507,   507,   507,   507,   507,   507,
  396.    507,   507,   507,   277,  -242,   -58,    -9,   277,   507,   507,
  397.    507,   507,   144,   507,   507,   507,   507,   507,   507,   507,
  398.    277,   -58,   -58,   507,   277,   140,   465,   507,   507,   465,
  399.    465,   465,   507,   465,   200,   -58,   -43,   507,   507,   507,
  400.    507,   144,   144,   -55,   -43,   200,   200,   277,   277,   507,
  401.    507,   507,   507,   507,   507,   507,   507,   507,   507,   507,
  402.    507,   507,   200,   507,   507,   507,   405,   405,   405,   405,
  403.    507,   507,   -58,   277,   277,   200,   507,   507,   -58,   -58,
  404.    144,   507,   507,   507,   507,   507,   507,   507,   507,    -9,
  405.     -9,   507,   507,   200,   -58,   -58,   -58,   -58,   -58,   507,
  406.    507,   507,   507,   507,   507,   507,   277,   277,   -58,   200,
  407.    277,   -58,   200,   200,
  408. };
  409.  
  410. static short yydefault[] = {
  411.     87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    16,    32,
  412.     -1,    87,    -1,    85,    -1,    -1,    -1,    -1,    -1,    87,
  413.     87,    -1,    -1,    -1,    35,   106,    -1,    -1,    -1,    -1,
  414.     -1,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  415.     -1,   106,   106,    -1,    -1,    16,    -1,    55,    -1,    -1,
  416.     -1,    -1,    87,    -1,    -1,   106,    15,    28,    24,    26,
  417.     25,    38,    39,    57,    34,    -1,    -1,    -1,    -1,    56,
  418.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    87,   120,
  419.    123,   113,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
  420.     -1,    -1,   109,    -1,    -1,   112,   121,   124,   106,   108,
  421.     45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
  422.     -1,   113,    -1,    -1,   102,   103,   104,   101,   107,    -1,
  423.     -1,    -1,    -1,    -1,   114,   116,    -1,    -1,   106,   112,
  424.     -1,   136,    -1,   112,    -1,     6,     1,    -1,    -1,    59,
  425.     -1,    -1,    53,    -1,    -1,    -1,    -1,    -1,    81,    -1,
  426.     -1,    12,     7,    14,    35,    86,    54,    -1,    51,    50,
  427.     84,    17,    18,    19,     5,    -1,    -1,    -1,    -1,    -1,
  428.     -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,
  429.     43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,    -1,
  430.     -1,    -1,   115,   117,    -1,    -1,     2,    -1,    -1,    -1,
  431.     -1,    -1,    -1,    -1,    -1,    -1,    -1,   129,    -1,    -1,
  432.     -1,    -1,    -1,    -1,    92,    94,    95,    96,    93,    91,
  433.     30,    36,    37,    83,    98,    11,    92,    17,    18,    19,
  434.     98,    98,    64,    23,    48,    49,     4,    98,    98,    98,
  435.     46,    47,    60,    98,    98,    99,   100,    97,    52,    31,
  436.     27,    20,    29,    44,    61,    62,    90,    13,    63,    82,
  437.     98,   119,   118,   122,    98,    98,    10,    98,   105,   110,
  438.     21,    58,    92,     3,    98,    98,    98,    98,    98,    98,
  439.      8,    69,    74,    73,    76,    75,    71,    72,    66,    70,
  440.    127,   126,   128,   111,    98,    98,    98,    98,    98,    68,
  441.     67,    78,    77,    80,    79,    65,   125,   131,   135,     9,
  442.     98,    98,   132,    98,   130,   134,   133,
  443. };
  444.  
  445. static short yycheck[] = {
  446.    268,    43,    45,   300,   301,   302,   304,    40,   -13,   -17,
  447.     40,    40,    40,   -13,    40,    60,    40,    40,    40,    40,
  448.     91,    40,    40,    40,   -18,    -5,   -12,    44,   295,   296,
  449.     60,    62,   -17,    63,    43,    45,    42,    47,    37,    94,
  450.    288,    -5,    -5,   -13,    40,   -13,   -13,   -13,    60,   -13,
  451.    -13,   -13,    40,   -13,    -6,    -5,   -12,   -13,   -13,   -13,
  452.    -13,   -17,   -17,   280,   -12,    -6,    -6,    -5,    -5,   -13,
  453.     44,    44,    44,    44,    44,    44,    44,   266,   267,   275,
  454.    279,   -13,    -6,    58,   -13,   -13,   -13,   -13,   -13,   -13,
  455.    -13,   -13,    -5,    40,    40,    40,   -13,   -13,    -5,    -5,
  456.    -17,    44,    44,    44,    44,    44,    44,   -27,   -27,   -12,
  457.    -12,   -13,    91,    -6,    -5,    -5,    -5,    -5,    -5,   -13,
  458.    -13,   -13,   -13,   -13,   -13,   -13,    59,   -13,    -5,    59,
  459.     40,    -5,    -6,    59,    -1,    -2,    -3,   257,   258,   263,
  460.    264,   269,   280,   282,   283,   284,   285,   286,   292,   293,
  461.    294,    -7,    -9,   -12,   -18,   -19,   -18,   286,   -17,   -17,
  462.    -17,   -14,   -15,   -16,    -2,   274,   112,   -11,   -19,   259,
  463.    259,   -11,   -11,   -13,    -5,    -5,   -17,   -17,   -17,   -17,
  464.    -17,    44,   -10,   270,   272,   273,   287,   -24,   -12,   292,
  465.    259,   -13,   -11,   -11,    -5,   292,    -2,    -5,   -26,   -23,
  466.    259,   -13,   272,    -5,    -5,    -5,   -12,   -23,   -26,   -12,
  467.    -26,    -5,    -5,    -5, 32767,   260,   261,   262,    59,   -20,
  468.    259,   291,   298,   303,   123,    -4,    -8,   -14,   -15,   -16,
  469.    123,   123,   -11,   -12,   -18,   -18,   261,   123,   289,   290,
  470.    301,   302,    41,    44,    44,   261,   262,   -21,    41,    41,
  471.     41,    41,   259,   292,    41,    41,    41,   -11,    41,    93,
  472.    260,   276,   277,   278,   281,   123,   125,    59,   -23,   -25,
  473.    -12,   -18,   125,   125,    41,   260,   261,   262,    59,   -22,
  474.    125,    41,    41,    41,    41,    41,    41,    41,    41,    41,
  475.    265,    62,   124,   -24,   123,    41,    41,    41,   125,    41,
  476.     41,    41,    41,    41,    41,    41,    93,   -23,   -23,   125,
  477.    271,    41,    41,    41,   -23,   -23,   -23,
  478.     62,
  479. };
  480.  
  481. static short yyrederr[] = {
  482.      0,
  483. };
  484.  
  485. static short yygbase[] = {
  486.  32767, 32767,  -173, 32767, 32767,   352,    86, 32767, 32767, 32767,
  487.  32767,     6,   238,     0,    90,    89,    56,   256,   109,    45,
  488.  32767, 32767, 32767,  -170,   -41, 32767,   -13,  -154,
  489. };
  490.  
  491. static short yydefgoto[] = {
  492.      0,   134,   135,   136,   225,    25,    54,   151,   226,   152,
  493.    182,   167,    26,    81,   227,   228,   229,     9,   154,   155,
  494.    219,   247,   279,   268,   187,   269,   198,   107,
  495. };
  496.  
  497. static char yyleft[] = {
  498.      0,     1,     4,     7,     7,     3,     3,     8,     8,     8,
  499.      8,     8,     8,    10,     9,     9,    12,    12,    12,    12,
  500.     16,    16,    16,    16,    15,    15,    15,    15,    14,    14,
  501.     14,    14,    13,    13,    13,    17,    17,    17,    17,    17,
  502.     17,    17,    17,    17,    17,    17,    17,    17,    17,    17,
  503.     17,    17,    17,    17,    17,    17,    17,    17,    17,    17,
  504.     17,    17,    17,    17,    17,    17,    17,    17,    17,    17,
  505.     17,    17,    17,    17,    17,    17,    17,    17,    17,    17,
  506.     17,    18,    18,    18,    18,    11,    11,    11,    19,    19,
  507.     19,     2,     2,    20,    20,    20,    20,     5,     5,    21,
  508.     21,    22,    22,    22,    22,     6,     6,    23,    23,    23,
  509.     23,    26,    26,    24,    24,    24,    24,    24,    24,    24,
  510.     24,    24,    24,    24,    24,    24,    27,    27,    27,    25,
  511.     25,    25,    25,    25,    25,    25,    25,
  512. };
  513.  
  514. static char yylen[] = {
  515.      1,     2,     6,     5,     2,     3,     0,     1,     5,    10,
  516.      4,     1,     1,     1,     1,     3,     1,     1,     1,     1,
  517.      3,     4,     4,     2,     3,     3,     3,     3,     3,     3,
  518.      1,     3,     1,     2,     3,     1,     1,     1,     3,     3,
  519.      3,     3,     3,     3,     3,     5,     2,     2,     2,     2,
  520.      2,     2,     3,     1,     2,     3,     4,     3,     4,     1,
  521.      3,     4,     4,     4,     2,     8,     6,     8,     8,     6,
  522.      6,     6,     6,     6,     6,     6,     6,     8,     8,     8,
  523.      8,     1,     4,     1,     2,     1,     1,     0,     4,     4,
  524.      3,     2,     0,     1,     1,     1,     1,     2,     0,     1,
  525.      1,     2,     2,     2,     2,     2,     0,     3,     2,     2,
  526.      1,     1,     0,     1,     4,     2,     4,     2,     1,     1,
  527.      1,     2,     1,     1,     2,     5,     1,     1,     1,     6,
  528.      9,     6,     7,    10,     9,     6,     5,
  529. };
  530.  
  531. #line 64 "c:/home/bin/kmyacc.par"
  532.  
  533.  
  534.  
  535. #if !YYDEBUG
  536.  
  537. #define YYTRACE_DCL
  538. #define YYTRACE_NEWSTATE()
  539. #define YYTRACE_READ()
  540. #define YYTRACE_SHIFT(tok)
  541. #define YYTRACE_ACCEPT()
  542. #define YYTRACE_REDUCE()
  543. #define YYTRACE_POP()
  544. #define YYTRACE_DISCARD()
  545.  
  546. #endif /* !YYDEBUG */
  547.  
  548.  
  549. #if YYDEBUG
  550.  
  551. #ifndef EOF
  552. #include <stdio.h>
  553. #endif
  554.  
  555. #ifndef YYTRACEF
  556. #define YYTRACEF stderr
  557. #endif /* !YYTRACEF */
  558.  
  559. static char *yytokname(n)
  560.     int n;
  561. {
  562.     static char buf[10];
  563.  
  564.     if (YYMINTOK <= n && n <= YYMAXTOK && yytnames[n - YYMINTOK])
  565.     return yytnames[n - YYMINTOK];
  566.     switch (n) {
  567.     case 0:
  568.     return ("end-of-file");
  569.     case '\n':
  570.     return ("'\\n'");
  571.     case '\t':
  572.     return ("'\\t'");
  573.     default:
  574.     if (n < 0x20 || n > 0x7e) {
  575.         sprintf(buf, "<%d>", n);
  576.     } else {
  577.         buf[0] = '\'';
  578.         buf[1] = n;
  579.         buf[2] = '\'';
  580.         buf[3] = '\0';
  581.     }
  582.     return (buf);
  583.     }
  584. }
  585.  
  586.  
  587. #if YYDEBUG == 2
  588.  
  589. /* Traditional Debug Mode */
  590.  
  591. #define YYTRACE_DCL /* empty */
  592.  
  593. #define YYTRACE_NEWSTATE() \
  594.     if (yydebug) \
  595.     fprintf(YYTRACEF, "%%%% State %d, Lookahead %s\n", \
  596.         yyrstates[yystate], yychar < 0 ? "--none--" : yytokname(yychar))
  597.  
  598. #define YYTRACE_READ() \
  599.     if (yydebug) \
  600.     fprintf(YYTRACEF, "%%%% Reading %s\n", yytokname(yychar))
  601.  
  602. #define YYTRACE_SHIFT(tok) \
  603.     if (yydebug) \
  604.     fprintf(YYTRACEF, "%%%% Shift %s\n", yytokname(yychar))
  605.  
  606. #define YYTRACE_ACCEPT() \
  607.     if (yydebug) fprintf(YYTRACEF, "%%%% Accepted.\n")
  608.  
  609. #define YYTRACE_REDUCE() \
  610.     if (yydebug) { \
  611.     int sym; \
  612.     short *p; \
  613.     fprintf(YYTRACEF, "%%%% Reduce by (%d) %s :", \
  614.         yyn, yyntnames[yyleft[yyn]]); \
  615.     if (yyl == 0) \
  616.         fprintf(YYTRACEF, " /* empty */"); \
  617.     for (p = yyssp - yyl + 1; p <= yyssp; p++) { \
  618.         sym = yycheck[*p]; \
  619.         fprintf(YYTRACEF, " %s", sym >= 0 ? yytokname(sym) : yyntnames[-sym]); \
  620.     } \
  621.     fputc('\n', YYTRACEF); \
  622.     }
  623.  
  624. #define YYTRACE_POP() \
  625.     if (yydebug) \
  626.     fprintf(YYTRACEF, "%%%% Recovering, uncovers state %d\n", \
  627.         yyrstates[yystate])
  628.  
  629. #define YYTRACE_DISCARD() \
  630.     if (yydebug) fprintf(YYTRACEF, "%%%% Discard %s\n", yytokname(yychar))
  631.  
  632. #endif /* YYDEBUG == 2 */
  633.  
  634. #if YYDEBUG != 2
  635. /* Messy Debug Mode */
  636.  
  637. #ifndef YYMAXSTKSHOWN
  638. #define YYMAXSTKSHOWN 50
  639. #endif /* YYMAXSTKSHOWN */
  640.  
  641. static void yyshowstack(sstk, ssp, mark)
  642.     short *sstk;
  643.     short *ssp;
  644.     short *mark;
  645. {
  646.     short *p;
  647.     int sym, len;
  648.     int strlen();
  649.  
  650.     len = 1;
  651.     for (p = ssp; p >= sstk; --p) {
  652.     sym = yycheck[*p];
  653.     len += 1 + strlen(sym >= 0 ? yytokname(sym) : yyntnames[-sym]);
  654.     if (len > YYMAXSTKSHOWN)
  655.         break;
  656.     }
  657.     p++;
  658.     if (mark && p > mark) p = mark;
  659.     if (p != sstk) fprintf(YYTRACEF, "...");
  660.     for (; p <= ssp; p++) {
  661.     if (p == mark)
  662.         fputc('[', YYTRACEF);
  663.     else
  664.         fputc(' ', YYTRACEF);
  665.     sym = yycheck[*p];
  666.     fprintf(YYTRACEF, "%s", sym >= 0 ? yytokname(sym) : yyntnames[-sym]);
  667.     }
  668.     if (mark) {
  669.     if (p == mark)
  670.         fputc('[', YYTRACEF);
  671.     fputc(']', YYTRACEF);
  672.     } else
  673.     fputc(' ', YYTRACEF);
  674. }
  675.  
  676. #define YYTRACE_DCL /* empty */
  677.  
  678. #define YYTRACE_NEWSTATE() \
  679.     if (yydebug) { \
  680.     fprintf(YYTRACEF, "%%%%%3d:", yyrstates[yystate]); \
  681.     yyshowstack(yysstk + 1, yyssp, 0); \
  682.     if (yychar >= 0) \
  683.         fprintf(YYTRACEF, "  <<< %s", yytokname(yychar)); \
  684.     fprintf(YYTRACEF, "\n"); \
  685.     }
  686.  
  687. #define YYTRACE_READ() \
  688.     if (yydebug) \
  689.     fprintf(YYTRACEF, "%%%% Reading %s\n", yytokname(yychar))
  690.  
  691. #define YYTRACE_SHIFT(tok)
  692.  
  693. #define YYTRACE_ACCEPT() \
  694.     if (yydebug) fprintf(YYTRACEF, "%%%% Accepted.\n")
  695.  
  696. #define YYTRACE_REDUCE() \
  697.     if (yydebug) { \
  698.     fprintf(YYTRACEF, "%%%%%3d:", yyrstates[yystate]); \
  699.     yyshowstack(yysstk + 1, yyssp, yyssp - yyl + 1); \
  700.     fprintf(YYTRACEF, " --> %s, by (%d)\n", yyntnames[yyleft[yyn]], yyn); \
  701.     }
  702.  
  703. #define YYTRACE_POP() \
  704.     if (yydebug) { \
  705.     fprintf(YYTRACEF, "%%%%%3d:", yyrstates[yystate]); \
  706.     yyshowstack(yysstk + 1, yyssp, 0); \
  707.     fprintf(YYTRACEF, "  (Recovering)\n", yyrstates[yystate]); \
  708.     }
  709.  
  710. #define YYTRACE_DISCARD() \
  711.     if (yydebug) fprintf(YYTRACEF, "%%%% Discard %s\n", yytokname(yychar))
  712.  
  713. #endif /* YYDEBUG == 2 */
  714.  
  715. #endif /* YYDEBUG */
  716.  
  717.  
  718.  
  719. int yyparse()
  720. {
  721.     YYSTYPE yyastk[YYMAXDEPTH];
  722.     short yysstk[YYMAXDEPTH];
  723.     short *yyssp;
  724.     int yystate;
  725.     int yyn;
  726.     int yyl;
  727.     YYTRACE_DCL
  728.  
  729. #if YYACTFUN    
  730.     if ((yyn = setjmp(yyjmp)) != 0)
  731.     return (yyn - 1);
  732. #endif /* YYACTFUN */
  733.     yyssp = yysstk;
  734.     yyasp = yyastk - 1;
  735.     *yyssp = yystate = YYSTATE0;
  736.     yychar = -1;
  737.     yyerrflag = 0;
  738.     for (;;) {
  739.     YYTRACE_NEWSTATE();
  740.  
  741.     if (yystate >= YYLR1STATES)
  742.         goto yydeflt;
  743.  
  744.     if (yychar < 0) {
  745.         if ((yychar = yylex()) <= 0) yychar = 0;
  746.         YYTRACE_READ();
  747.     }
  748.  
  749.     if ((yyn = yybase[yystate] + yychar) >= 0 && yyn < YYLAST) {
  750.         if ((yyn = yynext[yyn]) < YYNSTATES) {
  751.         if (yycheck[yyn] == yychar)
  752.             goto yyshift;
  753.         } else if (yyn < YYNXR) {
  754.         if (yycheck[yyn] == yybase[yystate]) {
  755.             yyn = yyrederr[yyn - YYNSTATES];
  756.             goto yyaction;
  757.         }
  758.         } else if (yyn - YYPASS == yychar)
  759.         goto yydeflt;
  760.     }
  761.  
  762.     if (yystate >= YY2TABSTATES
  763.         || (yyn = yybase2[yystate] + yychar) < 0 || YYLAST <= yyn
  764.         || (yyn = yynext[yyn]) >= YYNSTATES || yycheck[yyn] != yychar)
  765.         goto yydeflt;
  766.  
  767.     yyshift:
  768.     YYTRACE_SHIFT(yychar);
  769.     if (yyssp >= yysstk + YYMAXDEPTH) {
  770.         yyerror("parser stack overflow");
  771.         return (2);
  772.     }
  773.     *++yyssp = yystate = yyn;
  774.     *++yyasp = yylval;
  775.     yychar = -1;
  776.     if (yyerrflag > 0)
  777.         yyerrflag--;
  778.     continue;
  779.  
  780.     yydeflt:
  781.     yyn = yydefault[yystate];
  782.  
  783.     yyaction:
  784.     /* reduce/error */
  785.     if (yyn == 0) {
  786.         /* accept */
  787.         YYTRACE_ACCEPT();
  788.         return (0);
  789.     } else if (yyn > 0) {
  790.         /* reduce */
  791.         yyl = yylen[yyn];
  792.         YYTRACE_REDUCE();
  793.         yyval = yyasp[1 - yyl]; /* default value */
  794. #if YYACTFUN
  795.         (*yya[yyn])();
  796. #endif /* YYACTFUN */
  797.  
  798. #if !YYACTFUN
  799.         switch (yyn) {
  800.         /* Following line will be replaced by actions */
  801. case 1:
  802. #line 60 "a2p.y"
  803. { root = oper4(OPROG,YYASP(1),begins,YYASP(0),ends); } break;
  804. case 2:
  805. #line 64 "a2p.y"
  806. { begins = oper4(OJUNK,begins,YYASP(3),YYASP(2),YYASP(0)); in_begin = FALSE;
  807.             yyval = Nullop; } break;
  808. case 3:
  809. #line 69 "a2p.y"
  810. { ends = oper3(OJUNK,ends,YYASP(2),YYASP(1)); yyval = Nullop; } break;
  811. case 4:
  812. #line 71 "a2p.y"
  813. { yyval = YYASP(1); } break;
  814. case 5:
  815. #line 75 "a2p.y"
  816. { yyval = oper3(OHUNKS,YYASP(2),YYASP(1),YYASP(0)); } break;
  817. case 6:
  818. #line 77 "a2p.y"
  819. { yyval = Nullop; } break;
  820. case 7:
  821. #line 81 "a2p.y"
  822. { yyval = oper1(OHUNK,YYASP(0)); need_entire = TRUE; } break;
  823. case 8:
  824. #line 83 "a2p.y"
  825. { yyval = oper2(OHUNK,YYASP(4),oper2(OJUNK,YYASP(2),YYASP(1))); } break;
  826. case 9:
  827. #line 85 "a2p.y"
  828. { fixfargs(YYASP(8),YYASP(6),0); yyval = oper5(OUSERDEF,YYASP(8),YYASP(6),YYASP(4),YYASP(2),YYASP(1)); } break;
  829. case 10:
  830. #line 87 "a2p.y"
  831. { yyval = oper2(OHUNK,Nullop,oper2(OJUNK,YYASP(2),YYASP(1))); } break;
  832. case 13:
  833. #line 93 "a2p.y"
  834. { yyval = rememberargs(yyval); } break;
  835. case 14:
  836. #line 97 "a2p.y"
  837. { yyval = oper1(OPAT,YYASP(0)); } break;
  838. case 15:
  839. #line 99 "a2p.y"
  840. { yyval = oper2(ORANGE,YYASP(2),YYASP(0)); } break;
  841. case 20:
  842. #line 110 "a2p.y"
  843. { yyval = oper1(OCPAREN,YYASP(1)); } break;
  844. case 21:
  845. #line 112 "a2p.y"
  846. { yyval = oper3(OCANDAND,YYASP(3),YYASP(1),YYASP(0)); } break;
  847. case 22:
  848. #line 114 "a2p.y"
  849. { yyval = oper3(OCOROR,YYASP(3),YYASP(1),YYASP(0)); } break;
  850. case 23:
  851. #line 116 "a2p.y"
  852. { yyval = oper1(OCNOT,YYASP(0)); } break;
  853. case 24:
  854. #line 120 "a2p.y"
  855. { yyval = oper3(ORELOP,YYASP(1),YYASP(2),YYASP(0)); } break;
  856. case 25:
  857. #line 122 "a2p.y"
  858. { yyval = oper3(ORELOP,string(">",1),YYASP(2),YYASP(0)); } break;
  859. case 26:
  860. #line 124 "a2p.y"
  861. { yyval = oper3(ORELOP,string("<",1),YYASP(2),YYASP(0)); } break;
  862. case 27:
  863. #line 126 "a2p.y"
  864. { yyval = oper1(ORPAREN,YYASP(1)); } break;
  865. case 28:
  866. #line 130 "a2p.y"
  867. { yyval = oper3(OMATCHOP,YYASP(1),YYASP(2),YYASP(0)); } break;
  868. case 29:
  869. #line 132 "a2p.y"
  870. { yyval = oper3(OMATCHOP,YYASP(1),YYASP(2),oper1(OREGEX,YYASP(0))); } break;
  871. case 30:
  872. #line 134 "a2p.y"
  873. { yyval = oper1(OREGEX,YYASP(0)); } break;
  874. case 31:
  875. #line 136 "a2p.y"
  876. { yyval = oper1(OMPAREN,YYASP(1)); } break;
  877. case 32:
  878. #line 140 "a2p.y"
  879. { yyval = YYASP(0); } break;
  880. case 33:
  881. #line 142 "a2p.y"
  882. { yyval = oper2(OCONCAT,YYASP(1),YYASP(0)); } break;
  883. case 34:
  884. #line 144 "a2p.y"
  885. { yyval = oper3(OASSIGN,YYASP(1),YYASP(2),YYASP(0));
  886.             if ((ops[YYASP(2)].ival & 255) == OFLD)
  887.                 lval_field = TRUE;
  888.             if ((ops[YYASP(2)].ival & 255) == OVFLD)
  889.                 lval_field = TRUE;
  890.         } break;
  891. case 35:
  892. #line 153 "a2p.y"
  893. { yyval = YYASP(0); } break;
  894. case 36:
  895. #line 155 "a2p.y"
  896. { yyval = oper1(ONUM,YYASP(0)); } break;
  897. case 37:
  898. #line 157 "a2p.y"
  899. { yyval = oper1(OSTR,YYASP(0)); } break;
  900. case 38:
  901. #line 159 "a2p.y"
  902. { yyval = oper2(OADD,YYASP(2),YYASP(0)); } break;
  903. case 39:
  904. #line 161 "a2p.y"
  905. { yyval = oper2(OSUBTRACT,YYASP(2),YYASP(0)); } break;
  906. case 40:
  907. #line 163 "a2p.y"
  908. { yyval = oper2(OMULT,YYASP(2),YYASP(0)); } break;
  909. case 41:
  910. #line 165 "a2p.y"
  911. { yyval = oper2(ODIV,YYASP(2),YYASP(0)); } break;
  912. case 42:
  913. #line 167 "a2p.y"
  914. { yyval = oper2(OMOD,YYASP(2),YYASP(0)); } break;
  915. case 43:
  916. #line 169 "a2p.y"
  917. { yyval = oper2(OPOW,YYASP(2),YYASP(0)); } break;
  918. case 44:
  919. #line 171 "a2p.y"
  920. { yyval = oper2(ODEFINED,aryrefarg(YYASP(0)),YYASP(2)); } break;
  921. case 45:
  922. #line 173 "a2p.y"
  923. { yyval = oper3(OCOND,YYASP(4),YYASP(2),YYASP(0)); } break;
  924. case 46:
  925. #line 175 "a2p.y"
  926. { yyval = oper1(OPOSTINCR,YYASP(1)); } break;
  927. case 47:
  928. #line 177 "a2p.y"
  929. { yyval = oper1(OPOSTDECR,YYASP(1)); } break;
  930. case 48:
  931. #line 179 "a2p.y"
  932. { yyval = oper1(OPREINCR,YYASP(0)); } break;
  933. case 49:
  934. #line 181 "a2p.y"
  935. { yyval = oper1(OPREDECR,YYASP(0)); } break;
  936. case 50:
  937. #line 183 "a2p.y"
  938. { yyval = oper1(OUMINUS,YYASP(0)); } break;
  939. case 51:
  940. #line 185 "a2p.y"
  941. { yyval = oper1(OUPLUS,YYASP(0)); } break;
  942. case 52:
  943. #line 187 "a2p.y"
  944. { yyval = oper1(OPAREN,YYASP(1)); } break;
  945. case 53:
  946. #line 189 "a2p.y"
  947. { yyval = oper0(OGETLINE); } break;
  948. case 54:
  949. #line 191 "a2p.y"
  950. { yyval = oper1(OGETLINE,YYASP(0)); } break;
  951. case 55:
  952. #line 193 "a2p.y"
  953. { yyval = oper3(OGETLINE,Nullop,string("<",1),YYASP(0));
  954.             if (ops[YYASP(0)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  955. case 56:
  956. #line 196 "a2p.y"
  957. { yyval = oper3(OGETLINE,YYASP(2),string("<",1),YYASP(0));
  958.             if (ops[YYASP(0)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  959. case 57:
  960. #line 199 "a2p.y"
  961. { yyval = oper3(OGETLINE,Nullop,string("|",1),YYASP(2));
  962.             if (ops[YYASP(2)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  963. case 58:
  964. #line 202 "a2p.y"
  965. { yyval = oper3(OGETLINE,YYASP(0),string("|",1),YYASP(3));
  966.             if (ops[YYASP(3)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  967. case 59:
  968. #line 205 "a2p.y"
  969. { yyval = oper0(YYASP(0)); need_entire = do_chop = TRUE; } break;
  970. case 60:
  971. #line 207 "a2p.y"
  972. { yyval = oper1(YYASP(2),Nullop); need_entire = do_chop = TRUE; } break;
  973. case 61:
  974. #line 209 "a2p.y"
  975. { yyval = oper1(YYASP(3),YYASP(1)); } break;
  976. case 62:
  977. #line 211 "a2p.y"
  978. { yyval = oper1(YYASP(3),YYASP(1)); } break;
  979. case 63:
  980. #line 213 "a2p.y"
  981. { yyval = oper2(OUSERFUN,YYASP(3),YYASP(1)); } break;
  982. case 64:
  983. #line 215 "a2p.y"
  984. { yyval = oper1(OSPRINTF,YYASP(0)); } break;
  985. case 65:
  986. #line 217 "a2p.y"
  987. { yyval = oper3(OSUBSTR,YYASP(5),YYASP(3),YYASP(1)); } break;
  988. case 66:
  989. #line 219 "a2p.y"
  990. { yyval = oper2(OSUBSTR,YYASP(3),YYASP(1)); } break;
  991. case 67:
  992. #line 221 "a2p.y"
  993. { yyval = oper3(OSPLIT,YYASP(5),aryrefarg(numary(YYASP(3))),YYASP(1)); } break;
  994. case 68:
  995. #line 223 "a2p.y"
  996. { yyval = oper3(OSPLIT,YYASP(5),aryrefarg(numary(YYASP(3))),oper1(OREGEX,YYASP(1)));} break;
  997. case 69:
  998. #line 225 "a2p.y"
  999. { yyval = oper2(OSPLIT,YYASP(3),aryrefarg(numary(YYASP(1)))); } break;
  1000. case 70:
  1001. #line 227 "a2p.y"
  1002. { yyval = oper2(OINDEX,YYASP(3),YYASP(1)); } break;
  1003. case 71:
  1004. #line 229 "a2p.y"
  1005. { yyval = oper2(OMATCH,YYASP(3),oper1(OREGEX,YYASP(1))); } break;
  1006. case 72:
  1007. #line 231 "a2p.y"
  1008. { yyval = oper2(OMATCH,YYASP(3),YYASP(1)); } break;
  1009. case 73:
  1010. #line 233 "a2p.y"
  1011. { yyval = oper2(OSUB,YYASP(3),YYASP(1)); } break;
  1012. case 74:
  1013. #line 235 "a2p.y"
  1014. { yyval = oper2(OSUB,oper1(OREGEX,YYASP(3)),YYASP(1)); } break;
  1015. case 75:
  1016. #line 237 "a2p.y"
  1017. { yyval = oper2(OGSUB,YYASP(3),YYASP(1)); } break;
  1018. case 76:
  1019. #line 239 "a2p.y"
  1020. { yyval = oper2(OGSUB,oper1(OREGEX,YYASP(3)),YYASP(1)); } break;
  1021. case 77:
  1022. #line 241 "a2p.y"
  1023. { yyval = oper3(OSUB,YYASP(5),YYASP(3),YYASP(1)); } break;
  1024. case 78:
  1025. #line 243 "a2p.y"
  1026. { yyval = oper3(OSUB,oper1(OREGEX,YYASP(5)),YYASP(3),YYASP(1)); } break;
  1027. case 79:
  1028. #line 245 "a2p.y"
  1029. { yyval = oper3(OGSUB,YYASP(5),YYASP(3),YYASP(1)); } break;
  1030. case 80:
  1031. #line 247 "a2p.y"
  1032. { yyval = oper3(OGSUB,oper1(OREGEX,YYASP(5)),YYASP(3),YYASP(1)); } break;
  1033. case 81:
  1034. #line 251 "a2p.y"
  1035. { yyval = oper1(OVAR,YYASP(0)); } break;
  1036. case 82:
  1037. #line 253 "a2p.y"
  1038. { yyval = oper2(OVAR,aryrefarg(YYASP(3)),YYASP(1)); } break;
  1039. case 83:
  1040. #line 255 "a2p.y"
  1041. { yyval = oper1(OFLD,YYASP(0)); } break;
  1042. case 84:
  1043. #line 257 "a2p.y"
  1044. { yyval = oper1(OVFLD,YYASP(0)); } break;
  1045. case 87:
  1046. #line 264 "a2p.y"
  1047. { yyval = Nullop; } break;
  1048. case 88:
  1049. #line 268 "a2p.y"
  1050. { yyval = oper3(OCOMMA,YYASP(3),YYASP(1),YYASP(0)); } break;
  1051. case 89:
  1052. #line 270 "a2p.y"
  1053. { yyval = oper3(OCOMMA,YYASP(3),YYASP(1),YYASP(0)); } break;
  1054. case 90:
  1055. #line 272 "a2p.y"
  1056. { yyval = YYASP(1); } break;
  1057. case 91:
  1058. #line 276 "a2p.y"
  1059. { yyval = oper2(OJUNK,YYASP(1),YYASP(0)); } break;
  1060. case 92:
  1061. #line 278 "a2p.y"
  1062. { yyval = Nullop; } break;
  1063. case 93:
  1064. #line 282 "a2p.y"
  1065. { yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } break;
  1066. case 94:
  1067. #line 284 "a2p.y"
  1068. { yyval = oper2(OJUNK,oper0(OSEMICOLON),oper0(ONEWLINE)); } break;
  1069. case 95:
  1070. #line 286 "a2p.y"
  1071. { yyval = oper0(ONEWLINE); } break;
  1072. case 96:
  1073. #line 288 "a2p.y"
  1074. { yyval = oper1(OCOMMENT,YYASP(0)); } break;
  1075. case 97:
  1076. #line 292 "a2p.y"
  1077. { yyval = oper2(OJUNK,YYASP(1),YYASP(0)); } break;
  1078. case 98:
  1079. #line 294 "a2p.y"
  1080. { yyval = Nullop; } break;
  1081. case 99:
  1082. #line 298 "a2p.y"
  1083. { yyval = oper0(ONEWLINE); } break;
  1084. case 100:
  1085. #line 300 "a2p.y"
  1086. { yyval = oper1(OCOMMENT,YYASP(0)); } break;
  1087. case 101:
  1088. #line 305 "a2p.y"
  1089. { yyval = oper2(OJUNK,oper0(OSEMICOLON),YYASP(0)); } break;
  1090. case 102:
  1091. #line 307 "a2p.y"
  1092. { yyval = oper2(OJUNK,oper0(OSNEWLINE),YYASP(0)); } break;
  1093. case 103:
  1094. #line 309 "a2p.y"
  1095. { yyval = oper2(OJUNK,oper0(OSNEWLINE),YYASP(0)); } break;
  1096. case 104:
  1097. #line 311 "a2p.y"
  1098. { yyval = oper2(OJUNK,oper1(OSCOMMENT,YYASP(1)),YYASP(0)); } break;
  1099. case 105:
  1100. #line 315 "a2p.y"
  1101. { yyval = oper2(OSTATES,YYASP(1),YYASP(0)); } break;
  1102. case 106:
  1103. #line 317 "a2p.y"
  1104. { yyval = Nullop; } break;
  1105. case 107:
  1106. #line 322 "a2p.y"
  1107. { yyval = oper2(OJUNK,oper2(OSTATE,YYASP(2),YYASP(1)),YYASP(0)); } break;
  1108. case 108:
  1109. #line 324 "a2p.y"
  1110. { yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),YYASP(0))); } break;
  1111. case 109:
  1112. #line 326 "a2p.y"
  1113. { yyval = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),YYASP(0))); } break;
  1114. case 112:
  1115. #line 332 "a2p.y"
  1116. { yyval = Nullop; } break;
  1117. case 114:
  1118. #line 338 "a2p.y"
  1119. { yyval = oper3(OPRINT,YYASP(2),YYASP(1),YYASP(0));
  1120.             do_opens = TRUE;
  1121.             saw_ORS = saw_OFS = TRUE;
  1122.             if (!YYASP(2)) need_entire = TRUE;
  1123.             if (ops[YYASP(0)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  1124. case 115:
  1125. #line 344 "a2p.y"
  1126. { yyval = oper1(OPRINT,YYASP(0));
  1127.             if (!YYASP(0)) need_entire = TRUE;
  1128.             saw_ORS = saw_OFS = TRUE;
  1129.         } break;
  1130. case 116:
  1131. #line 349 "a2p.y"
  1132. { yyval = oper3(OPRINTF,YYASP(2),YYASP(1),YYASP(0));
  1133.             do_opens = TRUE;
  1134.             if (!YYASP(2)) need_entire = TRUE;
  1135.             if (ops[YYASP(0)].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } break;
  1136. case 117:
  1137. #line 354 "a2p.y"
  1138. { yyval = oper1(OPRINTF,YYASP(0));
  1139.             if (!YYASP(0)) need_entire = TRUE;
  1140.         } break;
  1141. case 118:
  1142. #line 358 "a2p.y"
  1143. { yyval = oper0(OBREAK); } break;
  1144. case 119:
  1145. #line 360 "a2p.y"
  1146. { yyval = oper0(ONEXT); } break;
  1147. case 120:
  1148. #line 362 "a2p.y"
  1149. { yyval = oper0(OEXIT); } break;
  1150. case 121:
  1151. #line 364 "a2p.y"
  1152. { yyval = oper1(OEXIT,YYASP(0)); } break;
  1153. case 122:
  1154. #line 366 "a2p.y"
  1155. { yyval = oper0(OCONTINUE); } break;
  1156. case 123:
  1157. #line 368 "a2p.y"
  1158. { yyval = oper0(ORETURN); } break;
  1159. case 124:
  1160. #line 370 "a2p.y"
  1161. { yyval = oper1(ORETURN,YYASP(0)); } break;
  1162. case 125:
  1163. #line 372 "a2p.y"
  1164. { yyval = oper2(ODELETE,aryrefarg(YYASP(3)),YYASP(1)); } break;
  1165. case 126:
  1166. #line 376 "a2p.y"
  1167. { yyval = oper1(OREDIR,string(">",1)); } break;
  1168. case 127:
  1169. #line 378 "a2p.y"
  1170. { yyval = oper1(OREDIR,string(">>",2)); } break;
  1171. case 128:
  1172. #line 380 "a2p.y"
  1173. { yyval = oper1(OREDIR,string("|",1)); } break;
  1174. case 129:
  1175. #line 385 "a2p.y"
  1176. { yyval = oper2(OIF,YYASP(3),bl(YYASP(0),YYASP(1))); } break;
  1177. case 130:
  1178. #line 387 "a2p.y"
  1179. { yyval = oper3(OIF,YYASP(6),bl(YYASP(3),YYASP(4)),bl(YYASP(0),YYASP(1))); } break;
  1180. case 131:
  1181. #line 389 "a2p.y"
  1182. { yyval = oper2(OWHILE,YYASP(3),bl(YYASP(0),YYASP(1))); } break;
  1183. case 132:
  1184. #line 391 "a2p.y"
  1185. { yyval = oper2(ODO,bl(YYASP(4),YYASP(5)),YYASP(1)); } break;
  1186. case 133:
  1187. #line 393 "a2p.y"
  1188. { yyval = oper4(OFOR,YYASP(7),YYASP(5),YYASP(3),bl(YYASP(0),YYASP(1))); } break;
  1189. case 134:
  1190. #line 395 "a2p.y"
  1191. { yyval = oper4(OFOR,YYASP(6),string("",0),YYASP(3),bl(YYASP(0),YYASP(1))); } break;
  1192. case 135:
  1193. #line 397 "a2p.y"
  1194. { yyval = oper2(OFORIN,YYASP(3),bl(YYASP(0),YYASP(1))); } break;
  1195. case 136:
  1196. #line 399 "a2p.y"
  1197. { yyval = oper3(OBLOCK,oper2(OJUNK,YYASP(3),YYASP(2)),Nullop,YYASP(0)); } break;
  1198. #line 333 "c:/home/bin/kmyacc.par"
  1199.  
  1200.         }
  1201. #endif /* !YYACTFUN */
  1202.         if (yyssp >= yysstk + YYMAXDEPTH) {
  1203.         yyerror("parser stack overflow");
  1204.         return (2);
  1205.         }
  1206.         yyasp -= yyl;
  1207.         yyssp -= yyl;
  1208.         yystate = yygbase[yyn = yyleft[yyn]] + *yyssp;
  1209.         if (yystate < 0 || YYLAST <= yystate
  1210.         || (yystate = yynext[yystate]) >= YYNSTATES
  1211.         || -yycheck[yystate] != yyn)
  1212.         yystate = yydefgoto[yyn];
  1213.         *++yyssp = yystate;
  1214.         *++yyasp = yyval;
  1215.     } else {
  1216.         /* error */
  1217.         switch (yyerrflag) {
  1218.         case 0:
  1219.         yyerrlab:
  1220.         yyerror("syntax error");
  1221.         case 1:
  1222.         case 2:
  1223.         yyerrflag = 3;
  1224.         for (;;) {
  1225.             yyn = yybase[yystate] + YYERRTOK;
  1226.             if (0 <= yyn && yyn < YYLAST) {
  1227.             if ((yyn = yynext[yyn]) < YYNSTATES
  1228.                 && yycheck[yyn] == YYERRTOK)
  1229.                 break;
  1230.             if (yyn - YYPASS == YYERRTOK)
  1231.                 goto yyskip;
  1232.             }
  1233.             if (yystate < YY2TABSTATES
  1234.             && (yyn = yybase2[yystate] + YYERRTOK) >= 0
  1235.             && yyn < YYLAST
  1236.             && (yyn = yynext[yyn]) < YYNSTATES
  1237.             && yycheck[yyn] == YYERRTOK)
  1238.             break;
  1239.         yyskip:
  1240.             if (yyssp <= yysstk)
  1241.             return (1);
  1242.             yystate = *--yyssp;
  1243.             yyasp--;
  1244.             YYTRACE_POP();
  1245.         }
  1246.         YYTRACE_SHIFT(YYERRTOK);
  1247.         *++yyssp = yystate = yyn;
  1248.         ++yyasp;
  1249.         break;
  1250.  
  1251.         case 3:
  1252.         YYTRACE_DISCARD();
  1253.         if (yychar == 0)
  1254.             return (1);
  1255.         yychar = -1;
  1256.         break;
  1257.         }
  1258.     }
  1259.     }
  1260. }
  1261.