Annotation of GNUtools/cc/bi-parser.c, revision 1.1.1.1

1.1       root        1: 
                      2: /*  A Bison parser, made from bi-parser.y  */
                      3: 
                      4: #define        DEFOP   258
                      5: #define        STRING  259
                      6: 
                      7: #line 21 "bi-parser.y"
                      8: 
                      9: 
                     10: #include <stdio.h>
                     11: #include "hconfig.h"
                     12: #include "bi-defs.h"
                     13: 
                     14: extern char yytext[];
                     15: extern int yyleng;
                     16: 
                     17: 
                     18: /* Chain of all defs built by the parser. */
                     19: struct def *defs;
                     20: int ndefs;
                     21: 
                     22: static struct node *makenode ();
                     23: static struct variation *makevar ();
                     24: static struct def *makedef ();
                     25: 
                     26: void yyerror ();
                     27: 
                     28: 
                     29: #line 43 "bi-parser.y"
                     30: typedef union
                     31: {
                     32:   char *string;
                     33:   struct def *def;
                     34:   struct variation *variation;
                     35:   struct node *node;
                     36: } YYSTYPE;
                     37: 
                     38: #ifndef YYLTYPE
                     39: typedef
                     40:   struct yyltype
                     41:     {
                     42:       int timestamp;
                     43:       int first_line;
                     44:       int first_column;
                     45:       int last_line;
                     46:       int last_column;
                     47:       char *text;
                     48:    }
                     49:   yyltype;
                     50: 
                     51: #define YYLTYPE yyltype
                     52: #endif
                     53: 
                     54: #include <stdio.h>
                     55: 
                     56: #ifndef __STDC__
                     57: #define const
                     58: #endif
                     59: 
                     60: 
                     61: 
                     62: #define        YYFINAL         39
                     63: #define        YYFLAG          -32768
                     64: #define        YYNTBASE        8
                     65: 
                     66: #define YYTRANSLATE(x) ((unsigned)(x) <= 259 ? yytranslate[x] : 17)
                     67: 
                     68: static const char yytranslate[] = {     0,
                     69:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     70:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     71:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     72:      2,     2,     2,     2,     2,     2,     2,     2,     2,     5,
                     73:      7,     2,     2,     6,     2,     2,     2,     2,     2,     2,
                     74:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     75:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     76:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     77:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     78:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     79:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     80:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     81:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     82:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     83:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     84:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     85:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     86:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     87:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     88:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     89:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     90:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     91:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     92:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     93:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     94:      2,     2,     2,     2,     2,     1,     2,     3,     4
                     95: };
                     96: 
                     97: static const short yyrline[] = {     0,
                     98:     59,    64,    66,    70,    75,    77,    81,    84,    86,    88,
                     99:     92,    94,    97,   100,   104,   107,   111
                    100: };
                    101: 
                    102: static const char * const yytname[] = {     0,
                    103: "error","$illegal.","DEFOP","STRING","'('","','","')'","top"
                    104: };
                    105: 
                    106: static const short yyr1[] = {     0,
                    107:      8,     9,     9,    10,    11,    11,    12,    12,    12,    12,
                    108:     13,    13,    14,    14,    15,    15,    16
                    109: };
                    110: 
                    111: static const short yyr2[] = {     0,
                    112:      1,     1,     2,    10,     1,     3,     3,     5,     7,     9,
                    113:      0,     1,     3,     0,     1,     3,     1
                    114: };
                    115: 
                    116: static const short yydefact[] = {     0,
                    117:      0,     1,     2,     0,     3,     0,    11,    12,     0,     0,
                    118:      0,    11,     0,     5,     0,     0,     0,    14,     7,     6,
                    119:      4,     0,     0,    17,     0,    15,    14,     8,    13,     0,
                    120:      0,    16,    14,     9,     0,    10,     0,     0,     0
                    121: };
                    122: 
                    123: static const short yydefgoto[] = {    37,
                    124:      2,     3,    13,    14,     9,    23,    25,    26
                    125: };
                    126: 
                    127: static const short yypact[] = {     2,
                    128:      6,     2,-32768,     8,-32768,     7,    10,-32768,     9,    11,
                    129:     12,    10,    -5,-32768,    -3,    12,    13,    14,-32768,-32768,
                    130: -32768,    17,     1,-32768,    15,    18,    14,-32768,-32768,    17,
                    131:      3,-32768,    14,-32768,    16,-32768,    25,    26,-32768
                    132: };
                    133: 
                    134: static const short yypgoto[] = {-32768,
                    135: -32768,    27,-32768,    19,    20,   -27,   -12,-32768
                    136: };
                    137: 
                    138: 
                    139: #define        YYLAST          35
                    140: 
                    141: 
                    142: static const short yytable[] = {    31,
                    143:     16,    17,    18,    19,     1,    35,    27,    28,    33,    34,
                    144:      4,     6,     7,     8,    10,    11,    12,    32,    22,    21,
                    145:     24,    29,    36,    30,    38,    39,     0,     0,     5,     0,
                    146:      0,    15,     0,     0,    20
                    147: };
                    148: 
                    149: static const short yycheck[] = {    27,
                    150:      6,     7,     6,     7,     3,    33,     6,     7,     6,     7,
                    151:      5,     4,     6,     4,     6,     5,     5,    30,     5,     7,
                    152:      4,     7,     7,     6,     0,     0,    -1,    -1,     2,    -1,
                    153:     -1,    12,    -1,    -1,    16
                    154: };
                    155: #define YYPURE 1
                    156: 
                    157: /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
                    158: #line 3 "bison.simple"
                    159: 
                    160: /* Skeleton output parser for bison,
                    161:    Copyright (C) 1984 Bob Corbett and Richard Stallman
                    162: 
                    163:    This program is free software; you can redistribute it and/or modify
                    164:    it under the terms of the GNU General Public License as published by
                    165:    the Free Software Foundation; either version 1, or (at your option)
                    166:    any later version.
                    167: 
                    168:    This program is distributed in the hope that it will be useful,
                    169:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                    170:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                    171:    GNU General Public License for more details.
                    172: 
                    173:    You should have received a copy of the GNU General Public License
                    174:    along with this program; if not, write to the Free Software
                    175:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                    176: 
                    177: 
                    178: #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
                    179: #include <alloca.h>
                    180: #endif
                    181: 
                    182: /* This is the parser code that is written into each bison parser
                    183:   when the %semantic_parser declaration is not specified in the grammar.
                    184:   It was written by Richard Stallman by simplifying the hairy parser
                    185:   used when %semantic_parser is specified.  */
                    186: 
                    187: /* Note: there must be only one dollar sign in this file.
                    188:    It is replaced by the list of actions, each action
                    189:    as one case of the switch.  */
                    190: 
                    191: #define yyerrok                (yyerrstatus = 0)
                    192: #define yyclearin      (yychar = YYEMPTY)
                    193: #define YYEMPTY                -2
                    194: #define YYEOF          0
                    195: #define YYFAIL         goto yyerrlab;
                    196: #define YYACCEPT       return(0)
                    197: #define YYABORT        return(1)
                    198: #define YYERROR                goto yyerrlab
                    199: 
                    200: #define YYTERROR       1
                    201: #define YYERRCODE      256
                    202: 
                    203: #ifndef YYIMPURE
                    204: #define YYLEX          yylex()
                    205: #endif
                    206: 
                    207: #ifndef YYPURE
                    208: #define YYLEX          yylex(&yylval, &yylloc)
                    209: #endif
                    210: 
                    211: /* If nonreentrant, generate the variables here */
                    212: 
                    213: #ifndef YYIMPURE
                    214: 
                    215: int    yychar;                 /*  the lookahead symbol                */
                    216: YYSTYPE        yylval;                 /*  the semantic value of the           */
                    217:                                /*  lookahead symbol                    */
                    218: 
                    219: YYLTYPE yylloc;                        /*  location data for the lookahead     */
                    220:                                /*  symbol                              */
                    221: 
                    222: int yynerrs;                   /*  number of parse errors so far       */
                    223: #endif  /* YYIMPURE */
                    224: 
                    225: #if YYDEBUG != 0
                    226: int yydebug;                   /*  nonzero means print parse trace     */
                    227: /* Since this is uninitialized, it does not stop multiple parsers
                    228:    from coexisting.  */
                    229: #endif
                    230: 
                    231: /*  YYMAXDEPTH indicates the initial size of the parser's stacks       */
                    232: 
                    233: #ifndef        YYMAXDEPTH
                    234: #define YYMAXDEPTH 200
                    235: #endif
                    236: 
                    237: /*  YYMAXLIMIT is the maximum size the stacks can grow to
                    238:     (effective only if the built-in stack extension method is used).  */
                    239: 
                    240: #ifndef YYMAXLIMIT
                    241: #define YYMAXLIMIT 10000
                    242: #endif
                    243: 
                    244: 
                    245: #line 90 "bison.simple"
                    246: int
                    247: yyparse()
                    248: {
                    249:   register int yystate;
                    250:   register int yyn;
                    251:   register short *yyssp;
                    252:   register YYSTYPE *yyvsp;
                    253:   YYLTYPE *yylsp;
                    254:   int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
                    255:   int yychar1;         /*  lookahead token as an internal (translated) token number */
                    256: 
                    257:   short        yyssa[YYMAXDEPTH];      /*  the state stack                     */
                    258:   YYSTYPE yyvsa[YYMAXDEPTH];   /*  the semantic value stack            */
                    259:   YYLTYPE yylsa[YYMAXDEPTH];   /*  the location stack                  */
                    260: 
                    261:   short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
                    262:   YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
                    263:   YYLTYPE *yyls = yylsa;
                    264: 
                    265:   int yymaxdepth = YYMAXDEPTH;
                    266: 
                    267: #ifndef YYPURE
                    268:   int yychar;
                    269:   YYSTYPE yylval;
                    270:   YYLTYPE yylloc;
                    271:   int yynerrs;
                    272: #endif
                    273: 
                    274:   YYSTYPE yyval;               /*  the variable used to return         */
                    275:                                /*  semantic values from the action     */
                    276:                                /*  routines                            */
                    277: 
                    278:   int yylen;
                    279: 
                    280: #if YYDEBUG != 0
                    281:   if (yydebug)
                    282:     fprintf(stderr, "Starting parse\n");
                    283: #endif
                    284: 
                    285:   yystate = 0;
                    286:   yyerrstatus = 0;
                    287:   yynerrs = 0;
                    288:   yychar = YYEMPTY;            /* Cause a token to be read.  */
                    289: 
                    290:   /* Initialize stack pointers.
                    291:      Waste one element of value and location stack
                    292:      so that they stay on the same level as the state stack.  */
                    293: 
                    294:   yyssp = yyss - 1;
                    295:   yyvsp = yyvs;
                    296:   yylsp = yyls;
                    297: 
                    298: /* Push a new state, which is found in  yystate  .  */
                    299: /* In all cases, when you get here, the value and location stacks
                    300:    have just been pushed. so pushing a state here evens the stacks.  */
                    301: yynewstate:
                    302: 
                    303:   *++yyssp = yystate;
                    304: 
                    305:   if (yyssp >= yyss + yymaxdepth - 1)
                    306:     {
                    307:       /* Give user a chance to reallocate the stack */
                    308:       /* Use copies of these so that the &'s don't force the real ones into memory. */
                    309:       YYSTYPE *yyvs1 = yyvs;
                    310:       YYLTYPE *yyls1 = yyls;
                    311:       short *yyss1 = yyss;
                    312: 
                    313:       /* Get the current used size of the three stacks, in elements.  */
                    314:       int size = yyssp - yyss + 1;
                    315: 
                    316: #ifdef yyoverflow
                    317:       /* Each stack pointer address is followed by the size of
                    318:         the data in use in that stack, in bytes.  */
                    319:       yyoverflow("parser stack overflow",
                    320:                 &yyss1, size * sizeof (*yyssp),
                    321:                 &yyvs1, size * sizeof (*yyvsp),
                    322:                 &yyls1, size * sizeof (*yylsp),
                    323:                 &yymaxdepth);
                    324: 
                    325:       yyss = yyss1; yyvs = yyvs1; yyls = yyls1;
                    326: #else /* no yyoverflow */
                    327:       /* Extend the stack our own way.  */
                    328:       if (yymaxdepth >= YYMAXLIMIT)
                    329:        yyerror("parser stack overflow");
                    330:       yymaxdepth *= 2;
                    331:       if (yymaxdepth > YYMAXLIMIT)
                    332:        yymaxdepth = YYMAXLIMIT;
                    333:       yyss = (short *) alloca (yymaxdepth * sizeof (*yyssp));
                    334:       bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
                    335:       yyvs = (YYSTYPE *) alloca (yymaxdepth * sizeof (*yyvsp));
                    336:       bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
                    337: #ifdef YYLSP_NEEDED
                    338:       yyls = (YYLTYPE *) alloca (yymaxdepth * sizeof (*yylsp));
                    339:       bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
                    340: #endif
                    341: #endif /* no yyoverflow */
                    342: 
                    343:       yyssp = yyss + size - 1;
                    344:       yyvsp = yyvs + size - 1;
                    345: #ifdef YYLSP_NEEDED
                    346:       yylsp = yyls + size - 1;
                    347: #endif
                    348: 
                    349: #if YYDEBUG != 0
                    350:       if (yydebug)
                    351:        fprintf(stderr, "Stack size increased to %d\n", yymaxdepth);
                    352: #endif
                    353: 
                    354:       if (yyssp >= yyss + yymaxdepth - 1)
                    355:        YYABORT;
                    356:     }
                    357: 
                    358: #if YYDEBUG != 0
                    359:   if (yydebug)
                    360:     fprintf(stderr, "Entering state %d\n", yystate);
                    361: #endif
                    362: 
                    363: /* Do appropriate processing given the current state.  */
                    364: /* Read a lookahead token if we need one and don't already have one.  */
                    365: yyresume:
                    366: 
                    367:   /* First try to decide what to do without reference to lookahead token.  */
                    368: 
                    369:   yyn = yypact[yystate];
                    370:   if (yyn == YYFLAG)
                    371:     goto yydefault;
                    372: 
                    373:   /* Not known => get a lookahead token if don't already have one.  */
                    374: 
                    375:   /* yychar is either YYEMPTY or YYEOF
                    376:      or a valid token in external form.  */
                    377: 
                    378:   if (yychar == YYEMPTY)
                    379:     {
                    380: #if YYDEBUG != 0
                    381:       if (yydebug)
                    382:        fprintf(stderr, "Reading a token: ");
                    383: #endif
                    384:       yychar = YYLEX;
                    385:     }
                    386: 
                    387:   /* Convert token to internal form (in yychar1) for indexing tables with */
                    388: 
                    389:   if (yychar <= 0)             /* This means end of input. */
                    390:     {
                    391:       yychar1 = 0;
                    392:       yychar = YYEOF;          /* Don't call YYLEX any more */
                    393: 
                    394: #if YYDEBUG != 0
                    395:       if (yydebug)
                    396:        fprintf(stderr, "Now at end of input.\n");
                    397: #endif
                    398:     }
                    399:   else
                    400:     {
                    401:       yychar1 = YYTRANSLATE(yychar);
                    402: 
                    403: #if YYDEBUG != 0
                    404:       if (yydebug)
                    405:        fprintf(stderr, "Next token is %d (%s)\n", yychar, yytname[yychar1]);
                    406: #endif
                    407:     }
                    408: 
                    409:   yyn += yychar1;
                    410:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
                    411:     goto yydefault;
                    412: 
                    413:   yyn = yytable[yyn];
                    414: 
                    415:   /* yyn is what to do for this token type in this state.
                    416:      Negative => reduce, -yyn is rule number.
                    417:      Positive => shift, yyn is new state.
                    418:        New state is final state => don't bother to shift,
                    419:        just return success.
                    420:      0, or most negative number => error.  */
                    421: 
                    422:   if (yyn < 0)
                    423:     {
                    424:       if (yyn == YYFLAG)
                    425:        goto yyerrlab;
                    426:       yyn = -yyn;
                    427:       goto yyreduce;
                    428:     }
                    429:   else if (yyn == 0)
                    430:     goto yyerrlab;
                    431: 
                    432:   if (yyn == YYFINAL)
                    433:     YYACCEPT;
                    434: 
                    435:   /* Shift the lookahead token.  */
                    436: 
                    437: #if YYDEBUG != 0
                    438:   if (yydebug)
                    439:     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
                    440: #endif
                    441: 
                    442:   /* Discard the token being shifted unless it is eof.  */
                    443:   if (yychar != YYEOF)
                    444:     yychar = YYEMPTY;
                    445: 
                    446:   *++yyvsp = yylval;
                    447: #ifdef YYLSP_NEEDED
                    448:   *++yylsp = yylloc;
                    449: #endif
                    450: 
                    451:   /* count tokens shifted since error; after three, turn off error status.  */
                    452:   if (yyerrstatus) yyerrstatus--;
                    453: 
                    454:   yystate = yyn;
                    455:   goto yynewstate;
                    456: 
                    457: /* Do the default action for the current state.  */
                    458: yydefault:
                    459: 
                    460:   yyn = yydefact[yystate];
                    461:   if (yyn == 0)
                    462:     goto yyerrlab;
                    463: 
                    464: /* Do a reduction.  yyn is the number of a rule to reduce with.  */
                    465: yyreduce:
                    466:   yylen = yyr2[yyn];
                    467:   yyval = yyvsp[1-yylen]; /* implement default value of the action */
                    468: 
                    469: #if YYDEBUG != 0
                    470:   if (yydebug)
                    471:     {
                    472:       if (yylen == 1)
                    473:        fprintf (stderr, "Reducing 1 value via line %d, ",
                    474:                 yyrline[yyn]);
                    475:       else
                    476:        fprintf (stderr, "Reducing %d values via line %d, ",
                    477:                 yylen, yyrline[yyn]);
                    478:     }
                    479: #endif
                    480: 
                    481: 
                    482:   switch (yyn) {
                    483: 
                    484: case 1:
                    485: #line 61 "bi-parser.y"
                    486: { defs = yyvsp[0].def; ;
                    487:     break;}
                    488: case 3:
                    489: #line 67 "bi-parser.y"
                    490: { yyvsp[0].def->next = yyvsp[-1].def; yyval.def = yyvsp[0].def; ;
                    491:     break;}
                    492: case 4:
                    493: #line 72 "bi-parser.y"
                    494: { yyval.def = makedef (yyvsp[-7].string, yyvsp[-5].string, yyvsp[-2].variation); ;
                    495:     break;}
                    496: case 6:
                    497: #line 78 "bi-parser.y"
                    498: { yyvsp[0].variation->next = yyvsp[-2].variation; yyval.variation = yyvsp[0].variation; ;
                    499:     break;}
                    500: case 7:
                    501: #line 83 "bi-parser.y"
                    502: { yyval.variation = makevar (yyvsp[-1].string, (struct node *) NULL, (struct node *) NULL, (struct node *) NULL); ;
                    503:     break;}
                    504: case 8:
                    505: #line 85 "bi-parser.y"
                    506: { yyval.variation = makevar (yyvsp[-3].string, yyvsp[-1].node, (struct node *) NULL, (struct node *) NULL); ;
                    507:     break;}
                    508: case 9:
                    509: #line 87 "bi-parser.y"
                    510: { yyval.variation = makevar (yyvsp[-5].string, yyvsp[-3].node, yyvsp[-1].node, (struct node *) NULL); ;
                    511:     break;}
                    512: case 10:
                    513: #line 89 "bi-parser.y"
                    514: { yyval.variation = makevar (yyvsp[-7].string, yyvsp[-5].node, yyvsp[-3].node, yyvsp[-1].node); ;
                    515:     break;}
                    516: case 11:
                    517: #line 93 "bi-parser.y"
                    518: { yyval.string = ""; ;
                    519:     break;}
                    520: case 12:
                    521: #line 94 "bi-parser.y"
                    522: { yyval.string = yyvsp[0].string; ;
                    523:     break;}
                    524: case 13:
                    525: #line 99 "bi-parser.y"
                    526: { yyval.node = yyvsp[-1].node; ;
                    527:     break;}
                    528: case 14:
                    529: #line 101 "bi-parser.y"
                    530: { yyval.node = NULL; ;
                    531:     break;}
                    532: case 16:
                    533: #line 108 "bi-parser.y"
                    534: { yyvsp[-2].node->next = yyvsp[0].node; yyval.node = yyvsp[-2].node; ;
                    535:     break;}
                    536: case 17:
                    537: #line 113 "bi-parser.y"
                    538: { yyval.node = makenode (yyvsp[0].string); ;
                    539:     break;}
                    540: }
                    541:    /* the action file gets copied in in place of this dollarsign */
                    542: #line 327 "bison.simple"
                    543: 
                    544:   yyvsp -= yylen;
                    545:   yyssp -= yylen;
                    546: #ifdef YYLSP_NEEDED
                    547:   yylsp -= yylen;
                    548: #endif
                    549: 
                    550: #if YYDEBUG != 0
                    551:   if (yydebug)
                    552:     {
                    553:       short *ssp1 = yyss - 1;
                    554:       fprintf (stderr, "state stack now");
                    555:       while (ssp1 != yyssp)
                    556:        fprintf (stderr, " %d", *++ssp1);
                    557:       fprintf (stderr, "\n");
                    558:     }
                    559: #endif
                    560: 
                    561:   *++yyvsp = yyval;
                    562: 
                    563: #ifdef YYLSP_NEEDED
                    564:   yylsp++;
                    565:   if (yylen == 0)
                    566:     {
                    567:       yylsp->first_line = yylloc.first_line;
                    568:       yylsp->first_column = yylloc.first_column;
                    569:       yylsp->last_line = (yylsp-1)->last_line;
                    570:       yylsp->last_column = (yylsp-1)->last_column;
                    571:       yylsp->text = 0;
                    572:     }
                    573:   else
                    574:     {
                    575:       yylsp->last_line = (yylsp+yylen-1)->last_line;
                    576:       yylsp->last_column = (yylsp+yylen-1)->last_column;
                    577:     }
                    578: #endif
                    579: 
                    580:   /* Now "shift" the result of the reduction.
                    581:      Determine what state that goes to,
                    582:      based on the state we popped back to
                    583:      and the rule number reduced by.  */
                    584: 
                    585:   yyn = yyr1[yyn];
                    586: 
                    587:   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
                    588:   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
                    589:     yystate = yytable[yystate];
                    590:   else
                    591:     yystate = yydefgoto[yyn - YYNTBASE];
                    592: 
                    593:   goto yynewstate;
                    594: 
                    595: yyerrlab:   /* here on detecting error */
                    596: 
                    597:   if (! yyerrstatus)
                    598:     /* If not already recovering from an error, report this error.  */
                    599:     {
                    600:       ++yynerrs;
                    601:       yyerror("parse error");
                    602:     }
                    603: 
                    604:   if (yyerrstatus == 3)
                    605:     {
                    606:       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
                    607: 
                    608:       /* return failure if at end of input */
                    609:       if (yychar == YYEOF)
                    610:        YYABORT;
                    611: 
                    612: #if YYDEBUG != 0
                    613:       if (yydebug)
                    614:        fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
                    615: #endif
                    616: 
                    617:       yychar = YYEMPTY;
                    618:     }
                    619: 
                    620:   /* Else will try to reuse lookahead token
                    621:      after shifting the error token.  */
                    622: 
                    623:   yyerrstatus = 3;             /* Each real token shifted decrements this */
                    624: 
                    625:   goto yyerrhandle;
                    626: 
                    627: yyerrdefault:  /* current state does not do anything special for the error token. */
                    628: 
                    629: #if 0
                    630:   /* This is wrong; only states that explicitly want error tokens
                    631:      should shift them.  */
                    632:   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
                    633:   if (yyn) goto yydefault;
                    634: #endif
                    635: 
                    636: yyerrpop:   /* pop the current state because it cannot handle the error token */
                    637: 
                    638:   if (yyssp == yyss) YYABORT;
                    639:   yyvsp--;
                    640:   yystate = *--yyssp;
                    641: #ifdef YYLSP_NEEDED
                    642:   yylsp--;
                    643: #endif
                    644: 
                    645: #if YYDEBUG != 0
                    646:   if (yydebug)
                    647:     {
                    648:       short *ssp1 = yyss - 1;
                    649:       fprintf (stderr, "Error: state stack now");
                    650:       while (ssp1 != yyssp)
                    651:        fprintf (stderr, " %d", *++ssp1);
                    652:       fprintf (stderr, "\n");
                    653:     }
                    654: #endif
                    655: 
                    656: yyerrhandle:
                    657: 
                    658:   yyn = yypact[yystate];
                    659:   if (yyn == YYFLAG)
                    660:     goto yyerrdefault;
                    661: 
                    662:   yyn += YYTERROR;
                    663:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
                    664:     goto yyerrdefault;
                    665: 
                    666:   yyn = yytable[yyn];
                    667:   if (yyn < 0)
                    668:     {
                    669:       if (yyn == YYFLAG)
                    670:        goto yyerrpop;
                    671:       yyn = -yyn;
                    672:       goto yyreduce;
                    673:     }
                    674:   else if (yyn == 0)
                    675:     goto yyerrpop;
                    676: 
                    677:   if (yyn == YYFINAL)
                    678:     YYACCEPT;
                    679: 
                    680: #if YYDEBUG != 0
                    681:   if (yydebug)
                    682:     fprintf(stderr, "Shifting error token, ");
                    683: #endif
                    684: 
                    685:   *++yyvsp = yylval;
                    686: #ifdef YYLSP_NEEDED
                    687:   *++yylsp = yylloc;
                    688: #endif
                    689: 
                    690:   yystate = yyn;
                    691:   goto yynewstate;
                    692: }
                    693: #line 116 "bi-parser.y"
                    694: 
                    695: 
                    696: static struct node *
                    697: makenode (s)
                    698:      char *s;
                    699: {
                    700:   struct node *n;
                    701: 
                    702:   n = (struct node *) malloc (sizeof (struct node));
                    703:   n->text = s;
                    704:   n->next = NULL;
                    705:   return n;
                    706: }
                    707: 
                    708: static struct variation *
                    709: makevar (name, inputs, outputs, literals)
                    710:      char *name;
                    711:      struct node *inputs, *outputs, *literals;
                    712: {
                    713:   struct variation *v;
                    714: 
                    715:   v = (struct variation *) malloc (sizeof (struct variation));
                    716:   v->name = name;
                    717:   v->code = ndefs++;
                    718:   v->inputs = inputs;
                    719:   v->outputs = outputs;
                    720:   v->literals = literals;
                    721:   v->next = NULL;
                    722:   return v;
                    723: }
                    724: 
                    725: static struct def *
                    726: makedef (name, template, vars)
                    727:      char *name, *template;
                    728:      struct variation *vars;
                    729: {
                    730:   struct def *d;
                    731: 
                    732:   d = (struct def *) malloc (sizeof (struct def));
                    733:   d->basename = name;
                    734:   d->template = template;
                    735:   d->variations = vars;
                    736:   d->next = NULL;
                    737:   return d;
                    738: }
                    739: 
                    740: void
                    741: yyerror (s)
                    742:      char *s;
                    743: {
                    744:   fprintf (stderr, "syntax error in input\n");
                    745:   exit (FATAL_EXIT_CODE);
                    746: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.