diff options
Diffstat (limited to 'test/btyacc/code_calc.code.c')
| -rw-r--r-- | test/btyacc/code_calc.code.c | 1328 | 
1 files changed, 1328 insertions, 0 deletions
diff --git a/test/btyacc/code_calc.code.c b/test/btyacc/code_calc.code.c new file mode 100644 index 0000000000000..e69ccede6f57e --- /dev/null +++ b/test/btyacc/code_calc.code.c @@ -0,0 +1,1328 @@ +/* original parser id follows */ +/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */ +/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ + +#define YYBYACC 1 +#define YYMAJOR 1 +#define YYMINOR 9 +#define YYCHECK "yyyymmdd" + +#define YYEMPTY        (-1) +#define yyclearin      (yychar = YYEMPTY) +#define yyerrok        (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) +#define YYENOMEM       (-2) +#define YYEOF          0 +#undef YYBTYACC +#define YYBTYACC 0 +#define YYDEBUGSTR YYPREFIX "debug" + +#ifndef yyparse +#define yyparse    calc_parse +#endif /* yyparse */ + +#ifndef yylex +#define yylex      calc_lex +#endif /* yylex */ + +#ifndef yyerror +#define yyerror    calc_error +#endif /* yyerror */ + +#ifndef yychar +#define yychar     calc_char +#endif /* yychar */ + +#ifndef yyval +#define yyval      calc_val +#endif /* yyval */ + +#ifndef yylval +#define yylval     calc_lval +#endif /* yylval */ + +#ifndef yydebug +#define yydebug    calc_debug +#endif /* yydebug */ + +#ifndef yynerrs +#define yynerrs    calc_nerrs +#endif /* yynerrs */ + +#ifndef yyerrflag +#define yyerrflag  calc_errflag +#endif /* yyerrflag */ + +#ifndef yylhs +#define yylhs      calc_lhs +#endif /* yylhs */ + +#ifndef yylen +#define yylen      calc_len +#endif /* yylen */ + +#ifndef yydefred +#define yydefred   calc_defred +#endif /* yydefred */ + +#ifndef yystos +#define yystos     calc_stos +#endif /* yystos */ + +#ifndef yydgoto +#define yydgoto    calc_dgoto +#endif /* yydgoto */ + +#ifndef yysindex +#define yysindex   calc_sindex +#endif /* yysindex */ + +#ifndef yyrindex +#define yyrindex   calc_rindex +#endif /* yyrindex */ + +#ifndef yygindex +#define yygindex   calc_gindex +#endif /* yygindex */ + +#ifndef yytable +#define yytable    calc_table +#endif /* yytable */ + +#ifndef yycheck +#define yycheck    calc_check +#endif /* yycheck */ + +#ifndef yyname +#define yyname     calc_name +#endif /* yyname */ + +#ifndef yyrule +#define yyrule     calc_rule +#endif /* yyrule */ + +#if YYBTYACC + +#ifndef yycindex +#define yycindex   calc_cindex +#endif /* yycindex */ + +#ifndef yyctable +#define yyctable   calc_ctable +#endif /* yyctable */ + +#endif /* YYBTYACC */ + +#define YYPREFIX "calc_" + +#define YYPURE 0 + +#line 2 "code_calc.y" +# include <stdio.h> +# include <ctype.h> + +int regs[26]; +int base; + +#ifdef YYBISON +int yylex(void); +static void yyerror(const char *s); +#endif + +#line 133 "code_calc.code.c" + +#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED) +/* Default: YYSTYPE is the semantic value type. */ +typedef int YYSTYPE; +# define YYSTYPE_IS_DECLARED 1 +#endif + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +# ifdef YYPARSE_PARAM_TYPE +#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +# else +#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +# endif +#else +# define YYPARSE_DECL() yyparse(void) +#endif + +/* Parameters sent to lex. */ +#ifdef YYLEX_PARAM +# define YYLEX_DECL() yylex(void *YYLEX_PARAM) +# define YYLEX yylex(YYLEX_PARAM) +#else +# define YYLEX_DECL() yylex(void) +# define YYLEX yylex() +#endif + +/* Parameters sent to yyerror. */ +#ifndef YYERROR_DECL +#define YYERROR_DECL() yyerror(const char *s) +#endif +#ifndef YYERROR_CALL +#define YYERROR_CALL(msg) yyerror(msg) +#endif + +#define DIGIT 257 +#define LETTER 258 +#define UMINUS 259 +#define YYERRCODE 256 +#define YYTABLESIZE 220 +#define YYFINAL 1 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 259 +#define YYUNDFTOKEN 265 +#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) + +extern int YYPARSE_DECL(); +typedef short YYINT; +extern const YYINT yylhs[]; +extern const YYINT yylen[]; +extern const YYINT yydefred[]; +extern const YYINT yystos[]; +extern const YYINT yydgoto[]; +extern const YYINT yysindex[]; +extern const YYINT yyrindex[]; +#if YYBTYACC +extern const YYINT yycindex[]; +#endif /* YYBTYACC */ +extern const YYINT yygindex[]; +extern const YYINT yytable[]; +extern const YYINT yycheck[]; +#if YYBTYACC +extern const YYINT yyctable[]; +#endif /* YYBTYACC */ + +#if YYDEBUG +extern const char *const yyname[]; +extern const char *const yyrule[]; +#endif + +int      yydebug; +int      yynerrs; + +int      yyerrflag; +int      yychar; +YYSTYPE  yyval; +YYSTYPE  yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +YYLTYPE  yyloc; /* position returned by actions */ +YYLTYPE  yylloc; /* position from the lexer */ +#endif + +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +#ifndef YYLLOC_DEFAULT +#define YYLLOC_DEFAULT(loc, rhs, n) \ +do \ +{ \ +    if (n == 0) \ +    { \ +        (loc).first_line   = ((rhs)[-1]).last_line; \ +        (loc).first_column = ((rhs)[-1]).last_column; \ +        (loc).last_line    = ((rhs)[-1]).last_line; \ +        (loc).last_column  = ((rhs)[-1]).last_column; \ +    } \ +    else \ +    { \ +        (loc).first_line   = ((rhs)[ 0 ]).first_line; \ +        (loc).first_column = ((rhs)[ 0 ]).first_column; \ +        (loc).last_line    = ((rhs)[n-1]).last_line; \ +        (loc).last_column  = ((rhs)[n-1]).last_column; \ +    } \ +} while (0) +#endif /* YYLLOC_DEFAULT */ +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#if YYBTYACC + +#ifndef YYLVQUEUEGROWTH +#define YYLVQUEUEGROWTH 32 +#endif +#endif /* YYBTYACC */ + +/* define the initial stack-sizes */ +#ifdef YYSTACKSIZE +#undef YYMAXDEPTH +#define YYMAXDEPTH  YYSTACKSIZE +#else +#ifdef YYMAXDEPTH +#define YYSTACKSIZE YYMAXDEPTH +#else +#define YYSTACKSIZE 10000 +#define YYMAXDEPTH  10000 +#endif +#endif + +#ifndef YYINITSTACKSIZE +#define YYINITSTACKSIZE 200 +#endif + +typedef struct { +    unsigned stacksize; +    short    *s_base; +    short    *s_mark; +    short    *s_last; +    YYSTYPE  *l_base; +    YYSTYPE  *l_mark; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    YYLTYPE  *p_base; +    YYLTYPE  *p_mark; +#endif +} YYSTACKDATA; +#if YYBTYACC + +struct YYParseState_s +{ +    struct YYParseState_s *save;    /* Previously saved parser state */ +    YYSTACKDATA            yystack; /* saved parser stack */ +    int                    state;   /* saved parser state */ +    int                    errflag; /* saved error recovery status */ +    int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */ +    YYINT                  ctry;    /* saved index in yyctable[] for this conflict */ +}; +typedef struct YYParseState_s YYParseState; +#endif /* YYBTYACC */ +/* variables for the parser stack */ +static YYSTACKDATA yystack; +#if YYBTYACC + +/* Current parser state */ +static YYParseState *yyps = 0; + +/* yypath != NULL: do the full parse, starting at *yypath parser state. */ +static YYParseState *yypath = 0; + +/* Base of the lexical value queue */ +static YYSTYPE *yylvals = 0; + +/* Current position at lexical value queue */ +static YYSTYPE *yylvp = 0; + +/* End position of lexical value queue */ +static YYSTYPE *yylve = 0; + +/* The last allocated position at the lexical value queue */ +static YYSTYPE *yylvlim = 0; + +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +/* Base of the lexical position queue */ +static YYLTYPE *yylpsns = 0; + +/* Current position at lexical position queue */ +static YYLTYPE *yylpp = 0; + +/* End position of lexical position queue */ +static YYLTYPE *yylpe = 0; + +/* The last allocated position at the lexical position queue */ +static YYLTYPE *yylplim = 0; +#endif + +/* Current position at lexical token queue */ +static short  *yylexp = 0; + +static short  *yylexemes = 0; +#endif /* YYBTYACC */ +#line 68 "code_calc.y" + /* start of programs */ + +#ifdef YYBYACC +extern int YYLEX_DECL(); +#endif + +int +main (void) +{ +    while(!feof(stdin)) { +	yyparse(); +    } +    return 0; +} + +static void +yyerror(const char *s) +{ +    fprintf(stderr, "%s\n", s); +} + +int +yylex(void) +{ +	/* lexical analysis routine */ +	/* returns LETTER for a lower case letter, yylval = 0 through 25 */ +	/* return DIGIT for a digit, yylval = 0 through 9 */ +	/* all other characters are returned immediately */ + +    int c; + +    while( (c=getchar()) == ' ' )   { /* skip blanks */ } + +    /* c is now nonblank */ + +    if( islower( c )) { +	yylval = c - 'a'; +	return ( LETTER ); +    } +    if( isdigit( c )) { +	yylval = c - '0'; +	return ( DIGIT ); +    } +    return( c ); +} +#line 377 "code_calc.code.c" + +/* For use in generated program */ +#define yydepth (int)(yystack.s_mark - yystack.s_base) +#if YYBTYACC +#define yytrial (yyps->save) +#endif /* YYBTYACC */ + +#if YYDEBUG +#include <stdio.h>		/* needed for printf */ +#endif + +#include <stdlib.h>	/* needed for malloc, etc */ +#include <string.h>	/* needed for memset */ + +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(YYSTACKDATA *data) +{ +    int i; +    unsigned newsize; +    short *newss; +    YYSTYPE *newvs; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    YYLTYPE *newps; +#endif + +    if ((newsize = data->stacksize) == 0) +        newsize = YYINITSTACKSIZE; +    else if (newsize >= YYMAXDEPTH) +        return YYENOMEM; +    else if ((newsize *= 2) > YYMAXDEPTH) +        newsize = YYMAXDEPTH; + +    i = (int) (data->s_mark - data->s_base); +    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss)); +    if (newss == 0) +        return YYENOMEM; + +    data->s_base = newss; +    data->s_mark = newss + i; + +    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); +    if (newvs == 0) +        return YYENOMEM; + +    data->l_base = newvs; +    data->l_mark = newvs + i; + +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps)); +    if (newps == 0) +        return YYENOMEM; + +    data->p_base = newps; +    data->p_mark = newps + i; +#endif + +    data->stacksize = newsize; +    data->s_last = data->s_base + newsize - 1; + +#if YYDEBUG +    if (yydebug) +        fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize); +#endif +    return 0; +} + +#if YYPURE || defined(YY_NO_LEAKS) +static void yyfreestack(YYSTACKDATA *data) +{ +    free(data->s_base); +    free(data->l_base); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    free(data->p_base); +#endif +    memset(data, 0, sizeof(*data)); +} +#else +#define yyfreestack(data) /* nothing */ +#endif /* YYPURE || defined(YY_NO_LEAKS) */ +#if YYBTYACC + +static YYParseState * +yyNewState(unsigned size) +{ +    YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState)); +    if (p == NULL) return NULL; + +    p->yystack.stacksize = size; +    if (size == 0) +    { +        p->yystack.s_base = NULL; +        p->yystack.l_base = NULL; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        p->yystack.p_base = NULL; +#endif +        return p; +    } +    p->yystack.s_base    = (short *) malloc(size * sizeof(short)); +    if (p->yystack.s_base == NULL) return NULL; +    p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE)); +    if (p->yystack.l_base == NULL) return NULL; +    memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE)); +    if (p->yystack.p_base == NULL) return NULL; +    memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE)); +#endif + +    return p; +} + +static void +yyFreeState(YYParseState *p) +{ +    yyfreestack(&p->yystack); +    free(p); +} +#endif /* YYBTYACC */ + +#define YYABORT  goto yyabort +#define YYREJECT goto yyabort +#define YYACCEPT goto yyaccept +#define YYERROR  goto yyerrlab +#if YYBTYACC +#define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0) +#define YYVALID_NESTED do { if (yyps->save && \ +                                yyps->save->save == 0) goto yyvalid; } while(0) +#endif /* YYBTYACC */ + +int +YYPARSE_DECL() +{ +    int yym, yyn, yystate, yyresult; +#if YYBTYACC +    int yynewerrflag; +    YYParseState *yyerrctx = NULL; +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    YYLTYPE  yyerror_loc_range[2]; /* position of error start & end */ +#endif +#if YYDEBUG +    const char *yys; + +    if ((yys = getenv("YYDEBUG")) != 0) +    { +        yyn = *yys; +        if (yyn >= '0' && yyn <= '9') +            yydebug = yyn - '0'; +    } +    if (yydebug) +        fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX); +#endif + +#if YYBTYACC +    yyps = yyNewState(0); if (yyps == 0) goto yyenomem; +    yyps->save = 0; +#endif /* YYBTYACC */ +    yynerrs = 0; +    yyerrflag = 0; +    yychar = YYEMPTY; +    yystate = 0; + +#if YYPURE +    memset(&yystack, 0, sizeof(yystack)); +#endif + +    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; +    yystack.s_mark = yystack.s_base; +    yystack.l_mark = yystack.l_base; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    yystack.p_mark = yystack.p_base; +#endif +    yystate = 0; +    *yystack.s_mark = 0; + +yyloop: +    if ((yyn = yydefred[yystate]) != 0) goto yyreduce; +    if (yychar < 0) +    { +#if YYBTYACC +        do { +        if (yylvp < yylve) +        { +            /* we're currently re-reading tokens */ +            yylval = *yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            yylloc = *yylpp++; +#endif +            yychar = *yylexp++; +            break; +        } +        if (yyps->save) +        { +            /* in trial mode; save scanner results for future parse attempts */ +            if (yylvp == yylvlim) +            {   /* Enlarge lexical value queue */ +                int p = yylvp - yylvals; +                int s = yylvlim - yylvals; + +                s += YYLVQUEUEGROWTH; +                if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem; +                if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem; +#endif +                yylvp   = yylve = yylvals + p; +                yylvlim = yylvals + s; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                yylpp   = yylpe = yylpsns + p; +                yylplim = yylpsns + s; +#endif +                yylexp  = yylexemes + p; +            } +            *yylexp = (short) YYLEX; +            *yylvp++ = yylval; +            yylve++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            *yylpp++ = yylloc; +            yylpe++; +#endif +            yychar = *yylexp++; +            break; +        } +        /* normal operation, no conflict encountered */ +#endif /* YYBTYACC */ +        yychar = YYLEX; +#if YYBTYACC +        } while (0); +#endif /* YYBTYACC */ +        if (yychar < 0) yychar = YYEOF; +        /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ +#if YYDEBUG +        if (yydebug) +        { +            yys = yyname[YYTRANSLATE(yychar)]; +            fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)", +                            YYDEBUGSTR, yydepth, yystate, yychar, yys); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC +            if (!yytrial) +#endif /* YYBTYACC */ +                fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval)); +#endif +            fputc('\n', stderr); +        } +#endif +    } +#if YYBTYACC + +    /* Do we have a conflict? */ +    if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 && +        yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) +    { +        YYINT ctry; + +        if (yypath) +        { +            YYParseState *save; +#if YYDEBUG +            if (yydebug) +                fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n", +                                YYDEBUGSTR, yydepth, yystate); +#endif +            /* Switch to the next conflict context */ +            save = yypath; +            yypath = save->save; +            save->save = NULL; +            ctry = save->ctry; +            if (save->state != yystate) YYABORT; +            yyFreeState(save); + +        } +        else +        { + +            /* Unresolved conflict - start/continue trial parse */ +            YYParseState *save; +#if YYDEBUG +            if (yydebug) +            { +                fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate); +                if (yyps->save) +                    fputs("ALREADY in conflict, continuing trial parse.\n", stderr); +                else +                    fputs("Starting trial parse.\n", stderr); +            } +#endif +            save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); +            if (save == NULL) goto yyenomem; +            save->save            = yyps->save; +            save->state           = yystate; +            save->errflag         = yyerrflag; +            save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base); +            memcpy (save->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); +            save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base); +            memcpy (save->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base); +            memcpy (save->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif +            ctry                  = yytable[yyn]; +            if (yyctable[ctry] == -1) +            { +#if YYDEBUG +                if (yydebug && yychar >= YYEOF) +                    fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth); +#endif +                ctry++; +            } +            save->ctry = ctry; +            if (yyps->save == NULL) +            { +                /* If this is a first conflict in the stack, start saving lexemes */ +                if (!yylexemes) +                { +                    yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short)); +                    if (yylexemes == NULL) goto yyenomem; +                    yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE)); +                    if (yylvals == NULL) goto yyenomem; +                    yylvlim   = yylvals + YYLVQUEUEGROWTH; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                    yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE)); +                    if (yylpsns == NULL) goto yyenomem; +                    yylplim   = yylpsns + YYLVQUEUEGROWTH; +#endif +                } +                if (yylvp == yylve) +                { +                    yylvp  = yylve = yylvals; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                    yylpp  = yylpe = yylpsns; +#endif +                    yylexp = yylexemes; +                    if (yychar >= YYEOF) +                    { +                        *yylve++ = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                        *yylpe++ = yylloc; +#endif +                        *yylexp  = (short) yychar; +                        yychar   = YYEMPTY; +                    } +                } +            } +            if (yychar >= YYEOF) +            { +                yylvp--; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                yylpp--; +#endif +                yylexp--; +                yychar = YYEMPTY; +            } +            save->lexeme = yylvp - yylvals; +            yyps->save   = save; +        } +        if (yytable[yyn] == ctry) +        { +#if YYDEBUG +            if (yydebug) +                fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", +                                YYDEBUGSTR, yydepth, yystate, yyctable[ctry]); +#endif +            if (yychar < 0) +            { +                yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                yylpp++; +#endif +                yylexp++; +            } +            if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) +                goto yyoverflow; +            yystate = yyctable[ctry]; +            *++yystack.s_mark = (short) yystate; +            *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            *++yystack.p_mark = yylloc; +#endif +            yychar  = YYEMPTY; +            if (yyerrflag > 0) --yyerrflag; +            goto yyloop; +        } +        else +        { +            yyn = yyctable[ctry]; +            goto yyreduce; +        } +    } /* End of code dealing with conflicts */ +#endif /* YYBTYACC */ +    if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 && +            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) +    { +#if YYDEBUG +        if (yydebug) +            fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n", +                            YYDEBUGSTR, yydepth, yystate, yytable[yyn]); +#endif +        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; +        yystate = yytable[yyn]; +        *++yystack.s_mark = yytable[yyn]; +        *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        *++yystack.p_mark = yylloc; +#endif +        yychar = YYEMPTY; +        if (yyerrflag > 0)  --yyerrflag; +        goto yyloop; +    } +    if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 && +            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar) +    { +        yyn = yytable[yyn]; +        goto yyreduce; +    } +    if (yyerrflag != 0) goto yyinrecovery; +#if YYBTYACC + +    yynewerrflag = 1; +    goto yyerrhandler; +    goto yyerrlab; + +yyerrlab: +    yynewerrflag = 0; +yyerrhandler: +    while (yyps->save) +    { +        int ctry; +        YYParseState *save = yyps->save; +#if YYDEBUG +        if (yydebug) +            fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n", +                            YYDEBUGSTR, yydepth, yystate, yyps->save->state, +                    (int)(yylvp - yylvals - yyps->save->lexeme)); +#endif +        /* Memorize most forward-looking error state in case it's really an error. */ +        if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals) +        { +            /* Free old saved error context state */ +            if (yyerrctx) yyFreeState(yyerrctx); +            /* Create and fill out new saved error context state */ +            yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1)); +            if (yyerrctx == NULL) goto yyenomem; +            yyerrctx->save           = yyps->save; +            yyerrctx->state          = yystate; +            yyerrctx->errflag        = yyerrflag; +            yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base); +            memcpy (yyerrctx->yystack.s_base, yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); +            yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base); +            memcpy (yyerrctx->yystack.l_base, yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base); +            memcpy (yyerrctx->yystack.p_base, yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif +            yyerrctx->lexeme         = yylvp - yylvals; +        } +        yylvp          = yylvals   + save->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        yylpp          = yylpsns   + save->lexeme; +#endif +        yylexp         = yylexemes + save->lexeme; +        yychar         = YYEMPTY; +        yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base); +        memcpy (yystack.s_base, save->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); +        yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base); +        memcpy (yystack.l_base, save->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base); +        memcpy (yystack.p_base, save->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif +        ctry           = ++save->ctry; +        yystate        = save->state; +        /* We tried shift, try reduce now */ +        if ((yyn = yyctable[ctry]) >= 0) goto yyreduce; +        yyps->save     = save->save; +        save->save     = NULL; +        yyFreeState(save); + +        /* Nothing left on the stack -- error */ +        if (!yyps->save) +        { +#if YYDEBUG +            if (yydebug) +                fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n", +                                YYPREFIX, yydepth); +#endif +            /* Restore state as it was in the most forward-advanced error */ +            yylvp          = yylvals   + yyerrctx->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            yylpp          = yylpsns   + yyerrctx->lexeme; +#endif +            yylexp         = yylexemes + yyerrctx->lexeme; +            yychar         = yylexp[-1]; +            yylval         = yylvp[-1]; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            yylloc         = yylpp[-1]; +#endif +            yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base); +            memcpy (yystack.s_base, yyerrctx->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); +            yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base); +            memcpy (yystack.l_base, yyerrctx->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base); +            memcpy (yystack.p_base, yyerrctx->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif +            yystate        = yyerrctx->state; +            yyFreeState(yyerrctx); +            yyerrctx       = NULL; +        } +        yynewerrflag = 1; +    } +    if (yynewerrflag == 0) goto yyinrecovery; +#endif /* YYBTYACC */ + +    YYERROR_CALL("syntax error"); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */ +#endif + +#if !YYBTYACC +    goto yyerrlab; +yyerrlab: +#endif +    ++yynerrs; + +yyinrecovery: +    if (yyerrflag < 3) +    { +        yyerrflag = 3; +        for (;;) +        { +            if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 && +                    yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE) +            { +#if YYDEBUG +                if (yydebug) +                    fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n", +                                    YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]); +#endif +                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; +                yystate = yytable[yyn]; +                *++yystack.s_mark = yytable[yyn]; +                *++yystack.l_mark = yylval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                /* lookahead position is error end position */ +                yyerror_loc_range[1] = yylloc; +                YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */ +                *++yystack.p_mark = yyloc; +#endif +                goto yyloop; +            } +            else +            { +#if YYDEBUG +                if (yydebug) +                    fprintf(stderr, "%s[%d]: error recovery discarding state %d\n", +                                    YYDEBUGSTR, yydepth, *yystack.s_mark); +#endif +                if (yystack.s_mark <= yystack.s_base) goto yyabort; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                /* the current TOS position is the error start position */ +                yyerror_loc_range[0] = *yystack.p_mark; +#endif +#if defined(YYDESTRUCT_CALL) +#if YYBTYACC +                if (!yytrial) +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                    YYDESTRUCT_CALL("error: discarding state", +                                    yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark); +#else +                    YYDESTRUCT_CALL("error: discarding state", +                                    yystos[*yystack.s_mark], yystack.l_mark); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#endif /* defined(YYDESTRUCT_CALL) */ +                --yystack.s_mark; +                --yystack.l_mark; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                --yystack.p_mark; +#endif +            } +        } +    } +    else +    { +        if (yychar == YYEOF) goto yyabort; +#if YYDEBUG +        if (yydebug) +        { +            yys = yyname[YYTRANSLATE(yychar)]; +            fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n", +                            YYDEBUGSTR, yydepth, yystate, yychar, yys); +        } +#endif +#if defined(YYDESTRUCT_CALL) +#if YYBTYACC +        if (!yytrial) +#endif /* YYBTYACC */ +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc); +#else +            YYDESTRUCT_CALL("error: discarding token", yychar, &yylval); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +#endif /* defined(YYDESTRUCT_CALL) */ +        yychar = YYEMPTY; +        goto yyloop; +    } + +yyreduce: +    yym = yylen[yyn]; +#if YYDEBUG +    if (yydebug) +    { +        fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)", +                        YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC +        if (!yytrial) +#endif /* YYBTYACC */ +            if (yym > 0) +            { +                int i; +                fputc('<', stderr); +                for (i = yym; i > 0; i--) +                { +                    if (i != yym) fputs(", ", stderr); +                    fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]], +                                           yystack.l_mark[1-i]), stderr); +                } +                fputc('>', stderr); +            } +#endif +        fputc('\n', stderr); +    } +#endif +    if (yym > 0) +        yyval = yystack.l_mark[1-yym]; +    else +        memset(&yyval, 0, sizeof yyval); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) + +    /* Perform position reduction */ +    memset(&yyloc, 0, sizeof(yyloc)); +#if YYBTYACC +    if (!yytrial) +#endif /* YYBTYACC */ +    { +        YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym); +        /* just in case YYERROR is invoked within the action, save +           the start of the rhs as the error start position */ +        yyerror_loc_range[0] = yystack.p_mark[1-yym]; +    } +#endif + +    switch (yyn) +    { +case 3: +#line 30 "code_calc.y" +	{  yyerrok ; } +break; +case 4: +#line 34 "code_calc.y" +	{  printf("%d\n",yystack.l_mark[0]);} +break; +case 5: +#line 36 "code_calc.y" +	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; } +break; +case 6: +#line 40 "code_calc.y" +	{  yyval = yystack.l_mark[-1]; } +break; +case 7: +#line 42 "code_calc.y" +	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; } +break; +case 8: +#line 44 "code_calc.y" +	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; } +break; +case 9: +#line 46 "code_calc.y" +	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; } +break; +case 10: +#line 48 "code_calc.y" +	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; } +break; +case 11: +#line 50 "code_calc.y" +	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; } +break; +case 12: +#line 52 "code_calc.y" +	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; } +break; +case 13: +#line 54 "code_calc.y" +	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; } +break; +case 14: +#line 56 "code_calc.y" +	{  yyval = - yystack.l_mark[0]; } +break; +case 15: +#line 58 "code_calc.y" +	{  yyval = regs[yystack.l_mark[0]]; } +break; +case 17: +#line 63 "code_calc.y" +	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; } +break; +case 18: +#line 65 "code_calc.y" +	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; } +break; +#line 1094 "code_calc.code.c" +    default: +        break; +    } +    yystack.s_mark -= yym; +    yystate = *yystack.s_mark; +    yystack.l_mark -= yym; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    yystack.p_mark -= yym; +#endif +    yym = yylhs[yyn]; +    if (yystate == 0 && yym == 0) +    { +#if YYDEBUG +        if (yydebug) +        { +            fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC +            if (!yytrial) +#endif /* YYBTYACC */ +                fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval)); +#endif +            fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL); +        } +#endif +        yystate = YYFINAL; +        *++yystack.s_mark = YYFINAL; +        *++yystack.l_mark = yyval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        *++yystack.p_mark = yyloc; +#endif +        if (yychar < 0) +        { +#if YYBTYACC +            do { +            if (yylvp < yylve) +            { +                /* we're currently re-reading tokens */ +                yylval = *yylvp++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                yylloc = *yylpp++; +#endif +                yychar = *yylexp++; +                break; +            } +            if (yyps->save) +            { +                /* in trial mode; save scanner results for future parse attempts */ +                if (yylvp == yylvlim) +                {   /* Enlarge lexical value queue */ +                    int p = yylvp - yylvals; +                    int s = yylvlim - yylvals; + +                    s += YYLVQUEUEGROWTH; +                    if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) +                        goto yyenomem; +                    if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) +                        goto yyenomem; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                    if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) +                        goto yyenomem; +#endif +                    yylvp   = yylve = yylvals + p; +                    yylvlim = yylvals + s; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                    yylpp   = yylpe = yylpsns + p; +                    yylplim = yylpsns + s; +#endif +                    yylexp  = yylexemes + p; +                } +                *yylexp = (short) YYLEX; +                *yylvp++ = yylval; +                yylve++; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +                *yylpp++ = yylloc; +                yylpe++; +#endif +                yychar = *yylexp++; +                break; +            } +            /* normal operation, no conflict encountered */ +#endif /* YYBTYACC */ +            yychar = YYLEX; +#if YYBTYACC +            } while (0); +#endif /* YYBTYACC */ +            if (yychar < 0) yychar = YYEOF; +            /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */ +#if YYDEBUG +            if (yydebug) +            { +                yys = yyname[YYTRANSLATE(yychar)]; +                fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n", +                                YYDEBUGSTR, yydepth, YYFINAL, yychar, yys); +            } +#endif +        } +        if (yychar == YYEOF) goto yyaccept; +        goto yyloop; +    } +    if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 && +            yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate) +        yystate = yytable[yyn]; +    else +        yystate = yydgoto[yym]; +#if YYDEBUG +    if (yydebug) +    { +        fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth); +#ifdef YYSTYPE_TOSTRING +#if YYBTYACC +        if (!yytrial) +#endif /* YYBTYACC */ +            fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval)); +#endif +        fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate); +    } +#endif +    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; +    *++yystack.s_mark = (short) yystate; +    *++yystack.l_mark = yyval; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    *++yystack.p_mark = yyloc; +#endif +    goto yyloop; +#if YYBTYACC + +    /* Reduction declares that this path is valid. Set yypath and do a full parse */ +yyvalid: +    if (yypath) YYABORT; +    while (yyps->save) +    { +        YYParseState *save = yyps->save; +        yyps->save = save->save; +        save->save = yypath; +        yypath = save; +    } +#if YYDEBUG +    if (yydebug) +        fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n", +                        YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme)); +#endif +    if (yyerrctx) +    { +        yyFreeState(yyerrctx); +        yyerrctx = NULL; +    } +    yylvp          = yylvals + yypath->lexeme; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    yylpp          = yylpsns + yypath->lexeme; +#endif +    yylexp         = yylexemes + yypath->lexeme; +    yychar         = YYEMPTY; +    yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base); +    memcpy (yystack.s_base, yypath->yystack.s_base, (yystack.s_mark - yystack.s_base + 1) * sizeof(short)); +    yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base); +    memcpy (yystack.l_base, yypath->yystack.l_base, (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE)); +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +    yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base); +    memcpy (yystack.p_base, yypath->yystack.p_base, (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE)); +#endif +    yystate        = yypath->state; +    goto yyloop; +#endif /* YYBTYACC */ + +yyoverflow: +    YYERROR_CALL("yacc stack overflow"); +#if YYBTYACC +    goto yyabort_nomem; +yyenomem: +    YYERROR_CALL("memory exhausted"); +yyabort_nomem: +#endif /* YYBTYACC */ +    yyresult = 2; +    goto yyreturn; + +yyabort: +    yyresult = 1; +    goto yyreturn; + +yyaccept: +#if YYBTYACC +    if (yyps->save) goto yyvalid; +#endif /* YYBTYACC */ +    yyresult = 0; + +yyreturn: +#if defined(YYDESTRUCT_CALL) +    if (yychar != YYEOF && yychar != YYEMPTY) +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc); +#else +        YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ + +    { +        YYSTYPE *pv; +#if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) +        YYLTYPE *pp; + +        for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp) +             YYDESTRUCT_CALL("cleanup: discarding state", +                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp); +#else +        for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv) +             YYDESTRUCT_CALL("cleanup: discarding state", +                             yystos[*(yystack.s_base + (pv - yystack.l_base))], pv); +#endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */ +    } +#endif /* defined(YYDESTRUCT_CALL) */ + +#if YYBTYACC +    if (yyerrctx) +    { +        yyFreeState(yyerrctx); +        yyerrctx = NULL; +    } +    while (yyps) +    { +        YYParseState *save = yyps; +        yyps = save->save; +        save->save = NULL; +        yyFreeState(save); +    } +    while (yypath) +    { +        YYParseState *save = yypath; +        yypath = save->save; +        save->save = NULL; +        yyFreeState(save); +    } +#endif /* YYBTYACC */ +    yyfreestack(&yystack); +    return (yyresult); +}  | 
