home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OS2-YACC.ZIP / SIMPL.C < prev    next >
C/C++ Source or Header  |  1989-10-02  |  7KB  |  270 lines

  1. /*
  2.  * Created by CSD YACC (IBM PC) from "simpl.Y" */
  3. # define ID 257
  4. # define END 258
  5. #define yyclearin yychar = -1
  6. #define yyerrok yyerrflag = 0
  7. #ifndef YYMAXDEPTH
  8. #define YYMAXDEPTH 150
  9. #endif
  10. #ifndef YYSTYPE
  11. #define YYSTYPE int
  12. #endif
  13. extern YYSTYPE yylval;  /*CSD & DECUS LEX */
  14. YYSTYPE yyval;          /*CSD & DECUS LEX */
  15. # define YYERRCODE 256
  16.  
  17. #line 82
  18.  
  19. short yyexca[] ={
  20. -1, 1,
  21.     0, -1,
  22.     -2, 0,
  23.     };
  24. # define YYNPROD 7
  25. # define YYLAST 218
  26. short yyact[]={
  27.  
  28.    4,   6,  11,   3,   6,   7,   2,   1,   0,   0,
  29.    0,  10,   8,   9,   0,   0,   0,   0,   0,   0,
  30.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  31.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  32.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  33.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  34.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  35.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  36.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  37.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  38.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  39.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  40.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  41.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  42.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  43.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  44.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  45.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  46.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  47.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  48.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  49.    0,   0,   0,   0,   0,   0,   0,   5 };
  50. short yypact[]={
  51.  
  52.  -40, -42, -37,-1000, -40,-1000, -40, -40, -39, -37,
  53. -1000,-1000 };
  54. short yypgo[]={
  55.  
  56.    0,   7,   6,   3 };
  57. short yyr1[]={
  58.  
  59.    0,   1,   1,   2,   2,   3,   3 };
  60. short yyr2[]={
  61.  
  62.    0,   3,   1,   3,   1,   3,   1 };
  63. short yychk[]={
  64.  
  65. -1000,  -1,  -2,  -3,  40, 257,  43,  42,  -1,  -2,
  66.   -3,  41 };
  67. short yydef[]={
  68.  
  69.    0,  -2,   2,   4,   0,   6,   0,   0,   0,   1,
  70.    3,   5 };
  71. /*
  72.   HEADER: CUG     nnn.nn;
  73.   TITLE:     YACC - Yet Another Compilier-Compilier
  74.   VERSION:     1.0 for IBM-PC
  75.   DATE:      JAN 28, 1985
  76.   DESCRIPTION:     LALR(1) Parser Generator. From UNIX
  77.   KEYWORDS:     Parser Generator Compilier-Compilier YACC
  78.   SYSTEM:     IBM-PC and Compatiables
  79.   FILENAME:      YYPARS.C
  80.   WARNINGS:     This program is not for the casual user. It will
  81.          be useful primarily to expert developers.
  82.   CRC:         N/A
  83.   SEE-ALSO:     LEX and PREP
  84.   AUTHORS:     Scott Guthery 11100 leafwood lane Austin, TX 78750
  85.   COMPILERS:     DESMET-C
  86.   REFERENCES:     UNIX Systems Manuals
  87. */
  88.  
  89. # define YYFLAG -1000
  90. # define YYERROR goto yyerrlab
  91. # define YYACCEPT return(0)
  92. # define YYABORT return(1)
  93.  
  94. /*      parser for yacc output  */
  95.  
  96. int yydebug = 0; /* 1 for debugging */
  97. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  98. int yychar = -1; /* current input token number */
  99. int yynerrs = 0;  /* number of errors */
  100. short yyerrflag = 0;  /* error recovery flag */
  101.  
  102. int yyparse( void )
  103.    {
  104.  
  105.    short yys[YYMAXDEPTH];
  106.    short yyj, yym;
  107.    register YYSTYPE *yypvt;
  108.    register short yystate, *yyps, yyn;
  109.    register YYSTYPE *yypv;
  110.    register short *yyxi;
  111.  
  112.    yystate = 0;
  113.    yychar = -1;
  114.    yynerrs = 0;
  115.    yyerrflag = 0;
  116.    yyps= &yys[-1];
  117.    yypv= &yyv[-1];
  118.  
  119. yystack:    /* put a state and value onto the stack */
  120.  
  121.    if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
  122.    if( ++yyps> &yys[YYMAXDEPTH] )
  123.       {
  124.       yyerror( "yacc stack overflow" );
  125.       return(1);
  126.       }
  127.    *yyps = yystate;
  128.    ++yypv;
  129. #ifdef UNION
  130.    yyunion(yypv, &yyval);
  131. #else
  132.    *yypv = yyval;
  133. #endif
  134. yynewstate:
  135.  
  136.    yyn = yypact[yystate];
  137.  
  138.    if( yyn<= YYFLAG ) goto yydefault; /* simple state */
  139.  
  140.    if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
  141.    if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
  142.  
  143.    if( yychk[ yyn=yyact[ yyn ] ] == yychar )
  144.       {
  145.       /* valid shift */
  146.       yychar = -1;
  147. #ifdef UNION
  148.       yyunion(&yyval, &yylval);
  149. #else
  150.       yyval = yylval;
  151. #endif
  152.       yystate = yyn;
  153.       if( yyerrflag > 0 ) --yyerrflag;
  154.       goto yystack;
  155.       }
  156. yydefault:
  157.    /* default state action */
  158.  
  159.    if( (yyn=yydef[yystate]) == -2 )
  160.       {
  161.       if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
  162.       /* look through exception table */
  163.  
  164.       for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
  165.  
  166.       for(yyxi+=2; *yyxi >= 0; yyxi+=2)
  167.          {
  168.          if( *yyxi == yychar ) break;
  169.          }
  170.       if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  171.       }
  172.  
  173.    if( yyn == 0 )
  174.       {
  175.       /* error */
  176.       /* error ... attempt to resume parsing */
  177.  
  178.       switch( yyerrflag )
  179.          {
  180.  
  181.       case 0:   /* brand new error */
  182.  
  183.          yyerror( "syntax error" );
  184. yyerrlab:
  185.          ++yynerrs;
  186.  
  187.       case 1:
  188.       case 2: /* incompletely recovered error ... try again */
  189.  
  190.          yyerrflag = 3;
  191.  
  192.          /* find a state where "error" is a legal shift action */
  193.  
  194.          while ( yyps >= yys )
  195.             {
  196.             yyn = yypact[*yyps] + YYERRCODE;
  197.             if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE )
  198.                {
  199.                yystate = yyact[yyn];  /* simulate a shift of "error" */
  200.                goto yystack;
  201.                }
  202.             yyn = yypact[*yyps];
  203.  
  204.             /* the current yyps has no shift onn "error", pop stack */
  205.  
  206.             if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  207.             --yyps;
  208.             --yypv;
  209.             }
  210.  
  211.          /* there is no state on the stack with an error shift ... abort */
  212.  
  213. yyabort:
  214.          return(1);
  215.  
  216.  
  217.       case 3:  /* no shift yet; clobber input char */
  218.  
  219.          if( yydebug ) printf( "error recovery discards char %d\n", yychar );
  220.  
  221.          if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  222.          yychar = -1;
  223.          goto yynewstate;   /* try again in the same state */
  224.  
  225.          }
  226.  
  227.       }
  228.  
  229.    /* reduction by production yyn */
  230.  
  231.    if( yydebug ) printf("reduce %d\n",yyn);
  232.    yyps -= yyr2[yyn];
  233.    yypvt = yypv;
  234.    yypv -= yyr2[yyn];
  235. #ifdef UNION
  236.    yyunion(&yyval, &yypv[1]);
  237. #else
  238.    yyval = yypv[1];
  239. #endif
  240.    yym=yyn;
  241.    /* consult goto table to find next state */
  242.    yyn = yyr1[yyn];
  243.    yyj = yypgo[yyn] + *yyps + 1;
  244.    if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  245.    switch(yym)
  246.       {
  247.       
  248. case 1:
  249. # line 73
  250.  { 1; } break;
  251. case 2:
  252. # line 74
  253.  { 2; } break;
  254. case 3:
  255. # line 76
  256.  { 3; } break;
  257. case 4:
  258. # line 77
  259.  { 4; } break;
  260. case 5:
  261. # line 79
  262.  { 5; } break;
  263. case 6:
  264. # line 80
  265.  { 6; } break;/* End of actions */
  266.       }
  267.    goto yystack;  /* stack new state and value */
  268.  
  269.    }
  270.