home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / BYACC.ZIP / RCS / SKELETON.C_V < prev    next >
Text File  |  1992-06-10  |  8KB  |  290 lines

  1. head    1.1;
  2. access;
  3. symbols;
  4. locks; strict;
  5. comment    @ * @;
  6.  
  7.  
  8. 1.1
  9. date    92.06.10.21.55.08;    author downey;    state Exp;
  10. branches;
  11. next    ;
  12.  
  13.  
  14. desc
  15. @@
  16.  
  17.  
  18. 1.1
  19. log
  20. @Initial revision
  21. @
  22. text
  23. @#include "defs.h"
  24.  
  25. /*  The three line banner used here should be replaced with a one line    */
  26. /*  #ident directive if the target C compiler supports #ident        */
  27. /*  directives.                                */
  28. /*                                    */
  29. /*  If the skeleton is changed, the banner should be changed so that    */
  30. /*  the altered version can easily be distinguished from the original.    */
  31.  
  32. char *banner[] =
  33. {
  34.     "#ifndef lint",
  35.     "char yysccsid[] = \"@@(#)yaccpar 1.00 (Berkeley) 1989/11/22\";",
  36.     "#endif",
  37.     0
  38. };
  39.  
  40.  
  41. char *header[] =
  42. {
  43.     "#define yyclearin (yychar=(-1))",
  44.     "#define yyerrok (yyerrflag=0)",
  45.     "#ifndef YYSTACKSIZE",
  46.     "#ifdef YYMAXDEPTH",
  47.     "#define YYSTACKSIZE YYMAXDEPTH",
  48.     "#else",
  49.     "#define YYSTACKSIZE 300",
  50.     "#endif",
  51.     "#endif",
  52.     "int yybackup;",
  53.     "int yydebug;",
  54.     "int yynerrs;",
  55.     "int yyerrflag;",
  56.     "int yychar;",
  57.     "short *yyssp;",
  58.     "YYSTYPE *yyvsp;",
  59.     "YYSTYPE yyval;",
  60.     "YYSTYPE yylval;",
  61.     "#define yystacksize YYSTACKSIZE",
  62.     "short yyss[YYSTACKSIZE];",
  63.     "YYSTYPE yyvs[YYSTACKSIZE];",
  64.     0
  65. };
  66.  
  67.  
  68. char *body[] =
  69. {
  70.     "#define YYACCEPT goto yyaccept",
  71.     "#define YYERROR goto yyerrlab",
  72.     "int",
  73.     "yyparse()",
  74.     "{",
  75.     "    register int yym, yyn, yystate;",
  76.     "#if YYDEBUG",
  77.     "    register char *yys;",
  78.     "    extern char *getenv();",
  79.     "",
  80.     "    if (yys = getenv(\"YYDEBUG\"))",
  81.     "    {",
  82.     "        yyn = *yys;",
  83.     "        if (yyn == '0')",
  84.     "            yydebug = 0;",
  85.     "        else if (yyn >= '1' && yyn <= '9')",
  86.     "            yydebug = yyn - '0';",
  87.     "    }",
  88.     "#endif",
  89.     "",
  90.     "    yybackup = 0;",
  91.     "    yynerrs = 0;",
  92.     "    yyerrflag = 0;",
  93.     "    yychar = (-1);",
  94.     "",
  95.     "    yyssp = yyss;",
  96.     "    yyvsp = yyvs;",
  97.     "    *yyssp = yystate = 0;",
  98.     "",
  99.     "yyloop:",
  100.     "    if (yyn = yydefred[yystate]) goto yyreduce;",
  101.     "    if (yychar < 0)",
  102.     "    {",
  103.     "        if ((yychar = yylex()) < 0) yychar = 0;",
  104.     "#if YYDEBUG",
  105.     "        if (yydebug)",
  106.     "        {",
  107.     "            yys = 0;",
  108.     "            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  109.     "            if (!yys) yys = \"illegal-symbol\";",
  110.     "            printf(\"yydebug: state %d, reading %d (%s)\\n\", yystate,",
  111.     "                    yychar, yys);",
  112.     "        }",
  113.     "#endif",
  114.     "    }",
  115.     "    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&",
  116.     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
  117.     "    {",
  118.     "#if YYDEBUG",
  119.     "        if (yydebug)",
  120.     "            printf(\"yydebug: state %d, shifting to state %d\\n\",",
  121.     "                    yystate, yytable[yyn]);",
  122.     "#endif",
  123.     "        if (yyssp >= yyss + yystacksize - 1)",
  124.     "        {",
  125.     "            goto yyoverflow;",
  126.     "        }",
  127.     "        *++yyssp = yystate = yytable[yyn];",
  128.     "        *++yyvsp = yylval;",
  129.     "        yychar = (-1);",
  130.     "        if (yyerrflag > 0)  --yyerrflag;",
  131.     "        goto yyloop;",
  132.     "    }",
  133.     "    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&",
  134.     "            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)",
  135.     "    {",
  136.     "        yyn = yytable[yyn];",
  137.     "        goto yyreduce;",
  138.     "    }",
  139.     "    if (yyerrflag) goto yyinrecovery;",
  140.     "yynewerror:",
  141.     "    yyerror(\"syntax error\");",
  142.     "yyerrlab:",
  143.     "    ++yynerrs;",
  144.     "yyinrecovery:",
  145.     "    if (yyerrflag < 3)",
  146.     "    {",
  147.     "        yyerrflag = 3;",
  148.     "        for (;;)",
  149.     "        {",
  150.     "            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&",
  151.     "                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)",
  152.     "            {",
  153.     "#if YYDEBUG",
  154.     "                if (yydebug)",
  155.     "                    printf(\"yydebug: state %d, error recovery shifting\\",
  156.     " to state %d\\n\", *yyssp, yytable[yyn]);",
  157.     "#endif",
  158.     "                if (yyssp >= yyss + yystacksize - 1)",
  159.     "                {",
  160.     "                    goto yyoverflow;",
  161.     "                }",
  162.     "                *++yyssp = yystate = yytable[yyn];",
  163.     "                *++yyvsp = yylval;",
  164.     "                goto yyloop;",
  165.     "            }",
  166.     "            else",
  167.     "            {",
  168.     "#if YYDEBUG",
  169.     "                if (yydebug)",
  170.     "                    printf(\"yydebug: error recovery discarding state %d\
  171. \\n\",",
  172.     "                            *yyssp);",
  173.     "#endif",
  174.     "                if (yyssp <= yyss) goto yyabort;",
  175.     "                --yyssp;",
  176.     "                --yyvsp;",
  177.     "            }",
  178.     "        }",
  179.     "    }",
  180.     "    else",
  181.     "    {",
  182.     "        if (yychar == 0) goto yyabort;",
  183.     "#if YYDEBUG",
  184.     "        if (yydebug)",
  185.     "        {",
  186.     "            yys = 0;",
  187.     "            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  188.     "            if (!yys) yys = \"illegal-symbol\";",
  189.     "            printf(\"yydebug: state %d, error recovery discards token %d\
  190.  (%s)\\n\",",
  191.     "                    yystate, yychar, yys);",
  192.     "        }",
  193.     "#endif",
  194.     "        yychar = (-1);",
  195.     "        goto yyloop;",
  196.     "    }",
  197.     "yyreduce:",
  198.     "#if YYDEBUG",
  199.     "    if (yydebug)",
  200.     "        printf(\"yydebug: state %d, reducing by rule %d (%s)\\n\",",
  201.     "                yystate, yyn, yyrule[yyn]);",
  202.     "#endif",
  203.     "    yym = yylen[yyn];",
  204.     "    yyval = yyvsp[1-yym];",
  205.     "    switch (yyn)",
  206.     "    {",
  207.     0
  208. };
  209.  
  210.  
  211. char *trailer[] =
  212. {
  213.     "    }",
  214.     "    yyssp -= yym;",
  215.     "    yystate = *yyssp;",
  216.     "    yyvsp -= yym;",
  217.     "    if (yybackup)",
  218.     "    {",
  219.     "        yybackup = 0;",
  220.     "        goto yyloop;",
  221.     "    }",
  222.     "    yym = yylhs[yyn];",
  223.     "    if (yystate == 0 && yym == 0)",
  224.     "    {",
  225.     "#ifdef YYDEBUG",
  226.     "        if (yydebug)",
  227.     "            printf(\"yydebug: after reduction, shifting from state 0 to\\",
  228.     " state %d\\n\", YYFINAL);",
  229.     "#endif",
  230.     "        yystate = YYFINAL;",
  231.     "        *++yyssp = YYFINAL;",
  232.     "        *++yyvsp = yyval;",
  233.     "        if (yychar < 0)",
  234.     "        {",
  235.     "            if ((yychar = yylex()) < 0) yychar = 0;",
  236.     "#if YYDEBUG",
  237.     "            if (yydebug)",
  238.     "            {",
  239.     "                yys = 0;",
  240.     "                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];",
  241.     "                if (!yys) yys = \"illegal-symbol\";",
  242.     "                printf(\"yydebug: state %d, reading %d (%s)\\n\",",
  243.     "                        YYFINAL, yychar, yys);",
  244.     "            }",
  245.     "#endif",
  246.     "        }",
  247.     "        if (yychar == 0) goto yyaccept;",
  248.     "        goto yyloop;",
  249.     "    }",
  250.     "    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&",
  251.     "            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)",
  252.     "        yystate = yytable[yyn];",
  253.     "    else",
  254.     "        yystate = yydgoto[yym];",
  255.     "#ifdef YYDEBUG",
  256.     "    if (yydebug)",
  257.     "        printf(\"yydebug: after reduction, shifting from state %d \\",
  258.     "to state %d\\n\", *yyssp, yystate);",
  259.     "#endif",
  260.     "    if (yyssp >= yyss + yystacksize - 1)",
  261.     "    {",
  262.     "        goto yyoverflow;",
  263.     "    }",
  264.     "    *++yyssp = yystate;",
  265.     "    *++yyvsp = yyval;",
  266.     "    goto yyloop;",
  267.     "yyoverflow:",
  268.     "    yyerror(\"yacc stack overflow\");",
  269.     "yyabort:",
  270.     "    return (1);",
  271.     "yyaccept:",
  272.     "    return (0);",
  273.     "}",
  274.     0
  275. };
  276.  
  277.  
  278. write_section(section)
  279. char *section[];
  280. {
  281.     register int i;
  282.  
  283.     for (i = 0; section[i]; ++i)
  284.     {
  285.     ++outline;
  286.     fprintf(output_file, "%s\n", section[i]);
  287.     }
  288. }
  289. @
  290.