Annotation of win32/tools/usr/share/bison.simple, revision 1.2

1.1       parser      1: /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
                      2: #line 3 "/usr/share/bison.simple"
                      3: /* This file comes from bison-1.28.  */
                      4: 
                      5: /* Skeleton output parser for bison,
                      6:    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
                      7: 
                      8:    This program is free software; you can redistribute it and/or modify
                      9:    it under the terms of the GNU General Public License as published by
                     10:    the Free Software Foundation; either version 2, or (at your option)
                     11:    any later version.
                     12: 
                     13:    This program is distributed in the hope that it will be useful,
                     14:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     16:    GNU General Public License for more details.
                     17: 
                     18:    You should have received a copy of the GNU General Public License
                     19:    along with this program; if not, write to the Free Software
                     20:    Foundation, Inc., 59 Temple Place - Suite 330,
                     21:    Boston, MA 02111-1307, USA.  */
                     22: 
                     23: /* As a special exception, when this file is copied by Bison into a
                     24:    Bison output file, you may use that output file without restriction.
                     25:    This special exception was added by the Free Software Foundation
                     26:    in version 1.24 of Bison.  */
                     27: 
                     28: /* This is the parser code that is written into each bison parser
                     29:   when the %semantic_parser declaration is not specified in the grammar.
                     30:   It was written by Richard Stallman by simplifying the hairy parser
                     31:   used when %semantic_parser is specified.  */
                     32: 
                     33: #ifndef YYSTACK_USE_ALLOCA
                     34: #ifdef alloca
                     35: #define YYSTACK_USE_ALLOCA
                     36: #else /* alloca not defined */
                     37: #ifdef __GNUC__
                     38: #define YYSTACK_USE_ALLOCA
                     39: #define alloca __builtin_alloca
                     40: #else /* not GNU C.  */
                     41: #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
                     42: #define YYSTACK_USE_ALLOCA
                     43: #include <alloca.h>
                     44: #else /* not sparc */
                     45: /* We think this test detects Watcom and Microsoft C.  */
                     46: /* This used to test MSDOS, but that is a bad idea
                     47:    since that symbol is in the user namespace.  */
                     48: #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
                     49: #if 0 /* No need for malloc.h, which pollutes the namespace;
                     50:         instead, just don't use alloca.  */
                     51: #include <malloc.h>
                     52: #endif
                     53: #else /* not MSDOS, or __TURBOC__ */
                     54: #if defined(_AIX)
                     55: /* I don't know what this was needed for, but it pollutes the namespace.
                     56:    So I turned it off.   rms, 2 May 1997.  */
                     57: /* #include <malloc.h>  */
                     58:  #pragma alloca
                     59: #define YYSTACK_USE_ALLOCA
                     60: #else /* not MSDOS, or __TURBOC__, or _AIX */
                     61: #if 0
                     62: #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
                     63:                 and on HPUX 10.  Eventually we can turn this on.  */
                     64: #define YYSTACK_USE_ALLOCA
                     65: #define alloca __builtin_alloca
                     66: #endif /* __hpux */
                     67: #endif
                     68: #endif /* not _AIX */
                     69: #endif /* not MSDOS, or __TURBOC__ */
                     70: #endif /* not sparc */
                     71: #endif /* not GNU C */
                     72: #endif /* alloca not defined */
                     73: #endif /* YYSTACK_USE_ALLOCA not defined */
                     74: 
                     75: #ifdef YYSTACK_USE_ALLOCA
                     76: #define YYSTACK_ALLOC alloca
                     77: #else
                     78: #define YYSTACK_ALLOC malloc
                     79: #endif
                     80: 
                     81: /* Note: there must be only one dollar sign in this file.
                     82:    It is replaced by the list of actions, each action
                     83:    as one case of the switch.  */
                     84: 
                     85: #define yyerrok                (yyerrstatus = 0)
                     86: #define yyclearin      (yychar = YYEMPTY)
                     87: #define YYEMPTY                -2
                     88: #define YYEOF          0
                     89: #define YYACCEPT       goto yyacceptlab
                     90: #define YYABORT        goto yyabortlab
                     91: #define YYERROR                goto yyerrlab1
                     92: /* Like YYERROR except do call yyerror.
                     93:    This remains here temporarily to ease the
                     94:    transition to the new meaning of YYERROR, for GCC.
                     95:    Once GCC version 2 has supplanted version 1, this can go.  */
                     96: #define YYFAIL         goto yyerrlab
                     97: #define YYRECOVERING()  (!!yyerrstatus)
                     98: #define YYBACKUP(token, value) \
                     99: do                                                             \
                    100:   if (yychar == YYEMPTY && yylen == 1)                         \
                    101:     { yychar = (token), yylval = (value);                      \
                    102:       yychar1 = YYTRANSLATE (yychar);                          \
                    103:       YYPOPSTACK;                                              \
                    104:       goto yybackup;                                           \
                    105:     }                                                          \
                    106:   else                                                         \
                    107:     { yyerror ("syntax error: cannot back up"); YYERROR; }     \
                    108: while (0)
                    109: 
                    110: #define YYTERROR       1
                    111: #define YYERRCODE      256
                    112: 
                    113: #ifndef YYPURE
                    114: #define YYLEX          yylex()
                    115: #endif
                    116: 
                    117: #ifdef YYPURE
                    118: #ifdef YYLSP_NEEDED
                    119: #ifdef YYLEX_PARAM
                    120: #define YYLEX          yylex(&yylval, &yylloc, YYLEX_PARAM)
                    121: #else
                    122: #define YYLEX          yylex(&yylval, &yylloc)
                    123: #endif
                    124: #else /* not YYLSP_NEEDED */
                    125: #ifdef YYLEX_PARAM
                    126: #define YYLEX          yylex(&yylval, YYLEX_PARAM)
                    127: #else
                    128: #define YYLEX          yylex(&yylval)
                    129: #endif
                    130: #endif /* not YYLSP_NEEDED */
                    131: #endif
                    132: 
                    133: /* If nonreentrant, generate the variables here */
                    134: 
                    135: #ifndef YYPURE
                    136: 
                    137: int    yychar;                 /*  the lookahead symbol                */
                    138: YYSTYPE        yylval;                 /*  the semantic value of the           */
                    139:                                /*  lookahead symbol                    */
                    140: 
                    141: #ifdef YYLSP_NEEDED
                    142: YYLTYPE yylloc;                        /*  location data for the lookahead     */
                    143:                                /*  symbol                              */
                    144: #endif
                    145: 
                    146: int yynerrs;                   /*  number of parse errors so far       */
                    147: #endif  /* not YYPURE */
                    148: 
                    149: #if YYDEBUG != 0
                    150: int yydebug;                   /*  nonzero means print parse trace     */
                    151: /* Since this is uninitialized, it does not stop multiple parsers
                    152:    from coexisting.  */
                    153: #endif
                    154: 
                    155: /*  YYINITDEPTH indicates the initial size of the parser's stacks      */
                    156: 
                    157: #ifndef        YYINITDEPTH
                    158: #define YYINITDEPTH 200
                    159: #endif
                    160: 
                    161: /*  YYMAXDEPTH is the maximum size the stacks can grow to
                    162:     (effective only if the built-in stack extension method is used).  */
                    163: 
                    164: #if YYMAXDEPTH == 0
                    165: #undef YYMAXDEPTH
                    166: #endif
                    167: 
                    168: #ifndef YYMAXDEPTH
                    169: #define YYMAXDEPTH 10000
                    170: #endif
                    171: 
                    172: /* Define __yy_memcpy.  Note that the size argument
                    173:    should be passed with type unsigned int, because that is what the non-GCC
                    174:    definitions require.  With GCC, __builtin_memcpy takes an arg
                    175:    of type size_t, but it can handle unsigned int.  */
                    176: 
                    177: #if __GNUC__ > 1               /* GNU C and GNU C++ define this.  */
                    178: #define __yy_memcpy(TO,FROM,COUNT)     __builtin_memcpy(TO,FROM,COUNT)
                    179: #else                          /* not GNU C or C++ */
                    180: #ifndef __cplusplus
                    181: 
                    182: /* This is the most reliable way to avoid incompatibilities
                    183:    in available built-in functions on various systems.  */
                    184: static void
                    185: __yy_memcpy (to, from, count)
                    186:      char *to;
                    187:      char *from;
                    188:      unsigned int count;
                    189: {
                    190:   register char *f = from;
                    191:   register char *t = to;
                    192:   register int i = count;
                    193: 
                    194:   while (i-- > 0)
                    195:     *t++ = *f++;
                    196: }
                    197: 
                    198: #else /* __cplusplus */
                    199: 
                    200: /* This is the most reliable way to avoid incompatibilities
                    201:    in available built-in functions on various systems.  */
                    202: static void
                    203: __yy_memcpy (char *to, char *from, unsigned int count)
                    204: {
                    205:   register char *t = to;
                    206:   register char *f = from;
                    207:   register int i = count;
                    208: 
                    209:   while (i-- > 0)
                    210:     *t++ = *f++;
                    211: }
                    212: 
                    213: #endif
                    214: #endif
                    215: 
                    216: #line 217 "/usr/share/bison.simple"
                    217: 
                    218: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
                    219:    into yyparse.  The argument should have type void *.
                    220:    It should actually point to an object.
                    221:    Grammar actions can access the variable by casting it
                    222:    to the proper pointer type.  */
                    223: 
                    224: #ifdef YYPARSE_PARAM
                    225: #ifdef __cplusplus
                    226: #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
                    227: #define YYPARSE_PARAM_DECL
                    228: #else /* not __cplusplus */
                    229: #define YYPARSE_PARAM_ARG YYPARSE_PARAM
                    230: #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
                    231: #endif /* not __cplusplus */
                    232: #else /* not YYPARSE_PARAM */
                    233: #define YYPARSE_PARAM_ARG
                    234: #define YYPARSE_PARAM_DECL
                    235: #endif /* not YYPARSE_PARAM */
                    236: 
                    237: /* Prevent warning if -Wstrict-prototypes.  */
                    238: #ifdef __GNUC__
                    239: #ifdef YYPARSE_PARAM
                    240: int yyparse (void *);
                    241: #else
                    242: int yyparse (void);
                    243: #endif
                    244: #endif
                    245: 
                    246: int
                    247: yyparse(YYPARSE_PARAM_ARG)
                    248:      YYPARSE_PARAM_DECL
                    249: {
                    250:   register int yystate;
                    251:   register int yyn;
                    252:   register short *yyssp;
                    253:   register YYSTYPE *yyvsp;
                    254:   int yyerrstatus;     /*  number of tokens to shift before error messages enabled */
                    255:   int yychar1 = 0;             /*  lookahead token as an internal (translated) token number */
                    256: 
                    257:   short        yyssa[YYINITDEPTH];     /*  the state stack                     */
                    258:   YYSTYPE yyvsa[YYINITDEPTH];  /*  the semantic value stack            */
                    259: 
                    260:   short *yyss = yyssa;         /*  refer to the stacks thru separate pointers */
                    261:   YYSTYPE *yyvs = yyvsa;       /*  to allow yyoverflow to reallocate them elsewhere */
                    262: 
                    263: #ifdef YYLSP_NEEDED
                    264:   YYLTYPE yylsa[YYINITDEPTH];  /*  the location stack                  */
                    265:   YYLTYPE *yyls = yylsa;
                    266:   YYLTYPE *yylsp;
                    267: 
                    268: #define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
                    269: #else
                    270: #define YYPOPSTACK   (yyvsp--, yyssp--)
                    271: #endif
                    272: 
                    273:   int yystacksize = YYINITDEPTH;
                    274:   int yyfree_stacks = 0;
                    275: 
                    276: #ifdef YYPURE
                    277:   int yychar;
1.2     ! paf       278:   YYSTYPE yylval=0; /*paf:calm down, vc7 warning level 4*/
1.1       parser    279:   int yynerrs;
                    280: #ifdef YYLSP_NEEDED
                    281:   YYLTYPE yylloc;
                    282: #endif
                    283: #endif
                    284: 
1.2     ! paf       285:   YYSTYPE yyval=0; /*paf:calm down, vc7 warning level 4*/              /*  the variable used to return         */
1.1       parser    286:                                /*  semantic values from the action     */
                    287:                                /*  routines                            */
                    288: 
                    289:   int yylen;
                    290: 
                    291: #if YYDEBUG != 0
                    292:   if (yydebug)
                    293:     fprintf(stderr, "Starting parse\n");
                    294: #endif
                    295: 
                    296:   yystate = 0;
                    297:   yyerrstatus = 0;
                    298:   yynerrs = 0;
                    299:   yychar = YYEMPTY;            /* Cause a token to be read.  */
                    300: 
                    301:   /* Initialize stack pointers.
                    302:      Waste one element of value and location stack
                    303:      so that they stay on the same level as the state stack.
                    304:      The wasted elements are never initialized.  */
                    305: 
                    306:   yyssp = yyss - 1;
                    307:   yyvsp = yyvs;
                    308: #ifdef YYLSP_NEEDED
                    309:   yylsp = yyls;
                    310: #endif
                    311: 
                    312: /* Push a new state, which is found in  yystate  .  */
                    313: /* In all cases, when you get here, the value and location stacks
                    314:    have just been pushed. so pushing a state here evens the stacks.  */
                    315: yynewstate:
                    316: 
                    317:   *++yyssp = yystate;
                    318: 
                    319:   if (yyssp >= yyss + yystacksize - 1)
                    320:     {
                    321:       /* Give user a chance to reallocate the stack */
                    322:       /* Use copies of these so that the &'s don't force the real ones into memory. */
                    323:       YYSTYPE *yyvs1 = yyvs;
                    324:       short *yyss1 = yyss;
                    325: #ifdef YYLSP_NEEDED
                    326:       YYLTYPE *yyls1 = yyls;
                    327: #endif
                    328: 
                    329:       /* Get the current used size of the three stacks, in elements.  */
                    330:       int size = yyssp - yyss + 1;
                    331: 
                    332: #ifdef yyoverflow
                    333:       /* Each stack pointer address is followed by the size of
                    334:         the data in use in that stack, in bytes.  */
                    335: #ifdef YYLSP_NEEDED
                    336:       /* This used to be a conditional around just the two extra args,
                    337:         but that might be undefined if yyoverflow is a macro.  */
                    338:       yyoverflow("parser stack overflow",
                    339:                 &yyss1, size * sizeof (*yyssp),
                    340:                 &yyvs1, size * sizeof (*yyvsp),
                    341:                 &yyls1, size * sizeof (*yylsp),
                    342:                 &yystacksize);
                    343: #else
                    344:       yyoverflow("parser stack overflow",
                    345:                 &yyss1, size * sizeof (*yyssp),
                    346:                 &yyvs1, size * sizeof (*yyvsp),
                    347:                 &yystacksize);
                    348: #endif
                    349: 
                    350:       yyss = yyss1; yyvs = yyvs1;
                    351: #ifdef YYLSP_NEEDED
                    352:       yyls = yyls1;
                    353: #endif
                    354: #else /* no yyoverflow */
                    355:       /* Extend the stack our own way.  */
                    356:       if (yystacksize >= YYMAXDEPTH)
                    357:        {
                    358:          yyerror("parser stack overflow");
                    359:          if (yyfree_stacks)
                    360:            {
                    361:              free (yyss);
                    362:              free (yyvs);
                    363: #ifdef YYLSP_NEEDED
                    364:              free (yyls);
                    365: #endif
                    366:            }
                    367:          return 2;
                    368:        }
                    369:       yystacksize *= 2;
                    370:       if (yystacksize > YYMAXDEPTH)
                    371:        yystacksize = YYMAXDEPTH;
                    372: #ifndef YYSTACK_USE_ALLOCA
                    373:       yyfree_stacks = 1;
                    374: #endif
                    375:       yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
                    376:       __yy_memcpy ((char *)yyss, (char *)yyss1,
                    377:                   size * (unsigned int) sizeof (*yyssp));
                    378:       yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
                    379:       __yy_memcpy ((char *)yyvs, (char *)yyvs1,
                    380:                   size * (unsigned int) sizeof (*yyvsp));
                    381: #ifdef YYLSP_NEEDED
                    382:       yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
                    383:       __yy_memcpy ((char *)yyls, (char *)yyls1,
                    384:                   size * (unsigned int) sizeof (*yylsp));
                    385: #endif
                    386: #endif /* no yyoverflow */
                    387: 
                    388:       yyssp = yyss + size - 1;
                    389:       yyvsp = yyvs + size - 1;
                    390: #ifdef YYLSP_NEEDED
                    391:       yylsp = yyls + size - 1;
                    392: #endif
                    393: 
                    394: #if YYDEBUG != 0
                    395:       if (yydebug)
                    396:        fprintf(stderr, "Stack size increased to %d\n", yystacksize);
                    397: #endif
                    398: 
                    399:       if (yyssp >= yyss + yystacksize - 1)
                    400:        YYABORT;
                    401:     }
                    402: 
                    403: #if YYDEBUG != 0
                    404:   if (yydebug)
                    405:     fprintf(stderr, "Entering state %d\n", yystate);
                    406: #endif
                    407: 
                    408:   goto yybackup;
                    409:  yybackup:
                    410: 
                    411: /* Do appropriate processing given the current state.  */
                    412: /* Read a lookahead token if we need one and don't already have one.  */
                    413: /* yyresume: */
                    414: 
                    415:   /* First try to decide what to do without reference to lookahead token.  */
                    416: 
                    417:   yyn = yypact[yystate];
                    418:   if (yyn == YYFLAG)
                    419:     goto yydefault;
                    420: 
                    421:   /* Not known => get a lookahead token if don't already have one.  */
                    422: 
                    423:   /* yychar is either YYEMPTY or YYEOF
                    424:      or a valid token in external form.  */
                    425: 
                    426:   if (yychar == YYEMPTY)
                    427:     {
                    428: #if YYDEBUG != 0
                    429:       if (yydebug)
                    430:        fprintf(stderr, "Reading a token: ");
                    431: #endif
                    432:       yychar = YYLEX;
                    433:     }
                    434: 
                    435:   /* Convert token to internal form (in yychar1) for indexing tables with */
                    436: 
                    437:   if (yychar <= 0)             /* This means end of input. */
                    438:     {
                    439:       yychar1 = 0;
                    440:       yychar = YYEOF;          /* Don't call YYLEX any more */
                    441: 
                    442: #if YYDEBUG != 0
                    443:       if (yydebug)
                    444:        fprintf(stderr, "Now at end of input.\n");
                    445: #endif
                    446:     }
                    447:   else
                    448:     {
                    449:       yychar1 = YYTRANSLATE(yychar);
                    450: 
                    451: #if YYDEBUG != 0
                    452:       if (yydebug)
                    453:        {
                    454:          fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
                    455:          /* Give the individual parser a way to print the precise meaning
                    456:             of a token, for further debugging info.  */
                    457: #ifdef YYPRINT
                    458:          YYPRINT (stderr, yychar, yylval);
                    459: #endif
                    460:          fprintf (stderr, ")\n");
                    461:        }
                    462: #endif
                    463:     }
                    464: 
                    465:   yyn += yychar1;
                    466:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
                    467:     goto yydefault;
                    468: 
                    469:   yyn = yytable[yyn];
                    470: 
                    471:   /* yyn is what to do for this token type in this state.
                    472:      Negative => reduce, -yyn is rule number.
                    473:      Positive => shift, yyn is new state.
                    474:        New state is final state => don't bother to shift,
                    475:        just return success.
                    476:      0, or most negative number => error.  */
                    477: 
                    478:   if (yyn < 0)
                    479:     {
                    480:       if (yyn == YYFLAG)
                    481:        goto yyerrlab;
                    482:       yyn = -yyn;
                    483:       goto yyreduce;
                    484:     }
                    485:   else if (yyn == 0)
                    486:     goto yyerrlab;
                    487: 
                    488:   if (yyn == YYFINAL)
                    489:     YYACCEPT;
                    490: 
                    491:   /* Shift the lookahead token.  */
                    492: 
                    493: #if YYDEBUG != 0
                    494:   if (yydebug)
                    495:     fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
                    496: #endif
                    497: 
                    498:   /* Discard the token being shifted unless it is eof.  */
                    499:   if (yychar != YYEOF)
                    500:     yychar = YYEMPTY;
                    501: 
                    502:   *++yyvsp = yylval;
                    503: #ifdef YYLSP_NEEDED
                    504:   *++yylsp = yylloc;
                    505: #endif
                    506: 
                    507:   /* count tokens shifted since error; after three, turn off error status.  */
                    508:   if (yyerrstatus) yyerrstatus--;
                    509: 
                    510:   yystate = yyn;
                    511:   goto yynewstate;
                    512: 
                    513: /* Do the default action for the current state.  */
                    514: yydefault:
                    515: 
                    516:   yyn = yydefact[yystate];
                    517:   if (yyn == 0)
                    518:     goto yyerrlab;
                    519: 
                    520: /* Do a reduction.  yyn is the number of a rule to reduce with.  */
                    521: yyreduce:
                    522:   yylen = yyr2[yyn];
                    523:   if (yylen > 0)
                    524:     yyval = yyvsp[1-yylen]; /* implement default value of the action */
                    525: 
                    526: #if YYDEBUG != 0
                    527:   if (yydebug)
                    528:     {
                    529:       int i;
                    530: 
                    531:       fprintf (stderr, "Reducing via rule %d (line %d), ",
                    532:               yyn, yyrline[yyn]);
                    533: 
                    534:       /* Print the symbols being reduced, and their result.  */
                    535:       for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
                    536:        fprintf (stderr, "%s ", yytname[yyrhs[i]]);
                    537:       fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
                    538:     }
                    539: #endif
                    540: 
                    541: $   /* the action file gets copied in in place of this dollarsign */
                    542: #line 543 "/usr/share/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: 
                    602: #ifdef YYERROR_VERBOSE
                    603:       yyn = yypact[yystate];
                    604: 
                    605:       if (yyn > YYFLAG && yyn < YYLAST)
                    606:        {
                    607:          int size = 0;
                    608:          char *msg;
                    609:          int x, count;
                    610: 
                    611:          count = 0;
                    612:          /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
                    613:          for (x = (yyn < 0 ? -yyn : 0);
                    614:               x < (sizeof(yytname) / sizeof(char *)); x++)
                    615:            if (yycheck[x + yyn] == x)
                    616:              size += strlen(yytname[x]) + 15, count++;
                    617:          msg = (char *) malloc(size + 15);
                    618:          if (msg != 0)
                    619:            {
                    620:              strcpy(msg, "parse error");
                    621: 
                    622:              if (count < 5)
                    623:                {
                    624:                  count = 0;
                    625:                  for (x = (yyn < 0 ? -yyn : 0);
                    626:                       x < (sizeof(yytname) / sizeof(char *)); x++)
                    627:                    if (yycheck[x + yyn] == x)
                    628:                      {
                    629:                        strcat(msg, count == 0 ? ", expecting `" : " or `");
                    630:                        strcat(msg, yytname[x]);
                    631:                        strcat(msg, "'");
                    632:                        count++;
                    633:                      }
                    634:                }
                    635:              yyerror(msg);
                    636:              free(msg);
                    637:            }
                    638:          else
                    639:            yyerror ("parse error; also virtual memory exceeded");
                    640:        }
                    641:       else
                    642: #endif /* YYERROR_VERBOSE */
                    643:        yyerror("parse error");
                    644:     }
                    645: 
                    646:   goto yyerrlab1;
                    647: yyerrlab1:   /* here on error raised explicitly by an action */
                    648: 
                    649:   if (yyerrstatus == 3)
                    650:     {
                    651:       /* if just tried and failed to reuse lookahead token after an error, discard it.  */
                    652: 
                    653:       /* return failure if at end of input */
                    654:       if (yychar == YYEOF)
                    655:        YYABORT;
                    656: 
                    657: #if YYDEBUG != 0
                    658:       if (yydebug)
                    659:        fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
                    660: #endif
                    661: 
                    662:       yychar = YYEMPTY;
                    663:     }
                    664: 
                    665:   /* Else will try to reuse lookahead token
                    666:      after shifting the error token.  */
                    667: 
                    668:   yyerrstatus = 3;             /* Each real token shifted decrements this */
                    669: 
                    670:   goto yyerrhandle;
                    671: 
                    672: yyerrdefault:  /* current state does not do anything special for the error token. */
                    673: 
                    674: #if 0
                    675:   /* This is wrong; only states that explicitly want error tokens
                    676:      should shift them.  */
                    677:   yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
                    678:   if (yyn) goto yydefault;
                    679: #endif
                    680: 
                    681: yyerrpop:   /* pop the current state because it cannot handle the error token */
                    682: 
                    683:   if (yyssp == yyss) YYABORT;
                    684:   yyvsp--;
                    685:   yystate = *--yyssp;
                    686: #ifdef YYLSP_NEEDED
                    687:   yylsp--;
                    688: #endif
                    689: 
                    690: #if YYDEBUG != 0
                    691:   if (yydebug)
                    692:     {
                    693:       short *ssp1 = yyss - 1;
                    694:       fprintf (stderr, "Error: state stack now");
                    695:       while (ssp1 != yyssp)
                    696:        fprintf (stderr, " %d", *++ssp1);
                    697:       fprintf (stderr, "\n");
                    698:     }
                    699: #endif
                    700: 
                    701: yyerrhandle:
                    702: 
                    703:   yyn = yypact[yystate];
                    704:   if (yyn == YYFLAG)
                    705:     goto yyerrdefault;
                    706: 
                    707:   yyn += YYTERROR;
                    708:   if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
                    709:     goto yyerrdefault;
                    710: 
                    711:   yyn = yytable[yyn];
                    712:   if (yyn < 0)
                    713:     {
                    714:       if (yyn == YYFLAG)
                    715:        goto yyerrpop;
                    716:       yyn = -yyn;
                    717:       goto yyreduce;
                    718:     }
                    719:   else if (yyn == 0)
                    720:     goto yyerrpop;
                    721: 
                    722:   if (yyn == YYFINAL)
                    723:     YYACCEPT;
                    724: 
                    725: #if YYDEBUG != 0
                    726:   if (yydebug)
                    727:     fprintf(stderr, "Shifting error token, ");
                    728: #endif
                    729: 
                    730:   *++yyvsp = yylval;
                    731: #ifdef YYLSP_NEEDED
                    732:   *++yylsp = yylloc;
                    733: #endif
                    734: 
                    735:   yystate = yyn;
                    736:   goto yynewstate;
                    737: 
                    738:  yyacceptlab:
                    739:   /* YYACCEPT comes here.  */
                    740:   if (yyfree_stacks)
                    741:     {
                    742:       free (yyss);
                    743:       free (yyvs);
                    744: #ifdef YYLSP_NEEDED
                    745:       free (yyls);
                    746: #endif
                    747:     }
                    748:   return 0;
                    749: 
                    750:  yyabortlab:
                    751:   /* YYABORT comes here.  */
                    752:   if (yyfree_stacks)
                    753:     {
                    754:       free (yyss);
                    755:       free (yyvs);
                    756: #ifdef YYLSP_NEEDED
                    757:       free (yyls);
                    758: #endif
                    759:     }
                    760:   return 1;
                    761: }

E-mail: