Annotation of gcc/bi-parser.c, revision 1.1.1.2

1.1       root        1: 
1.1.1.2 ! root        2: /*  A Bison parser, made from bi-parser.y with Bison version GNU Bison version 1.22
        !             3:   */
1.1       root        4: 
                      5: #define YYBISON 1  /* Identify Bison output.  */
                      6: 
                      7: #define        DEFOP   258
                      8: #define        STRING  259
                      9: 
1.1.1.2 ! root       10: #line 22 "bi-parser.y"
1.1       root       11: 
                     12: 
                     13: #include <stdio.h>
                     14: #include "hconfig.h"
                     15: #include "bi-defs.h"
                     16: 
                     17: extern char yytext[];
                     18: extern int yyleng;
                     19: 
                     20: 
                     21: /* Chain of all defs built by the parser. */
                     22: struct def *defs;
                     23: int ndefs;
                     24: 
                     25: static struct node *makenode ();
                     26: static struct variation *makevar ();
                     27: static struct def *makedef ();
                     28: 
                     29: void yyerror ();
                     30: 
                     31: 
1.1.1.2 ! root       32: #line 44 "bi-parser.y"
1.1       root       33: typedef union
                     34: {
                     35:   char *string;
                     36:   struct def *def;
                     37:   struct variation *variation;
                     38:   struct node *node;
                     39: } YYSTYPE;
                     40: 
                     41: #ifndef YYLTYPE
                     42: typedef
                     43:   struct yyltype
                     44:     {
                     45:       int timestamp;
                     46:       int first_line;
                     47:       int first_column;
                     48:       int last_line;
                     49:       int last_column;
                     50:       char *text;
                     51:    }
                     52:   yyltype;
                     53: 
                     54: #define YYLTYPE yyltype
                     55: #endif
                     56: 
                     57: #include <stdio.h>
                     58: 
1.1.1.2 ! root       59: #ifndef __cplusplus
1.1       root       60: #ifndef __STDC__
                     61: #define const
                     62: #endif
1.1.1.2 ! root       63: #endif
1.1       root       64: 
                     65: 
                     66: 
                     67: #define        YYFINAL         39
                     68: #define        YYFLAG          -32768
                     69: #define        YYNTBASE        8
                     70: 
                     71: #define YYTRANSLATE(x) ((unsigned)(x) <= 259 ? yytranslate[x] : 17)
                     72: 
                     73: static const char yytranslate[] = {     0,
                     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,     5,
                     78:      7,     2,     2,     6,     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,     2,     2,     2,     2,     2,
                     95:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     96:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     97:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     98:      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
                     99:      2,     2,     2,     2,     2,     1,     2,     3,     4
                    100: };
                    101: 
1.1.1.2 ! root      102: #if YYDEBUG != 0
1.1       root      103: static const short yyprhs[] = {     0,
                    104:      0,     2,     4,     7,    18,    20,    24,    28,    34,    42,
                    105:     52,    53,    55,    59,    60,    62,    66
                    106: };
                    107: 
                    108: static const short yyrhs[] = {     9,
                    109:      0,    10,     0,     9,    10,     0,     3,     5,     4,     6,
                    110:     13,     6,     5,    11,     7,     7,     0,    12,     0,    11,
                    111:      6,    12,     0,     5,    13,     7,     0,     5,    13,     6,
                    112:     14,     7,     0,     5,    13,     6,    14,     6,    14,     7,
                    113:      0,     5,    13,     6,    14,     6,    14,     6,    14,     7,
                    114:      0,     0,     4,     0,     5,    15,     7,     0,     0,    16,
                    115:      0,    16,     6,    15,     0,     4,     0
                    116: };
                    117: 
1.1.1.2 ! root      118: #endif
        !           119: 
1.1       root      120: #if YYDEBUG != 0
                    121: static const short yyrline[] = { 0,
1.1.1.2 ! root      122:     60,    65,    67,    71,    76,    78,    82,    85,    87,    89,
        !           123:     93,    95,    98,   101,   105,   108,   112
1.1       root      124: };
                    125: 
                    126: static const char * const yytname[] = {   "$","error","$illegal.","DEFOP","STRING",
                    127: "'('","','","')'","top","defs","def","variations","variation","opt_string","list",
                    128: "items","item",""
                    129: };
                    130: #endif
                    131: 
                    132: static const short yyr1[] = {     0,
                    133:      8,     9,     9,    10,    11,    11,    12,    12,    12,    12,
                    134:     13,    13,    14,    14,    15,    15,    16
                    135: };
                    136: 
                    137: static const short yyr2[] = {     0,
                    138:      1,     1,     2,    10,     1,     3,     3,     5,     7,     9,
                    139:      0,     1,     3,     0,     1,     3,     1
                    140: };
                    141: 
                    142: static const short yydefact[] = {     0,
                    143:      0,     1,     2,     0,     3,     0,    11,    12,     0,     0,
                    144:      0,    11,     0,     5,     0,     0,     0,    14,     7,     6,
                    145:      4,     0,     0,    17,     0,    15,    14,     8,    13,     0,
                    146:      0,    16,    14,     9,     0,    10,     0,     0,     0
                    147: };
                    148: 
                    149: static const short yydefgoto[] = {    37,
                    150:      2,     3,    13,    14,     9,    23,    25,    26
                    151: };
                    152: 
                    153: static const short yypact[] = {     2,
                    154:      6,     2,-32768,     8,-32768,     7,    10,-32768,     9,    11,
                    155:     12,    10,    -5,-32768,    -3,    12,    13,    14,-32768,-32768,
                    156: -32768,    17,     1,-32768,    15,    18,    14,-32768,-32768,    17,
                    157:      3,-32768,    14,-32768,    16,-32768,    25,    26,-32768
                    158: };
                    159: 
                    160: static const short yypgoto[] = {-32768,
                    161: -32768,    27,-32768,    19,    20,   -27,   -12,-32768
                    162: };
                    163: 
                    164: 
                    165: #define        YYLAST          35
                    166: 
                    167: 
                    168: static const short yytable[] = {    31,
                    169:     16,    17,    18,    19,     1,    35,    27,    28,    33,    34,
                    170:      4,     6,     7,     8,    10,    11,    12,    32,    22,    21,
                    171:     24,    29,    36,    30,    38,    39,     0,     0,     5,     0,
                    172:      0,    15,     0,     0,    20
                    173: };
                    174: 
                    175: static const short yycheck[] = {    27,
                    176:      6,     7,     6,     7,     3,    33,     6,     7,     6,     7,
                    177:      5,     4,     6,     4,     6,     5,     5,    30,     5,     7,
                    178:      4,     7,     7,     6,     0,     0,    -1,    -1,     2,    -1,
                    179:     -1,    12,    -1,    -1,    16
                    180: };
                    181: /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
1.1.1.2 ! root      182: #line 3 "/usr/local/lib/bison.simple"
1.1       root      183: 
                    184: /* Skeleton output parser for bison,
                    185:    Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
                    186: 
                    187:    This program is free software; you can redistribute it and/or modify
                    188:    it under the terms of the GNU General Public License as published by
                    189:    the Free Software Foundation; either version 1, or (at your option)
                    190:    any later version.
                    191: 
                    192:    This program is distributed in the hope that it will be useful,
                    193:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                    194:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                    195:    GNU General Public License for more details.
                    196: 
                    197:    You should have received a copy of the GNU General Public License
                    198:    along with this program; if not, write to the Free Software
                    199:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
                    200: 
                    201: 
                    202: #ifndef alloca
                    203: #ifdef __GNUC__
                    204: #define alloca __builtin_alloca
                    205: #else /* not GNU C.  */
                    206: #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
                    207: #include <alloca.h>
                    208: #else /* not sparc */
                    209: #if defined (MSDOS) && !defined (__TURBOC__)
                    210: #include <malloc.h>
                    211: #else /* not MSDOS, or __TURBOC__ */
                    212: #if defined(_AIX)
                    213: #include <malloc.h>
                    214:  #pragma alloca
                    215: #else /* not MSDOS, __TURBOC__, or _AIX */
                    216: #ifdef __hpux
                    217: #ifdef __cplusplus
                    218: extern "C" {
                    219: void *alloca (unsigned int);
                    220: };
                    221: #else /* not __cplusplus */
                    222: void *alloca ();
                    223: #endif /* not __cplusplus */
                    224: #endif /* __hpux */
                    225: #endif /* not _AIX */
                    226: #endif /* not MSDOS, or __TURBOC__ */
                    227: #endif /* not sparc.  */
                    228: #endif /* not GNU C.  */
                    229: #endif /* alloca not defined.  */
                    230: 
                    231: /* This is the parser code that is written into each bison parser
                    232:   when the %semantic_parser declaration is not specified in the grammar.
                    233:   It was written by Richard Stallman by simplifying the hairy parser
                    234:   used when %semantic_parser is specified.  */
                    235: 
                    236: /* Note: there must be only one dollar sign in this file.
                    237:    It is replaced by the list of actions, each action
                    238:    as one case of the switch.  */
                    239: 
                    240: #define yyerrok                (yyerrstatus = 0)
                    241: #define yyclearin      (yychar = YYEMPTY)
                    242: #define YYEMPTY                -2
                    243: #define YYEOF          0
                    244: #define YYACCEPT       return(0)
                    245: #define YYABORT        return(1)
                    246: #define YYERROR                goto yyerrlab1
                    247: /* Like YYERROR except do call yyerror.
                    248:    This remains here temporarily to ease the
                    249:    transition to the new meaning of YYERROR, for GCC.
                    250:    Once GCC version 2 has supplanted version 1, this can go.  */
                    251: #define YYFAIL         goto yyerrlab
                    252: #define YYRECOVERING()  (!!yyerrstatus)
                    253: #define YYBACKUP(token, value) \
                    254: do                                                             \
                    255:   if (yychar == YYEMPTY && yylen == 1)                         \
                    256:     { yychar = (token), yylval = (value);                      \
                    257:       yychar1 = YYTRANSLATE (yychar);                          \
                    258:       YYPOPSTACK;                                              \
                    259:       goto yybackup;                                           \
                    260:     }                                                          \
                    261:   else                                                         \
                    262:     { yyerror ("syntax error: cannot back up"); YYERROR; }     \
                    263: while (0)
                    264: 
                    265: #define YYTERROR       1
                    266: #define YYERRCODE      256
                    267: 
                    268: #ifndef YYPURE
                    269: #define YYLEX          yylex()
                    270: #endif
                    271: 
                    272: #ifdef YYPURE
                    273: #ifdef YYLSP_NEEDED
                    274: #define YYLEX          yylex(&yylval, &yylloc)
                    275: #else
                    276: #define YYLEX          yylex(&yylval)
                    277: #endif
                    278: #endif
                    279: 
                    280: /* If nonreentrant, generate the variables here */
                    281: 
                    282: #ifndef YYPURE
                    283: 
                    284: int    yychar;                 /*  the lookahead symbol                */
                    285: YYSTYPE        yylval;                 /*  the semantic value of the           */
                    286:                                /*  lookahead symbol                    */
                    287: 
                    288: #ifdef YYLSP_NEEDED
                    289: YYLTYPE yylloc;                        /*  location data for the lookahead     */
                    290:                                /*  symbol                              */
                    291: #endif
                    292: 
                    293: int yynerrs;                   /*  number of parse errors so far       */
                    294: #endif  /* not YYPURE */
                    295: 
                    296: #if YYDEBUG != 0
                    297: int yydebug;                   /*  nonzero means print parse trace     */
                    298: /* Since this is uninitialized, it does not stop multiple parsers
                    299:    from coexisting.  */
                    300: #endif
                    301: 
                    302: /*  YYINITDEPTH indicates the initial size of the parser's stacks      */
                    303: 
                    304: #ifndef        YYINITDEPTH
                    305: #define YYINITDEPTH 200
                    306: #endif
                    307: 
                    308: /*  YYMAXDEPTH is the maximum size the stacks can grow to
                    309:     (effective only if the built-in stack extension method is used).  */
                    310: 
                    311: #if YYMAXDEPTH == 0
                    312: #undef YYMAXDEPTH
                    313: #endif
                    314: 
                    315: #ifndef YYMAXDEPTH
                    316: #define YYMAXDEPTH 10000
                    317: #endif
                    318: 
                    319: /* Prevent warning if -Wstrict-prototypes.  */
                    320: #ifdef __GNUC__
                    321: int yyparse (void);
                    322: #endif
                    323: 
                    324: #if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
                    325: #define __yy_bcopy(FROM,TO,COUNT)      __builtin_memcpy(TO,FROM,COUNT)
                    326: #else                          /* not GNU C or C++ */
                    327: #ifndef __cplusplus
                    328: 
                    329: /* This is the most reliable way to avoid incompatibilities
                    330:    in available built-in functions on various systems.  */
                    331: static void
                    332: __yy_bcopy (from, to, count)
                    333:      char *from;
                    334:      char *to;
                    335:      int count;
                    336: {
                    337:   register char *f = from;
                    338:   register char *t = to;
                    339:   register int i = count;
                    340: 
                    341:   while (i-- > 0)
                    342:     *t++ = *f++;
                    343: }
                    344: 
                    345: #else /* __cplusplus */
                    346: 
                    347: /* This is the most reliable way to avoid incompatibilities
                    348:    in available built-in functions on various systems.  */
                    349: static void
                    350: __yy_bcopy (char *from, char *to, int count)
                    351: {
                    352:   register char *f = from;
                    353:   register char *t = to;
                    354:   register int i = count;
                    355: 
                    356:   while (i-- > 0)
                    357:     *t++ = *f++;
                    358: }
                    359: 
                    360: #endif
                    361: #endif
                    362: 
1.1.1.2 ! root      363: #line 184 "/usr/local/lib/bison.simple"
1.1       root      364: 
                    365: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
                    366:    into yyparse.  The argument should have type void *.
                    367:    It should actually point to an object.
                    368:    Grammar actions can access the variable by casting it
                    369:    to the proper pointer type.  */
                    370: 
                    371: #ifdef YYPARSE_PARAM
                    372: #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
                    373: #else
                    374: #define YYPARSE_PARAM
                    375: #define YYPARSE_PARAM_DECL
                    376: #endif
                    377: 
                    378: int
                    379: yyparse(YYPARSE_PARAM)
                    380:      YYPARSE_PARAM_DECL
                    381: {
                    382:   register int yystate;
                    383:   register int yyn;
                    384:   register short *yyssp;
                    385:   register YYSTYPE *yyvsp;
                    386:   int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
                    387:   int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
                    388: 
                    389:   short        yyssa[YYINITDEPTH];     /*  the state stack                     */
                    390:   YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
                    391: 
                    392:   short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
                    393:   YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
                    394: 
                    395: #ifdef YYLSP_NEEDED
                    396:   YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
                    397:   YYLTYPE *yyls = yylsa;
                    398:   YYLTYPE *yylsp;
                    399: 
                    400: #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
                    401: #else
                    402: #define YYPOPSTACK   (yyvsp--, yyssp--)
                    403: #endif
                    404: 
                    405:   int yystacksize = YYINITDEPTH;
                    406: 
                    407: #ifdef YYPURE
                    408:   int yychar;
                    409:   YYSTYPE yylval;
                    410:   int yynerrs;
                    411: #ifdef YYLSP_NEEDED
                    412:   YYLTYPE yylloc;
                    413: #endif
                    414: #endif
                    415: 
                    416:   YYSTYPE yyval;               /*  the variable used to return         */
                    417:                                /*  semantic values from the action     */
                    418:                                /*  routines                            */
                    419: 
                    420:   int yylen;
                    421: 
                    422: #if YYDEBUG != 0
                    423:   if (yydebug)
                    424:     fprintf(stderr, "Starting parse\n");
                    425: #endif
                    426: 
                    427:   yystate = 0;
                    428:   yyerrstatus = 0;
                    429:   yynerrs = 0;
                    430:   yychar = YYEMPTY;            /* Cause a token to be read.  */
                    431: 
                    432:   /* Initialize stack pointers.
                    433:      Waste one element of value and location stack
                    434:      so that they stay on the same level as the state stack.
                    435:      The wasted elements are never initialized.  */
                    436: 
                    437:   yyssp = yyss - 1;
                    438:   yyvsp = yyvs;
                    439: #ifdef YYLSP_NEEDED
                    440:   yylsp = yyls;
                    441: #endif
                    442: 
                    443: /* Push a new state, which is found in  yystate  .  */
                    444: /* In all cases, when you get here, the value and location stacks
                    445:    have just been pushed. so pushing a state here evens the stacks.  */
                    446: yynewstate:
                    447: 
                    448:   *++yyssp = yystate;
                    449: 
                    450:   if (yyssp >= yyss + yystacksize - 1)
                    451:     {
                    452:       /* Give user a chance to reallocate the stack */
                    453:       /* Use copies of these so that the &'s don't force the real ones into memory. */
                    454:       YYSTYPE *yyvs1 = yyvs;
                    455:       short *yyss1 = yyss;
                    456: #ifdef YYLSP_NEEDED
                    457:       YYLTYPE *yyls1 = yyls;
                    458: #endif
                    459: 
                    460:       /* Get the current used size of the three stacks, in elements.  */
                    461:       int size = yyssp - yyss + 1;
                    462: 
                    463: #ifdef yyoverflow
                    464:       /* Each stack pointer address is followed by the size of
                    465:         the data in use in that stack, in bytes.  */
                    466: #ifdef YYLSP_NEEDED
                    467:       /* This used to be a conditional around just the two extra args,
                    468:         but that might be undefined if yyoverflow is a macro.  */
                    469:       yyoverflow("parser stack overflow",
                    470:                 &yyss1, size * sizeof (*yyssp),
                    471:                 &yyvs1, size * sizeof (*yyvsp),
                    472:                 &yyls1, size * sizeof (*yylsp),
                    473:                 &yystacksize);
                    474: #else
                    475:       yyoverflow("parser stack overflow",
                    476:                 &yyss1, size * sizeof (*yyssp),
                    477:                 &yyvs1, size * sizeof (*yyvsp),
                    478:                 &yystacksize);
                    479: #endif
                    480: 
                    481:       yyss = yyss1; yyvs = yyvs1;
                    482: #ifdef YYLSP_NEEDED
                    483:       yyls = yyls1;
                    484: #endif
                    485: #else /* no yyoverflow */
                    486:       /* Extend the stack our own way.  */
                    487:       if (yystacksize >= YYMAXDEPTH)
                    488:        {
                    489:          yyerror("parser stack overflow");
                    490:          return 2;
                    491:        }
                    492:       yystacksize *= 2;
                    493:       if (yystacksize > YYMAXDEPTH)
                    494:        yystacksize = YYMAXDEPTH;
                    495:       yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
                    496:       __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
                    497:       yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
                    498:       __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
                    499: #ifdef YYLSP_NEEDED
                    500:       yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
                    501:       __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
                    502: #endif
                    503: #endif /* no yyoverflow */
                    504: 
                    505:       yyssp = yyss + size - 1;
                    506:       yyvsp = yyvs + size - 1;
                    507: #ifdef YYLSP_NEEDED
                    508:       yylsp = yyls + size - 1;
                    509: #endif
                    510: 
                    511: #if YYDEBUG != 0
                    512:       if (yydebug)
                    513:        fprintf(stderr, "Stack size increased to %d\n", yystacksize);
                    514: #endif
                    515: 
                    516:       if (yyssp >= yyss + yystacksize - 1)
                    517:        YYABORT;
                    518:     }
                    519: 
                    520: #if YYDEBUG != 0
                    521:   if (yydebug)
                    522:     fprintf(stderr, "Entering state %d\n", yystate);
                    523: #endif
                    524: 
                    525:   goto yybackup;
                    526:  yybackup:
                    527: 
                    528: /* Do appropriate processing given the current state.  */
                    529: /* Read a lookahead token if we need one and don't already have one.  */
                    530: /* yyresume: */
                    531: 
                    532:   /* First try to decide what to do without reference to lookahead token.  */
                    533: 
                    534:   yyn = yypact[yystate];
                    535:   if (yyn == YYFLAG)
                    536:     goto yydefault;
                    537: 
                    538:   /* Not known => get a lookahead token if don't already have one.  */
                    539: 
                    540:   /* yychar is either YYEMPTY or YYEOF
                    541:      or a valid token in external form.  */
                    542: 
                    543:   if (yychar == YYEMPTY)
                    544:     {
                    545: #if YYDEBUG != 0
                    546:       if (yydebug)
                    547:        fprintf(stderr, "Reading a token: ");
                    548: #endif
                    549:       yychar = YYLEX;
                    550:     }
                    551: 
                    552:   /* Convert token to internal form (in yychar1) for indexing tables with */
                    553: 
                    554:   if (yychar <= 0)             /* This means end of input. */
                    555:     {
                    556:       yychar1 = 0;
                    557:       yychar = YYEOF;          /* Don't call YYLEX any more */
                    558: 
                    559: #if YYDEBUG != 0
                    560:       if (yydebug)
                    561:        fprintf(stderr, "Now at end of input.\n");
                    562: #endif
                    563:     }
                    564:   else
                    565:     {
                    566:       yychar1 = YYTRANSLATE(yychar);
                    567: 
                    568: #if YYDEBUG != 0
                    569:       if (yydebug)
                    570:        {
                    571:          fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
                    572:          /* Give the individual parser a way to print the precise meaning
                    573:             of a token, for further debugging info.  */
                    574: #ifdef YYPRINT
                    575:          YYPRINT (stderr, yychar, yylval);
                    576: #endif
                    577:          fprintf (stderr, ")\n");
                    578:        }
                    579: #endif
                    580:     }
                    581: 
                    582:   yyn += yychar1;
                    583:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
                    584:     goto yydefault;
                    585: 
                    586:   yyn = yytable[yyn];
                    587: 
                    588:   /* yyn is what to do for this token type in this state.
                    589:      Negative => reduce, -yyn is rule number.
                    590:      Positive => shift, yyn is new state.
                    591:        New state is final state => don't bother to shift,
                    592:        just return success.
                    593:      0, or most negative number => error.  */
                    594: 
                    595:   if (yyn < 0)
                    596:     {
                    597:       if (yyn == YYFLAG)
                    598:        goto yyerrlab;
                    599:       yyn = -yyn;
                    600:       goto yyreduce;
                    601:     }
                    602:   else if (yyn == 0)
                    603:     goto yyerrlab;
                    604: 
                    605:   if (yyn == YYFINAL)
                    606:     YYACCEPT;
                    607: 
                    608:   /* Shift the lookahead token.  */
                    609: 
                    610: #if YYDEBUG != 0
                    611:   if (yydebug)
                    612:     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
                    613: #endif
                    614: 
                    615:   /* Discard the token being shifted unless it is eof.  */
                    616:   if (yychar != YYEOF)
                    617:     yychar = YYEMPTY;
                    618: 
                    619:   *++yyvsp = yylval;
                    620: #ifdef YYLSP_NEEDED
                    621:   *++yylsp = yylloc;
                    622: #endif
                    623: 
                    624:   /* count tokens shifted since error; after three, turn off error status.  */
                    625:   if (yyerrstatus) yyerrstatus--;
                    626: 
                    627:   yystate = yyn;
                    628:   goto yynewstate;
                    629: 
                    630: /* Do the default action for the current state.  */
                    631: yydefault:
                    632: 
                    633:   yyn = yydefact[yystate];
                    634:   if (yyn == 0)
                    635:     goto yyerrlab;
                    636: 
                    637: /* Do a reduction.  yyn is the number of a rule to reduce with.  */
                    638: yyreduce:
                    639:   yylen = yyr2[yyn];
                    640:   if (yylen > 0)
                    641:     yyval = yyvsp[1-yylen]; /* implement default value of the action */
                    642: 
                    643: #if YYDEBUG != 0
                    644:   if (yydebug)
                    645:     {
                    646:       int i;
                    647: 
                    648:       fprintf (stderr, "Reducing via rule %d (line %d), ",
                    649:               yyn, yyrline[yyn]);
                    650: 
                    651:       /* Print the symbols being reduced, and their result.  */
                    652:       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
                    653:        fprintf (stderr, "%s ", yytname[yyrhs[i]]);
                    654:       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
                    655:     }
                    656: #endif
                    657: 
                    658: 
                    659:   switch (yyn) {
                    660: 
                    661: case 1:
1.1.1.2 ! root      662: #line 62 "bi-parser.y"
1.1       root      663: { defs = yyvsp[0].def; ;
                    664:     break;}
                    665: case 3:
1.1.1.2 ! root      666: #line 68 "bi-parser.y"
1.1       root      667: { yyvsp[0].def->next = yyvsp[-1].def; yyval.def = yyvsp[0].def; ;
                    668:     break;}
                    669: case 4:
1.1.1.2 ! root      670: #line 73 "bi-parser.y"
1.1       root      671: { yyval.def = makedef (yyvsp[-7].string, yyvsp[-5].string, yyvsp[-2].variation); ;
                    672:     break;}
                    673: case 6:
1.1.1.2 ! root      674: #line 79 "bi-parser.y"
1.1       root      675: { yyvsp[0].variation->next = yyvsp[-2].variation; yyval.variation = yyvsp[0].variation; ;
                    676:     break;}
                    677: case 7:
1.1.1.2 ! root      678: #line 84 "bi-parser.y"
1.1       root      679: { yyval.variation = makevar (yyvsp[-1].string, (struct node *) NULL, (struct node *) NULL, (struct node *) NULL); ;
                    680:     break;}
                    681: case 8:
1.1.1.2 ! root      682: #line 86 "bi-parser.y"
1.1       root      683: { yyval.variation = makevar (yyvsp[-3].string, yyvsp[-1].node, (struct node *) NULL, (struct node *) NULL); ;
                    684:     break;}
                    685: case 9:
1.1.1.2 ! root      686: #line 88 "bi-parser.y"
1.1       root      687: { yyval.variation = makevar (yyvsp[-5].string, yyvsp[-3].node, yyvsp[-1].node, (struct node *) NULL); ;
                    688:     break;}
                    689: case 10:
1.1.1.2 ! root      690: #line 90 "bi-parser.y"
1.1       root      691: { yyval.variation = makevar (yyvsp[-7].string, yyvsp[-5].node, yyvsp[-3].node, yyvsp[-1].node); ;
                    692:     break;}
                    693: case 11:
1.1.1.2 ! root      694: #line 94 "bi-parser.y"
1.1       root      695: { yyval.string = ""; ;
                    696:     break;}
                    697: case 12:
1.1.1.2 ! root      698: #line 95 "bi-parser.y"
1.1       root      699: { yyval.string = yyvsp[0].string; ;
                    700:     break;}
                    701: case 13:
1.1.1.2 ! root      702: #line 100 "bi-parser.y"
1.1       root      703: { yyval.node = yyvsp[-1].node; ;
                    704:     break;}
                    705: case 14:
1.1.1.2 ! root      706: #line 102 "bi-parser.y"
1.1       root      707: { yyval.node = NULL; ;
                    708:     break;}
                    709: case 16:
1.1.1.2 ! root      710: #line 109 "bi-parser.y"
1.1       root      711: { yyvsp[-2].node->next = yyvsp[0].node; yyval.node = yyvsp[-2].node; ;
                    712:     break;}
                    713: case 17:
1.1.1.2 ! root      714: #line 114 "bi-parser.y"
1.1       root      715: { yyval.node = makenode (yyvsp[0].string); ;
                    716:     break;}
                    717: }
                    718:    /* the action file gets copied in in place of this dollarsign */
1.1.1.2 ! root      719: #line 480 "/usr/local/lib/bison.simple"
1.1       root      720: 
                    721:   yyvsp -= yylen;
                    722:   yyssp -= yylen;
                    723: #ifdef YYLSP_NEEDED
                    724:   yylsp -= yylen;
                    725: #endif
                    726: 
                    727: #if YYDEBUG != 0
                    728:   if (yydebug)
                    729:     {
                    730:       short *ssp1 = yyss - 1;
                    731:       fprintf (stderr, "state stack now");
                    732:       while (ssp1 != yyssp)
                    733:        fprintf (stderr, " %d", *++ssp1);
                    734:       fprintf (stderr, "\n");
                    735:     }
                    736: #endif
                    737: 
                    738:   *++yyvsp = yyval;
                    739: 
                    740: #ifdef YYLSP_NEEDED
                    741:   yylsp++;
                    742:   if (yylen == 0)
                    743:     {
                    744:       yylsp->first_line = yylloc.first_line;
                    745:       yylsp->first_column = yylloc.first_column;
                    746:       yylsp->last_line = (yylsp-1)->last_line;
                    747:       yylsp->last_column = (yylsp-1)->last_column;
                    748:       yylsp->text = 0;
                    749:     }
                    750:   else
                    751:     {
                    752:       yylsp->last_line = (yylsp+yylen-1)->last_line;
                    753:       yylsp->last_column = (yylsp+yylen-1)->last_column;
                    754:     }
                    755: #endif
                    756: 
                    757:   /* Now "shift" the result of the reduction.
                    758:      Determine what state that goes to,
                    759:      based on the state we popped back to
                    760:      and the rule number reduced by.  */
                    761: 
                    762:   yyn = yyr1[yyn];
                    763: 
                    764:   yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
                    765:   if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
                    766:     yystate = yytable[yystate];
                    767:   else
                    768:     yystate = yydefgoto[yyn - YYNTBASE];
                    769: 
                    770:   goto yynewstate;
                    771: 
                    772: yyerrlab:   /* here on detecting error */
                    773: 
                    774:   if (! yyerrstatus)
                    775:     /* If not already recovering from an error, report this error.  */
                    776:     {
                    777:       ++yynerrs;
                    778: 
                    779: #ifdef YYERROR_VERBOSE
                    780:       yyn = yypact[yystate];
                    781: 
                    782:       if (yyn > YYFLAG && yyn < YYLAST)
                    783:        {
                    784:          int size = 0;
                    785:          char *msg;
                    786:          int x, count;
                    787: 
                    788:          count = 0;
                    789:          /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
                    790:          for (x = (yyn < 0 ? -yyn : 0);
                    791:               x < (sizeof(yytname) / sizeof(char *)); x++)
                    792:            if (yycheck[x + yyn] == x)
                    793:              size += strlen(yytname[x]) + 15, count++;
                    794:          msg = (char *) malloc(size + 15);
                    795:          if (msg != 0)
                    796:            {
                    797:              strcpy(msg, "parse error");
                    798: 
                    799:              if (count < 5)
                    800:                {
                    801:                  count = 0;
                    802:                  for (x = (yyn < 0 ? -yyn : 0);
                    803:                       x < (sizeof(yytname) / sizeof(char *)); x++)
                    804:                    if (yycheck[x + yyn] == x)
                    805:                      {
                    806:                        strcat(msg, count == 0 ? ", expecting `" : " or `");
                    807:                        strcat(msg, yytname[x]);
                    808:                        strcat(msg, "'");
                    809:                        count++;
                    810:                      }
                    811:                }
                    812:              yyerror(msg);
                    813:              free(msg);
                    814:            }
                    815:          else
                    816:            yyerror ("parse error; also virtual memory exceeded");
                    817:        }
                    818:       else
                    819: #endif /* YYERROR_VERBOSE */
                    820:        yyerror("parse error");
                    821:     }
                    822: 
                    823:   goto yyerrlab1;
                    824: yyerrlab1:   /* here on error raised explicitly by an action */
                    825: 
                    826:   if (yyerrstatus == 3)
                    827:     {
                    828:       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
                    829: 
                    830:       /* return failure if at end of input */
                    831:       if (yychar == YYEOF)
                    832:        YYABORT;
                    833: 
                    834: #if YYDEBUG != 0
                    835:       if (yydebug)
                    836:        fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
                    837: #endif
                    838: 
                    839:       yychar = YYEMPTY;
                    840:     }
                    841: 
                    842:   /* Else will try to reuse lookahead token
                    843:      after shifting the error token.  */
                    844: 
                    845:   yyerrstatus = 3;             /* Each real token shifted decrements this */
                    846: 
                    847:   goto yyerrhandle;
                    848: 
                    849: yyerrdefault:  /* current state does not do anything special for the error token. */
                    850: 
                    851: #if 0
                    852:   /* This is wrong; only states that explicitly want error tokens
                    853:      should shift them.  */
                    854:   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
                    855:   if (yyn) goto yydefault;
                    856: #endif
                    857: 
                    858: yyerrpop:   /* pop the current state because it cannot handle the error token */
                    859: 
                    860:   if (yyssp == yyss) YYABORT;
                    861:   yyvsp--;
                    862:   yystate = *--yyssp;
                    863: #ifdef YYLSP_NEEDED
                    864:   yylsp--;
                    865: #endif
                    866: 
                    867: #if YYDEBUG != 0
                    868:   if (yydebug)
                    869:     {
                    870:       short *ssp1 = yyss - 1;
                    871:       fprintf (stderr, "Error: state stack now");
                    872:       while (ssp1 != yyssp)
                    873:        fprintf (stderr, " %d", *++ssp1);
                    874:       fprintf (stderr, "\n");
                    875:     }
                    876: #endif
                    877: 
                    878: yyerrhandle:
                    879: 
                    880:   yyn = yypact[yystate];
                    881:   if (yyn == YYFLAG)
                    882:     goto yyerrdefault;
                    883: 
                    884:   yyn += YYTERROR;
                    885:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
                    886:     goto yyerrdefault;
                    887: 
                    888:   yyn = yytable[yyn];
                    889:   if (yyn < 0)
                    890:     {
                    891:       if (yyn == YYFLAG)
                    892:        goto yyerrpop;
                    893:       yyn = -yyn;
                    894:       goto yyreduce;
                    895:     }
                    896:   else if (yyn == 0)
                    897:     goto yyerrpop;
                    898: 
                    899:   if (yyn == YYFINAL)
                    900:     YYACCEPT;
                    901: 
                    902: #if YYDEBUG != 0
                    903:   if (yydebug)
                    904:     fprintf(stderr, "Shifting error token, ");
                    905: #endif
                    906: 
                    907:   *++yyvsp = yylval;
                    908: #ifdef YYLSP_NEEDED
                    909:   *++yylsp = yylloc;
                    910: #endif
                    911: 
                    912:   yystate = yyn;
                    913:   goto yynewstate;
                    914: }
1.1.1.2 ! root      915: #line 117 "bi-parser.y"
1.1       root      916: 
                    917: 
                    918: static struct node *
                    919: makenode (s)
                    920:      char *s;
                    921: {
                    922:   struct node *n;
                    923: 
                    924:   n = (struct node *) malloc (sizeof (struct node));
                    925:   n->text = s;
                    926:   n->next = NULL;
                    927:   return n;
                    928: }
                    929: 
                    930: static struct variation *
                    931: makevar (name, inputs, outputs, literals)
                    932:      char *name;
                    933:      struct node *inputs, *outputs, *literals;
                    934: {
                    935:   struct variation *v;
                    936: 
                    937:   v = (struct variation *) malloc (sizeof (struct variation));
                    938:   v->name = name;
                    939:   v->code = ndefs++;
                    940:   v->inputs = inputs;
                    941:   v->outputs = outputs;
                    942:   v->literals = literals;
                    943:   v->next = NULL;
                    944:   return v;
                    945: }
                    946: 
                    947: static struct def *
                    948: makedef (name, template, vars)
                    949:      char *name, *template;
                    950:      struct variation *vars;
                    951: {
                    952:   struct def *d;
                    953: 
                    954:   d = (struct def *) malloc (sizeof (struct def));
                    955:   d->basename = name;
                    956:   d->template = template;
                    957:   d->variations = vars;
                    958:   d->next = NULL;
                    959:   return d;
                    960: }
                    961: 
                    962: void
                    963: yyerror (s)
                    964:      char *s;
                    965: {
                    966:   fprintf (stderr, "syntax error in input\n");
                    967:   exit (FATAL_EXIT_CODE);
                    968: }

unix.superglobalmegacorp.com

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