Home | History | Annotate | Line # | Download | only in yacc
calc2.tab.c revision 1.5
      1 /*	$NetBSD: calc2.tab.c,v 1.5 2024/09/14 21:29:04 christos Exp $	*/
      2 
      3 /* original parser id follows */
      4 /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
      5 /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
      6 
      7 #define YYBYACC 1
      8 #define YYMAJOR 2
      9 #define YYMINOR 0
     10 #define YYCHECK "yyyymmdd"
     11 
     12 #define YYEMPTY        (-1)
     13 #define yyclearin      (yychar = YYEMPTY)
     14 #define yyerrok        (yyerrflag = 0)
     15 #define YYRECOVERING() (yyerrflag != 0)
     16 #define YYENOMEM       (-2)
     17 #define YYEOF          0
     18 
     19 #ifndef yyparse
     20 #define yyparse    calc2_parse
     21 #endif /* yyparse */
     22 
     23 #ifndef yylex
     24 #define yylex      calc2_lex
     25 #endif /* yylex */
     26 
     27 #ifndef yyerror
     28 #define yyerror    calc2_error
     29 #endif /* yyerror */
     30 
     31 #ifndef yychar
     32 #define yychar     calc2_char
     33 #endif /* yychar */
     34 
     35 #ifndef yyval
     36 #define yyval      calc2_val
     37 #endif /* yyval */
     38 
     39 #ifndef yylval
     40 #define yylval     calc2_lval
     41 #endif /* yylval */
     42 
     43 #ifndef yydebug
     44 #define yydebug    calc2_debug
     45 #endif /* yydebug */
     46 
     47 #ifndef yynerrs
     48 #define yynerrs    calc2_nerrs
     49 #endif /* yynerrs */
     50 
     51 #ifndef yyerrflag
     52 #define yyerrflag  calc2_errflag
     53 #endif /* yyerrflag */
     54 
     55 #ifndef yylhs
     56 #define yylhs      calc2_lhs
     57 #endif /* yylhs */
     58 
     59 #ifndef yylen
     60 #define yylen      calc2_len
     61 #endif /* yylen */
     62 
     63 #ifndef yydefred
     64 #define yydefred   calc2_defred
     65 #endif /* yydefred */
     66 
     67 #ifndef yydgoto
     68 #define yydgoto    calc2_dgoto
     69 #endif /* yydgoto */
     70 
     71 #ifndef yysindex
     72 #define yysindex   calc2_sindex
     73 #endif /* yysindex */
     74 
     75 #ifndef yyrindex
     76 #define yyrindex   calc2_rindex
     77 #endif /* yyrindex */
     78 
     79 #ifndef yygindex
     80 #define yygindex   calc2_gindex
     81 #endif /* yygindex */
     82 
     83 #ifndef yytable
     84 #define yytable    calc2_table
     85 #endif /* yytable */
     86 
     87 #ifndef yycheck
     88 #define yycheck    calc2_check
     89 #endif /* yycheck */
     90 
     91 #ifndef yyname
     92 #define yyname     calc2_name
     93 #endif /* yyname */
     94 
     95 #ifndef yyrule
     96 #define yyrule     calc2_rule
     97 #endif /* yyrule */
     98 #define YYPREFIX "calc2_"
     99 
    100 #define YYPURE 0
    101 
    102 #line 7 "calc2.y"
    103 # include <stdio.h>
    104 # include <ctype.h>
    105 
    106 #ifdef YYBISON
    107 #define YYLEX_PARAM base
    108 #define YYLEX_DECL() yylex(int *YYLEX_PARAM)
    109 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
    110 int YYLEX_DECL();
    111 static void YYERROR_DECL();
    112 #endif
    113 
    114 #line 113 "calc2.tab.c"
    115 
    116 #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
    117 /* Default: YYSTYPE is the semantic value type. */
    118 typedef int YYSTYPE;
    119 # define YYSTYPE_IS_DECLARED 1
    120 #endif
    121 
    122 /* compatibility with bison */
    123 #ifdef YYPARSE_PARAM
    124 /* compatibility with FreeBSD */
    125 # ifdef YYPARSE_PARAM_TYPE
    126 #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
    127 # else
    128 #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
    129 # endif
    130 #else
    131 # define YYPARSE_DECL() yyparse(int regs[26], int *base)
    132 #endif
    133 
    134 /* Parameters sent to lex. */
    135 #ifdef YYLEX_PARAM
    136 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
    137 # define YYLEX yylex(YYLEX_PARAM)
    138 #else
    139 # define YYLEX_DECL() yylex(int *base)
    140 # define YYLEX yylex(base)
    141 #endif
    142 
    143 /* Parameters sent to yyerror. */
    144 #ifndef YYERROR_DECL
    145 #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
    146 #endif
    147 #ifndef YYERROR_CALL
    148 #define YYERROR_CALL(msg) yyerror(regs, base, msg)
    149 #endif
    150 
    151 extern int YYPARSE_DECL();
    152 
    153 #define DIGIT 257
    154 #define LETTER 258
    155 #define UMINUS 259
    156 #define YYERRCODE 256
    157 typedef int YYINT;
    158 static const YYINT calc2_lhs[] = {                       -1,
    159     0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
    160     2,    2,    2,    2,    2,    2,    3,    3,
    161 };
    162 static const YYINT calc2_len[] = {                        2,
    163     0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
    164     3,    3,    3,    2,    1,    1,    1,    2,
    165 };
    166 static const YYINT calc2_defred[] = {                     1,
    167     0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
    168     0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
    169     0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
    170    10,   11,
    171 };
    172 static const YYINT calc2_dgoto[] = {                      1,
    173     7,    8,    9,
    174 };
    175 static const YYINT calc2_sindex[] = {                     0,
    176   -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
    177   -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
    178   -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
    179     0,    0,
    180 };
    181 static const YYINT calc2_rindex[] = {                     0,
    182     0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
    183     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    184     0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
    185     0,    0,
    186 };
    187 static const YYINT calc2_gindex[] = {                     0,
    188     0,   65,    0,
    189 };
    190 #define YYTABLESIZE 220
    191 static const YYINT calc2_table[] = {                      6,
    192    16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
    193    15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
    194     0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
    195     0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
    196     0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
    197     8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
    198     0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
    199    14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
    200    26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
    201     0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
    202     0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
    203     0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
    204     0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
    205     0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
    206     0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
    207     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    208     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    209     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    210     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    211     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    212     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    213     0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
    214 };
    215 static const YYINT calc2_check[] = {                     40,
    216    10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
    217    10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
    218    -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
    219    -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
    220    -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
    221    38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
    222    -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
    223     6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
    224    16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
    225    -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
    226    -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
    227    -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
    228    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
    229    -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
    230    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
    231    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    232    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    233    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    234    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    235    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    236    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    237    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
    238 };
    239 #define YYFINAL 1
    240 #ifndef YYDEBUG
    241 #define YYDEBUG 0
    242 #endif
    243 #define YYMAXTOKEN 259
    244 #define YYUNDFTOKEN 265
    245 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
    246 #if YYDEBUG
    247 static const char *const calc2_name[] = {
    248 
    249 "end-of-file",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,
    250 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
    251 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,
    252 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,
    253 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,0,
    254 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,0,
    255 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,0,
    256 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
    257 };
    258 static const char *const calc2_rule[] = {
    259 "$accept : list",
    260 "list :",
    261 "list : list stat '\\n'",
    262 "list : list error '\\n'",
    263 "stat : expr",
    264 "stat : LETTER '=' expr",
    265 "expr : '(' expr ')'",
    266 "expr : expr '+' expr",
    267 "expr : expr '-' expr",
    268 "expr : expr '*' expr",
    269 "expr : expr '/' expr",
    270 "expr : expr '%' expr",
    271 "expr : expr '&' expr",
    272 "expr : expr '|' expr",
    273 "expr : '-' expr",
    274 "expr : LETTER",
    275 "expr : number",
    276 "number : DIGIT",
    277 "number : number DIGIT",
    278 
    279 };
    280 #endif
    281 
    282 #if YYDEBUG
    283 int      yydebug;
    284 #endif
    285 
    286 int      yyerrflag;
    287 int      yychar;
    288 YYSTYPE  yyval;
    289 YYSTYPE  yylval;
    290 int      yynerrs;
    291 
    292 /* define the initial stack-sizes */
    293 #ifdef YYSTACKSIZE
    294 #undef YYMAXDEPTH
    295 #define YYMAXDEPTH  YYSTACKSIZE
    296 #else
    297 #ifdef YYMAXDEPTH
    298 #define YYSTACKSIZE YYMAXDEPTH
    299 #else
    300 #define YYSTACKSIZE 10000
    301 #define YYMAXDEPTH  10000
    302 #endif
    303 #endif
    304 
    305 #define YYINITSTACKSIZE 200
    306 
    307 typedef struct {
    308     unsigned stacksize;
    309     YYINT    *s_base;
    310     YYINT    *s_mark;
    311     YYINT    *s_last;
    312     YYSTYPE  *l_base;
    313     YYSTYPE  *l_mark;
    314 } YYSTACKDATA;
    315 /* variables for the parser stack */
    316 static YYSTACKDATA yystack;
    317 #line 73 "calc2.y"
    318  /* start of programs */
    319 
    320 #ifdef YYBYACC
    321 extern int YYLEX_DECL();
    322 #endif
    323 
    324 int
    325 main (void)
    326 {
    327     int regs[26];
    328     int base = 10;
    329 
    330     while(!feof(stdin)) {
    331 	yyparse(regs, &base);
    332     }
    333     return 0;
    334 }
    335 
    336 #define UNUSED(x) ((void)(x))
    337 
    338 static void
    339 YYERROR_DECL()
    340 {
    341     UNUSED(regs); /* %parse-param regs is not actually used here */
    342     UNUSED(base); /* %parse-param base is not actually used here */
    343     fprintf(stderr, "%s\n", s);
    344 }
    345 
    346 int
    347 YYLEX_DECL()
    348 {
    349 	/* lexical analysis routine */
    350 	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
    351 	/* return DIGIT for a digit, yylval = 0 through 9 */
    352 	/* all other characters are returned immediately */
    353 
    354     int c;
    355 
    356     while( (c=getchar()) == ' ' )   { /* skip blanks */ }
    357 
    358     /* c is now nonblank */
    359 
    360     if( islower( c )) {
    361 	yylval = c - 'a';
    362 	return ( LETTER );
    363     }
    364     if( isdigit( c )) {
    365 	yylval = (c - '0') % (*base);
    366 	return ( DIGIT );
    367     }
    368     return( c );
    369 }
    370 #line 369 "calc2.tab.c"
    371 
    372 #if YYDEBUG
    373 #include <stdio.h>	/* needed for printf */
    374 #endif
    375 
    376 #include <stdlib.h>	/* needed for malloc, etc */
    377 #include <string.h>	/* needed for memset */
    378 
    379 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
    380 static int yygrowstack(YYSTACKDATA *data)
    381 {
    382     int i;
    383     unsigned newsize;
    384     YYINT *newss;
    385     YYSTYPE *newvs;
    386 
    387     if ((newsize = data->stacksize) == 0)
    388         newsize = YYINITSTACKSIZE;
    389     else if (newsize >= YYMAXDEPTH)
    390         return YYENOMEM;
    391     else if ((newsize *= 2) > YYMAXDEPTH)
    392         newsize = YYMAXDEPTH;
    393 
    394     i = (int) (data->s_mark - data->s_base);
    395     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
    396     if (newss == 0)
    397         return YYENOMEM;
    398 
    399     data->s_base = newss;
    400     data->s_mark = newss + i;
    401 
    402     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    403     if (newvs == 0)
    404         return YYENOMEM;
    405 
    406     data->l_base = newvs;
    407     data->l_mark = newvs + i;
    408 
    409     data->stacksize = newsize;
    410     data->s_last = data->s_base + newsize - 1;
    411     return 0;
    412 }
    413 
    414 #if YYPURE || defined(YY_NO_LEAKS)
    415 static void yyfreestack(YYSTACKDATA *data)
    416 {
    417     free(data->s_base);
    418     free(data->l_base);
    419     memset(data, 0, sizeof(*data));
    420 }
    421 #else
    422 #define yyfreestack(data) /* nothing */
    423 #endif
    424 
    425 #define YYABORT  goto yyabort
    426 #define YYREJECT goto yyabort
    427 #define YYACCEPT goto yyaccept
    428 #define YYERROR  goto yyerrlab
    429 
    430 int
    431 YYPARSE_DECL()
    432 {
    433     int yym, yyn, yystate;
    434 #if YYDEBUG
    435     const char *yys;
    436 
    437     if ((yys = getenv("YYDEBUG")) != 0)
    438     {
    439         yyn = *yys;
    440         if (yyn >= '0' && yyn <= '9')
    441             yydebug = yyn - '0';
    442     }
    443 #endif
    444 
    445     /* yym is set below */
    446     /* yyn is set below */
    447     yynerrs = 0;
    448     yyerrflag = 0;
    449     yychar = YYEMPTY;
    450     yystate = 0;
    451 
    452 #if YYPURE
    453     memset(&yystack, 0, sizeof(yystack));
    454 #endif
    455 
    456     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    457     yystack.s_mark = yystack.s_base;
    458     yystack.l_mark = yystack.l_base;
    459     yystate = 0;
    460     *yystack.s_mark = 0;
    461 
    462 yyloop:
    463     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    464     if (yychar < 0)
    465     {
    466         yychar = YYLEX;
    467         if (yychar < 0) yychar = YYEOF;
    468 #if YYDEBUG
    469         if (yydebug)
    470         {
    471             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
    472             printf("%sdebug: state %d, reading %d (%s)\n",
    473                     YYPREFIX, yystate, yychar, yys);
    474         }
    475 #endif
    476     }
    477     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    478             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    479     {
    480 #if YYDEBUG
    481         if (yydebug)
    482             printf("%sdebug: state %d, shifting to state %d\n",
    483                     YYPREFIX, yystate, yytable[yyn]);
    484 #endif
    485         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    486         yystate = yytable[yyn];
    487         *++yystack.s_mark = yytable[yyn];
    488         *++yystack.l_mark = yylval;
    489         yychar = YYEMPTY;
    490         if (yyerrflag > 0)  --yyerrflag;
    491         goto yyloop;
    492     }
    493     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    494             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    495     {
    496         yyn = yytable[yyn];
    497         goto yyreduce;
    498     }
    499     if (yyerrflag != 0) goto yyinrecovery;
    500 
    501     YYERROR_CALL("syntax error");
    502 
    503     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
    504 yyerrlab:
    505     ++yynerrs;
    506 
    507 yyinrecovery:
    508     if (yyerrflag < 3)
    509     {
    510         yyerrflag = 3;
    511         for (;;)
    512         {
    513             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
    514                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
    515             {
    516 #if YYDEBUG
    517                 if (yydebug)
    518                     printf("%sdebug: state %d, error recovery shifting\
    519  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
    520 #endif
    521                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    522                 yystate = yytable[yyn];
    523                 *++yystack.s_mark = yytable[yyn];
    524                 *++yystack.l_mark = yylval;
    525                 goto yyloop;
    526             }
    527             else
    528             {
    529 #if YYDEBUG
    530                 if (yydebug)
    531                     printf("%sdebug: error recovery discarding state %d\n",
    532                             YYPREFIX, *yystack.s_mark);
    533 #endif
    534                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
    535                 --yystack.s_mark;
    536                 --yystack.l_mark;
    537             }
    538         }
    539     }
    540     else
    541     {
    542         if (yychar == YYEOF) goto yyabort;
    543 #if YYDEBUG
    544         if (yydebug)
    545         {
    546             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
    547             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
    548                     YYPREFIX, yystate, yychar, yys);
    549         }
    550 #endif
    551         yychar = YYEMPTY;
    552         goto yyloop;
    553     }
    554 
    555 yyreduce:
    556 #if YYDEBUG
    557     if (yydebug)
    558         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
    559                 YYPREFIX, yystate, yyn, yyrule[yyn]);
    560 #endif
    561     yym = yylen[yyn];
    562     if (yym > 0)
    563         yyval = yystack.l_mark[1-yym];
    564     else
    565         memset(&yyval, 0, sizeof yyval);
    566 
    567     switch (yyn)
    568     {
    569 case 3:
    570 #line 35 "calc2.y"
    571 	{  yyerrok ; }
    572 #line 571 "calc2.tab.c"
    573 break;
    574 case 4:
    575 #line 39 "calc2.y"
    576 	{  printf("%d\n",yystack.l_mark[0]);}
    577 #line 576 "calc2.tab.c"
    578 break;
    579 case 5:
    580 #line 41 "calc2.y"
    581 	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
    582 #line 581 "calc2.tab.c"
    583 break;
    584 case 6:
    585 #line 45 "calc2.y"
    586 	{  yyval = yystack.l_mark[-1]; }
    587 #line 586 "calc2.tab.c"
    588 break;
    589 case 7:
    590 #line 47 "calc2.y"
    591 	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
    592 #line 591 "calc2.tab.c"
    593 break;
    594 case 8:
    595 #line 49 "calc2.y"
    596 	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
    597 #line 596 "calc2.tab.c"
    598 break;
    599 case 9:
    600 #line 51 "calc2.y"
    601 	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
    602 #line 601 "calc2.tab.c"
    603 break;
    604 case 10:
    605 #line 53 "calc2.y"
    606 	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
    607 #line 606 "calc2.tab.c"
    608 break;
    609 case 11:
    610 #line 55 "calc2.y"
    611 	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
    612 #line 611 "calc2.tab.c"
    613 break;
    614 case 12:
    615 #line 57 "calc2.y"
    616 	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
    617 #line 616 "calc2.tab.c"
    618 break;
    619 case 13:
    620 #line 59 "calc2.y"
    621 	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
    622 #line 621 "calc2.tab.c"
    623 break;
    624 case 14:
    625 #line 61 "calc2.y"
    626 	{  yyval = - yystack.l_mark[0]; }
    627 #line 626 "calc2.tab.c"
    628 break;
    629 case 15:
    630 #line 63 "calc2.y"
    631 	{  yyval = regs[yystack.l_mark[0]]; }
    632 #line 631 "calc2.tab.c"
    633 break;
    634 case 17:
    635 #line 68 "calc2.y"
    636 	{  yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
    637 #line 636 "calc2.tab.c"
    638 break;
    639 case 18:
    640 #line 70 "calc2.y"
    641 	{  yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
    642 #line 641 "calc2.tab.c"
    643 break;
    644 #line 643 "calc2.tab.c"
    645     }
    646     yystack.s_mark -= yym;
    647     yystate = *yystack.s_mark;
    648     yystack.l_mark -= yym;
    649     yym = yylhs[yyn];
    650     if (yystate == 0 && yym == 0)
    651     {
    652 #if YYDEBUG
    653         if (yydebug)
    654             printf("%sdebug: after reduction, shifting from state 0 to\
    655  state %d\n", YYPREFIX, YYFINAL);
    656 #endif
    657         yystate = YYFINAL;
    658         *++yystack.s_mark = YYFINAL;
    659         *++yystack.l_mark = yyval;
    660         if (yychar < 0)
    661         {
    662             yychar = YYLEX;
    663             if (yychar < 0) yychar = YYEOF;
    664 #if YYDEBUG
    665             if (yydebug)
    666             {
    667                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
    668                 printf("%sdebug: state %d, reading %d (%s)\n",
    669                         YYPREFIX, YYFINAL, yychar, yys);
    670             }
    671 #endif
    672         }
    673         if (yychar == YYEOF) goto yyaccept;
    674         goto yyloop;
    675     }
    676     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
    677             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
    678         yystate = yytable[yyn];
    679     else
    680         yystate = yydgoto[yym];
    681 #if YYDEBUG
    682     if (yydebug)
    683         printf("%sdebug: after reduction, shifting from state %d \
    684 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
    685 #endif
    686     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    687     *++yystack.s_mark = (YYINT) yystate;
    688     *++yystack.l_mark = yyval;
    689     goto yyloop;
    690 
    691 yyoverflow:
    692     YYERROR_CALL("yacc stack overflow");
    693 
    694 yyabort:
    695     yyfreestack(&yystack);
    696     return (1);
    697 
    698 yyaccept:
    699     yyfreestack(&yystack);
    700     return (0);
    701 }
    702