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