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