Path: blob/main/contrib/byacc/test/btyacc/calc2.tab.c
48082 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 calc2_parse21#endif /* yyparse */2223#ifndef yylex24#define yylex calc2_lex25#endif /* yylex */2627#ifndef yyerror28#define yyerror calc2_error29#endif /* yyerror */3031#ifndef yychar32#define yychar calc2_char33#endif /* yychar */3435#ifndef yyval36#define yyval calc2_val37#endif /* yyval */3839#ifndef yylval40#define yylval calc2_lval41#endif /* yylval */4243#ifndef yydebug44#define yydebug calc2_debug45#endif /* yydebug */4647#ifndef yynerrs48#define yynerrs calc2_nerrs49#endif /* yynerrs */5051#ifndef yyerrflag52#define yyerrflag calc2_errflag53#endif /* yyerrflag */5455#ifndef yylhs56#define yylhs calc2_lhs57#endif /* yylhs */5859#ifndef yylen60#define yylen calc2_len61#endif /* yylen */6263#ifndef yydefred64#define yydefred calc2_defred65#endif /* yydefred */6667#ifndef yystos68#define yystos calc2_stos69#endif /* yystos */7071#ifndef yydgoto72#define yydgoto calc2_dgoto73#endif /* yydgoto */7475#ifndef yysindex76#define yysindex calc2_sindex77#endif /* yysindex */7879#ifndef yyrindex80#define yyrindex calc2_rindex81#endif /* yyrindex */8283#ifndef yygindex84#define yygindex calc2_gindex85#endif /* yygindex */8687#ifndef yytable88#define yytable calc2_table89#endif /* yytable */9091#ifndef yycheck92#define yycheck calc2_check93#endif /* yycheck */9495#ifndef yyname96#define yyname calc2_name97#endif /* yyname */9899#ifndef yyrule100#define yyrule calc2_rule101#endif /* yyrule */102103#if YYBTYACC104105#ifndef yycindex106#define yycindex calc2_cindex107#endif /* yycindex */108109#ifndef yyctable110#define yyctable calc2_ctable111#endif /* yyctable */112113#endif /* YYBTYACC */114115#define YYPREFIX "calc2_"116117#define YYPURE 0118119#line 7 "calc2.y"120# include <stdio.h>121# include <ctype.h>122123#ifdef YYBISON124#define YYLEX_PARAM base125#define YYLEX_DECL() yylex(int *YYLEX_PARAM)126#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)127int YYLEX_DECL();128static void YYERROR_DECL();129#endif130131#line 133 "calc2.tab.c"132133#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)134/* Default: YYSTYPE is the semantic value type. */135typedef int YYSTYPE;136# define YYSTYPE_IS_DECLARED 1137#endif138139/* compatibility with bison */140#ifdef YYPARSE_PARAM141/* compatibility with FreeBSD */142# ifdef YYPARSE_PARAM_TYPE143# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)144# else145# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)146# endif147#else148# define YYPARSE_DECL() yyparse(int regs[26], int *base)149#endif150151/* Parameters sent to lex. */152#ifdef YYLEX_PARAM153# define YYLEX_DECL() yylex(void *YYLEX_PARAM)154# define YYLEX yylex(YYLEX_PARAM)155#else156# define YYLEX_DECL() yylex(int *base)157# define YYLEX yylex(base)158#endif159160/* Parameters sent to yyerror. */161#ifndef YYERROR_DECL162#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)163#endif164#ifndef YYERROR_CALL165#define YYERROR_CALL(msg) yyerror(regs, base, msg)166#endif167168extern int YYPARSE_DECL();169170#define DIGIT 257171#define LETTER 258172#define UMINUS 259173#define YYERRCODE 256174typedef int YYINT;175static const YYINT calc2_lhs[] = { -1,1760, 0, 0, 1, 1, 2, 2, 2, 2, 2,1772, 2, 2, 2, 2, 2, 3, 3,178};179static const YYINT calc2_len[] = { 2,1800, 3, 3, 1, 3, 3, 3, 3, 3, 3,1813, 3, 3, 2, 1, 1, 1, 2,182};183static const YYINT calc2_defred[] = { 1,1840, 0, 17, 0, 0, 0, 0, 0, 0, 3,1850, 15, 14, 0, 2, 0, 0, 0, 0, 0,1860, 0, 18, 0, 6, 0, 0, 0, 0, 9,18710, 11,188};189#if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)190static const YYINT calc2_stos[] = { 0,191261, 256, 257, 258, 45, 40, 262, 263, 264, 10,19261, 258, 263, 263, 10, 124, 38, 43, 45, 42,19347, 37, 257, 263, 41, 263, 263, 263, 263, 263,194263, 263,195};196#endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */197static const YYINT calc2_dgoto[] = { 1,1987, 8, 9,199};200static const YYINT calc2_sindex[] = { 0,201-40, -7, 0, -55, -38, -38, 1, -29, -247, 0,202-38, 0, 0, 22, 0, -38, -38, -38, -38, -38,203-38, -38, 0, -29, 0, 51, 60, -20, -20, 0,2040, 0,205};206static const YYINT calc2_rindex[] = { 0,2070, 0, 0, 2, 0, 0, 0, 9, -9, 0,2080, 0, 0, 0, 0, 0, 0, 0, 0, 0,2090, 0, 0, 10, 0, -6, 14, 5, 13, 0,2100, 0,211};212#if YYBTYACC213static const YYINT calc2_cindex[] = { 0,2140, 0, 0, 0, 0, 0, 0, 0, 0, 0,2150, 0, 0, 0, 0, 0, 0, 0, 0, 0,2160, 0, 0, 0, 0, 0, 0, 0, 0, 0,2170, 0,218};219#endif220static const YYINT calc2_gindex[] = { 0,2210, 65, 0,222};223#define YYTABLESIZE 220224static const YYINT calc2_table[] = { 6,22516, 6, 10, 13, 5, 11, 5, 22, 17, 23,22615, 15, 20, 18, 7, 19, 22, 21, 4, 5,2270, 20, 8, 12, 0, 0, 21, 16, 16, 0,2280, 16, 16, 16, 13, 16, 0, 16, 15, 15,2290, 0, 7, 15, 15, 7, 15, 7, 15, 7,2308, 12, 0, 8, 12, 8, 0, 8, 22, 17,2310, 0, 25, 20, 18, 0, 19, 0, 21, 13,23214, 0, 0, 0, 0, 24, 0, 0, 0, 0,23326, 27, 28, 29, 30, 31, 32, 22, 17, 0,2340, 0, 20, 18, 16, 19, 22, 21, 0, 0,2350, 20, 18, 0, 19, 0, 21, 0, 0, 0,2360, 0, 0, 0, 16, 0, 0, 13, 0, 0,2370, 0, 0, 0, 0, 15, 0, 0, 7, 0,2380, 0, 0, 0, 0, 0, 8, 12, 0, 0,2390, 0, 0, 0, 0, 16, 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, 0, 0, 0, 0, 0,2450, 0, 0, 0, 0, 0, 0, 0, 0, 0,2460, 0, 0, 0, 0, 2, 3, 4, 3, 12,247};248static const YYINT calc2_check[] = { 40,24910, 40, 10, 10, 45, 61, 45, 37, 38, 257,25010, 10, 42, 43, 10, 45, 37, 47, 10, 10,251-1, 42, 10, 10, -1, -1, 47, 37, 38, -1,252-1, 41, 42, 43, 41, 45, -1, 47, 37, 38,253-1, -1, 38, 42, 43, 41, 45, 43, 47, 45,25438, 38, -1, 41, 41, 43, -1, 45, 37, 38,255-1, -1, 41, 42, 43, -1, 45, -1, 47, 5,2566, -1, -1, -1, -1, 11, -1, -1, -1, -1,25716, 17, 18, 19, 20, 21, 22, 37, 38, -1,258-1, -1, 42, 43, 124, 45, 37, 47, -1, -1,259-1, 42, 43, -1, 45, -1, 47, -1, -1, -1,260-1, -1, -1, -1, 124, -1, -1, 124, -1, -1,261-1, -1, -1, -1, -1, 124, -1, -1, 124, -1,262-1, -1, -1, -1, -1, -1, 124, 124, -1, -1,263-1, -1, -1, -1, -1, 124, -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, -1, -1, -1, -1, -1,269-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,270-1, -1, -1, -1, -1, 256, 257, 258, 257, 258,271};272#if YYBTYACC273static const YYINT calc2_ctable[] = { -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, -1,294-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,295-1, -1, -1, -1, -1, -1, -1, -1, -1,296};297#endif298#define YYFINAL 1299#ifndef YYDEBUG300#define YYDEBUG 0301#endif302#define YYMAXTOKEN 259303#define YYUNDFTOKEN 265304#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))305#if YYDEBUG306static const char *const calc2_name[] = {307308"$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,3090,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,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,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,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,3140,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,3150,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",316"illegal-symbol",317};318static const char *const calc2_rule[] = {319"$accept : list",320"list :",321"list : list stat '\\n'",322"list : list error '\\n'",323"stat : expr",324"stat : LETTER '=' expr",325"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 '&' expr",332"expr : expr '|' expr",333"expr : '-' expr",334"expr : LETTER",335"expr : number",336"number : DIGIT",337"number : number DIGIT",338339};340#endif341342#if YYDEBUG343int yydebug;344#endif345346int yyerrflag;347int yychar;348YYSTYPE yyval;349YYSTYPE yylval;350int yynerrs;351352#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)353YYLTYPE yyloc; /* position returned by actions */354YYLTYPE yylloc; /* position from the lexer */355#endif356357#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)358#ifndef YYLLOC_DEFAULT359#define YYLLOC_DEFAULT(loc, rhs, n) \360do \361{ \362if (n == 0) \363{ \364(loc).first_line = YYRHSLOC(rhs, 0).last_line; \365(loc).first_column = YYRHSLOC(rhs, 0).last_column; \366(loc).last_line = YYRHSLOC(rhs, 0).last_line; \367(loc).last_column = YYRHSLOC(rhs, 0).last_column; \368} \369else \370{ \371(loc).first_line = YYRHSLOC(rhs, 1).first_line; \372(loc).first_column = YYRHSLOC(rhs, 1).first_column; \373(loc).last_line = YYRHSLOC(rhs, n).last_line; \374(loc).last_column = YYRHSLOC(rhs, n).last_column; \375} \376} while (0)377#endif /* YYLLOC_DEFAULT */378#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */379#if YYBTYACC380381#ifndef YYLVQUEUEGROWTH382#define YYLVQUEUEGROWTH 32383#endif384#endif /* YYBTYACC */385386/* define the initial stack-sizes */387#ifdef YYSTACKSIZE388#undef YYMAXDEPTH389#define YYMAXDEPTH YYSTACKSIZE390#else391#ifdef YYMAXDEPTH392#define YYSTACKSIZE YYMAXDEPTH393#else394#define YYSTACKSIZE 10000395#define YYMAXDEPTH 10000396#endif397#endif398399#ifndef YYINITSTACKSIZE400#define YYINITSTACKSIZE 200401#endif402403typedef struct {404unsigned stacksize;405YYINT *s_base;406YYINT *s_mark;407YYINT *s_last;408YYSTYPE *l_base;409YYSTYPE *l_mark;410#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)411YYLTYPE *p_base;412YYLTYPE *p_mark;413#endif414} YYSTACKDATA;415#if YYBTYACC416417struct YYParseState_s418{419struct YYParseState_s *save; /* Previously saved parser state */420YYSTACKDATA yystack; /* saved parser stack */421int state; /* saved parser state */422int errflag; /* saved error recovery status */423int lexeme; /* saved index of the conflict lexeme in the lexical queue */424YYINT ctry; /* saved index in yyctable[] for this conflict */425};426typedef struct YYParseState_s YYParseState;427#endif /* YYBTYACC */428/* variables for the parser stack */429static YYSTACKDATA yystack;430#if YYBTYACC431432/* Current parser state */433static YYParseState *yyps = 0;434435/* yypath != NULL: do the full parse, starting at *yypath parser state. */436static YYParseState *yypath = 0;437438/* Base of the lexical value queue */439static YYSTYPE *yylvals = 0;440441/* Current position at lexical value queue */442static YYSTYPE *yylvp = 0;443444/* End position of lexical value queue */445static YYSTYPE *yylve = 0;446447/* The last allocated position at the lexical value queue */448static YYSTYPE *yylvlim = 0;449450#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)451/* Base of the lexical position queue */452static YYLTYPE *yylpsns = 0;453454/* Current position at lexical position queue */455static YYLTYPE *yylpp = 0;456457/* End position of lexical position queue */458static YYLTYPE *yylpe = 0;459460/* The last allocated position at the lexical position queue */461static YYLTYPE *yylplim = 0;462#endif463464/* Current position at lexical token queue */465static YYINT *yylexp = 0;466467static YYINT *yylexemes = 0;468#endif /* YYBTYACC */469#line 73 "calc2.y"470/* start of programs */471472#ifdef YYBYACC473extern int YYLEX_DECL();474#endif475476int477main (void)478{479int regs[26];480int base = 10;481482while(!feof(stdin)) {483yyparse(regs, &base);484}485return 0;486}487488#define UNUSED(x) ((void)(x))489490static void491YYERROR_DECL()492{493UNUSED(regs); /* %parse-param regs is not actually used here */494UNUSED(base); /* %parse-param base is not actually used here */495fprintf(stderr, "%s\n", s);496}497498int499YYLEX_DECL()500{501/* lexical analysis routine */502/* returns LETTER for a lower case letter, yylval = 0 through 25 */503/* return DIGIT for a digit, yylval = 0 through 9 */504/* all other characters are returned immediately */505506int c;507508while( (c=getchar()) == ' ' ) { /* skip blanks */ }509510/* c is now nonblank */511512if( islower( c )) {513yylval = c - 'a';514return ( LETTER );515}516if( isdigit( c )) {517yylval = (c - '0') % (*base);518return ( DIGIT );519}520return( c );521}522#line 524 "calc2.tab.c"523524/* For use in generated program */525#define yydepth (int)(yystack.s_mark - yystack.s_base)526#if YYBTYACC527#define yytrial (yyps->save)528#endif /* YYBTYACC */529530#if YYDEBUG531#include <stdio.h> /* needed for printf */532#endif533534#include <stdlib.h> /* needed for malloc, etc */535#include <string.h> /* needed for memset */536537/* allocate initial stack or double stack size, up to YYMAXDEPTH */538static int yygrowstack(YYSTACKDATA *data)539{540int i;541unsigned newsize;542YYINT *newss;543YYSTYPE *newvs;544#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)545YYLTYPE *newps;546#endif547548if ((newsize = data->stacksize) == 0)549newsize = YYINITSTACKSIZE;550else if (newsize >= YYMAXDEPTH)551return YYENOMEM;552else if ((newsize *= 2) > YYMAXDEPTH)553newsize = YYMAXDEPTH;554555i = (int) (data->s_mark - data->s_base);556newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));557if (newss == NULL)558return YYENOMEM;559560data->s_base = newss;561data->s_mark = newss + i;562563newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));564if (newvs == NULL)565return YYENOMEM;566567data->l_base = newvs;568data->l_mark = newvs + i;569570#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)571newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));572if (newps == NULL)573return YYENOMEM;574575data->p_base = newps;576data->p_mark = newps + i;577#endif578579data->stacksize = newsize;580data->s_last = data->s_base + newsize - 1;581582#if YYDEBUG583if (yydebug)584fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);585#endif586return 0;587}588589#if YYPURE || defined(YY_NO_LEAKS)590static void yyfreestack(YYSTACKDATA *data)591{592free(data->s_base);593free(data->l_base);594#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)595free(data->p_base);596#endif597memset(data, 0, sizeof(*data));598}599#else600#define yyfreestack(data) /* nothing */601#endif /* YYPURE || defined(YY_NO_LEAKS) */602#if YYBTYACC603604static YYParseState *605yyNewState(unsigned size)606{607YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));608if (p == NULL) return NULL;609610p->yystack.stacksize = size;611if (size == 0)612{613p->yystack.s_base = NULL;614p->yystack.l_base = NULL;615#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)616p->yystack.p_base = NULL;617#endif618return p;619}620p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));621if (p->yystack.s_base == NULL) return NULL;622p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));623if (p->yystack.l_base == NULL) return NULL;624memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));625#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)626p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));627if (p->yystack.p_base == NULL) return NULL;628memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));629#endif630631return p;632}633634static void635yyFreeState(YYParseState *p)636{637yyfreestack(&p->yystack);638free(p);639}640#endif /* YYBTYACC */641642#define YYABORT goto yyabort643#define YYREJECT goto yyabort644#define YYACCEPT goto yyaccept645#define YYERROR goto yyerrlab646#if YYBTYACC647#define YYVALID do { if (yyps->save) goto yyvalid; } while(0)648#define YYVALID_NESTED do { if (yyps->save && \649yyps->save->save == 0) goto yyvalid; } while(0)650#endif /* YYBTYACC */651652int653YYPARSE_DECL()654{655int yym, yyn, yystate, yyresult;656#if YYBTYACC657int yynewerrflag;658YYParseState *yyerrctx = NULL;659#endif /* YYBTYACC */660#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)661YYLTYPE yyerror_loc_range[3]; /* position of error start/end (0 unused) */662#endif663#if YYDEBUG664const char *yys;665666if ((yys = getenv("YYDEBUG")) != NULL)667{668yyn = *yys;669if (yyn >= '0' && yyn <= '9')670yydebug = yyn - '0';671}672if (yydebug)673fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);674#endif675#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)676memset(yyerror_loc_range, 0, sizeof(yyerror_loc_range));677#endif678679#if YYBTYACC680yyps = yyNewState(0); if (yyps == 0) goto yyenomem;681yyps->save = 0;682#endif /* YYBTYACC */683yym = 0;684/* yyn is set below */685yynerrs = 0;686yyerrflag = 0;687yychar = YYEMPTY;688yystate = 0;689690#if YYPURE691memset(&yystack, 0, sizeof(yystack));692#endif693694if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;695yystack.s_mark = yystack.s_base;696yystack.l_mark = yystack.l_base;697#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)698yystack.p_mark = yystack.p_base;699#endif700yystate = 0;701*yystack.s_mark = 0;702703yyloop:704if ((yyn = yydefred[yystate]) != 0) goto yyreduce;705if (yychar < 0)706{707#if YYBTYACC708do {709if (yylvp < yylve)710{711/* we're currently re-reading tokens */712yylval = *yylvp++;713#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)714yylloc = *yylpp++;715#endif716yychar = *yylexp++;717break;718}719if (yyps->save)720{721/* in trial mode; save scanner results for future parse attempts */722if (yylvp == yylvlim)723{ /* Enlarge lexical value queue */724size_t p = (size_t) (yylvp - yylvals);725size_t s = (size_t) (yylvlim - yylvals);726727s += YYLVQUEUEGROWTH;728if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;729if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;730#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)731if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;732#endif733yylvp = yylve = yylvals + p;734yylvlim = yylvals + s;735#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)736yylpp = yylpe = yylpsns + p;737yylplim = yylpsns + s;738#endif739yylexp = yylexemes + p;740}741*yylexp = (YYINT) YYLEX;742*yylvp++ = yylval;743yylve++;744#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)745*yylpp++ = yylloc;746yylpe++;747#endif748yychar = *yylexp++;749break;750}751/* normal operation, no conflict encountered */752#endif /* YYBTYACC */753yychar = YYLEX;754#if YYBTYACC755} while (0);756#endif /* YYBTYACC */757if (yychar < 0) yychar = YYEOF;758#if YYDEBUG759if (yydebug)760{761if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];762fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",763YYDEBUGSTR, yydepth, yystate, yychar, yys);764#ifdef YYSTYPE_TOSTRING765#if YYBTYACC766if (!yytrial)767#endif /* YYBTYACC */768fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));769#endif770fputc('\n', stderr);771}772#endif773}774#if YYBTYACC775776/* Do we have a conflict? */777if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&778yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)779{780YYINT ctry;781782if (yypath)783{784YYParseState *save;785#if YYDEBUG786if (yydebug)787fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",788YYDEBUGSTR, yydepth, yystate);789#endif790/* Switch to the next conflict context */791save = yypath;792yypath = save->save;793save->save = NULL;794ctry = save->ctry;795if (save->state != yystate) YYABORT;796yyFreeState(save);797798}799else800{801802/* Unresolved conflict - start/continue trial parse */803YYParseState *save;804#if YYDEBUG805if (yydebug)806{807fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);808if (yyps->save)809fputs("ALREADY in conflict, continuing trial parse.\n", stderr);810else811fputs("Starting trial parse.\n", stderr);812}813#endif814save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));815if (save == NULL) goto yyenomem;816save->save = yyps->save;817save->state = yystate;818save->errflag = yyerrflag;819save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);820memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));821save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);822memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));823#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)824save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);825memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));826#endif827ctry = yytable[yyn];828if (yyctable[ctry] == -1)829{830#if YYDEBUG831if (yydebug && yychar >= YYEOF)832fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);833#endif834ctry++;835}836save->ctry = ctry;837if (yyps->save == NULL)838{839/* If this is a first conflict in the stack, start saving lexemes */840if (!yylexemes)841{842yylexemes = (YYINT *) malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));843if (yylexemes == NULL) goto yyenomem;844yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));845if (yylvals == NULL) goto yyenomem;846yylvlim = yylvals + YYLVQUEUEGROWTH;847#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)848yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));849if (yylpsns == NULL) goto yyenomem;850yylplim = yylpsns + YYLVQUEUEGROWTH;851#endif852}853if (yylvp == yylve)854{855yylvp = yylve = yylvals;856#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)857yylpp = yylpe = yylpsns;858#endif859yylexp = yylexemes;860if (yychar >= YYEOF)861{862*yylve++ = yylval;863#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)864*yylpe++ = yylloc;865#endif866*yylexp = (YYINT) yychar;867yychar = YYEMPTY;868}869}870}871if (yychar >= YYEOF)872{873yylvp--;874#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)875yylpp--;876#endif877yylexp--;878yychar = YYEMPTY;879}880save->lexeme = (int) (yylvp - yylvals);881yyps->save = save;882}883if (yytable[yyn] == ctry)884{885#if YYDEBUG886if (yydebug)887fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",888YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);889#endif890if (yychar < 0)891{892yylvp++;893#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)894yylpp++;895#endif896yylexp++;897}898if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)899goto yyoverflow;900yystate = yyctable[ctry];901*++yystack.s_mark = (YYINT) yystate;902*++yystack.l_mark = yylval;903#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)904*++yystack.p_mark = yylloc;905#endif906yychar = YYEMPTY;907if (yyerrflag > 0) --yyerrflag;908goto yyloop;909}910else911{912yyn = yyctable[ctry];913goto yyreduce;914}915} /* End of code dealing with conflicts */916#endif /* YYBTYACC */917if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&918yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)919{920#if YYDEBUG921if (yydebug)922fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",923YYDEBUGSTR, yydepth, yystate, yytable[yyn]);924#endif925if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;926yystate = yytable[yyn];927*++yystack.s_mark = yytable[yyn];928*++yystack.l_mark = yylval;929#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)930*++yystack.p_mark = yylloc;931#endif932yychar = YYEMPTY;933if (yyerrflag > 0) --yyerrflag;934goto yyloop;935}936if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&937yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)938{939yyn = yytable[yyn];940goto yyreduce;941}942if (yyerrflag != 0) goto yyinrecovery;943#if YYBTYACC944945yynewerrflag = 1;946goto yyerrhandler;947goto yyerrlab; /* redundant goto avoids 'unused label' warning */948949yyerrlab:950/* explicit YYERROR from an action -- pop the rhs of the rule reduced951* before looking for error recovery */952yystack.s_mark -= yym;953yystate = *yystack.s_mark;954yystack.l_mark -= yym;955#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)956yystack.p_mark -= yym;957#endif958959yynewerrflag = 0;960yyerrhandler:961while (yyps->save)962{963int ctry;964YYParseState *save = yyps->save;965#if YYDEBUG966if (yydebug)967fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",968YYDEBUGSTR, yydepth, yystate, yyps->save->state,969(int)(yylvp - yylvals - yyps->save->lexeme));970#endif971/* Memorize most forward-looking error state in case it's really an error. */972if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)973{974/* Free old saved error context state */975if (yyerrctx) yyFreeState(yyerrctx);976/* Create and fill out new saved error context state */977yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));978if (yyerrctx == NULL) goto yyenomem;979yyerrctx->save = yyps->save;980yyerrctx->state = yystate;981yyerrctx->errflag = yyerrflag;982yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);983memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));984yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);985memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));986#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)987yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);988memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));989#endif990yyerrctx->lexeme = (int) (yylvp - yylvals);991}992yylvp = yylvals + save->lexeme;993#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)994yylpp = yylpsns + save->lexeme;995#endif996yylexp = yylexemes + save->lexeme;997yychar = YYEMPTY;998yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);999memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1000yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);1001memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1002#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1003yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);1004memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1005#endif1006ctry = ++save->ctry;1007yystate = save->state;1008/* We tried shift, try reduce now */1009if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;1010yyps->save = save->save;1011save->save = NULL;1012yyFreeState(save);10131014/* Nothing left on the stack -- error */1015if (!yyps->save)1016{1017#if YYDEBUG1018if (yydebug)1019fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",1020YYPREFIX, yydepth);1021#endif1022/* Restore state as it was in the most forward-advanced error */1023yylvp = yylvals + yyerrctx->lexeme;1024#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1025yylpp = yylpsns + yyerrctx->lexeme;1026#endif1027yylexp = yylexemes + yyerrctx->lexeme;1028yychar = yylexp[-1];1029yylval = yylvp[-1];1030#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1031yylloc = yylpp[-1];1032#endif1033yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);1034memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1035yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);1036memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1037#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1038yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);1039memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1040#endif1041yystate = yyerrctx->state;1042yyFreeState(yyerrctx);1043yyerrctx = NULL;1044}1045yynewerrflag = 1;1046}1047if (yynewerrflag == 0) goto yyinrecovery;1048#endif /* YYBTYACC */10491050YYERROR_CALL("syntax error");1051#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1052yyerror_loc_range[1] = yylloc; /* lookahead position is error start position */1053#endif10541055#if !YYBTYACC1056goto yyerrlab; /* redundant goto avoids 'unused label' warning */1057yyerrlab:1058#endif1059++yynerrs;10601061yyinrecovery:1062if (yyerrflag < 3)1063{1064yyerrflag = 3;1065for (;;)1066{1067if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&1068yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)1069{1070#if YYDEBUG1071if (yydebug)1072fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",1073YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);1074#endif1075if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1076yystate = yytable[yyn];1077*++yystack.s_mark = yytable[yyn];1078*++yystack.l_mark = yylval;1079#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1080/* lookahead position is error end position */1081yyerror_loc_range[2] = yylloc;1082YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */1083*++yystack.p_mark = yyloc;1084#endif1085goto yyloop;1086}1087else1088{1089#if YYDEBUG1090if (yydebug)1091fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",1092YYDEBUGSTR, yydepth, *yystack.s_mark);1093#endif1094if (yystack.s_mark <= yystack.s_base) goto yyabort;1095#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1096/* the current TOS position is the error start position */1097yyerror_loc_range[1] = *yystack.p_mark;1098#endif1099#if defined(YYDESTRUCT_CALL)1100#if YYBTYACC1101if (!yytrial)1102#endif /* YYBTYACC */1103#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1104YYDESTRUCT_CALL("error: discarding state",1105yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);1106#else1107YYDESTRUCT_CALL("error: discarding state",1108yystos[*yystack.s_mark], yystack.l_mark);1109#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1110#endif /* defined(YYDESTRUCT_CALL) */1111--yystack.s_mark;1112--yystack.l_mark;1113#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1114--yystack.p_mark;1115#endif1116}1117}1118}1119else1120{1121if (yychar == YYEOF) goto yyabort;1122#if YYDEBUG1123if (yydebug)1124{1125if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1126fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",1127YYDEBUGSTR, yydepth, yystate, yychar, yys);1128}1129#endif1130#if defined(YYDESTRUCT_CALL)1131#if YYBTYACC1132if (!yytrial)1133#endif /* YYBTYACC */1134#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1135YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);1136#else1137YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);1138#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1139#endif /* defined(YYDESTRUCT_CALL) */1140yychar = YYEMPTY;1141goto yyloop;1142}11431144yyreduce:1145yym = yylen[yyn];1146#if YYDEBUG1147if (yydebug)1148{1149fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",1150YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);1151#ifdef YYSTYPE_TOSTRING1152#if YYBTYACC1153if (!yytrial)1154#endif /* YYBTYACC */1155if (yym > 0)1156{1157int i;1158fputc('<', stderr);1159for (i = yym; i > 0; i--)1160{1161if (i != yym) fputs(", ", stderr);1162fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],1163yystack.l_mark[1-i]), stderr);1164}1165fputc('>', stderr);1166}1167#endif1168fputc('\n', stderr);1169}1170#endif1171if (yym > 0)1172yyval = yystack.l_mark[1-yym];1173else1174memset(&yyval, 0, sizeof yyval);1175#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)11761177/* Perform position reduction */1178memset(&yyloc, 0, sizeof(yyloc));1179#if YYBTYACC1180if (!yytrial)1181#endif /* YYBTYACC */1182{1183YYLLOC_DEFAULT(yyloc, &yystack.p_mark[-yym], yym);1184/* just in case YYERROR is invoked within the action, save1185the start of the rhs as the error start position */1186yyerror_loc_range[1] = yystack.p_mark[1-yym];1187}1188#endif11891190switch (yyn)1191{1192case 3:1193#line 35 "calc2.y"1194{ yyerrok ; }1195#line 1197 "calc2.tab.c"1196break;1197case 4:1198#line 39 "calc2.y"1199{ printf("%d\n",yystack.l_mark[0]);}1200#line 1202 "calc2.tab.c"1201break;1202case 5:1203#line 41 "calc2.y"1204{ regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }1205#line 1207 "calc2.tab.c"1206break;1207case 6:1208#line 45 "calc2.y"1209{ yyval = yystack.l_mark[-1]; }1210#line 1212 "calc2.tab.c"1211break;1212case 7:1213#line 47 "calc2.y"1214{ yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }1215#line 1217 "calc2.tab.c"1216break;1217case 8:1218#line 49 "calc2.y"1219{ yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }1220#line 1222 "calc2.tab.c"1221break;1222case 9:1223#line 51 "calc2.y"1224{ yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }1225#line 1227 "calc2.tab.c"1226break;1227case 10:1228#line 53 "calc2.y"1229{ yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }1230#line 1232 "calc2.tab.c"1231break;1232case 11:1233#line 55 "calc2.y"1234{ yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }1235#line 1237 "calc2.tab.c"1236break;1237case 12:1238#line 57 "calc2.y"1239{ yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }1240#line 1242 "calc2.tab.c"1241break;1242case 13:1243#line 59 "calc2.y"1244{ yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }1245#line 1247 "calc2.tab.c"1246break;1247case 14:1248#line 61 "calc2.y"1249{ yyval = - yystack.l_mark[0]; }1250#line 1252 "calc2.tab.c"1251break;1252case 15:1253#line 63 "calc2.y"1254{ yyval = regs[yystack.l_mark[0]]; }1255#line 1257 "calc2.tab.c"1256break;1257case 17:1258#line 68 "calc2.y"1259{ yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }1260#line 1262 "calc2.tab.c"1261break;1262case 18:1263#line 70 "calc2.y"1264{ yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }1265#line 1267 "calc2.tab.c"1266break;1267#line 1269 "calc2.tab.c"1268default:1269break;1270}1271yystack.s_mark -= yym;1272yystate = *yystack.s_mark;1273yystack.l_mark -= yym;1274#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1275yystack.p_mark -= yym;1276#endif1277yym = yylhs[yyn];1278if (yystate == 0 && yym == 0)1279{1280#if YYDEBUG1281if (yydebug)1282{1283fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1284#ifdef YYSTYPE_TOSTRING1285#if YYBTYACC1286if (!yytrial)1287#endif /* YYBTYACC */1288fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));1289#endif1290fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);1291}1292#endif1293yystate = YYFINAL;1294*++yystack.s_mark = YYFINAL;1295*++yystack.l_mark = yyval;1296#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1297*++yystack.p_mark = yyloc;1298#endif1299if (yychar < 0)1300{1301#if YYBTYACC1302do {1303if (yylvp < yylve)1304{1305/* we're currently re-reading tokens */1306yylval = *yylvp++;1307#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1308yylloc = *yylpp++;1309#endif1310yychar = *yylexp++;1311break;1312}1313if (yyps->save)1314{1315/* in trial mode; save scanner results for future parse attempts */1316if (yylvp == yylvlim)1317{ /* Enlarge lexical value queue */1318size_t p = (size_t) (yylvp - yylvals);1319size_t s = (size_t) (yylvlim - yylvals);13201321s += YYLVQUEUEGROWTH;1322if ((yylexemes = (YYINT *)realloc(yylexemes, s * sizeof(YYINT))) == NULL)1323goto yyenomem;1324if ((yylvals = (YYSTYPE *)realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)1325goto yyenomem;1326#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1327if ((yylpsns = (YYLTYPE *)realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)1328goto yyenomem;1329#endif1330yylvp = yylve = yylvals + p;1331yylvlim = yylvals + s;1332#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1333yylpp = yylpe = yylpsns + p;1334yylplim = yylpsns + s;1335#endif1336yylexp = yylexemes + p;1337}1338*yylexp = (YYINT) YYLEX;1339*yylvp++ = yylval;1340yylve++;1341#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1342*yylpp++ = yylloc;1343yylpe++;1344#endif1345yychar = *yylexp++;1346break;1347}1348/* normal operation, no conflict encountered */1349#endif /* YYBTYACC */1350yychar = YYLEX;1351#if YYBTYACC1352} while (0);1353#endif /* YYBTYACC */1354if (yychar < 0) yychar = YYEOF;1355#if YYDEBUG1356if (yydebug)1357{1358if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];1359fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",1360YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);1361}1362#endif1363}1364if (yychar == YYEOF) goto yyaccept;1365goto yyloop;1366}1367if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&1368yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)1369yystate = yytable[yyn];1370else1371yystate = yydgoto[yym];1372#if YYDEBUG1373if (yydebug)1374{1375fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);1376#ifdef YYSTYPE_TOSTRING1377#if YYBTYACC1378if (!yytrial)1379#endif /* YYBTYACC */1380fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));1381#endif1382fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);1383}1384#endif1385if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;1386*++yystack.s_mark = (YYINT) yystate;1387*++yystack.l_mark = yyval;1388#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1389*++yystack.p_mark = yyloc;1390#endif1391goto yyloop;1392#if YYBTYACC13931394/* Reduction declares that this path is valid. Set yypath and do a full parse */1395yyvalid:1396if (yypath) YYABORT;1397while (yyps->save)1398{1399YYParseState *save = yyps->save;1400yyps->save = save->save;1401save->save = yypath;1402yypath = save;1403}1404#if YYDEBUG1405if (yydebug)1406fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",1407YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));1408#endif1409if (yyerrctx)1410{1411yyFreeState(yyerrctx);1412yyerrctx = NULL;1413}1414yylvp = yylvals + yypath->lexeme;1415#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1416yylpp = yylpsns + yypath->lexeme;1417#endif1418yylexp = yylexemes + yypath->lexeme;1419yychar = YYEMPTY;1420yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);1421memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));1422yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);1423memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));1424#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1425yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);1426memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));1427#endif1428yystate = yypath->state;1429goto yyloop;1430#endif /* YYBTYACC */14311432yyoverflow:1433YYERROR_CALL("yacc stack overflow");1434#if YYBTYACC1435goto yyabort_nomem;1436yyenomem:1437YYERROR_CALL("memory exhausted");1438yyabort_nomem:1439#endif /* YYBTYACC */1440yyresult = 2;1441goto yyreturn;14421443yyabort:1444yyresult = 1;1445goto yyreturn;14461447yyaccept:1448#if YYBTYACC1449if (yyps->save) goto yyvalid;1450#endif /* YYBTYACC */1451yyresult = 0;14521453yyreturn:1454#if defined(YYDESTRUCT_CALL)1455if (yychar != YYEOF && yychar != YYEMPTY)1456#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1457YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);1458#else1459YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);1460#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */14611462{1463YYSTYPE *pv;1464#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)1465YYLTYPE *pp;14661467for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)1468YYDESTRUCT_CALL("cleanup: discarding state",1469yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);1470#else1471for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)1472YYDESTRUCT_CALL("cleanup: discarding state",1473yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);1474#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */1475}1476#endif /* defined(YYDESTRUCT_CALL) */14771478#if YYBTYACC1479if (yyerrctx)1480{1481yyFreeState(yyerrctx);1482yyerrctx = NULL;1483}1484while (yyps)1485{1486YYParseState *save = yyps;1487yyps = save->save;1488save->save = NULL;1489yyFreeState(save);1490}1491while (yypath)1492{1493YYParseState *save = yypath;1494yypath = save->save;1495save->save = NULL;1496yyFreeState(save);1497}1498#endif /* YYBTYACC */1499yyfreestack(&yystack);1500return (yyresult);1501}150215031504