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