home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / awk / awk320sr.zip / AWKYACC.C < prev    next >
C/C++ Source or Header  |  1991-04-28  |  39KB  |  1,347 lines

  1. /*
  2.  * Created by YACC from "awkyacc.y"
  3.  */
  4. /*
  5.  * Awk syntactical analyser and pseudo code generator
  6.  *
  7.  * Copyright (C) 1988, 1989, 1990, 1991 by Rob Duff
  8.  * All rights reserved
  9.  */
  10. #include <stddef.h>
  11. #include <alloc.h>
  12. #include <mem.h>
  13.  
  14. #include "awk.h"
  15. #include "awklex.h"
  16. #include "awkyacc.h"
  17. #define yyclearin yychar = -1
  18. #define yyerrok yyerrflag = 0
  19. #ifndef YYMAXDEPTH
  20. #define YYMAXDEPTH 150
  21. #endif
  22. YYSTYPE yylval;
  23. YYSTYPE yyval;
  24. #define YYERRCODE 256
  25.  
  26. int     yydone;
  27. int     yyl1, yyl2, yyl3;
  28. LIST    *yydisplay;
  29.  
  30. static int toploop(int);
  31. static int getloop(int);
  32. static int poplabel(void);
  33.  
  34. static void popstack(int);
  35. static void pushstack(int);
  36. static void pushlabel(int, int);
  37.  
  38. static void enroll(void*, void*);
  39.  
  40. static void *newfunction(void);
  41. static void *newelement(void*, void*);
  42.  
  43. IDENT *lookfor(ITEM *sp)
  44. {
  45.     IDENT *vp;
  46.  
  47.     for (vp = ident; vp != NULL; vp = vp->vnext)
  48.         if (vp->vitem == sp)
  49.             return vp;
  50.     return NULL;
  51. }
  52.  
  53. static void enroll(rule, action)
  54. void *rule;
  55. void *action;
  56. {
  57.     if (rulep == NULL) {
  58.         rulep = rule;
  59.         rules = rulep;
  60.     }
  61.     else {
  62.         rulep->next = rule;
  63.         rulep = rule;
  64.     }
  65.     rulep->next = NULL;
  66.     rulep->action = action;
  67. }
  68.  
  69. static void*
  70. newelement(next, item)
  71. void *next;
  72. void *item;
  73. {
  74.     LIST    *lp;
  75.  
  76.     lp = yyalloc(sizeof(LIST));
  77.     lp->litem = item;
  78.     lp->lnext = next;
  79.     return lp;
  80. }
  81.  
  82. static void*
  83. newfunction()
  84. {
  85.     int     size;
  86.     FUNC    *fp;
  87.     LIST    *lp;
  88.  
  89.     size = 0;
  90.     lp = yydisplay;
  91.     while (lp != NULL) {
  92.         size++;
  93.         lp = lp->lnext;
  94.     }
  95.     fp = yyalloc(sizeof(FUNC));
  96.     fp->psize = size;
  97.     fp->plist = yydisplay;
  98.     fp->pcode = NULL;
  99.     return fp;
  100. }
  101.  
  102. static void
  103. pushstack(kind)
  104. {
  105.     if (stackptr <= stackbot)
  106.         yyerror("Stack overflow");
  107.     stackptr--;
  108.     stackptr->sclass = kind;
  109.     stackptr->svalue.ival = 0;
  110.     if (kind == L_MARK || kind == L_DONE) {
  111.         stackptr->stype = yydone;
  112.         stackptr->svalue.sptr = stacktop;
  113.         stacktop = stackptr;
  114.         yydone = 0;
  115.     }
  116. }
  117.  
  118. static void popstack(kind)
  119. {
  120.     int     i, j, class;
  121.  
  122.     while (stackptr < stacktop) {
  123.         class = stackptr->sclass;
  124.         if ( class == L_FOR || class == L_WHILE) {
  125.             stackptr++;
  126.             i = poplabel();
  127.             j = poplabel();
  128.             genjump(C_JUMP, i);
  129.             genlabel(j);
  130.             putlabel(i);
  131.             putlabel(j);
  132.         }
  133.         else if (class == L_ELSE) {
  134.             i = poplabel();
  135.             genlabel(i);
  136.             putlabel(i);
  137.         }
  138.         else
  139.             yyerror("dangling label");
  140.         if (class == kind)
  141.             return;
  142.     }
  143.     if (kind == L_MARK || kind == L_DONE) {
  144.         yydone = stackptr->stype;
  145.         stacktop = stackptr->svalue.sptr;
  146.         stackptr++;
  147.     }
  148.     else
  149.         yyerror("syntax error");
  150. }
  151.  
  152. static int toploop(int class)
  153. {
  154.     ITEM    *sp;
  155.     int     label;
  156.  
  157.     sp = stackptr;
  158.     while (sp < stackbot + MAXSTACK)
  159.         if (sp->sclass == class) {
  160.             label = sp->svalue.ival;
  161. #ifdef LDEBUG
  162.     printlabel("top", label);
  163. #endif
  164.             return label;
  165.         }
  166.         else
  167.             sp++;
  168.     return(-1);
  169. }
  170.  
  171. static int getloop(class)
  172. {
  173.     while (stackptr < stacktop) {
  174.         if (stackptr->sclass == class)
  175.             return poplabel();
  176.         else
  177.             popstack(stackptr->sclass);
  178.     }
  179.     return(-1);
  180. }
  181.  
  182. static void
  183. pushlabel(class, label)
  184. {
  185. #ifdef LDEBUG
  186.     printlabel("pop", label);
  187. #endif
  188.     if (stackptr <= stackbot)
  189.         yyerror("Stack overflow");
  190.     stackptr--;
  191.     stackptr->sclass = class;
  192.     stackptr->svalue.ival = label;
  193. }
  194.  
  195. static int
  196. poplabel()
  197. {
  198.     int     label;
  199.  
  200.     label = stackptr->svalue.ival;
  201. #ifdef LDEBUG
  202.     printlabel("pop", label);
  203. #endif
  204.     stackptr++;
  205.     return label;
  206. }
  207.  
  208. short yyexca[] ={
  209. -1, 1,
  210.     0, -1,
  211.     -2, 0,
  212. -1, 69,
  213.     63, 126,
  214.     44, 126,
  215.     -2, 30,
  216.  
  217. };
  218. #define YYNPROD 195
  219. #define YYLAST 1104
  220. short yyact[]={
  221.  
  222.  114, 240, 199, 346, 141, 198, 194, 280,  89, 110,
  223.  248, 141,  89, 113, 251,  22,  65,  72,  89,  89,
  224.  244, 321, 245, 252, 211,  71, 144,  59, 210,  56,
  225.   58, 137,  46, 249, 272,  21, 142,  77, 245, 179,
  226.   51, 232,  48, 111, 165,  48, 193, 245,  44,  11,
  227.   48, 112,  70, 314, 107,   9, 101,  45,  56, 206,
  228.   12,  87, 136, 258,  44,  56, 104, 293, 133, 134,
  229.   23,  20, 102, 146, 354,  24,  10,  28, 102, 281,
  230.  136, 342, 301,   8,   2,  80, 341,  81,  56,  56,
  231.  372, 161,  63, 163, 164, 167, 168, 169, 170, 171,
  232.  161, 311, 365, 307,  56, 161,  56, 327, 271, 363,
  233.  150, 151, 152,  84, 227, 349, 180, 238,  82, 348,
  234.  347,  25, 103,  83, 189, 336, 317, 305, 185, 145,
  235.   56, 207, 105,  65,  17, 316,  62, 310, 135, 109,
  236.  212, 309, 213, 297, 148, 148,  56, 149,  85,  86,
  237.  304, 153, 154, 215, 216, 298, 282, 173, 155, 156,
  238.  157, 201, 201, 276, 229, 218,  77,  77,  77, 283,
  239.  217, 226,  56, 203,  56, 223, 138, 140,  56,  56,
  240.  174, 162, 236, 204, 235, 190, 205,  14, 241,  73,
  241.   44, 207,  65, 187,  15, 183, 108,  27,  99,  26,
  242.   62,  19,  98,  65,  97, 257,  96, 147, 147, 158,
  243.   95,  94,  93,  92,  91, 262,  90,  77,  66,  30,
  244.  265, 266, 261, 167, 256, 269, 270, 264, 228, 166,
  245.  181, 263,  47,  30, 234, 328, 214, 277, 340, 279,
  246.   30,  49, 273, 325,  49,  30,  30, 274,  88,  49,
  247.  242, 278, 324, 246, 286, 288, 141, 321, 259, 161,
  248.  290, 291, 100,  30,  89, 250,  30, 268, 143, 246,
  249.  260, 356,  13, 289,  30, 376, 366,   9, 246, 267,
  250.  371, 364,  58, 201, 201,  58, 315,  60,  65, 295,
  251.  295,  30,  30,  30,  30,  30, 323,  30,  46,  30,
  252.   30,  30,  30,  30, 320,  78,  30, 330,  44, 331,
  253.  292,  77,  79, 332,  46,  27, 302,  26, 326, 300,
  254.  339,  30, 296, 284, 285, 201, 335, 333, 344, 345,
  255.  343, 360,  75, 370,  76, 353, 188, 337, 318, 319,
  256.   78, 358, 186,  44, 195, 195, 352, 132, 350, 237,
  257.   27, 351,  26, 184, 241, 359, 334, 166, 275, 182,
  258.  201, 201, 233, 361, 313, 357, 338, 369, 231,  30,
  259.   30,  30, 362, 367,   7, 368,  57, 209, 208,  52,
  260.   53,  54, 375, 176, 373, 374,   1, 178, 294, 294,
  261.  377, 177, 201,   6, 106,  50, 192,  78, 355, 159,
  262.   44, 200,  18,  68, 132, 197, 239,  27, 196,  26,
  263.   67,   0,   0,   4,   5,   0,   0,   0,   0,   0,
  264.   30,  64,   0,   3,   0,   0,   0,  30,  30,  40,
  265.    0,   0,  38,  39,   0,  41,  42,  43,  37,  33,
  266.   46,  32,  31,  34,  35,  36,   0,  78,   0,   0,
  267.   44,   0,   0,   0,  79,   0,  29,  27,   0,  26,
  268.    0,   0,   0,   0,  30,  30, 195, 195,   0,   0,
  269.    0,   0,  30,  30,   0, 131,  16,   0,  78,   0,
  270.    0,  44,  30,  30,   0,  79,   0, 115,  27,   0,
  271.   26,  69,  19,   0,   0,   0,   0,   0,   0,   0,
  272.    0,   0,   0,  78,   0,   0,  44,   0, 195,   0,
  273.  132,   0, 160,  27,  30,  26,   0,  19,   0,   0,
  274.    0, 172,   0,  16,   0, 329, 175,   0,   0,  78,
  275.    0,  16,  44,   0,   0,   0, 132,  69,   0,  27,
  276.  253,  26,   0,  30,  30,   0,   0,  40,   0,   0,
  277.   38,  39,   0,  41,  42,  43,  37,  33,  46,  32,
  278.   31,  34,  35,  36,   0,   0,  14,   0,   0,  44,
  279.    0,  74,   0,  15,  29, 195,  27,   0,  26,   0,
  280.   19,   0,  40,   0,   0,  38,  39,   0,  41,  42,
  281.   43,  37,  33,  46,  32,  31,  34,  35,  36,   0,
  282.   78,   0,   0,  44,   0,   0,   0, 287,   0,  29,
  283.   27,   0,  26, 243,   0,   0,   0,   0,   0,   0,
  284.    0,   0,   0,   0, 255, 116,   0, 120, 118, 119,
  285.  117, 121, 122,   0, 123, 129, 130, 125, 126,  40,
  286.  124, 127,  38,  39, 128,  41,  42,  43,  37,  33,
  287.   46,  32,  31,  34,  35,  36,   0,  78,   0,   0,
  288.   44,   0,   0,   0,  79,   0,  29,  27,   0,  26,
  289.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  290.  299,   0,  44,   0,  16,  16,  79,   0,   0,  40,
  291.    0,   0,  38,  39,   0,  41,  42,  43,  37,  33,
  292.   46,  32,  31,  34,  35,  36,   0,  78,   0, 322,
  293.   44,   0, 254,   0, 202,   0,  29,  27,   0,  26,
  294.   40,   0,   0,  38,  39,   0,  41,  42,  43,  37,
  295.   33,  46,  32,  31,  34,  35,  36,   0,   0,  44,
  296.  303,   0,   0,  61,   0,  40,   0,  29,  38,  39,
  297.   19,  41,  42,  43,  37,  33,  46,  32,  31,  34,
  298.   35,  36,   0,   0,   0,   0,   0,   0,   0,   0,
  299.    0,  40,  29,   0,  38,  39,   0,  41,  42,  43,
  300.   37,  33,  46,  32,  31,  34,  35,  36,   0,  78,
  301.    0,   0,  44,   0,   0,   0, 191,   0,  29,  27,
  302.    0,  26,   0,   0,   0,   0,   0,   0,  40,   0,
  303.    0,  38,  39,   0,  41,  42,  43,  37,  33,  46,
  304.   32,  31,  34,  35,  36,   0,   0,   0,   0,   0,
  305.    0,   0, 139,   0,   0,  29,   0,   0,   0,   0,
  306.    0,  55,  40,   0,   0,  38,  39,   0,  41,  42,
  307.   43,  37,  33,  46,  32,  31,  34,  35,  36,   0,
  308.    0,   0,   0,   0,   0,   0,   0,   0,   0,  29,
  309.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  310.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  311.    0,   0,   0,   0,   0,   0,   0,   0,   0,  40,
  312.    0,   0,  38,  39,   0,  41,  42,  43,  37,  33,
  313.   46,  32,  31,  34,  35,  36,   0,   0,   0,   0,
  314.    0,  40,   0,   0,  38,  39,  29,  41,  42,  43,
  315.   37,  33,  46,  32,  31,  34,  35,  36,   0,   0,
  316.    0,   0,   0,   0,   0,   0,   0,   0,  29,  40,
  317.    0,   0,  38,  39,   0,  41,  42,  43,  37,  33,
  318.   46,  32,  31,  34,  35,  36,   0,   0,   0,   0,
  319.    0,   0,   0,   0,   0,   0,  29,   0,  40,   0,
  320.    0,  38,  39,   0,  41,  42,  43,  37,  33,  46,
  321.   32,  31,  34,  35,  36,   0,   0, 219, 220,   0,
  322.    0, 221, 222, 224, 225,  29,   0,   0,   0,   0,
  323.    0, 230,   0,   0,   0,   0,   0,   0,   0,   0,
  324.    0,   0,   0,   0,   0,   0, 247,   0,   0,   0,
  325.    0,  40,   0,   0,  38,  39, 247,  41,  42,  43,
  326.   37,  33,  46,  32,  31,  34,  35,  36,   0,   0,
  327.    0,   0,   0,   0,   0,   0,   0,   0,  29,   0,
  328.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  329.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  330.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  331.    0,   0,   0,   0,   0,   0,   0,   0,   0, 306,
  332.  308,   0,   0, 312
  333. };
  334. short yypact[]={
  335.  
  336.  154, -14,-1000,-245, -68, -68, -68,-1000,  44,-1000,
  337. -265,-269,-1000,-1000, 703, 533,-1000,-1000,-272,-1000,
  338. -109, 272,  42,  76,-1000,-1000, 646, 646, -33,  28,
  339. -294,-1000,-1000, 176, 174, 173, 172, 171, 170, 166,
  340.  164, 162, 158,  12, 646, -25,-1000, 154,-1000,-1000,
  341.  -69, 156,-1000,-1000,-1000, 533,-215, 364,-215,-215,
  342. -1000, 533,-1000, -10, 135, 136,-283,-1000, -27,-1000,
  343. -270,-254, 445, 445, 624, 624, 624,  42, 646, 496,
  344.  624, 624, 624, 624, 624,-1000,-1000, 646,-1000,-1000,
  345.  496, 140, 496, 496, 470, 496, 496, 496, 496, 496,
  346.   18,-1000, 646,-1000, 496,-1000,-1000,-1000,-247,-1000,
  347. -1000,-1000,  -9,-1000,-1000,-1000, 155,-1000,-215,-1000,
  348.  153,-1000,-1000, 496, 145, 756, 674, 143,-254,-1000,
  349.  496,-1000, 496,-1000,-1000, -13, 136,-1000,-273, 496,
  350. -1000, 496,-1000,-215,-215,-1000,-1000,-1000,-1000,-1000,
  351.  624, 624, 624,  76,  76,-1000,-1000,-1000,-1000, 129,
  352.   44,-1000,-1000, 124,  44,  44,-1000,-1000,  44,  44,
  353.  134,  44, 130,-1000,-1000,  21, 364, 123,  44,-1000,
  354. -1000,-221, 364, 496, 142,-1000,  77, 496,-1000,-1000,
  355.  496, 496, -24,  44,-1000,-284,-1000, -30,-282,-1000,
  356. -274, 414, 496, -15, 496, -28,-1000,-1000, 533, 533,
  357. -1000,-1000,-1000,-1000, 496,-1000,-1000,-1000,-1000, 496,
  358.  496,-254, 470,-1000, 496, 496,-1000,-1000, -17,-1000,
  359. -252,-1000,-215, 364, -14, 122, 496, 364, 496,-290,
  360.   20,-1000, 115, 128,-1000, 646, 646, 567, 567,-1000,
  361. -215,-215,-254, 445, 445, 102,-1000, 114, 496,-269,
  362. -1000,-254,  24, 496, 496, 109,  86,  62, 100,  96,
  363.   60,-1000,-1000,-1000,-1000, -72,-215,  94,-1000,  85,
  364. -254,-1000,-1000, -40,-1000,-1000,-1000, 496,-1000, 567,
  365. -1000,-1000,-1000,-1000,-1000, 624,-1000, -40,-1000,  14,
  366. -1000,-1000,-270,-1000,-1000,-1000, 496,-1000, 496,-1000,
  367. -1000,-1000, 496, 364,-1000,-1000,-215,-1000,  84, 307,
  368. -1000,-1000,  45,  23, 567, 567,-1000,-1000, 496, -38,
  369.   79,  78,  74,-1000, 364,-1000,-215,-1000,-1000,  15,
  370. -254,-276,-1000,-282,-1000,-1000,-1000,-1000,-1000,-1000,
  371. -1000, 364,-1000, 496,-1000,-1000, 567,-1000, 364,  68,
  372.   61,-1000,-1000,-215,-1000,-215, 496,-1000,-1000,  49,
  373.  364, 364,-215,-1000,-1000,-1000, 364,-1000
  374. };
  375. short yypgo[]={
  376.  
  377.    0,  60,  76,  49,   0,   6, 410, 408, 405, 403,
  378.   52,   5, 475,   2, 402, 401,  73,  71,  67,  35,
  379.   15,  70,  75, 121,  77, 399,  59, 396, 421,  46,
  380.  272, 134, 395, 394, 374, 393,  83, 391, 387, 386,
  381.  230,  84, 832, 383,  51,   9, 378, 377, 376, 368,
  382.   13, 364, 362, 359, 358, 356, 353, 351, 349, 342,
  383.  218,  57, 341,   1, 339, 337, 336,  20, 335, 333,
  384.  331, 281, 280, 276, 275,  56, 273, 271, 252, 243,
  385.  238, 236, 235, 231, 227, 222,  44
  386. };
  387. short yyr1[]={
  388.  
  389.        0,  39,  39,  41,  41,  41,  41,  41,  41,  41,
  390.       32,  37,  37,  38,  38,  43,  33,  35,  35,  36,
  391.        2,  46,   2,   3,  47,   3,   1,   1,   1,   1,
  392.        1,  30,  48,  34,  44,  44,  51,  49,  52,  49,
  393.       50,  53,  54,  50,  55,  50,  56,  57,  50,  58,
  394.       50,  59,  50,  62,  50,  64,  50,  50,  50,  50,
  395.       50,  50,  50,  50,  50,  50,  50,  50,  50,  50,
  396.       26,  26,  68,  69,  65,  70,  65,  72,  71,  73,
  397.       74,  71,  63,  63,  27,  27,  66,  66,  67,  67,
  398.       67,  75,  75,  31,   5,   5,   7,  76,  77,   7,
  399.        8,  78,   8,  11,  79,  11,  80,  13,  13,  13,
  400.       15,  15,  15,  18,  18,  29,  29,   4,   4,   6,
  401.       81,  82,   6,   9,  83,   9,  10,  84,  10,  85,
  402.       12,  12,  12,  14,  14,  14,  17,  17,  17,  17,
  403.       19,  19,  20,  20,  20,  21,  21,  21,  21,  22,
  404.       22,  22,  22,  23,  23,  24,  24,  24,  24,  24,
  405.       24,  24,  24,  24,  24,  24,  24,  24,  24,  24,
  406.       24,  24,  24,  24,  24,  24,  24,  24,  16,  16,
  407.       86,  86,  28,  28,  25,  25,  60,  60,  60,  61,
  408.       42,  40,  40,  45,  45
  409. };
  410. short yyr2[]={
  411.  
  412.        0,   3,   1,   3,   2,   2,   2,   1,   1,   0,
  413.        4,   1,   0,   3,   1,   0,   4,   3,   1,   1,
  414.        1,   0,   5,   1,   0,   5,   1,   2,   3,   4,
  415.        1,   1,   0,   4,   3,   1,   0,   4,   0,   2,
  416.        1,   0,   0,   5,   0,   7,   0,   0,   8,   0,
  417.        4,   0,   5,   0,   9,   0,   6,   1,   1,   2,
  418.        4,   5,   3,   5,   3,   4,   5,   1,   2,   0,
  419.        1,   0,   0,   0,   7,   0,   4,   0,   4,   0,
  420.        0,   6,   1,   0,   1,   0,   1,   0,   2,   2,
  421.        0,   2,   0,   1,   3,   1,   1,   0,   0,   7,
  422.        1,   0,   5,   1,   0,   5,   0,   6,   3,   1,
  423.        1,   3,   3,   1,   1,   3,   1,   3,   1,   1,
  424.        0,   0,   7,   1,   0,   5,   1,   0,   5,   0,
  425.        6,   3,   1,   1,   3,   3,   1,   3,   3,   3,
  426.        1,   2,   1,   3,   3,   1,   3,   3,   3,   1,
  427.        2,   2,   2,   1,   3,   2,   2,   1,   3,   1,
  428.        1,   4,   3,   4,   6,   6,   8,   8,   6,   8,
  429.        6,   4,   6,   6,   8,   4,   3,   2,   1,   1,
  430.        1,   1,   3,   1,   1,   0,   2,   4,   1,   1,
  431.        2,   1,   1,   1,   0
  432. };
  433. short yychk[]={
  434.  
  435.     -1000, -39, -41, 269, 259, 260, -35, -34, -36, 123,
  436.       -2,  -3,  -1, -30,  33,  40, -12, -31, -14,  47,
  437.      -17, -19, -20, -21, -22, -23,  45,  43, -24, 302,
  438.      -60, 288, 287, 285, 289, 290, 291, 284, 278, 279,
  439.      275, 281, 282, 283,  36, -61, 286, -40,  59, 258,
  440.      -32, 285, -34, -34, -34, -42,  44, -48, 295, 296,
  441.      -30,  40, -23,  -2, -28,  -4, -60,  -6,  -9, -12,
  442.      -10, 297, 126, 298, 299,  60,  62, -20,  33,  40,
  443.       43,  45,  42,  47,  37, -23, -23,  94, -60, 302,
  444.       40,  40,  40,  40,  40,  40,  40,  40,  40,  40,
  445.      -60, -75,  60, -24,  91, -41, -33, 123,  40, -36,
  446.      -45, 258, -44, -50,  -4, 123, 261, 266, 264, 265,
  447.      263, 267, 268, 270, 276, 273, 274, 277, 280, 271,
  448.      272, -12,  40, -45, -45,  -2,  -4,  41,  41, -42,
  449.       41, 294,  63, 295, 296, -61, -16, -31, -17, -16,
  450.      -19, -19, -19, -21, -21, -22, -22, -22, -23, -25,
  451.      -28,  -4,  41,  -4,  -4, -86, -31,  -4,  -4,  -4,
  452.       -4,  -4, -28, -75, -24, -28, -43, -37, -38, 286,
  453.      125, -40, -53,  40, -56, -45, -59,  40, -66,  -4,
  454.       40,  40, -27, -29,  -5, -60,  -7,  -8, -11, -13,
  455.      -15, -19,  40, -29,  40, -61, -26,  -4, -46, -47,
  456.       41, 297,  -4,  -4, -81, -45, -45,  41,  41, -42,
  457.      -42, -42, -42,  41, -42, -42,  41,  93, -44,  41,
  458.      -42, -49, 262, -52, -44,  -4,  40, -58,  40, -60,
  459.      -63,  -4, -26, -28, -67,  62, 293, -42, 294,  63,
  460.      295, 296, 297, 126, 298, -28, -67,  -4,  91,  -3,
  461.       -1, -85,  -4, -83, -84,  -4,  -4, -61, -86,  -4,
  462.       -4, 125, 286, -45, -50, -54,  41,  -4, -50,  -4,
  463.      297,  59,  41,  41, -24, -24,  -5,  40,  -5, -76,
  464.      -45, -45, -61, -18, -31, -19, -18,  41,  41, -28,
  465.      -61,  58, -10, -12,  41,  41, -42,  41, -42,  41,
  466.       41,  41, -42, -51, 125, -45,  41,  41, -61, -64,
  467.      -67, 297, -28,  -5, -78, -79, -67,  93, -82, -60,
  468.       -4,  -4,  -4, -50, -55, -45,  41, -65,  59,  -4,
  469.      -80,  41,  58, -11, -13,  -4,  41,  41,  41,  41,
  470.      -50, -57, -45, -68,  59, -61, -77, -50, -62, -63,
  471.      -70,  -5, -50,  41, -71,  41, -73, -45, -45,  -4,
  472.      -69, -72,  41, -50, -50, -45, -74, -50
  473. };
  474. short yydef[]={
  475.  
  476.        9,  -2,   2,   0,   0,   0,   7,   8,  18,  32,
  477.       19,  20,  23,  26,   0,   0,  30,  31, 132,  93,
  478.      133, 136, 140, 142, 145, 149,   0,   0, 153,   0,
  479.      157, 159, 160,   0,   0,   0,   0,   0,   0,   0,
  480.        0,   0,   0,  92,   0, 188, 189,   9, 191, 192,
  481.        0,   0,   4,   5,   6,   0, 194,  69, 194, 194,
  482.       27,   0, 150,   0,   0, 183, 157, 118, 119,  -2,
  483.      123,   0,   0,   0,   0,   0,   0, 141,   0,   0,
  484.        0,   0,   0,   0,   0, 151, 152,   0, 155, 156,
  485.      185,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  486.       92, 177,   0, 186,   0,   1,   3,  15,  12,  17,
  487.      190, 193,   0,  35,  40,  41,   0,  46, 194,  51,
  488.        0,  57,  58,  87,   0,  85,   0,   0,   0,  67,
  489.       71, 126,   0,  21,  24,   0,   0,  28,   0,   0,
  490.      158,   0, 120, 194, 194, 131, 134, 178, 179, 135,
  491.      137, 138, 139, 143, 144, 146, 147, 148, 154,   0,
  492.      184, 183, 162,   0,   0,   0, 180, 181,   0,   0,
  493.        0,   0,   0, 176,  91,   0,  69,   0,  11,  14,
  494.       33,  38,  69,   0,   0,  49,   0,  83,  59,  86,
  495.       71,   0,  90,  84, 116, 157,  95,  96, 100, 103,
  496.      109, 110,   0,  90,   0,   0,  68,  70,   0,   0,
  497.       29, 129, 182, 117,   0, 124, 127, 161, 163,   0,
  498.        0,   0,   0, 171,   0,   0, 175, 187,   0,  10,
  499.        0,  34, 194,  69,  42,   0,   0,  69,   0, 157,
  500.        0,  82,   0,   0,  62,   0,   0,   0,   0,  97,
  501.      194, 194,   0,   0,   0,   0,  64,   0,   0,  22,
  502.       25,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  503.        0,  16,  13,  36,  39,   0, 194,   0,  50,   0,
  504.        0,  55,  60,  90,  88,  89, 115,   0,  94,   0,
  505.      101, 104, 108, 111, 113, 114, 112,  90,  65,   0,
  506.      130, 121, 125, 128, 164, 165,   0, 168,   0, 170,
  507.      172, 173,   0,  69,  43,  44, 194,  52,   0,   0,
  508.       61, 106,   0,   0,   0,   0,  63,  66,   0, 157,
  509.        0,   0,   0,  37,  69,  47, 194,  56,  72,   0,
  510.        0,   0,  98, 102, 105, 122, 166, 167, 169, 174,
  511.       45,  69,  53,  83,  75, 107,   0,  48,  69,   0,
  512.       79,  99,  54, 194,  76, 194,   0,  73,  77,   0,
  513.       69,  69, 194,  74,  78,  80,  69,  81
  514. };
  515. /*
  516.  * yyparse.c --  parser for yacc output
  517.  */
  518.  
  519. #define YYFLAG -1000
  520. #define YYABORT return(1)
  521. #define YYACCEPT return(0)
  522. #define YYERROR goto yyerrlab
  523.  
  524. int     yychar = -1;    /* current input token number */
  525. int     yydebug = 0;    /* 1 for debugging */
  526. int     yynerrs = 0;    /* number of errors */
  527. short   yyerrflag = 0;  /* error recovery flag */
  528. short   yys[YYMAXDEPTH];/* where the stack is stored */
  529. YYSTYPE yyv[YYMAXDEPTH];/* where the values are stored */
  530.  
  531. #ifndef YYLOG
  532. #define YYLOG stderr
  533. #endif
  534.  
  535. yyparse()
  536. {
  537.     short   yyj;
  538.     short   yym;
  539.     short   *yyps;
  540.     short   *yyxi;
  541.     YYSTYPE *yypv;
  542.     YYSTYPE *yypvt;
  543.     short   yystate;
  544.     register short  yyn;
  545.  
  546.     extern int yylex(void);
  547.     extern void yyerror(char*);
  548.  
  549.     yystate = 0;
  550.     yychar = -1;
  551.     yynerrs = 0;
  552.     yyerrflag = 0;
  553.     yyps= &yys[-1];
  554.     yypv= &yyv[-1];
  555.  
  556. yystack:    /* put a state and value onto the stack */
  557. #ifdef YYDEBUG
  558.     if (yydebug)
  559.         fprintf(YYLOG, "state %d, char 0%o\n", yystate, yychar );
  560. #endif
  561.     if (++yyps> &yys[YYMAXDEPTH]) {
  562.         yyerror("yacc stack overflow");
  563.         goto yyabort;
  564.     }
  565.     *yyps = yystate;
  566.     ++yypv;
  567. #ifdef UNION
  568.     yyunion(yypv, &yyval);
  569. #else
  570.     *yypv = yyval;
  571. #endif
  572. yynewstate:
  573.     yyn = yypact[yystate];
  574.     if (yyn <= YYFLAG)
  575.         goto yydefault; /* simple state */
  576.     if (yychar < 0)
  577.         if ((yychar=yylex())<0)
  578.             yychar=0;
  579.     if ((yyn += yychar)<0 || yyn >= YYLAST)
  580.         goto yydefault;
  581.     if (yychk[yyn=yyact[yyn]] == yychar) {
  582.         yychar = -1;
  583. #ifdef UNION
  584.         yyunion(&yyval, &yylval);
  585. #else
  586.         yyval = yylval;
  587. #endif
  588.         yystate = yyn;
  589.         if (yyerrflag > 0)
  590.             --yyerrflag;
  591.         goto yystack;
  592.     }
  593. /* 
  594.  *default state action
  595.  */
  596. yydefault:
  597.     if ((yyn=yydef[yystate]) == -2) {
  598.         if (yychar<0) if ((yychar = yylex())<0) yychar = 0;
  599. /*
  600.  * look through exception table
  601.  */
  602.         for (yyxi=yyexca; (*yyxi != (-1)) || (yyxi[1] != yystate) ; yyxi += 2)
  603.             ;
  604.         for (yyxi += 2; *yyxi >= 0; yyxi += 2)
  605.             if (*yyxi == yychar)
  606.                 break;
  607.         if ((yyn = yyxi[1]) < 0)
  608.             return(0);   /* accept */
  609.     }
  610.     if (yyn == 0) {
  611. /* error ... attempt to resume parsing */
  612.         switch (yyerrflag) {
  613.         case 0:
  614.             yyerror("syntax error");
  615. yyerrlab:
  616.             ++yynerrs;
  617.         case 1:
  618.         case 2:
  619.             yyerrflag = 3;
  620.             while (yyps >= yys) {
  621.                 yyn = yypact[*yyps] + YYERRCODE;
  622.                 if (yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE) {
  623.                     yystate = yyact[yyn];
  624.                     goto yystack;
  625.                 }
  626.                 yyn = yypact[*yyps];
  627. #ifdef YYDEBUG
  628.                 if (yydebug)
  629.                     fprintf(YYLOG, "error recovery pops state %d, uncovers %d\n",
  630.                                 *yyps, yyps[-1]);
  631. #endif
  632.                 --yyps;
  633.                 --yypv;
  634.             }
  635. yyabort:
  636.             return(1);
  637.         case 3:
  638. #ifdef YYDEBUG
  639.             if (yydebug)
  640.                 fprintf(YYLOG, "error recovery discards char %d\n", yychar );
  641. #endif
  642.             if (yychar == 0)
  643.                 goto yyabort; /* don't discard EOF, quit */
  644.             yychar = -1;
  645.             goto yynewstate;   /* try again in the same state */
  646.         }
  647.     }
  648.  
  649.     /* reduction by production yyn */
  650.     yyps -= yyr2[yyn];
  651.     yypvt = yypv;
  652.     yypv -= yyr2[yyn];
  653. #ifdef UNION
  654.     yyunion(&yyval, &yypv[1]);
  655. #else
  656.     yyval = yypv[1];
  657. #endif
  658.     yym=yyn;
  659.     yyn = yyr1[yyn];
  660.     yyj = yypgo[yyn] + *yyps + 1;
  661.     if (yyj>=YYLAST || yychk[yystate = yyact[yyj]] != -yyn)
  662.         yystate = yyact[yypgo[yyn]];
  663.     switch(yym) {
  664.         
  665.     case 3:{
  666.         yydisplay = NULL;
  667.         yypvt[-1].uptr->pcode = yypvt[-0].vptr;
  668.     } break;
  669.     case 4:{
  670.         if (beginend == NULL)
  671.             beginact = beginend = genact(yypvt[-0].vptr);
  672.         else
  673.             beginend = beginend->cnext = genact(yypvt[-0].vptr);
  674.     } break;
  675.     case 5:{
  676.         if (endend == NULL)
  677.             endact = endend = genact(yypvt[-0].vptr);
  678.         else
  679.             endend = endend->cnext = genact(yypvt[-0].vptr);
  680.     } break;
  681.     case 6:{
  682.         enroll(yypvt[-1].vptr, yypvt[-0].vptr);
  683.     } break;
  684.     case 7:{
  685.         genfield(0);
  686.         lastop(C_PLUCK);
  687.         genfcon(0);
  688.         gencall(P_PRINT, 2);
  689.         genbyte(C_END);
  690.         enroll(yypvt[-0].vptr, gencode());
  691.     } break;
  692.     case 8:{
  693.         enroll(genrule(NULL, NULL), yypvt[-0].vptr);
  694.     } break;
  695.     case 10:{
  696.         yydisplay = yypvt[-1].vptr;
  697.         yyval.uptr = ((IDENT*)(yypvt[-3].vptr))->vfunc = newfunction();
  698.     } break;
  699.     case 11:{
  700.         yyval.vptr = yypvt[-0].vptr;
  701.     } break;
  702.     case 12:{
  703.         yyval.vptr = 0;
  704.     } break;
  705.     case 13:{
  706.         yyval.vptr = newelement(yypvt[-2].vptr, yypvt[-0].vptr);
  707.     } break;
  708.     case 14:{
  709.         yyval.vptr = newelement(NULL, yypvt[-0].vptr);
  710.     } break;
  711.     case 15:{
  712.         pushstack(L_MARK);
  713.     } break;
  714.     case 16:{
  715.         popstack(L_MARK);
  716.         if (stacktop != stackbot + MAXSTACK)
  717.             yyerror("body jump stack");
  718.         if (lastcode() != C_RETURN) {
  719.             genaddr(lookfor(nul));
  720.             genbyte(C_LOAD);
  721.             genbyte(C_RETURN);
  722.         }
  723.         genbyte(C_END);
  724.         yyval.vptr = gencode();
  725.     } break;
  726.     case 17:{
  727.         yyval.vptr = genrule(yypvt[-2].vptr, yypvt[-0].vptr);
  728.     } break;
  729.     case 18:{
  730.         yyval.vptr = genrule(yypvt[-0].vptr, NULL);
  731.     } break;
  732.     case 19:{
  733.         genbyte(C_END);
  734.         yyval.vptr = gencode();
  735.     } break;
  736.     case 21:{
  737.         yyl1 = getlabel();
  738.         pushlabel(L_NORMAL, yyl1);
  739.         genjump(C_OJMP, yyl1);
  740.     } break;
  741.     case 22:{
  742.         yyl1 = poplabel();
  743.         genlabel(yyl1);
  744.         putlabel(yyl1);
  745.         yyval.ival = S_LONG;
  746.     } break;
  747.     case 24:{
  748.         yyl1 = getlabel();
  749.         pushlabel(L_NORMAL, yyl1);
  750.         genjump(C_AJMP, yyl1);
  751.     } break;
  752.     case 25:{
  753.         yyl1 = poplabel();
  754.         genlabel(yyl1);
  755.         putlabel(yyl1);
  756.         yyval.ival = S_LONG;
  757.     } break;
  758.     case 27:{
  759.         genbyte(C_NOT);
  760.         yyval.ival = S_SHORT;
  761.     } break;
  762.     case 28:{
  763.         yyval.ival = yypvt[-1].ival;
  764.     } break;
  765.     case 29:{
  766.         genbyte(C_NOT);
  767.         yyval.ival = S_SHORT;
  768.     } break;
  769.     case 31:{
  770.         genfield(0);
  771.         lastop(C_PLUCK);
  772.         genbyte(C_SWAP);
  773.         genbyte(C_MAT);
  774.         yyval.ival = S_SHORT;
  775.     } break;
  776.     case 32:{
  777.         pushstack(L_MARK);
  778.     } break;
  779.     case 33:{
  780.         popstack(L_MARK);
  781.         if (stacktop != stackbot + MAXSTACK)
  782.             yyerror("action jump stack");
  783.         genbyte(C_END);
  784.         yyval.vptr = gencode();
  785.     } break;
  786.     case 36:{
  787.         yyl1 = toploop(L_ELSE);
  788.         if (yyl1 < 0)
  789.             yyerror("syntax error");
  790.         yyl1 = getloop(L_ELSE);
  791.         pushlabel(L_ELSE, yyl1);
  792.         yyl2 = getlabel();
  793.         genjump(C_JUMP, yyl2);
  794.         genlabel(yyl1);
  795.         uselabel(yyl1, yyl2);
  796.         putlabel(yyl2);
  797.     } break;
  798.     case 38:{
  799.         while (stackptr->sclass >= L_FOR)
  800.             popstack(stackptr->sclass);
  801.     } break;
  802.     case 40:{
  803.         gendrop();
  804.     } break;
  805.     case 41:{
  806.         pushstack(L_MARK);
  807.     } break;
  808.     case 42:{
  809.         popstack(L_MARK);
  810.     } break;
  811.     case 44:{
  812.         yyl1 = getlabel();
  813.         pushlabel(L_ELSE, yyl1);
  814.         genjump(C_FJMP, yyl1);
  815.     } break;
  816.     case 46:{
  817.         yyl1 = getlabel();
  818.         yyl2 = getlabel();
  819.         pushlabel(L_BREAK, yyl1);
  820.         pushlabel(L_CONTINUE, yyl2);
  821.         pushstack(L_WHILE);
  822.         genlabel(yyl2);
  823.     } break;
  824.     case 47:{
  825.         yyl1 = toploop(L_BREAK);
  826.         genjump(C_FJMP, yyl1);
  827.     } break;
  828.     case 49:{
  829.         yyl1 = getlabel();
  830.         yyl2 = getlabel();
  831.         yyl3 = getlabel();
  832.         pushlabel(L_NORMAL, yyl1);
  833.         pushlabel(L_BREAK, yyl2);
  834.         pushlabel(L_CONTINUE, yyl3);
  835.         pushstack(L_DONE);
  836.         genlabel(yyl1);
  837.         yydone = 1;
  838.     } break;
  839.     case 51:{
  840.         popstack(L_DONE);
  841.         yyl1 = toploop(L_CONTINUE);
  842.         genlabel(yyl1);
  843.         yydone = 0;
  844.     } break;
  845.     case 52:{
  846.         yyl1 = poplabel();
  847.         yyl2 = poplabel();
  848.         yyl3 = poplabel();
  849.         genjump(C_TJMP, yyl3);
  850.         genlabel(yyl2);
  851.         putlabel(yyl1);
  852.         putlabel(yyl2);
  853.         putlabel(yyl3);
  854.     } break;
  855.     case 53:{
  856.         yyl1 = getlabel();
  857.         yyl2 = getlabel();
  858.         pushlabel(L_BREAK, yyl1);
  859.         pushlabel(L_CONTINUE, yyl2);
  860.         pushstack(L_FOR);
  861.         genbyte(C_LOAD);
  862.         genlabel(yyl2);
  863.         genjump(C_IJMP, yyl1);
  864.     } break;
  865.     case 55:{
  866.         yyl1 = getlabel();
  867.         yyl2 = getlabel();
  868.         pushlabel(L_BREAK, yyl1);
  869.         pushlabel(L_CONTINUE, yyl2);
  870.         pushstack(L_FOR);
  871.         yyl1 = getlabel();
  872.         yyl2 = getlabel();
  873.         pushlabel(L_NORMAL, yyl1);
  874.         pushlabel(L_NORMAL, yyl2);
  875.         genlabel(yyl1);
  876.     } break;
  877.     case 57:{
  878.         yyl1 = toploop(L_BREAK);
  879.         if (yyl1 < 0) {
  880.             yyerror("invalid break");
  881.             YYERROR;
  882.         }
  883.         genjump(C_JUMP, yyl1);
  884.     } break;
  885.     case 58:{
  886.         yyl1 = toploop(L_CONTINUE);
  887.         if (yyl1 < 0) {
  888.             yyerror("invalid continue");
  889.             YYERROR;
  890.         }
  891.         genjump(C_JUMP, yyl1);
  892.     } break;
  893.     case 59:{
  894.         genbyte(C_RETURN);
  895.     } break;
  896.     case 60:{
  897.         gencall(P_SRAND, yypvt[-1].ival);
  898.     } break;
  899.     case 61:{
  900.         gencall(P_PRINT, yypvt[-2].ival+1);
  901.     } break;
  902.     case 62:{
  903.         gencall(P_PRINT, yypvt[-1].ival+1);
  904.     } break;
  905.     case 63:{
  906.         gencall(P_PRINTF, yypvt[-2].ival+1);
  907.     } break;
  908.     case 64:{
  909.         gencall(P_PRINTF, yypvt[-1].ival+1);
  910.     } break;
  911.     case 65:{
  912.         gencall(P_CLOSE, 1);
  913.     } break;
  914.     case 66:{
  915.         if (yypvt[-1].ival > 1)
  916.             gencall(P_JOIN, yypvt[-1].ival);
  917.         gencall(P_DELETE, 2);
  918.     } break;
  919.     case 67:{
  920.         gencall(P_NEXT, 0);
  921.     } break;
  922.     case 68:{
  923.         gencall(P_EXIT, yypvt[-0].ival);
  924.     } break;
  925.     case 70:{
  926.         yyval.ival = 1;
  927.     } break;
  928.     case 71:{
  929.         yyval.ival = 0;
  930.     } break;
  931.     case 72:{
  932.         yyl1 = toploop(L_NORMAL);
  933.         yyl2 = toploop(L_CONTINUE);
  934.         genjump(C_JUMP, yyl1);
  935.         genlabel(yyl2);
  936.     } break;
  937.     case 73:{
  938.         yyl1 = poplabel();
  939.         yyl2 = poplabel();
  940.         genlabel(yyl1);
  941.         putlabel(yyl1);
  942.         putlabel(yyl2);
  943.     } break;
  944.     case 75:{
  945.         yyl1 = toploop(L_BREAK);
  946.         genjump(C_FJMP, yyl1);
  947.     } break;
  948.     case 77:{
  949.         yyl1 = poplabel();
  950.         yyl2 = poplabel();
  951.         yyl3 = toploop(L_CONTINUE);
  952.         uselabel(yyl3, yyl2);
  953.         putlabel(yyl1);
  954.         putlabel(yyl2);
  955.     } break;
  956.     case 79:{
  957.         yyl1 = toploop(L_NORMAL);
  958.         yyl2 = toploop(L_CONTINUE);
  959.         genjump(C_JUMP, yyl1);
  960.         genlabel(yyl2);
  961.     } break;
  962.     case 80:{
  963.         yyl1 = poplabel();
  964.         yyl2 = poplabel();
  965.         gendrop();
  966.         genjump(C_JUMP, yyl2);
  967.         genlabel(yyl1);
  968.         putlabel(yyl1);
  969.         putlabel(yyl2);
  970.     } break;
  971.     case 82:{
  972.         gendrop();
  973.     } break;
  974.     case 84:{
  975.         yyval.ival = yypvt[-0].ival;
  976.     } break;
  977.     case 85:{
  978.         genfield(0);
  979.         lastop(C_PLUCK);
  980.         yyval.ival = 1;
  981.     } break;
  982.     case 87:{
  983.         genaddr(lookfor(nul));
  984.         genbyte(C_LOAD);
  985.     } break;
  986.     case 88:{
  987.         gencall(P_CREATE, 1);
  988.     } break;
  989.     case 89:{
  990.         gencall(P_APPEND, 1);
  991.     } break;
  992.     case 90:{
  993.         genfcon(0);
  994.     } break;
  995.     case 91:{
  996.         gencall(P_OPEN, 1);
  997.     } break;
  998.     case 92:{
  999.         genfcon(1);
  1000.     } break;
  1001.     case 93:{
  1002.         genrcon(regexp(1));
  1003.         yyval.ival = S_REGEXP;
  1004.     } break;
  1005.     case 94:{
  1006.         genstore(yypvt[-1].ival);
  1007.         yyval.ival = yypvt[-0].ival;
  1008.     } break;
  1009.     case 96:{
  1010.         if (yypvt[-0].ival == S_LONG)
  1011.             genbyte(C_IS);
  1012.         yyval.ival = S_SHORT;
  1013.     } break;
  1014.     case 97:{
  1015.         yyl1 = getlabel();
  1016.         yyl2 = getlabel();
  1017.         pushlabel(L_NORMAL, yyl1);
  1018.         pushlabel(L_NORMAL, yyl2);
  1019.         genjump(C_FJMP, yyl2);
  1020.     } break;
  1021.     case 98:{
  1022.         yyl1 = poplabel();
  1023.         yyl2 = toploop(L_NORMAL);
  1024.         genjump(C_JUMP, yyl2);
  1025.         genlabel(yyl1);
  1026.         putlabel(yyl1);
  1027.     } break;
  1028.     case 99:{
  1029.         yyl1 = poplabel();
  1030.         genlabel(yyl1);
  1031.         putlabel(yyl1);
  1032.         yyval.ival = S_NUMBER;
  1033.     } break;
  1034.     case 101:{
  1035.         yyl1 = getlabel();
  1036.         pushlabel(L_NORMAL, yyl1);
  1037.         genjump(C_OJMP, yyl1);
  1038.     } break;
  1039.     case 102:{
  1040.         yyl1 = poplabel();
  1041.         genlabel(yyl1);
  1042.         putlabel(yyl1);
  1043.         yyval.ival = S_LONG;
  1044.     } break;
  1045.     case 104:{
  1046.         yyl1 = getlabel();
  1047.         pushlabel(L_NORMAL, yyl1);
  1048.         genjump(C_AJMP, yyl1);
  1049.     } break;
  1050.     case 105:{
  1051.         yyl1 = poplabel();
  1052.         genlabel(yyl1);
  1053.         putlabel(yyl1);
  1054.         yyval.ival = S_LONG;
  1055.     } break;
  1056.     case 106:{
  1057.         if (yypvt[-2].ival > 1)
  1058.             gencall(P_JOIN, yypvt[-2].ival);
  1059.     } break;
  1060.     case 107:{
  1061.         genbyte(C_IN);
  1062.         yyval.ival = S_SHORT;
  1063.     } break;
  1064.     case 108:{
  1065.         genbyte(C_IN);
  1066.         yyval.ival = S_SHORT;
  1067.     } break;
  1068.     case 111:{
  1069.         genbyte(C_MAT);
  1070.         yyval.ival = S_SHORT;
  1071.     } break;
  1072.     case 112:{
  1073.         genbyte(C_MAT);
  1074.         genbyte(C_NOT);
  1075.         yyval.ival = S_SHORT;
  1076.     } break;
  1077.     case 115:{
  1078.         yyval.ival = yypvt[-2].ival + 1;
  1079.     } break;
  1080.     case 116:{
  1081.         yyval.ival = 1;
  1082.     } break;
  1083.     case 117:{
  1084.         genstore(yypvt[-1].ival);
  1085.         yyval.ival = yypvt[-0].ival;
  1086.     } break;
  1087.     case 119:{
  1088.         if (yypvt[-0].ival == S_LONG)
  1089.             genbyte(C_IS);
  1090.         yyval.ival = S_SHORT;
  1091.     } break;
  1092.     case 120:{
  1093.         yyl1 = getlabel();
  1094.         yyl2 = getlabel();
  1095.         pushlabel(L_NORMAL, yyl1);
  1096.         pushlabel(L_NORMAL, yyl2);
  1097.         genjump(C_FJMP, yyl2);
  1098.     } break;
  1099.     case 121:{
  1100.         yyl1 = poplabel();
  1101.         yyl2 = toploop(L_NORMAL);
  1102.         genjump(C_JUMP, yyl2);
  1103.         genlabel(yyl1);
  1104.         putlabel(yyl1);
  1105.     } break;
  1106.     case 122:{
  1107.         yyl1 = poplabel();
  1108.         genlabel(yyl1);
  1109.         putlabel(yyl1);
  1110.         yyval.ival = S_NUMBER;
  1111.     } break;
  1112.     case 124:{
  1113.         yyl1 = getlabel();
  1114.         pushlabel(L_NORMAL, yyl1);
  1115.         genjump(C_OJMP, yyl1);
  1116.     } break;
  1117.     case 125:{
  1118.         yyl1 = poplabel();
  1119.         genlabel(yyl1);
  1120.         putlabel(yyl1);
  1121.         yyval.ival = S_LONG;
  1122.     } break;
  1123.     case 127:{
  1124.         yyl1 = getlabel();
  1125.         pushlabel(L_NORMAL, yyl1);
  1126.         genjump(C_AJMP, yyl1);
  1127.     } break;
  1128.     case 128:{
  1129.         yyl1 = poplabel();
  1130.         genlabel(yyl1);
  1131.         putlabel(yyl1);
  1132.         yyval.ival = S_LONG;
  1133.     } break;
  1134.     case 129:{
  1135.         if (yypvt[-2].ival > 1)
  1136.             gencall(P_JOIN, yypvt[-2].ival);
  1137.     } break;
  1138.     case 130:{
  1139.         genbyte(C_IN);
  1140.         yyval.ival = S_SHORT;
  1141.     } break;
  1142.     case 131:{
  1143.         genbyte(C_IN);
  1144.         yyval.ival = S_SHORT;
  1145.     } break;
  1146.     case 134:{
  1147.         genbyte(C_MAT);
  1148.         yyval.ival = S_SHORT;
  1149.     } break;
  1150.     case 135:{
  1151.         genbyte(C_MAT);
  1152.         genbyte(C_NOT);
  1153.         yyval.ival = S_SHORT;
  1154.     } break;
  1155.     case 137:{
  1156.         genbyte(yypvt[-1].ival);
  1157.         yyval.ival = S_SHORT;
  1158.     } break;
  1159.     case 138:{
  1160.         genbyte(C_LT);
  1161.         yyval.ival = S_SHORT;
  1162.     } break;
  1163.     case 139:{
  1164.         genbyte(C_GT);
  1165.         yyval.ival = S_SHORT;
  1166.     } break;
  1167.     case 141:{
  1168.         genbyte(C_CAT);
  1169.         yyval.ival = S_STRING;
  1170.     } break;
  1171.     case 143:{
  1172.         genbyte(C_ADD);
  1173.         yyval.ival = S_DOUBLE;
  1174.     } break;
  1175.     case 144:{
  1176.         genbyte(C_SUB);
  1177.         yyval.ival = S_DOUBLE;
  1178.     } break;
  1179.     case 146:{
  1180.         genbyte(C_MUL);
  1181.         yyval.ival = S_DOUBLE;
  1182.     } break;
  1183.     case 147:{
  1184.         genbyte(C_DIV);
  1185.         yyval.ival = S_DOUBLE;
  1186.     } break;
  1187.     case 148:{
  1188.         genbyte(C_MOD);
  1189.         yyval.ival = S_DOUBLE;
  1190.     } break;
  1191.     case 150:{
  1192.         genbyte(C_NOT);
  1193.         yyval.ival = S_DOUBLE;
  1194.     } break;
  1195.     case 151:{
  1196.         genbyte(C_NEG);
  1197.         yyval.ival = S_DOUBLE;
  1198.     } break;
  1199.     case 152:{
  1200.         genbyte(C_NUM);
  1201.         yyval.ival = S_DOUBLE;
  1202.     } break;
  1203.     case 154:{
  1204.         genbyte(C_POW);
  1205.         yyval.ival = S_DOUBLE;
  1206.     } break;
  1207.     case 155:{
  1208.         gentwo(C__PRE, yypvt[-1].ival);
  1209.         yyval.ival = S_DOUBLE;
  1210.     } break;
  1211.     case 156:{
  1212.         gentwo(C__POST, yypvt[-0].ival);
  1213.         yyval.ival = S_DOUBLE;
  1214.     } break;
  1215.     case 157:{
  1216.         if (lastcode() == C_ADDR)
  1217.             lastop(C_FETCH);
  1218.         else if (lastcode() == C_FIELD)
  1219.             lastop(C_PLUCK);
  1220.         else
  1221.             genbyte(C_LOAD);
  1222.         yyval.ival = S_NUMBER;
  1223.     } break;
  1224.     case 158:{
  1225.         yyval.ival = S_NUMBER;
  1226.     } break;
  1227.     case 159:{
  1228.         gendcon(yypvt[-0].dval);
  1229.         yyval.ival = S_DOUBLE;
  1230.     } break;
  1231.     case 160:{
  1232.         genscon(yypvt[-0].sptr);
  1233.         yyval.ival = S_STRING;
  1234.     } break;
  1235.     case 161:{
  1236.         genuser(yypvt[-3].vptr, yypvt[-1].ival);
  1237.         yyval.ival = S_NUMBER;
  1238.     } break;
  1239.     case 162:{
  1240.         genbyte(yypvt[-2].ival);
  1241.         yyval.ival = S_NUMBER;
  1242.     } break;
  1243.     case 163:{
  1244.         genbyte(yypvt[-3].ival);
  1245.         yyval.ival = S_NUMBER;
  1246.     } break;
  1247.     case 164:{
  1248.         genbyte(yypvt[-5].ival);
  1249.         yyval.ival = S_NUMBER;
  1250.     } break;
  1251.     case 165:{
  1252.         genfield(0);
  1253.         genfield(0);
  1254.         lastop(C_PLUCK);
  1255.         gencall(yypvt[-5].ival, 4);
  1256.         yyval.ival = S_STRING;
  1257.     } break;
  1258.     case 166:{
  1259.         genbyte(C_DUP);
  1260.         genbyte(C_LOAD);
  1261.         gencall(yypvt[-7].ival, 4);
  1262.         yyval.ival = S_STRING;
  1263.     } break;
  1264.     case 167:{
  1265.         genaddr(lookfor(nul));
  1266.         genbyte(C_SWAP);
  1267.         gencall(yypvt[-7].ival, 4);
  1268.         yyval.ival = S_STRING;
  1269.     } break;
  1270.     case 168:{
  1271.         genaddr(lookfor(fs));
  1272.         genbyte(C_LOAD);
  1273.         gencall(P_SPLIT, 3);
  1274.         yyval.ival = S_DOUBLE;
  1275.     } break;
  1276.     case 169:{
  1277.         gencall(P_SPLIT, 3);
  1278.         yyval.ival = S_DOUBLE;
  1279.     } break;
  1280.     case 170:{
  1281.         gencall(P_MATCH, 2);
  1282.         yyval.ival = S_SHORT;
  1283.     } break;
  1284.     case 171:{
  1285.         genfield(0);
  1286.         lastop(C_PLUCK);
  1287.         genbyte(C_SWAP);
  1288.         gencall(P_INDEX, 2);
  1289.         yyval.ival = S_DOUBLE;
  1290.     } break;
  1291.     case 172:{
  1292.         gencall(P_INDEX, 2);
  1293.         yyval.ival = S_DOUBLE;
  1294.     } break;
  1295.     case 173:{
  1296.         gencall(P_SUBSTR, 2);
  1297.         yyval.ival = S_STRING;
  1298.     } break;
  1299.     case 174:{
  1300.         gencall(P_SUBSTR, 3);
  1301.         yyval.ival = S_STRING;
  1302.     } break;
  1303.     case 175:{
  1304.         gencall(P_SPRINTF, yypvt[-1].ival);
  1305.         yyval.ival = S_DOUBLE;
  1306.     } break;
  1307.     case 176:{
  1308.         gencall(P_GETLINE, 2);
  1309.         yyval.ival = S_DOUBLE;
  1310.     } break;
  1311.     case 177:{
  1312.         genfield(0);
  1313.         genbyte(C_SWAP);
  1314.         gencall(P_GETLINE, 2);
  1315.         yyval.ival = S_DOUBLE;
  1316.     } break;
  1317.     case 182:{
  1318.         yyval.ival = yypvt[-2].ival + 1;
  1319.     } break;
  1320.     case 183:{
  1321.         yyval.ival = 1;
  1322.     } break;
  1323.     case 184:{
  1324.         yyval.ival = yypvt[-0].ival;
  1325.     } break;
  1326.     case 185:{
  1327.         yyval.ival = 0;
  1328.     } break;
  1329.     case 186:{
  1330.         if (lastcode() == C_DCON)
  1331.             genfield(lastdcon());
  1332.         else
  1333.             genbyte(C_DOLAR);
  1334.     } break;
  1335.     case 187:{
  1336.         if (yypvt[-1].ival > 1)
  1337.             gencall(P_JOIN, yypvt[-1].ival);
  1338.         genbyte(C_SELECT);
  1339.     } break;
  1340.     case 189:{
  1341.         genaddr(yypvt[-0].vptr);
  1342.     } break;/* End of actions */
  1343.     }
  1344.     goto yystack;
  1345. }
  1346.  
  1347.