From cae9bfe9da0a9d46554940c127fb2a022f1360f6 Mon Sep 17 00:00:00 2001 From: wkj Date: Mon, 14 Feb 2005 20:27:13 +0000 Subject: Reduce the differences between yaccpar and yaccpars. Add support for passing an argument through yyparse to yylex. --- lib/yaccpars | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'lib/yaccpars') diff --git a/lib/yaccpars b/lib/yaccpars index be83835e..28addfa6 100644 --- a/lib/yaccpars +++ b/lib/yaccpars @@ -9,16 +9,22 @@ #include "y.debug" #else #define yydebug 0 -char* yytoknames[1]; /* for debugging */ -char* yystates[1]; /* for debugging */ +static const char* yytoknames[1]; /* for debugging */ +static const char* yystates[1]; /* for debugging */ #endif /* parser for yacc output */ - +#ifdef YYARG +#define yynerrs yyarg->yynerrs +#define yyerrflag yyarg->yyerrflag +#define yyval yyarg->yyval +#define yylval yyarg->yylval +#else int yynerrs = 0; /* number of errors */ int yyerrflag = 0; /* error recovery flag */ +#endif -char* +static const char* yytokname(int yyc) { static char x[10]; @@ -30,7 +36,7 @@ yytokname(int yyc) return x; } -char* +static const char* yystatname(int yys) { static char x[10]; @@ -42,14 +48,22 @@ yystatname(int yys) return x; } -long +static long +#ifdef YYARG +yylex1(struct Yyarg *yyarg) +#else yylex1(void) +#endif { long yychar; - long *t3p; + const long *t3p; int c; +#ifdef YYARG + yychar = yylex(yyarg); +#else yychar = yylex(); +#endif if(yychar <= 0) { c = yytok1[0]; goto out; @@ -83,23 +97,29 @@ out: } int +#ifdef YYARG +yyparse(struct Yyarg *yyarg) +#else yyparse(void) +#endif { struct { YYSTYPE yyv; int yys; } yys[YYMAXDEPTH], *yyp, *yypt; - short *yyxi; + const short *yyxi; int yyj, yym, yystate, yyn, yyg; + long yychar; +#ifndef YYARG YYSTYPE save1, save2; int save3, save4; - long yychar; save1 = yylval; save2 = yyval; save3 = yynerrs; save4 = yyerrflag; +#endif yystate = 0; yychar = -1; @@ -117,10 +137,12 @@ ret1: goto ret; ret: +#ifndef YYARG yylval = save1; yyval = save2; yynerrs = save3; yyerrflag = save4; +#endif return yyn; yystack: @@ -141,7 +163,11 @@ yynewstate: if(yyn <= YYFLAG) goto yydefault; /* simple state */ if(yychar < 0) +#ifdef YYARG + yychar = yylex1(yyarg); +#else yychar = yylex1(); +#endif yyn += yychar; if(yyn < 0 || yyn >= YYLAST) goto yydefault; @@ -160,7 +186,11 @@ yydefault: yyn = yydef[yystate]; if(yyn == -2) { if(yychar < 0) - yychar = yylex1(); +#ifdef YYARG + yychar = yylex1(yyarg); +#else + yychar = yylex1(); +#endif /* look through exception table */ for(yyxi=yyexca;; yyxi+=2) -- cgit v1.2.3