2 static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
10 #define yyclearin (yychar = YYEMPTY)
11 #define yyerrok (yyerrflag = 0)
12 #define YYRECOVERING() (yyerrflag != 0)
16 #define yyparse error_parse
20 #define yylex error_lex
24 #define yyerror error_error
28 #define yychar error_char
32 #define yyval error_val
36 #define yylval error_lval
40 #define yydebug error_debug
44 #define yynerrs error_nerrs
48 #define yyerrflag error_errflag
49 #endif /* yyerrflag */
52 #define yylhs error_lhs
56 #define yylen error_len
60 #define yydefred error_defred
64 #define yydgoto error_dgoto
68 #define yysindex error_sindex
72 #define yyrindex error_rindex
76 #define yygindex error_gindex
80 #define yytable error_table
84 #define yycheck error_check
88 #define yyname error_name
92 #define yyrule error_rule
94 #define YYPREFIX "error_"
98 #line 2 "pure_error.y"
102 #define YYLEX_PARAM &yylval
103 #define YYLEX_DECL() yylex(YYSTYPE *yylval)
104 #define YYERROR_DECL() yyerror(const char *s)
106 static void YYERROR_DECL();
109 #line 110 "pure_error.tab.c"
115 /* compatibility with bison */
117 /* compatibility with FreeBSD */
118 # ifdef YYPARSE_PARAM_TYPE
119 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
121 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
124 # define YYPARSE_DECL() yyparse(void)
127 /* Parameters sent to lex. */
129 # ifdef YYLEX_PARAM_TYPE
130 # define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
132 # define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
134 # define YYLEX yylex(&yylval, YYLEX_PARAM)
136 # define YYLEX_DECL() yylex(YYSTYPE *yylval)
137 # define YYLEX yylex(&yylval)
140 /* Parameters sent to yyerror. */
142 #define YYERROR_DECL() yyerror(const char *s)
145 #define YYERROR_CALL(msg) yyerror(msg)
148 extern int YYPARSE_DECL();
150 #define YYERRCODE 256
151 static const short error_lhs[] = { -1,
154 static const short error_len[] = { 2,
157 static const short error_defred[] = { 0,
160 static const short error_dgoto[] = { 2,
162 static const short error_sindex[] = { -256,
165 static const short error_rindex[] = { 0,
168 static const short error_gindex[] = { 0,
170 #define YYTABLESIZE 0
171 static const short error_table[] = { 1,
173 static const short error_check[] = { 256,
181 static const char *yyname[] = {
185 static const char *yyrule[] = {
195 /* define the initial stack-sizes */
198 #define YYMAXDEPTH YYSTACKSIZE
201 #define YYSTACKSIZE YYMAXDEPTH
203 #define YYSTACKSIZE 500
204 #define YYMAXDEPTH 500
208 #define YYINITSTACKSIZE 500
218 #line 17 "pure_error.y"
223 extern int YYLEX_DECL();
229 printf("yyparse() = %d\n", yyparse());
234 yylex(YYSTYPE *value)
236 return value ? 0 : -1;
240 yyerror(const char* s)
244 #line 245 "pure_error.tab.c"
247 #include <stdio.h> /* needed for printf */
250 #include <stdlib.h> /* needed for malloc, etc */
251 #include <string.h> /* needed for memset */
253 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
254 static int yygrowstack(YYSTACKDATA *data)
261 if ((newsize = data->stacksize) == 0)
262 newsize = YYINITSTACKSIZE;
263 else if (newsize >= YYMAXDEPTH)
265 else if ((newsize *= 2) > YYMAXDEPTH)
266 newsize = YYMAXDEPTH;
268 i = (int) (data->s_mark - data->s_base);
269 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
273 data->s_base = newss;
274 data->s_mark = newss + i;
276 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
280 data->l_base = newvs;
281 data->l_mark = newvs + i;
283 data->stacksize = newsize;
284 data->s_last = data->s_base + newsize - 1;
288 #if YYPURE || defined(YY_NO_LEAKS)
289 static void yyfreestack(YYSTACKDATA *data)
293 memset(data, 0, sizeof(*data));
296 #define yyfreestack(data) /* nothing */
299 #define YYABORT goto yyabort
300 #define YYREJECT goto yyabort
301 #define YYACCEPT goto yyaccept
302 #define YYERROR goto yyerrlab
312 /* variables for the parser stack */
314 int yym, yyn, yystate;
318 if ((yys = getenv("YYDEBUG")) != 0)
321 if (yyn >= '0' && yyn <= '9')
332 memset(&yystack, 0, sizeof(yystack));
335 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
336 yystack.s_mark = yystack.s_base;
337 yystack.l_mark = yystack.l_base;
342 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
345 if ((yychar = YYLEX) < 0) yychar = 0;
350 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
351 if (!yys) yys = "illegal-symbol";
352 printf("%sdebug: state %d, reading %d (%s)\n",
353 YYPREFIX, yystate, yychar, yys);
357 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
358 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
362 printf("%sdebug: state %d, shifting to state %d\n",
363 YYPREFIX, yystate, yytable[yyn]);
365 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
369 yystate = yytable[yyn];
370 *++yystack.s_mark = yytable[yyn];
371 *++yystack.l_mark = yylval;
373 if (yyerrflag > 0) --yyerrflag;
376 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
377 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
382 if (yyerrflag) goto yyinrecovery;
384 yyerror("syntax error");
397 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
398 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
402 printf("%sdebug: state %d, error recovery shifting\
403 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
405 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
409 yystate = yytable[yyn];
410 *++yystack.s_mark = yytable[yyn];
411 *++yystack.l_mark = yylval;
418 printf("%sdebug: error recovery discarding state %d\n",
419 YYPREFIX, *yystack.s_mark);
421 if (yystack.s_mark <= yystack.s_base) goto yyabort;
429 if (yychar == 0) goto yyabort;
434 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
435 if (!yys) yys = "illegal-symbol";
436 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
437 YYPREFIX, yystate, yychar, yys);
447 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
448 YYPREFIX, yystate, yyn, yyrule[yyn]);
452 yyval = yystack.l_mark[1-yym];
454 memset(&yyval, 0, sizeof yyval);
458 yystack.s_mark -= yym;
459 yystate = *yystack.s_mark;
460 yystack.l_mark -= yym;
462 if (yystate == 0 && yym == 0)
466 printf("%sdebug: after reduction, shifting from state 0 to\
467 state %d\n", YYPREFIX, YYFINAL);
470 *++yystack.s_mark = YYFINAL;
471 *++yystack.l_mark = yyval;
474 if ((yychar = YYLEX) < 0) yychar = 0;
479 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
480 if (!yys) yys = "illegal-symbol";
481 printf("%sdebug: state %d, reading %d (%s)\n",
482 YYPREFIX, YYFINAL, yychar, yys);
486 if (yychar == 0) goto yyaccept;
489 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
490 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
491 yystate = yytable[yyn];
493 yystate = yydgoto[yym];
496 printf("%sdebug: after reduction, shifting from state %d \
497 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
499 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
503 *++yystack.s_mark = (short) yystate;
504 *++yystack.l_mark = yyval;
508 yyerror("yacc stack overflow");
511 yyfreestack(&yystack);
515 yyfreestack(&yystack);