Path: blob/main/contrib/byacc/test/btyacc/calc.tab.c
48083 views
/* original parser id follows */1/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */2/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */34#define YYBYACC 15#define YYMAJOR 26#define YYMINOR 07#define YYCHECK "yyyymmdd"89#define YYEMPTY (-1)10#define yyclearin (yychar = YYEMPTY)11#define yyerrok (yyerrflag = 0)12#define YYRECOVERING() (yyerrflag != 0)13#define YYENOMEM (-2)14#define YYEOF 015#undef YYBTYACC16#define YYBTYACC 017#define YYDEBUGSTR YYPREFIX "debug"1819#ifndef yyparse20#define yyparse calc_parse21#endif /* yyparse */2223#ifndef yylex24#define yylex calc_lex25#endif /* yylex */2627#ifndef yyerror28#define yyerror calc_error29#endif /* yyerror */3031#ifndef yychar32#define yychar calc_char33#endif /* yychar */3435#ifndef yyval36#define yyval calc_val37#endif /* yyval */3839#ifndef yylval40#define yylval calc_lval41#endif /* yylval */4243#ifndef yydebug44#define yydebug calc_debug45#endif /* yydebug */4647#ifndef yynerrs48#define yynerrs calc_nerrs49#endif /* yynerrs */5051#ifndef yyerrflag52#define yyerrflag calc_errflag53#endif /* yyerrflag */5455#ifndef yylhs56#define yylhs calc_lhs57#endif /* yylhs */5859#ifndef yylen60#define yylen calc_len61#endif /* yylen */6263#ifndef yydefred64#define yydefred calc_defred65#endif /* yydefred */6667#ifndef yystos68#define yystos calc_stos69#endif /* yystos */7071#ifndef yydgoto72#define yydgoto calc_dgoto73#endif /* yydgoto */7475#ifndef yysindex76#define yysindex calc_sindex77#endif /* yysindex */7879#ifndef yyrindex80#define yyrindex calc_rindex81#endif /* yyrindex */8283#ifndef yygindex84#define yygindex calc_gindex85#endif /* yygindex */8687#ifndef yytable88#define yytable calc_table89#endif /* yytable */9091#ifndef yycheck92#define yycheck calc_check93#endif /* yycheck */9495#ifndef yyname96#define yyname calc_name97#endif /* yyname */9899#ifndef yyrule100#define yyrule calc_rule101#endif /* yyrule */102103#if YYBTYACC104105#ifndef yycindex106#define yycindex calc_cindex107#endif /* yycindex */108109#ifndef yyctable110#define yyctable calc_ctable111#endif /* yyctable */112113#endif /* YYBTYACC */114115#define YYPREFIX "calc_"116117#define YYPURE 0118119#line 2 "calc.y"120# include <stdio.h>121# include <ctype.h>122123int regs[26];124int base;125126extern int yylex(void);127static void yyerror(const char *s);128129#line 131 "calc.tab.c"130131#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)132/* Default: YYSTYPE is the semantic value type. */133typedef int YYSTYPE;134# define YYSTYPE_IS_DECLARED 1135#endif136137/* compatibility with bison */138#ifdef YYPARSE_PARAM139/* compatibility with FreeBSD */140# ifdef YYPARSE_PARAM_TYPE141# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)142# else143# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)144# endif145#else146# define YYPARSE_DECL() yyparse(void)147#endif148149/* Parameters sent to lex. */150#ifdef YYLEX_PARAM151# define YYLEX_DECL() yylex(void *YYLEX_PARAM)152# define YYLEX yylex(YYLEX_PARAM)153#else154# define YYLEX_DECL() yylex(void)155# define YYLEX yylex()156#endif157158/* Parameters sent to yyerror. */159#ifndef YYERROR_DECL160#define YYERROR_DECL() yyerror(const char *s)161#endif162#ifndef YYERROR_CALL163#define YYERROR_CALL(msg) yyerror(msg)164#endif165166extern int YYPARSE_DECL();167168#define DIGIT 257169#define LETTER 258170#define UMINUS 259171#define YYERRCODE 256172typedef int YYINT;173static const YYINT calc_lhs[] = { -1,1740, 0, 0, 1, 1, 2, 2, 2, 2, 2,1752, 2, 2, 2, 2, 2, 3, 3,176};177static const YYINT calc_len[] = { 2,1780, 3, 3, 1, 3, 3, 3, 3, 3, 3,1793, 3, 3, 2, 1, 1, 1, 2,180};181static const YYINT calc_defred[] = { 1,1820, 0, 17, 0, 0, 0, 0, 0, 0, 3,1830, 15, 14, 0, 2, 0, 0, 0, 0, 0,1840, 0, 18, 0, 6, 0, 0, 0, 0, 9,18510, 11,186};187#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)188static const YYINT calc_stos[] = { 0,189261, 256, 257, 258, 45, 40, 262, 263, 264, 10,19061, 258, 263, 263, 10, 124, 38, 43, 45, 42,19147, 37, 257, 263, 41, 263, 263, 263, 263, 263,192263, 263,193};194#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */195static const YYINT calc_dgoto[] = { 1,1967, 8, 9,197};198static const YYINT calc_sindex[] = { 0,199-40, -7, 0, -55, -38, -38, 1, -29, -247, 0,200-38, 0, 0, 22, 0, -38, -38, -38, -38, -38,201-38, -38, 0, -29, 0, 51, 60, -20, -20, 0,2020, 0,203};204static const YYINT calc_rindex[] = { 0,2050, 0, 0, 2, 0, 0, 0, 9, -9, 0,2060, 0, 0, 0, 0, 0, 0, 0, 0, 0,2070, 0, 0, 10, 0, -6, 14, 5, 13, 0,2080, 0,209};210#if YYBTYACC211static const YYINT calc_cindex[] = { 0,2120, 0, 0, 0, 0, 0, 0, 0, 0, 0,2130, 0, 0, 0, 0, 0, 0, 0, 0, 0,2140, 0, 0, 0, 0, 0, 0, 0, 0, 0,2150, 0,216};217#endif218static const YYINT calc_gindex[] = { 0,2190, 65, 0,220};221#define YYTABLESIZE 220222static const YYINT calc_table[] = { 6,22316, 6, 10, 13, 5, 11, 5, 22, 17, 23,22415, 15, 20, 18, 7, 19, 22, 21, 4, 5,2250, 20, 8, 12, 0, 0, 21, 16, 16, 0,2260, 16, 16, 16, 13, 16, 0, 16, 15, 15,2270, 0, 7, 15, 15, 7, 15, 7, 15, 7,2288, 12, 0, 8, 12, 8, 0, 8, 22, 17,2290, 0, 25, 20, 18, 0, 19, 0, 21, 13,23014, 0, 0, 0, 0, 24, 0, 0, 0, 0,23126, 27, 28, 29, 30, 31, 32, 22, 17, 0,2320, 0, 20, 18, 16, 19, 22, 21, 0, 0,2330, 20, 18, 0, 19, 0, 21, 0, 0, 0,2340, 0, 0, 0, 16, 0, 0, 13, 0, 0,2350, 0, 0, 0, 0, 15, 0, 0, 7, 0,2360, 0, 0, 0, 0, 0, 8, 12, 0, 0,2370, 0, 0, 0, 0, 16, 0, 0, 0, 0,2380, 0, 0, 0, 0, 0, 0, 0, 0, 0,2390, 0, 0, 0, 0, 0, 0, 0, 0, 0,2400, 0, 0, 0, 0, 0, 0, 0, 0, 0,2410, 0, 0, 0, 0, 0, 0, 0, 0, 0,2420, 0, 0, 0, 0, 0, 0, 0, 0, 0,2430, 0, 0, 0, 0, 0, 0, 0, 0, 0,2440, 0, 0, 0, 0, 2, 3, 4, 3, 12,245};246static const YYINT calc_check[] = { 40,24710, 40, 10, 10, 45, 61, 45, 37, 38, 257,24810, 10, 42, 43, 10, 45, 37, 47, 10, 10,249-1, 42, 10, 10, -1, -1, 47, 37, 38, -1,250-1, 41, 42, 43, 41, 45, -1, 47, 37, 38,251-1, -1, 38, 42, 43, 41, 45, 43, 47, 45,25238, 38, -1, 41, 41, 43, -1, 45, 37, 38,253-1, -1, 41, 42, 43, -1, 45, -1, 47, 5,2546, -1, -1, -1, -1, 11, -1, -1, -1, -1,25516, 17, 18, 19, 20, 21, 22, 37, 38, -1,256-1, -1, 42, 43, 124, 45, 37, 47, -1, -1,257-1, 42, 43, -1, 45, -1, 47, -1, -1, -1,258-1, -1, -1, -1, 124, -1, -1, 124, -1, -1,259-1, -1, -1, -1, -1, 124, -1, -1, 124, -1,260-1, -1, -1, -1, -1, -1, 124, 124, -1, -1,261-1, -1, -1, -1, -1, 124, -1, -1, -1, -1,262-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,263-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,264-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,265-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,266-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,267-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,268-1, -1, -1, -1, -1, 256, 257, 258, 257, 258,269};270#if YYBTYACC271static const YYINT calc_ctable[] = { -1,272-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,273-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,274-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,275-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,276-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,277-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,278-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,279-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,280-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,281-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,282-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,283-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,284-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,285-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,286-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,287-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,288-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,289-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,290-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,291-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,292-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,293-1, -1, -1, -1, -1, -1, -1, -1, -1,294};295#endif296#define YYFINAL 1297#ifndef YYDEBUG298#define YYDEBUG 0299#endif300#define YYMAXTOKEN 259301#define YYUNDFTOKEN 265302#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))303#if YYDEBUG304static const char *const calc_name[] = {305306"$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3070,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,3080,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3090,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,3100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3130,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",314"illegal-symbol",315};316static const char *const calc_rule[] = {317"$accept : list",318"list :",319"list : list stat '\\n'",320"list : list error '\\n'",321"stat : expr",322"stat : LETTER '=' expr",323"expr : '(' expr ')'",324"expr : expr '+' expr",325"expr : expr '-' expr",326"expr : expr '*' expr",327"expr : expr '/' expr",328"expr : expr '%' expr",329"expr : expr '&' expr",330"expr : expr '|' expr",331"expr : '-' expr",332"expr : LETTER",333"expr : number",334"number : DIGIT",335"number : number DIGIT",336337};338#endif339340#if YYDEBUG341int yydebug;342#endif343344int yyerrflag;345int yychar;346YYSTYPE yyval;347YYSTYPE yylval;348int yynerrs;349350#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)351YYLTYPE yyloc; /* position returned by actions */352YYLTYPE yylloc; /* position from the lexer */353#endif354355#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)356#ifndef YYLLOC_DEFAULT357#define YYLLOC_DEFAULT(loc, rhs, n) \358do \359{ \360if (n == 0) \361{ \362(loc).first_line = YYRHSLOC(rhs, 0).last_line; \363(loc).first_column = YYRHSLOC(rhs, 0).last_column; \364(loc).last_line = YYRHSLOC(rhs, 0).last_line; \365(loc).last_column = YYRHSLOC(rhs, 0).last_column; \366} \367else \368{ \369(loc).first_line = YYRHSLOC(rhs, 1).first_line; \370(loc).first_column = YYRHSLOC(rhs, 1).first_column; \371(loc).last_line = YYRHSLOC(rhs, n).last_line; \372(loc).last_column = YYRHSLOC(rhs, n).last_column; \373} \374} while (0)375#endif /* YYLLOC_DEFAULT */376#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */377#if YYBTYACC378379#ifndef YYLVQUEUEGROWTH380#define YYLVQUEUEGROWTH 32381#endif382#endif /* YYBTYACC */383384/* define the initial stack-sizes */385#ifdef YYSTACKSIZE386#undef YYMAXDEPTH387#define YYMAXDEPTH YYSTACKSIZE388#else389#ifdef YYMAXDEPTH390#define YYSTACKSIZE YYMAXDEPTH391#else392#define YYSTACKSIZE 10000393#define YYMAXDEPTH 10000394#endif395#endif396397#ifndef YYINITSTACKSIZE398#define YYINITSTACKSIZE 200399#endif400401typedef struct {402unsigned stacksize;403YYINT *s_base;404YYINT *s_mark;405YYINT *s_last;406YYSTYPE *l_base;407YYSTYPE *l_mark;408#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)409YYLTYPE *p_base;410YYLTYPE *p_mark;411#endif412} YYSTACKDATA;413#if YYBTYACC414415struct YYParseState_s416{417struct YYParseState_s *save; /* Previously saved parser state */418YYSTACKDATA yystack; /* saved parser stack */419int state; /* saved parser state */420int errflag; /* saved error recovery status */421int lexeme; /* saved index of the conflict lexeme in the lexical queue */422YYINT ctry; /* saved index in yyctable[] for this conflict */423};424typedef struct YYParseState_s YYParseState;425#endif /* YYBTYACC */426/* variables for the parser stack */427static YYSTACKDATA yystack;428#if YYBTYACC429430/* Current parser state */431static YYParseState *yyps = 0;432433/* yypath != NULL: do the full parse, starting at *yypath parser state. */434static YYParseState *yypath = 0;435436/* Base of the lexical value queue */437static YYSTYPE *yylvals = 0;438439/* Current position at lexical value queue */440static YYSTYPE *yylvp = 0;441442/* End position of lexical value queue */443static YYSTYPE *yylve = 0;444445/* The last allocated position at the lexical value queue */446static YYSTYPE *yylvlim = 0;447448#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)449/* Base of the lexical position queue */450static YYLTYPE *yylpsns = 0;451452/* Current position at lexical position queue */453static YYLTYPE *yylpp = 0;454455/* End position of lexical position queue */456static YYLTYPE *yylpe = 0;457458/* The last allocated position at the lexical position queue */459static YYLTYPE *yylplim = 0;460#endif461462/* Current position at lexical token queue */463static YYINT *yylexp = 0;464465static YYINT *yylexemes = 0;466#endif /* YYBTYACC */467#line 66 "calc.y"468/* start of programs */469470int471main (void)472{473while(!feof(stdin)) {474yyparse();475}476return 0;477}478479static void480yyerror(const char *s)481{482fprintf(stderr, "%s\n", s);483}484485int486yylex(void)487{488/* lexical analysis routine */489/* returns LETTER for a lower case letter, yylval = 0 through 25 */490/* return DIGIT for a digit, yylval = 0 through 9 */491/* all other characters are returned immediately */492493int c;494495while( (c=getchar()) == ' ' ) { /* skip blanks */ }496497/* c is now nonblank */498499if( islower( c )) {500yylval = c - 'a';501return ( LETTER );502}503if( isdigit( c )) {504yylval = c - '0';505return ( DIGIT );506}507return( c );508}509#line 511 "calc.tab.c"510511/* For use in generated program */512#define yydepth (int)(yystack.s_mark - yystack.s_base)513#if YYBTYACC514#define yytrial (yyps->save)515#endif /* YYBTYACC */516517#if YYDEBUG518#include <stdio.h> /* needed for printf */519#endif520521#include <stdlib.h> /* needed for malloc, etc */522#include <string.h> /* needed for memset */523524/* allocate initial stack or double stack size, up to YYMAXDEPTH */525static int yygrowstack(YYSTACKDATA *data)526{527int i;528unsigned newsize;529YYINT *newss;530YYSTYPE *newvs;531#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)532YYLTYPE *newps;533#endif534535if ((newsize = data->stacksize) == 0)536newsize = YYINITSTACKSIZE;537else if (newsize >= YYMAXDEPTH)538return YYENOMEM;539else if ((newsize *= 2) > YYMAXDEPTH)540newsize = YYMAXDEPTH;541542i = (int) (data->s_mark - data->s_base);543newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));544if (newss == NULL)545return YYENOMEM;546547data->s_base = newss;548data->s_mark = newss + i;549550newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));551if (newvs == NULL)552return YYENOMEM;553554data->l_base = newvs;555data->l_mark = newvs + i;556557#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)558newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));559if (newps == NULL)560return YYENOMEM;561562data->p_base = newps;563data->p_mark = newps + i;564#endif565566data->stacksize = newsize;567data->s_last = data->s_base + newsize - 1;568569#if YYDEBUG570if (yydebug)571fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);572#endif573return 0;574}575576#if YYPURE || defined(YY_NO_LEAKS)577static void yyfreestack(YYSTACKDATA *data)578{579free(data->s_base);580free(data->l_base);581#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)582free(data->p_base);583#endif584memset(data, 0, sizeof(*data));585}586#else587#define yyfreestack(data) /* nothing */588#endif /* YYPURE || defined(YY_NO_LEAKS) */589#if YYBTYACC590591static YYParseState *592yyNewState(unsigned size)593{594YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));595if (p == NULL) return NULL;596597p->yystack.stacksize = size;598if (size == 0)599{600p->yystack.s_base = NULL;601p->yystack.l_base = NULL;602#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)603p->yystack.p_base = NULL;604#endif605return p;606}607p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));608if (p->yystack.s_base == NULL) return NULL;609p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));610if (p->yystack.l_base == NULL) return NULL;611memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));612#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)613p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));614if (p->yystack.p_base == NULL) return NULL;615memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));616#endif617618return p;619}620621static void622yyFreeState(YYParseState *p)623{624yyfreestack(&p->yystack);625free(p);626}627#endif /* YYBTYACC */628629#define YYABORT goto yyabort630#define YYREJECT goto yyabort631#define YYACCEPT goto yyaccept632#define YYERROR goto yyerrlab633#if YYBTYACC634#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)635#define YYVALID_NESTED do { if (yyps->save && \636yyps->save->save == 0) goto yyvalid; } while(0)637#endif /* YYBTYACC */638639int640YYPARSE_DECL()641{642int yym, yyn, yystate, yyresult;643#if YYBTYACC644int yynewerrflag;645YYParseState *yyerrctx = NULL;646#endif /* YYBTYACC */647#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)648YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */649#endif650#if YYDEBUG651const char *yys;652653if ((yys = getenv("YYDEBUG")) != NULL)654{655yyn = *yys;656if (yyn >= '0' && yyn <= '9')657yydebug = yyn - '0';658}659if (yydebug)660fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);661#endif662#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)663memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));664#endif665666#if YYBTYACC667yyps = yyNewState(0); if (yyps == 0) goto yyenomem;668yyps->save = 0;669#endif /* YYBTYACC */670yym = 0;671/* yyn is set below */672yynerrs = 0;673yyerrflag = 0;674yychar = YYEMPTY;675yystate = 0;676677#if YYPURE678memset(&yystack, 0, sizeof(yystack));679#endif680681if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;682yystack.s_mark = yystack.s_base;683yystack.l_mark = yystack.l_base;684#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)685yystack.p_mark = yystack.p_base;686#endif687yystate = 0;688*yystack.s_mark = 0;689690yyloop:691if ((yyn = yydefred[yystate]) != 0) goto yyreduce;692if (yychar < 0)693{694#if YYBTYACC695do {696if (yylvp < yylve)697{698/* we're currently re-reading tokens */699yylval = *yylvp++;700#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)701yylloc = *yylpp++;702#endif703yychar = *yylexp++;704break;705}706if (yyps->save)707{708/* in trial mode; save scanner results for future parse attempts */709if (yylvp == yylvlim)710{ /* Enlarge lexical value queue */711size_t p = (size_t) (yylvp - yylvals);712size_t s = (size_t) (yylvlim - yylvals);713714s += YYLVQUEUEGROWTH;715if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;716if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;717#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)718if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;719#endif720yylvp = yylve = yylvals + p;721yylvlim = yylvals + s;722#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)723yylpp = yylpe = yylpsns + p;724yylplim = yylpsns + s;725#endif726yylexp = yylexemes + p;727}728*yylexp = (YYINT) YYLEX;729*yylvp++ = yylval;730yylve++;731#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)732*yylpp++ = yylloc;733yylpe++;734#endif735yychar = *yylexp++;736break;737}738/* normal operation, no conflict encountered */739#endif /* YYBTYACC */740yychar = YYLEX;741#if YYBTYACC742} while (0);743#endif /* YYBTYACC */744if (yychar < 0) yychar = YYEOF;745#if YYDEBUG746if (yydebug)747{748if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];749fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",750YYDEBUGSTR, yydepth, yystate, yychar, yys);751#ifdef YYSTYPE_TOSTRING752#if YYBTYACC753if (!yytrial)754#endif /* YYBTYACC */755fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));756#endif757fputc('\n', stderr);758}759#endif760}761#if YYBTYACC762763/* Do we have a conflict? */764if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&765yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)766{767YYINT ctry;768769if (yypath)770{771YYParseState *save;772#if YYDEBUG773if (yydebug)774fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",775YYDEBUGSTR, yydepth, yystate);776#endif777/* Switch to the next conflict context */778save = yypath;779yypath = save->save;780save->save = NULL;781ctry = save->ctry;782if (save->state != yystate) YYABORT;783yyFreeState(save);784785}786else787{788789/* Unresolved conflict - start/continue trial parse */790YYParseState *save;791#if YYDEBUG792if (yydebug)793{794fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);795if (yyps->save)796fputs("ALREADY in conflict, continuing trial parse.\n", stderr);797else798fputs("Starting trial parse.\n", stderr);799}800#endif801save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));802if (save == NULL) goto yyenomem;803save->save = yyps->save;804save->state = yystate;805save->errflag = yyerrflag;806save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);807memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));808save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);809memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));810#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)811save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);812memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));813#endif814ctry = yytable[yyn];815if (yyctable[ctry] == -1)816{817#if YYDEBUG818if (yydebug && yychar >= YYEOF)819fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);820#endif821ctry++;822}823save->ctry = ctry;824if (yyps->save == NULL)825{826/* If this is a first conflict in the stack, start saving lexemes */827if (!yylexemes)828{829yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));830if (yylexemes == NULL) goto yyenomem;831yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));832if (yylvals == NULL) goto yyenomem;833yylvlim = yylvals + YYLVQUEUEGROWTH;834#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)835yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));836if (yylpsns == NULL) goto yyenomem;837yylplim = yylpsns + YYLVQUEUEGROWTH;838#endif839}840if (yylvp == yylve)841{842yylvp = yylve = yylvals;843#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)844yylpp = yylpe = yylpsns;845#endif846yylexp = yylexemes;847if (yychar >= YYEOF)848{849*yylve++ = yylval;850#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)851*yylpe++ = yylloc;852#endif853*yylexp = (YYINT) yychar;854yychar = YYEMPTY;855}856}857}858if (yychar >= YYEOF)859{860yylvp--;861#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)862yylpp--;863#endif864yylexp--;865yychar = YYEMPTY;866}867save->lexeme = (int) (yylvp - yylvals);868yyps->save = save;869}870if (yytable[yyn] == ctry)871{872#if YYDEBUG873if (yydebug)874fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",875YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);876#endif877if (yychar < 0)878{879yylvp++;880#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)881yylpp++;882#endif883yylexp++;884}885if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)886goto yyoverflow;887yystate = yyctable[ctry];888*++yystack.s_mark = (YYINT) yystate;889*++yystack.l_mark = yylval;890#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)891*++yystack.p_mark = yylloc;892#endif893yychar = YYEMPTY;894if (yyerrflag > 0) --yyerrflag;895goto yyloop;896}897else898{899yyn = yyctable[ctry];900goto yyreduce;901}902} /* End of code dealing with conflicts */903#endif /* YYBTYACC */904if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&905yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)906{907#if YYDEBUG908if (yydebug)909fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",910YYDEBUGSTR, yydepth, yystate, yytable[yyn]);911#endif912if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;913yystate = yytable[yyn];914*++yystack.s_mark = yytable[yyn];915*++yystack.l_mark = yylval;916#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)917*++yystack.p_mark = yylloc;918#endif919yychar = YYEMPTY;920if (yyerrflag > 0) --yyerrflag;921goto yyloop;922}923if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&924yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)925{926yyn = yytable[yyn];927goto yyreduce;928}929if (yyerrflag != 0) goto yyinrecovery;930#if YYBTYACC931932yynewerrflag = 1;933goto yyerrhandler;934goto yyerrlab; /* redundant goto avoids 'unused label' warning */935936yyerrlab:937/* explicit YYERROR from an action -- pop the rhs of the rule reduced938* before looking for error recovery */939yystack.s_mark -= yym;940yystate = *yystack.s_mark;941yystack.l_mark -= yym;942#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)943yystack.p_mark -= yym;944#endif945946yynewerrflag = 0;947yyerrhandler:948while (yyps->save)949{950int ctry;951YYParseState *save = yyps->save;952#if YYDEBUG953if (yydebug)954fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",955YYDEBUGSTR, yydepth, yystate, yyps->save->state,956(int)(yylvp - yylvals - yyps->save->lexeme));957#endif958/* Memorize most forward-looking error state in case it's really an error. */959if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)960{961/* Free old saved error context state */962if (yyerrctx) yyFreeState(yyerrctx);963/* Create and fill out new saved error context state */964yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));965if (yyerrctx == NULL) goto yyenomem;966yyerrctx->save = yyps->save;967yyerrctx->state = yystate;968yyerrctx->errflag = yyerrflag;969yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);970memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));971yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);972memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));973#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)974yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);975memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));976#endif977yyerrctx->lexeme = (int) (yylvp - yylvals);978}979yylvp = yylvals + save->lexeme;980#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)981yylpp = yylpsns + save->lexeme;982#endif983yylexp = yylexemes + save->lexeme;984yychar = YYEMPTY;985yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);986memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));987yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);988memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));989#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)990yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);991memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));992#endif993ctry = ++save->ctry;994yystate = save->state;995/* We tried shift, try reduce now */996if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;997yyps->save = save->save;998save->save = NULL;999yyFreeState(save);10001001/* Nothing left on the stack -- error */1002if (!yyps->save)1003{1004#if YYDEBUG1005if (yydebug)1006fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",1007YYPREFIX, yydepth);1008#endif1009/* Restore state as it was in the most forward-advanced error */1010yylvp = yylvals + yyerrctx->lexeme;1011#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1012yylpp = yylpsns + yyerrctx->lexeme;1013#endif1014yylexp = yylexemes + yyerrctx->lexeme;1015yychar = yylexp[-1];1016yylval = yylvp[-1];1017#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1018yylloc = yylpp[-1];1019#endif1020yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);1021memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1022yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);1023memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1024#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1025yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);1026memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1027#endif1028yystate = yyerrctx->state;1029yyFreeState(yyerrctx);1030yyerrctx = NULL;1031}1032yynewerrflag = 1;1033}1034if (yynewerrflag == 0) goto yyinrecovery;1035#endif /* YYBTYACC */10361037YYERROR_CALL("syntax error");1038#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1039yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */1040#endif10411042#if !YYBTYACC1043goto yyerrlab; /* redundant goto avoids 'unused label' warning */1044yyerrlab:1045#endif1046++yynerrs;10471048yyinrecovery:1049if (yyerrflag < 3)1050{1051yyerrflag = 3;1052for (;;)1053{1054if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&1055yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)1056{1057#if YYDEBUG1058if (yydebug)1059fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",1060YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);1061#endif1062if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1063yystate = yytable[yyn];1064*++yystack.s_mark = yytable[yyn];1065*++yystack.l_mark = yylval;1066#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1067/* lookahead position is error end position */1068yyerror_loc_range[2] = yylloc;1069YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */1070*++yystack.p_mark = yyloc;1071#endif1072goto yyloop;1073}1074else1075{1076#if YYDEBUG1077if (yydebug)1078fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",1079YYDEBUGSTR, yydepth, *yystack.s_mark);1080#endif1081if (yystack.s_mark <= yystack.s_base) goto yyabort;1082#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1083/* the current TOS position is the error start position */1084yyerror_loc_range[1] = *yystack.p_mark;1085#endif1086#if defined(YYDESTRUCT_CALL)1087#if YYBTYACC1088if (!yytrial)1089#endif /* YYBTYACC */1090#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1091YYDESTRUCT_CALL("error: discarding state",1092yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);1093#else1094YYDESTRUCT_CALL("error: discarding state",1095yystos[*yystack.s_mark], yystack.l_mark);1096#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1097#endif /* defined(YYDESTRUCT_CALL) */1098--yystack.s_mark;1099--yystack.l_mark;1100#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1101--yystack.p_mark;1102#endif1103}1104}1105}1106else1107{1108if (yychar == YYEOF) goto yyabort;1109#if YYDEBUG1110if (yydebug)1111{1112if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1113fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",1114YYDEBUGSTR, yydepth, yystate, yychar, yys);1115}1116#endif1117#if defined(YYDESTRUCT_CALL)1118#if YYBTYACC1119if (!yytrial)1120#endif /* YYBTYACC */1121#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1122YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);1123#else1124YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);1125#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1126#endif /* defined(YYDESTRUCT_CALL) */1127yychar = YYEMPTY;1128goto yyloop;1129}11301131yyreduce:1132yym = yylen[yyn];1133#if YYDEBUG1134if (yydebug)1135{1136fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",1137YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);1138#ifdef YYSTYPE_TOSTRING1139#if YYBTYACC1140if (!yytrial)1141#endif /* YYBTYACC */1142if (yym > 0)1143{1144int i;1145fputc('<', stderr);1146for (i = yym; i > 0; i--)1147{1148if (i != yym) fputs(", ", stderr);1149fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],1150yystack.l_mark[1-i]), stderr);1151}1152fputc('>', stderr);1153}1154#endif1155fputc('\n', stderr);1156}1157#endif1158if (yym > 0)1159yyval = yystack.l_mark[1-yym];1160else1161memset(&yyval, 0, sizeof yyval);1162#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)11631164/* Perform position reduction */1165memset(&yyloc, 0, sizeof(yyloc));1166#if YYBTYACC1167if (!yytrial)1168#endif /* YYBTYACC */1169{1170YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);1171/* just in case YYERROR is invoked within the action, save1172the start of the rhs as the error start position */1173yyerror_loc_range[1] = yystack.p_mark[1-yym];1174}1175#endif11761177switch (yyn)1178{1179case 3:1180#line 28 "calc.y"1181{ yyerrok ; }1182#line 1184 "calc.tab.c"1183break;1184case 4:1185#line 32 "calc.y"1186{ printf("%d\n",yystack.l_mark[0]);}1187#line 1189 "calc.tab.c"1188break;1189case 5:1190#line 34 "calc.y"1191{ regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }1192#line 1194 "calc.tab.c"1193break;1194case 6:1195#line 38 "calc.y"1196{ yyval = yystack.l_mark[-1]; }1197#line 1199 "calc.tab.c"1198break;1199case 7:1200#line 40 "calc.y"1201{ yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }1202#line 1204 "calc.tab.c"1203break;1204case 8:1205#line 42 "calc.y"1206{ yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }1207#line 1209 "calc.tab.c"1208break;1209case 9:1210#line 44 "calc.y"1211{ yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }1212#line 1214 "calc.tab.c"1213break;1214case 10:1215#line 46 "calc.y"1216{ yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }1217#line 1219 "calc.tab.c"1218break;1219case 11:1220#line 48 "calc.y"1221{ yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }1222#line 1224 "calc.tab.c"1223break;1224case 12:1225#line 50 "calc.y"1226{ yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }1227#line 1229 "calc.tab.c"1228break;1229case 13:1230#line 52 "calc.y"1231{ yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }1232#line 1234 "calc.tab.c"1233break;1234case 14:1235#line 54 "calc.y"1236{ yyval = - yystack.l_mark[0]; }1237#line 1239 "calc.tab.c"1238break;1239case 15:1240#line 56 "calc.y"1241{ yyval = regs[yystack.l_mark[0]]; }1242#line 1244 "calc.tab.c"1243break;1244case 17:1245#line 61 "calc.y"1246{ yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }1247#line 1249 "calc.tab.c"1248break;1249case 18:1250#line 63 "calc.y"1251{ yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }1252#line 1254 "calc.tab.c"1253break;1254#line 1256 "calc.tab.c"1255default:1256break;1257}1258yystack.s_mark -= yym;1259yystate = *yystack.s_mark;1260yystack.l_mark -= yym;1261#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1262yystack.p_mark -= yym;1263#endif1264yym = yylhs[yyn];1265if (yystate == 0 && yym == 0)1266{1267#if YYDEBUG1268if (yydebug)1269{1270fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1271#ifdef YYSTYPE_TOSTRING1272#if YYBTYACC1273if (!yytrial)1274#endif /* YYBTYACC */1275fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));1276#endif1277fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);1278}1279#endif1280yystate = YYFINAL;1281*++yystack.s_mark = YYFINAL;1282*++yystack.l_mark = yyval;1283#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1284*++yystack.p_mark = yyloc;1285#endif1286if (yychar < 0)1287{1288#if YYBTYACC1289do {1290if (yylvp < yylve)1291{1292/* we're currently re-reading tokens */1293yylval = *yylvp++;1294#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1295yylloc = *yylpp++;1296#endif1297yychar = *yylexp++;1298break;1299}1300if (yyps->save)1301{1302/* in trial mode; save scanner results for future parse attempts */1303if (yylvp == yylvlim)1304{ /* Enlarge lexical value queue */1305size_t p = (size_t) (yylvp - yylvals);1306size_t s = (size_t) (yylvlim - yylvals);13071308s += YYLVQUEUEGROWTH;1309if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)1310goto yyenomem;1311if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)1312goto yyenomem;1313#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1314if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)1315goto yyenomem;1316#endif1317yylvp = yylve = yylvals + p;1318yylvlim = yylvals + s;1319#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1320yylpp = yylpe = yylpsns + p;1321yylplim = yylpsns + s;1322#endif1323yylexp = yylexemes + p;1324}1325*yylexp = (YYINT) YYLEX;1326*yylvp++ = yylval;1327yylve++;1328#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1329*yylpp++ = yylloc;1330yylpe++;1331#endif1332yychar = *yylexp++;1333break;1334}1335/* normal operation, no conflict encountered */1336#endif /* YYBTYACC */1337yychar = YYLEX;1338#if YYBTYACC1339} while (0);1340#endif /* YYBTYACC */1341if (yychar < 0) yychar = YYEOF;1342#if YYDEBUG1343if (yydebug)1344{1345if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1346fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",1347YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);1348}1349#endif1350}1351if (yychar == YYEOF) goto yyaccept;1352goto yyloop;1353}1354if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&1355yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)1356yystate = yytable[yyn];1357else1358yystate = yydgoto[yym];1359#if YYDEBUG1360if (yydebug)1361{1362fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1363#ifdef YYSTYPE_TOSTRING1364#if YYBTYACC1365if (!yytrial)1366#endif /* YYBTYACC */1367fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));1368#endif1369fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);1370}1371#endif1372if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1373*++yystack.s_mark = (YYINT) yystate;1374*++yystack.l_mark = yyval;1375#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1376*++yystack.p_mark = yyloc;1377#endif1378goto yyloop;1379#if YYBTYACC13801381/* Reduction declares that this path is valid. Set yypath and do a full parse */1382yyvalid:1383if (yypath) YYABORT;1384while (yyps->save)1385{1386YYParseState *save = yyps->save;1387yyps->save = save->save;1388save->save = yypath;1389yypath = save;1390}1391#if YYDEBUG1392if (yydebug)1393fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",1394YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));1395#endif1396if (yyerrctx)1397{1398yyFreeState(yyerrctx);1399yyerrctx = NULL;1400}1401yylvp = yylvals + yypath->lexeme;1402#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1403yylpp = yylpsns + yypath->lexeme;1404#endif1405yylexp = yylexemes + yypath->lexeme;1406yychar = YYEMPTY;1407yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);1408memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1409yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);1410memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1411#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1412yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);1413memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1414#endif1415yystate = yypath->state;1416goto yyloop;1417#endif /* YYBTYACC */14181419yyoverflow:1420YYERROR_CALL("yacc stack overflow");1421#if YYBTYACC1422goto yyabort_nomem;1423yyenomem:1424YYERROR_CALL("memory exhausted");1425yyabort_nomem:1426#endif /* YYBTYACC */1427yyresult = 2;1428goto yyreturn;14291430yyabort:1431yyresult = 1;1432goto yyreturn;14331434yyaccept:1435#if YYBTYACC1436if (yyps->save) goto yyvalid;1437#endif /* YYBTYACC */1438yyresult = 0;14391440yyreturn:1441#if defined(YYDESTRUCT_CALL)1442if (yychar != YYEOF && yychar != YYEMPTY)1443#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1444YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);1445#else1446YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);1447#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */14481449{1450YYSTYPE *pv;1451#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1452YYLTYPE *pp;14531454for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)1455YYDESTRUCT_CALL("cleanup: discarding state",1456yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);1457#else1458for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)1459YYDESTRUCT_CALL("cleanup: discarding state",1460yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);1461#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1462}1463#endif /* defined(YYDESTRUCT_CALL) */14641465#if YYBTYACC1466if (yyerrctx)1467{1468yyFreeState(yyerrctx);1469yyerrctx = NULL;1470}1471while (yyps)1472{1473YYParseState *save = yyps;1474yyps = save->save;1475save->save = NULL;1476yyFreeState(save);1477}1478while (yypath)1479{1480YYParseState *save = yypath;1481yypath = save->save;1482save->save = NULL;1483yyFreeState(save);1484}1485#endif /* YYBTYACC */1486yyfreestack(&yystack);1487return (yyresult);1488}148914901491