Home | History | Annotate | Line # | Download | only in btyacc
calc2.tab.c revision 1.1.1.2
      1  1.1  christos /* original parser id follows */
      2  1.1  christos /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
      3  1.1  christos /* (use YYMAJOR/YYMINOR for ifdefs dependent of parser version) */
      4  1.1  christos 
      5  1.1  christos #define YYBYACC 1
      6  1.1  christos #define YYMAJOR 1
      7  1.1  christos #define YYMINOR 9
      8  1.1  christos #define YYCHECK "yyyymmdd"
      9  1.1  christos 
     10  1.1  christos #define YYEMPTY        (-1)
     11  1.1  christos #define yyclearin      (yychar = YYEMPTY)
     12  1.1  christos #define yyerrok        (yyerrflag = 0)
     13  1.1  christos #define YYRECOVERING() (yyerrflag != 0)
     14  1.1  christos #define YYENOMEM       (-2)
     15  1.1  christos #define YYEOF          0
     16  1.1  christos #undef YYBTYACC
     17  1.1  christos #define YYBTYACC 0
     18  1.1  christos #define YYDEBUGSTR YYPREFIX "debug"
     19  1.1  christos 
     20  1.1  christos #ifndef yyparse
     21  1.1  christos #define yyparse    calc2_parse
     22  1.1  christos #endif /* yyparse */
     23  1.1  christos 
     24  1.1  christos #ifndef yylex
     25  1.1  christos #define yylex      calc2_lex
     26  1.1  christos #endif /* yylex */
     27  1.1  christos 
     28  1.1  christos #ifndef yyerror
     29  1.1  christos #define yyerror    calc2_error
     30  1.1  christos #endif /* yyerror */
     31  1.1  christos 
     32  1.1  christos #ifndef yychar
     33  1.1  christos #define yychar     calc2_char
     34  1.1  christos #endif /* yychar */
     35  1.1  christos 
     36  1.1  christos #ifndef yyval
     37  1.1  christos #define yyval      calc2_val
     38  1.1  christos #endif /* yyval */
     39  1.1  christos 
     40  1.1  christos #ifndef yylval
     41  1.1  christos #define yylval     calc2_lval
     42  1.1  christos #endif /* yylval */
     43  1.1  christos 
     44  1.1  christos #ifndef yydebug
     45  1.1  christos #define yydebug    calc2_debug
     46  1.1  christos #endif /* yydebug */
     47  1.1  christos 
     48  1.1  christos #ifndef yynerrs
     49  1.1  christos #define yynerrs    calc2_nerrs
     50  1.1  christos #endif /* yynerrs */
     51  1.1  christos 
     52  1.1  christos #ifndef yyerrflag
     53  1.1  christos #define yyerrflag  calc2_errflag
     54  1.1  christos #endif /* yyerrflag */
     55  1.1  christos 
     56  1.1  christos #ifndef yylhs
     57  1.1  christos #define yylhs      calc2_lhs
     58  1.1  christos #endif /* yylhs */
     59  1.1  christos 
     60  1.1  christos #ifndef yylen
     61  1.1  christos #define yylen      calc2_len
     62  1.1  christos #endif /* yylen */
     63  1.1  christos 
     64  1.1  christos #ifndef yydefred
     65  1.1  christos #define yydefred   calc2_defred
     66  1.1  christos #endif /* yydefred */
     67  1.1  christos 
     68  1.1  christos #ifndef yystos
     69  1.1  christos #define yystos     calc2_stos
     70  1.1  christos #endif /* yystos */
     71  1.1  christos 
     72  1.1  christos #ifndef yydgoto
     73  1.1  christos #define yydgoto    calc2_dgoto
     74  1.1  christos #endif /* yydgoto */
     75  1.1  christos 
     76  1.1  christos #ifndef yysindex
     77  1.1  christos #define yysindex   calc2_sindex
     78  1.1  christos #endif /* yysindex */
     79  1.1  christos 
     80  1.1  christos #ifndef yyrindex
     81  1.1  christos #define yyrindex   calc2_rindex
     82  1.1  christos #endif /* yyrindex */
     83  1.1  christos 
     84  1.1  christos #ifndef yygindex
     85  1.1  christos #define yygindex   calc2_gindex
     86  1.1  christos #endif /* yygindex */
     87  1.1  christos 
     88  1.1  christos #ifndef yytable
     89  1.1  christos #define yytable    calc2_table
     90  1.1  christos #endif /* yytable */
     91  1.1  christos 
     92  1.1  christos #ifndef yycheck
     93  1.1  christos #define yycheck    calc2_check
     94  1.1  christos #endif /* yycheck */
     95  1.1  christos 
     96  1.1  christos #ifndef yyname
     97  1.1  christos #define yyname     calc2_name
     98  1.1  christos #endif /* yyname */
     99  1.1  christos 
    100  1.1  christos #ifndef yyrule
    101  1.1  christos #define yyrule     calc2_rule
    102  1.1  christos #endif /* yyrule */
    103  1.1  christos 
    104  1.1  christos #if YYBTYACC
    105  1.1  christos 
    106  1.1  christos #ifndef yycindex
    107  1.1  christos #define yycindex   calc2_cindex
    108  1.1  christos #endif /* yycindex */
    109  1.1  christos 
    110  1.1  christos #ifndef yyctable
    111  1.1  christos #define yyctable   calc2_ctable
    112  1.1  christos #endif /* yyctable */
    113  1.1  christos 
    114  1.1  christos #endif /* YYBTYACC */
    115  1.1  christos 
    116  1.1  christos #define YYPREFIX "calc2_"
    117  1.1  christos 
    118  1.1  christos #define YYPURE 0
    119  1.1  christos 
    120  1.1  christos #line 7 "calc2.y"
    121  1.1  christos # include <stdio.h>
    122  1.1  christos # include <ctype.h>
    123  1.1  christos 
    124  1.1  christos #ifdef YYBISON
    125  1.1  christos #define YYLEX_PARAM base
    126  1.1  christos #define YYLEX_DECL() yylex(int *YYLEX_PARAM)
    127  1.1  christos #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
    128  1.1  christos int YYLEX_DECL();
    129  1.1  christos static void YYERROR_DECL();
    130  1.1  christos #endif
    131  1.1  christos 
    132  1.1  christos #line 133 "calc2.tab.c"
    133  1.1  christos 
    134  1.1  christos #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
    135  1.1  christos /* Default: YYSTYPE is the semantic value type. */
    136  1.1  christos typedef int YYSTYPE;
    137  1.1  christos # define YYSTYPE_IS_DECLARED 1
    138  1.1  christos #endif
    139  1.1  christos 
    140  1.1  christos /* compatibility with bison */
    141  1.1  christos #ifdef YYPARSE_PARAM
    142  1.1  christos /* compatibility with FreeBSD */
    143  1.1  christos # ifdef YYPARSE_PARAM_TYPE
    144  1.1  christos #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
    145  1.1  christos # else
    146  1.1  christos #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
    147  1.1  christos # endif
    148  1.1  christos #else
    149  1.1  christos # define YYPARSE_DECL() yyparse(int regs[26], int *base)
    150  1.1  christos #endif
    151  1.1  christos 
    152  1.1  christos /* Parameters sent to lex. */
    153  1.1  christos #ifdef YYLEX_PARAM
    154  1.1  christos # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
    155  1.1  christos # define YYLEX yylex(YYLEX_PARAM)
    156  1.1  christos #else
    157  1.1  christos # define YYLEX_DECL() yylex(int *base)
    158  1.1  christos # define YYLEX yylex(base)
    159  1.1  christos #endif
    160  1.1  christos 
    161  1.1  christos /* Parameters sent to yyerror. */
    162  1.1  christos #ifndef YYERROR_DECL
    163  1.1  christos #define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
    164  1.1  christos #endif
    165  1.1  christos #ifndef YYERROR_CALL
    166  1.1  christos #define YYERROR_CALL(msg) yyerror(regs, base, msg)
    167  1.1  christos #endif
    168  1.1  christos 
    169  1.1  christos extern int YYPARSE_DECL();
    170  1.1  christos 
    171  1.1  christos #define DIGIT 257
    172  1.1  christos #define LETTER 258
    173  1.1  christos #define UMINUS 259
    174  1.1  christos #define YYERRCODE 256
    175  1.1  christos typedef short YYINT;
    176  1.1  christos static const YYINT calc2_lhs[] = {                       -1,
    177  1.1  christos     0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
    178  1.1  christos     2,    2,    2,    2,    2,    2,    3,    3,
    179  1.1  christos };
    180  1.1  christos static const YYINT calc2_len[] = {                        2,
    181  1.1  christos     0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
    182  1.1  christos     3,    3,    3,    2,    1,    1,    1,    2,
    183  1.1  christos };
    184  1.1  christos static const YYINT calc2_defred[] = {                     1,
    185  1.1  christos     0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
    186  1.1  christos     0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
    187  1.1  christos     0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
    188  1.1  christos    10,   11,
    189  1.1  christos };
    190  1.1  christos static const YYINT calc2_stos[] = {                       0,
    191  1.1  christos   261,  256,  257,  258,   45,   40,  262,  263,  264,   10,
    192  1.1  christos    61,  258,  263,  263,   10,  124,   38,   43,   45,   42,
    193  1.1  christos    47,   37,  257,  263,   41,  263,  263,  263,  263,  263,
    194  1.1  christos   263,  263,
    195  1.1  christos };
    196  1.1  christos static const YYINT calc2_dgoto[] = {                      1,
    197  1.1  christos     7,    8,    9,
    198  1.1  christos };
    199  1.1  christos static const YYINT calc2_sindex[] = {                     0,
    200  1.1  christos   -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
    201  1.1  christos   -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
    202  1.1  christos   -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
    203  1.1  christos     0,    0,
    204  1.1  christos };
    205  1.1  christos static const YYINT calc2_rindex[] = {                     0,
    206  1.1  christos     0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
    207  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    208  1.1  christos     0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
    209  1.1  christos     0,    0,
    210  1.1  christos };
    211  1.1  christos #if YYBTYACC
    212  1.1  christos static const YYINT calc2_cindex[] = {                     0,
    213  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    214  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    215  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    216  1.1  christos     0,    0,
    217  1.1  christos };
    218  1.1  christos #endif
    219  1.1  christos static const YYINT calc2_gindex[] = {                     0,
    220  1.1  christos     0,   65,    0,
    221  1.1  christos };
    222  1.1  christos #define YYTABLESIZE 220
    223  1.1  christos static const YYINT calc2_table[] = {                      6,
    224  1.1  christos    16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
    225  1.1  christos    15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
    226  1.1  christos     0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
    227  1.1  christos     0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
    228  1.1  christos     0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
    229  1.1  christos     8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
    230  1.1  christos     0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
    231  1.1  christos    14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
    232  1.1  christos    26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
    233  1.1  christos     0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
    234  1.1  christos     0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
    235  1.1  christos     0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
    236  1.1  christos     0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
    237  1.1  christos     0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
    238  1.1  christos     0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
    239  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    240  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    241  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    242  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    243  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    244  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    245  1.1  christos     0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
    246  1.1  christos };
    247  1.1  christos static const YYINT calc2_check[] = {                     40,
    248  1.1  christos    10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
    249  1.1  christos    10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
    250  1.1  christos    -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
    251  1.1  christos    -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
    252  1.1  christos    -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
    253  1.1  christos    38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
    254  1.1  christos    -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
    255  1.1  christos     6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
    256  1.1  christos    16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
    257  1.1  christos    -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
    258  1.1  christos    -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
    259  1.1  christos    -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
    260  1.1  christos    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
    261  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
    262  1.1  christos    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
    263  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    264  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    265  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    266  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    267  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    268  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    269  1.1  christos    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
    270  1.1  christos };
    271  1.1  christos #if YYBTYACC
    272  1.1  christos static const YYINT calc2_ctable[] = {                    -1,
    273  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    274  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    275  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    276  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    277  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    278  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    279  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    280  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    281  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    282  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    283  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    284  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    285  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    286  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    287  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    288  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    289  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    290  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    291  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    292  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    293  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    294  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    295  1.1  christos };
    296  1.1  christos #endif
    297  1.1  christos #define YYFINAL 1
    298  1.1  christos #ifndef YYDEBUG
    299  1.1  christos #define YYDEBUG 0
    300  1.1  christos #endif
    301  1.1  christos #define YYMAXTOKEN 259
    302  1.1  christos #define YYUNDFTOKEN 265
    303  1.1  christos #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
    304  1.1  christos #if YYDEBUG
    305  1.1  christos static const char *const calc2_name[] = {
    306  1.1  christos 
    307  1.1  christos "$end",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    308  1.1  christos 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,
    309  1.1  christos 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,
    310  1.1  christos 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,
    311  1.1  christos 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,
    312  1.1  christos 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,
    313  1.1  christos 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,
    314  1.1  christos 0,0,"error","DIGIT","LETTER","UMINUS","$accept","list","stat","expr","number",
    315  1.1  christos "illegal-symbol",
    316  1.1  christos };
    317  1.1  christos static const char *const calc2_rule[] = {
    318  1.1  christos "$accept : list",
    319  1.1  christos "list :",
    320  1.1  christos "list : list stat '\\n'",
    321  1.1  christos "list : list error '\\n'",
    322  1.1  christos "stat : expr",
    323  1.1  christos "stat : LETTER '=' expr",
    324  1.1  christos "expr : '(' expr ')'",
    325  1.1  christos "expr : expr '+' expr",
    326  1.1  christos "expr : expr '-' expr",
    327  1.1  christos "expr : expr '*' expr",
    328  1.1  christos "expr : expr '/' expr",
    329  1.1  christos "expr : expr '%' expr",
    330  1.1  christos "expr : expr '&' expr",
    331  1.1  christos "expr : expr '|' expr",
    332  1.1  christos "expr : '-' expr",
    333  1.1  christos "expr : LETTER",
    334  1.1  christos "expr : number",
    335  1.1  christos "number : DIGIT",
    336  1.1  christos "number : number DIGIT",
    337  1.1  christos 
    338  1.1  christos };
    339  1.1  christos #endif
    340  1.1  christos 
    341  1.1  christos int      yydebug;
    342  1.1  christos int      yynerrs;
    343  1.1  christos 
    344  1.1  christos int      yyerrflag;
    345  1.1  christos int      yychar;
    346  1.1  christos YYSTYPE  yyval;
    347  1.1  christos YYSTYPE  yylval;
    348  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    349  1.1  christos YYLTYPE  yyloc; /* position returned by actions */
    350  1.1  christos YYLTYPE  yylloc; /* position from the lexer */
    351  1.1  christos #endif
    352  1.1  christos 
    353  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    354  1.1  christos #ifndef YYLLOC_DEFAULT
    355  1.1  christos #define YYLLOC_DEFAULT(loc, rhs, n) \
    356  1.1  christos do \
    357  1.1  christos { \
    358  1.1  christos     if (n == 0) \
    359  1.1  christos     { \
    360  1.1  christos         (loc).first_line   = ((rhs)[-1]).last_line; \
    361  1.1  christos         (loc).first_column = ((rhs)[-1]).last_column; \
    362  1.1  christos         (loc).last_line    = ((rhs)[-1]).last_line; \
    363  1.1  christos         (loc).last_column  = ((rhs)[-1]).last_column; \
    364  1.1  christos     } \
    365  1.1  christos     else \
    366  1.1  christos     { \
    367  1.1  christos         (loc).first_line   = ((rhs)[ 0 ]).first_line; \
    368  1.1  christos         (loc).first_column = ((rhs)[ 0 ]).first_column; \
    369  1.1  christos         (loc).last_line    = ((rhs)[n-1]).last_line; \
    370  1.1  christos         (loc).last_column  = ((rhs)[n-1]).last_column; \
    371  1.1  christos     } \
    372  1.1  christos } while (0)
    373  1.1  christos #endif /* YYLLOC_DEFAULT */
    374  1.1  christos #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
    375  1.1  christos #if YYBTYACC
    376  1.1  christos 
    377  1.1  christos #ifndef YYLVQUEUEGROWTH
    378  1.1  christos #define YYLVQUEUEGROWTH 32
    379  1.1  christos #endif
    380  1.1  christos #endif /* YYBTYACC */
    381  1.1  christos 
    382  1.1  christos /* define the initial stack-sizes */
    383  1.1  christos #ifdef YYSTACKSIZE
    384  1.1  christos #undef YYMAXDEPTH
    385  1.1  christos #define YYMAXDEPTH  YYSTACKSIZE
    386  1.1  christos #else
    387  1.1  christos #ifdef YYMAXDEPTH
    388  1.1  christos #define YYSTACKSIZE YYMAXDEPTH
    389  1.1  christos #else
    390  1.1  christos #define YYSTACKSIZE 10000
    391  1.1  christos #define YYMAXDEPTH  10000
    392  1.1  christos #endif
    393  1.1  christos #endif
    394  1.1  christos 
    395  1.1  christos #ifndef YYINITSTACKSIZE
    396  1.1  christos #define YYINITSTACKSIZE 200
    397  1.1  christos #endif
    398  1.1  christos 
    399  1.1  christos typedef struct {
    400  1.1  christos     unsigned stacksize;
    401  1.1  christos     short    *s_base;
    402  1.1  christos     short    *s_mark;
    403  1.1  christos     short    *s_last;
    404  1.1  christos     YYSTYPE  *l_base;
    405  1.1  christos     YYSTYPE  *l_mark;
    406  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    407  1.1  christos     YYLTYPE  *p_base;
    408  1.1  christos     YYLTYPE  *p_mark;
    409  1.1  christos #endif
    410  1.1  christos } YYSTACKDATA;
    411  1.1  christos #if YYBTYACC
    412  1.1  christos 
    413  1.1  christos struct YYParseState_s
    414  1.1  christos {
    415  1.1  christos     struct YYParseState_s *save;    /* Previously saved parser state */
    416  1.1  christos     YYSTACKDATA            yystack; /* saved parser stack */
    417  1.1  christos     int                    state;   /* saved parser state */
    418  1.1  christos     int                    errflag; /* saved error recovery status */
    419  1.1  christos     int                    lexeme;  /* saved index of the conflict lexeme in the lexical queue */
    420  1.1  christos     YYINT                  ctry;    /* saved index in yyctable[] for this conflict */
    421  1.1  christos };
    422  1.1  christos typedef struct YYParseState_s YYParseState;
    423  1.1  christos #endif /* YYBTYACC */
    424  1.1  christos /* variables for the parser stack */
    425  1.1  christos static YYSTACKDATA yystack;
    426  1.1  christos #if YYBTYACC
    427  1.1  christos 
    428  1.1  christos /* Current parser state */
    429  1.1  christos static YYParseState *yyps = 0;
    430  1.1  christos 
    431  1.1  christos /* yypath != NULL: do the full parse, starting at *yypath parser state. */
    432  1.1  christos static YYParseState *yypath = 0;
    433  1.1  christos 
    434  1.1  christos /* Base of the lexical value queue */
    435  1.1  christos static YYSTYPE *yylvals = 0;
    436  1.1  christos 
    437  1.1  christos /* Current position at lexical value queue */
    438  1.1  christos static YYSTYPE *yylvp = 0;
    439  1.1  christos 
    440  1.1  christos /* End position of lexical value queue */
    441  1.1  christos static YYSTYPE *yylve = 0;
    442  1.1  christos 
    443  1.1  christos /* The last allocated position at the lexical value queue */
    444  1.1  christos static YYSTYPE *yylvlim = 0;
    445  1.1  christos 
    446  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    447  1.1  christos /* Base of the lexical position queue */
    448  1.1  christos static YYLTYPE *yylpsns = 0;
    449  1.1  christos 
    450  1.1  christos /* Current position at lexical position queue */
    451  1.1  christos static YYLTYPE *yylpp = 0;
    452  1.1  christos 
    453  1.1  christos /* End position of lexical position queue */
    454  1.1  christos static YYLTYPE *yylpe = 0;
    455  1.1  christos 
    456  1.1  christos /* The last allocated position at the lexical position queue */
    457  1.1  christos static YYLTYPE *yylplim = 0;
    458  1.1  christos #endif
    459  1.1  christos 
    460  1.1  christos /* Current position at lexical token queue */
    461  1.1  christos static short  *yylexp = 0;
    462  1.1  christos 
    463  1.1  christos static short  *yylexemes = 0;
    464  1.1  christos #endif /* YYBTYACC */
    465  1.1  christos #line 73 "calc2.y"
    466  1.1  christos  /* start of programs */
    467  1.1  christos 
    468  1.1  christos #ifdef YYBYACC
    469  1.1  christos extern int YYLEX_DECL();
    470  1.1  christos #endif
    471  1.1  christos 
    472  1.1  christos int
    473  1.1  christos main (void)
    474  1.1  christos {
    475  1.1  christos     int regs[26];
    476  1.1  christos     int base = 10;
    477  1.1  christos 
    478  1.1  christos     while(!feof(stdin)) {
    479  1.1  christos 	yyparse(regs, &base);
    480  1.1  christos     }
    481  1.1  christos     return 0;
    482  1.1  christos }
    483  1.1  christos 
    484  1.1  christos #define UNUSED(x) ((void)(x))
    485  1.1  christos 
    486  1.1  christos static void
    487  1.1  christos YYERROR_DECL()
    488  1.1  christos {
    489  1.1  christos     UNUSED(regs); /* %parse-param regs is not actually used here */
    490  1.1  christos     UNUSED(base); /* %parse-param base is not actually used here */
    491  1.1  christos     fprintf(stderr, "%s\n", s);
    492  1.1  christos }
    493  1.1  christos 
    494  1.1  christos int
    495  1.1  christos YYLEX_DECL()
    496  1.1  christos {
    497  1.1  christos 	/* lexical analysis routine */
    498  1.1  christos 	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
    499  1.1  christos 	/* return DIGIT for a digit, yylval = 0 through 9 */
    500  1.1  christos 	/* all other characters are returned immediately */
    501  1.1  christos 
    502  1.1  christos     int c;
    503  1.1  christos 
    504  1.1  christos     while( (c=getchar()) == ' ' )   { /* skip blanks */ }
    505  1.1  christos 
    506  1.1  christos     /* c is now nonblank */
    507  1.1  christos 
    508  1.1  christos     if( islower( c )) {
    509  1.1  christos 	yylval = c - 'a';
    510  1.1  christos 	return ( LETTER );
    511  1.1  christos     }
    512  1.1  christos     if( isdigit( c )) {
    513  1.1  christos 	yylval = (c - '0') % (*base);
    514  1.1  christos 	return ( DIGIT );
    515  1.1  christos     }
    516  1.1  christos     return( c );
    517  1.1  christos }
    518  1.1  christos #line 519 "calc2.tab.c"
    519  1.1  christos 
    520  1.1  christos /* For use in generated program */
    521  1.1  christos #define yydepth (int)(yystack.s_mark - yystack.s_base)
    522  1.1  christos #if YYBTYACC
    523  1.1  christos #define yytrial (yyps->save)
    524  1.1  christos #endif /* YYBTYACC */
    525  1.1  christos 
    526  1.1  christos #if YYDEBUG
    527  1.1  christos #include <stdio.h>         /* needed for printf */
    528  1.1  christos #endif
    529  1.1  christos 
    530  1.1  christos #include <stdlib.h>        /* needed for malloc, etc */
    531  1.1  christos #include <string.h>        /* needed for memset */
    532  1.1  christos 
    533  1.1  christos /* allocate initial stack or double stack size, up to YYMAXDEPTH */
    534  1.1  christos static int yygrowstack(YYSTACKDATA *data)
    535  1.1  christos {
    536  1.1  christos     int i;
    537  1.1  christos     unsigned newsize;
    538  1.1  christos     short *newss;
    539  1.1  christos     YYSTYPE *newvs;
    540  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    541  1.1  christos     YYLTYPE *newps;
    542  1.1  christos #endif
    543  1.1  christos 
    544  1.1  christos     if ((newsize = data->stacksize) == 0)
    545  1.1  christos         newsize = YYINITSTACKSIZE;
    546  1.1  christos     else if (newsize >= YYMAXDEPTH)
    547  1.1  christos         return YYENOMEM;
    548  1.1  christos     else if ((newsize *= 2) > YYMAXDEPTH)
    549  1.1  christos         newsize = YYMAXDEPTH;
    550  1.1  christos 
    551  1.1  christos     i = (int) (data->s_mark - data->s_base);
    552  1.1  christos     newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
    553  1.1  christos     if (newss == 0)
    554  1.1  christos         return YYENOMEM;
    555  1.1  christos 
    556  1.1  christos     data->s_base = newss;
    557  1.1  christos     data->s_mark = newss + i;
    558  1.1  christos 
    559  1.1  christos     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    560  1.1  christos     if (newvs == 0)
    561  1.1  christos         return YYENOMEM;
    562  1.1  christos 
    563  1.1  christos     data->l_base = newvs;
    564  1.1  christos     data->l_mark = newvs + i;
    565  1.1  christos 
    566  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    567  1.1  christos     newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
    568  1.1  christos     if (newps == 0)
    569  1.1  christos         return YYENOMEM;
    570  1.1  christos 
    571  1.1  christos     data->p_base = newps;
    572  1.1  christos     data->p_mark = newps + i;
    573  1.1  christos #endif
    574  1.1  christos 
    575  1.1  christos     data->stacksize = newsize;
    576  1.1  christos     data->s_last = data->s_base + newsize - 1;
    577  1.1  christos 
    578  1.1  christos #if YYDEBUG
    579  1.1  christos     if (yydebug)
    580  1.1  christos         fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
    581  1.1  christos #endif
    582  1.1  christos     return 0;
    583  1.1  christos }
    584  1.1  christos 
    585  1.1  christos #if YYPURE || defined(YY_NO_LEAKS)
    586  1.1  christos static void yyfreestack(YYSTACKDATA *data)
    587  1.1  christos {
    588  1.1  christos     free(data->s_base);
    589  1.1  christos     free(data->l_base);
    590  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    591  1.1  christos     free(data->p_base);
    592  1.1  christos #endif
    593  1.1  christos     memset(data, 0, sizeof(*data));
    594  1.1  christos }
    595  1.1  christos #else
    596  1.1  christos #define yyfreestack(data) /* nothing */
    597  1.1  christos #endif /* YYPURE || defined(YY_NO_LEAKS) */
    598  1.1  christos #if YYBTYACC
    599  1.1  christos 
    600  1.1  christos static YYParseState *
    601  1.1  christos yyNewState(unsigned size)
    602  1.1  christos {
    603  1.1  christos     YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
    604  1.1  christos     if (p == NULL) return NULL;
    605  1.1  christos 
    606  1.1  christos     p->yystack.stacksize = size;
    607  1.1  christos     if (size == 0)
    608  1.1  christos     {
    609  1.1  christos         p->yystack.s_base = NULL;
    610  1.1  christos         p->yystack.l_base = NULL;
    611  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    612  1.1  christos         p->yystack.p_base = NULL;
    613  1.1  christos #endif
    614  1.1  christos         return p;
    615  1.1  christos     }
    616  1.1  christos     p->yystack.s_base    = (short *) malloc(size * sizeof(short));
    617  1.1  christos     if (p->yystack.s_base == NULL) return NULL;
    618  1.1  christos     p->yystack.l_base    = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
    619  1.1  christos     if (p->yystack.l_base == NULL) return NULL;
    620  1.1  christos     memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
    621  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    622  1.1  christos     p->yystack.p_base    = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
    623  1.1  christos     if (p->yystack.p_base == NULL) return NULL;
    624  1.1  christos     memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
    625  1.1  christos #endif
    626  1.1  christos 
    627  1.1  christos     return p;
    628  1.1  christos }
    629  1.1  christos 
    630  1.1  christos static void
    631  1.1  christos yyFreeState(YYParseState *p)
    632  1.1  christos {
    633  1.1  christos     yyfreestack(&p->yystack);
    634  1.1  christos     free(p);
    635  1.1  christos }
    636  1.1  christos #endif /* YYBTYACC */
    637  1.1  christos 
    638  1.1  christos #define YYABORT  goto yyabort
    639  1.1  christos #define YYREJECT goto yyabort
    640  1.1  christos #define YYACCEPT goto yyaccept
    641  1.1  christos #define YYERROR  goto yyerrlab
    642  1.1  christos #if YYBTYACC
    643  1.1  christos #define YYVALID        do { if (yyps->save)            goto yyvalid; } while(0)
    644  1.1  christos #define YYVALID_NESTED do { if (yyps->save && \
    645  1.1  christos                                 yyps->save->save == 0) goto yyvalid; } while(0)
    646  1.1  christos #endif /* YYBTYACC */
    647  1.1  christos 
    648  1.1  christos int
    649  1.1  christos YYPARSE_DECL()
    650  1.1  christos {
    651  1.1  christos     int yym, yyn, yystate, yyresult;
    652  1.1  christos #if YYBTYACC
    653  1.1  christos     int yynewerrflag;
    654  1.1  christos     YYParseState *yyerrctx = NULL;
    655  1.1  christos #endif /* YYBTYACC */
    656  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    657  1.1  christos     YYLTYPE  yyerror_loc_range[2]; /* position of error start & end */
    658  1.1  christos #endif
    659  1.1  christos #if YYDEBUG
    660  1.1  christos     const char *yys;
    661  1.1  christos 
    662  1.1  christos     if ((yys = getenv("YYDEBUG")) != 0)
    663  1.1  christos     {
    664  1.1  christos         yyn = *yys;
    665  1.1  christos         if (yyn >= '0' && yyn <= '9')
    666  1.1  christos             yydebug = yyn - '0';
    667  1.1  christos     }
    668  1.1  christos     if (yydebug)
    669  1.1  christos         fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
    670  1.1  christos #endif
    671  1.1  christos 
    672  1.1  christos #if YYBTYACC
    673  1.1  christos     yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
    674  1.1  christos     yyps->save = 0;
    675  1.1  christos #endif /* YYBTYACC */
    676  1.1  christos     yynerrs = 0;
    677  1.1  christos     yyerrflag = 0;
    678  1.1  christos     yychar = YYEMPTY;
    679  1.1  christos     yystate = 0;
    680  1.1  christos 
    681  1.1  christos #if YYPURE
    682  1.1  christos     memset(&yystack, 0, sizeof(yystack));
    683  1.1  christos #endif
    684  1.1  christos 
    685  1.1  christos     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    686  1.1  christos     yystack.s_mark = yystack.s_base;
    687  1.1  christos     yystack.l_mark = yystack.l_base;
    688  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    689  1.1  christos     yystack.p_mark = yystack.p_base;
    690  1.1  christos #endif
    691  1.1  christos     yystate = 0;
    692  1.1  christos     *yystack.s_mark = 0;
    693  1.1  christos 
    694  1.1  christos yyloop:
    695  1.1  christos     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    696  1.1  christos     if (yychar < 0)
    697  1.1  christos     {
    698  1.1  christos #if YYBTYACC
    699  1.1  christos         do {
    700  1.1  christos         if (yylvp < yylve)
    701  1.1  christos         {
    702  1.1  christos             /* we're currently re-reading tokens */
    703  1.1  christos             yylval = *yylvp++;
    704  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    705  1.1  christos             yylloc = *yylpp++;
    706  1.1  christos #endif
    707  1.1  christos             yychar = *yylexp++;
    708  1.1  christos             break;
    709  1.1  christos         }
    710  1.1  christos         if (yyps->save)
    711  1.1  christos         {
    712  1.1  christos             /* in trial mode; save scanner results for future parse attempts */
    713  1.1  christos             if (yylvp == yylvlim)
    714  1.1  christos             {   /* Enlarge lexical value queue */
    715  1.1  christos                 size_t p = (size_t) (yylvp - yylvals);
    716  1.1  christos                 size_t s = (size_t) (yylvlim - yylvals);
    717  1.1  christos 
    718  1.1  christos                 s += YYLVQUEUEGROWTH;
    719  1.1  christos                 if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL) goto yyenomem;
    720  1.1  christos                 if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
    721  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    722  1.1  christos                 if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
    723  1.1  christos #endif
    724  1.1  christos                 yylvp   = yylve = yylvals + p;
    725  1.1  christos                 yylvlim = yylvals + s;
    726  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    727  1.1  christos                 yylpp   = yylpe = yylpsns + p;
    728  1.1  christos                 yylplim = yylpsns + s;
    729  1.1  christos #endif
    730  1.1  christos                 yylexp  = yylexemes + p;
    731  1.1  christos             }
    732  1.1  christos             *yylexp = (short) YYLEX;
    733  1.1  christos             *yylvp++ = yylval;
    734  1.1  christos             yylve++;
    735  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    736  1.1  christos             *yylpp++ = yylloc;
    737  1.1  christos             yylpe++;
    738  1.1  christos #endif
    739  1.1  christos             yychar = *yylexp++;
    740  1.1  christos             break;
    741  1.1  christos         }
    742  1.1  christos         /* normal operation, no conflict encountered */
    743  1.1  christos #endif /* YYBTYACC */
    744  1.1  christos         yychar = YYLEX;
    745  1.1  christos #if YYBTYACC
    746  1.1  christos         } while (0);
    747  1.1  christos #endif /* YYBTYACC */
    748  1.1  christos         if (yychar < 0) yychar = YYEOF;
    749  1.1  christos         /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
    750  1.1  christos #if YYDEBUG
    751  1.1  christos         if (yydebug)
    752  1.1  christos         {
    753  1.1  christos             yys = yyname[YYTRANSLATE(yychar)];
    754  1.1  christos             fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
    755  1.1  christos                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
    756  1.1  christos #ifdef YYSTYPE_TOSTRING
    757  1.1  christos #if YYBTYACC
    758  1.1  christos             if (!yytrial)
    759  1.1  christos #endif /* YYBTYACC */
    760  1.1  christos                 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
    761  1.1  christos #endif
    762  1.1  christos             fputc('\n', stderr);
    763  1.1  christos         }
    764  1.1  christos #endif
    765  1.1  christos     }
    766  1.1  christos #if YYBTYACC
    767  1.1  christos 
    768  1.1  christos     /* Do we have a conflict? */
    769  1.1  christos     if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    770  1.1  christos         yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    771  1.1  christos     {
    772  1.1  christos         YYINT ctry;
    773  1.1  christos 
    774  1.1  christos         if (yypath)
    775  1.1  christos         {
    776  1.1  christos             YYParseState *save;
    777  1.1  christos #if YYDEBUG
    778  1.1  christos             if (yydebug)
    779  1.1  christos                 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
    780  1.1  christos                                 YYDEBUGSTR, yydepth, yystate);
    781  1.1  christos #endif
    782  1.1  christos             /* Switch to the next conflict context */
    783  1.1  christos             save = yypath;
    784  1.1  christos             yypath = save->save;
    785  1.1  christos             save->save = NULL;
    786  1.1  christos             ctry = save->ctry;
    787  1.1  christos             if (save->state != yystate) YYABORT;
    788  1.1  christos             yyFreeState(save);
    789  1.1  christos 
    790  1.1  christos         }
    791  1.1  christos         else
    792  1.1  christos         {
    793  1.1  christos 
    794  1.1  christos             /* Unresolved conflict - start/continue trial parse */
    795  1.1  christos             YYParseState *save;
    796  1.1  christos #if YYDEBUG
    797  1.1  christos             if (yydebug)
    798  1.1  christos             {
    799  1.1  christos                 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
    800  1.1  christos                 if (yyps->save)
    801  1.1  christos                     fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
    802  1.1  christos                 else
    803  1.1  christos                     fputs("Starting trial parse.\n", stderr);
    804  1.1  christos             }
    805  1.1  christos #endif
    806  1.1  christos             save                  = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
    807  1.1  christos             if (save == NULL) goto yyenomem;
    808  1.1  christos             save->save            = yyps->save;
    809  1.1  christos             save->state           = yystate;
    810  1.1  christos             save->errflag         = yyerrflag;
    811  1.1  christos             save->yystack.s_mark  = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
    812  1.1  christos             memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
    813  1.1  christos             save->yystack.l_mark  = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
    814  1.1  christos             memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
    815  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    816  1.1  christos             save->yystack.p_mark  = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
    817  1.1  christos             memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
    818  1.1  christos #endif
    819  1.1  christos             ctry                  = yytable[yyn];
    820  1.1  christos             if (yyctable[ctry] == -1)
    821  1.1  christos             {
    822  1.1  christos #if YYDEBUG
    823  1.1  christos                 if (yydebug && yychar >= YYEOF)
    824  1.1  christos                     fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
    825  1.1  christos #endif
    826  1.1  christos                 ctry++;
    827  1.1  christos             }
    828  1.1  christos             save->ctry = ctry;
    829  1.1  christos             if (yyps->save == NULL)
    830  1.1  christos             {
    831  1.1  christos                 /* If this is a first conflict in the stack, start saving lexemes */
    832  1.1  christos                 if (!yylexemes)
    833  1.1  christos                 {
    834  1.1  christos                     yylexemes = (short *) malloc((YYLVQUEUEGROWTH) * sizeof(short));
    835  1.1  christos                     if (yylexemes == NULL) goto yyenomem;
    836  1.1  christos                     yylvals   = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
    837  1.1  christos                     if (yylvals == NULL) goto yyenomem;
    838  1.1  christos                     yylvlim   = yylvals + YYLVQUEUEGROWTH;
    839  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    840  1.1  christos                     yylpsns   = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
    841  1.1  christos                     if (yylpsns == NULL) goto yyenomem;
    842  1.1  christos                     yylplim   = yylpsns + YYLVQUEUEGROWTH;
    843  1.1  christos #endif
    844  1.1  christos                 }
    845  1.1  christos                 if (yylvp == yylve)
    846  1.1  christos                 {
    847  1.1  christos                     yylvp  = yylve = yylvals;
    848  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    849  1.1  christos                     yylpp  = yylpe = yylpsns;
    850  1.1  christos #endif
    851  1.1  christos                     yylexp = yylexemes;
    852  1.1  christos                     if (yychar >= YYEOF)
    853  1.1  christos                     {
    854  1.1  christos                         *yylve++ = yylval;
    855  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    856  1.1  christos                         *yylpe++ = yylloc;
    857  1.1  christos #endif
    858  1.1  christos                         *yylexp  = (short) yychar;
    859  1.1  christos                         yychar   = YYEMPTY;
    860  1.1  christos                     }
    861  1.1  christos                 }
    862  1.1  christos             }
    863  1.1  christos             if (yychar >= YYEOF)
    864  1.1  christos             {
    865  1.1  christos                 yylvp--;
    866  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    867  1.1  christos                 yylpp--;
    868  1.1  christos #endif
    869  1.1  christos                 yylexp--;
    870  1.1  christos                 yychar = YYEMPTY;
    871  1.1  christos             }
    872  1.1  christos             save->lexeme = (int) (yylvp - yylvals);
    873  1.1  christos             yyps->save   = save;
    874  1.1  christos         }
    875  1.1  christos         if (yytable[yyn] == ctry)
    876  1.1  christos         {
    877  1.1  christos #if YYDEBUG
    878  1.1  christos             if (yydebug)
    879  1.1  christos                 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
    880  1.1  christos                                 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
    881  1.1  christos #endif
    882  1.1  christos             if (yychar < 0)
    883  1.1  christos             {
    884  1.1  christos                 yylvp++;
    885  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    886  1.1  christos                 yylpp++;
    887  1.1  christos #endif
    888  1.1  christos                 yylexp++;
    889  1.1  christos             }
    890  1.1  christos             if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    891  1.1  christos                 goto yyoverflow;
    892  1.1  christos             yystate = yyctable[ctry];
    893  1.1  christos             *++yystack.s_mark = (short) yystate;
    894  1.1  christos             *++yystack.l_mark = yylval;
    895  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    896  1.1  christos             *++yystack.p_mark = yylloc;
    897  1.1  christos #endif
    898  1.1  christos             yychar  = YYEMPTY;
    899  1.1  christos             if (yyerrflag > 0) --yyerrflag;
    900  1.1  christos             goto yyloop;
    901  1.1  christos         }
    902  1.1  christos         else
    903  1.1  christos         {
    904  1.1  christos             yyn = yyctable[ctry];
    905  1.1  christos             goto yyreduce;
    906  1.1  christos         }
    907  1.1  christos     } /* End of code dealing with conflicts */
    908  1.1  christos #endif /* YYBTYACC */
    909  1.1  christos     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    910  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    911  1.1  christos     {
    912  1.1  christos #if YYDEBUG
    913  1.1  christos         if (yydebug)
    914  1.1  christos             fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
    915  1.1  christos                             YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
    916  1.1  christos #endif
    917  1.1  christos         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    918  1.1  christos         yystate = yytable[yyn];
    919  1.1  christos         *++yystack.s_mark = yytable[yyn];
    920  1.1  christos         *++yystack.l_mark = yylval;
    921  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    922  1.1  christos         *++yystack.p_mark = yylloc;
    923  1.1  christos #endif
    924  1.1  christos         yychar = YYEMPTY;
    925  1.1  christos         if (yyerrflag > 0)  --yyerrflag;
    926  1.1  christos         goto yyloop;
    927  1.1  christos     }
    928  1.1  christos     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
    929  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
    930  1.1  christos     {
    931  1.1  christos         yyn = yytable[yyn];
    932  1.1  christos         goto yyreduce;
    933  1.1  christos     }
    934  1.1  christos     if (yyerrflag != 0) goto yyinrecovery;
    935  1.1  christos #if YYBTYACC
    936  1.1  christos 
    937  1.1  christos     yynewerrflag = 1;
    938  1.1  christos     goto yyerrhandler;
    939  1.1  christos     goto yyerrlab;
    940  1.1  christos 
    941  1.1  christos yyerrlab:
    942  1.1  christos     yynewerrflag = 0;
    943  1.1  christos yyerrhandler:
    944  1.1  christos     while (yyps->save)
    945  1.1  christos     {
    946  1.1  christos         int ctry;
    947  1.1  christos         YYParseState *save = yyps->save;
    948  1.1  christos #if YYDEBUG
    949  1.1  christos         if (yydebug)
    950  1.1  christos             fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
    951  1.1  christos                             YYDEBUGSTR, yydepth, yystate, yyps->save->state,
    952  1.1  christos                     (int)(yylvp - yylvals - yyps->save->lexeme));
    953  1.1  christos #endif
    954  1.1  christos         /* Memorize most forward-looking error state in case it's really an error. */
    955  1.1  christos         if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
    956  1.1  christos         {
    957  1.1  christos             /* Free old saved error context state */
    958  1.1  christos             if (yyerrctx) yyFreeState(yyerrctx);
    959  1.1  christos             /* Create and fill out new saved error context state */
    960  1.1  christos             yyerrctx                 = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
    961  1.1  christos             if (yyerrctx == NULL) goto yyenomem;
    962  1.1  christos             yyerrctx->save           = yyps->save;
    963  1.1  christos             yyerrctx->state          = yystate;
    964  1.1  christos             yyerrctx->errflag        = yyerrflag;
    965  1.1  christos             yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
    966  1.1  christos             memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
    967  1.1  christos             yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
    968  1.1  christos             memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
    969  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    970  1.1  christos             yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
    971  1.1  christos             memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
    972  1.1  christos #endif
    973  1.1  christos             yyerrctx->lexeme         = (int) (yylvp - yylvals);
    974  1.1  christos         }
    975  1.1  christos         yylvp          = yylvals   + save->lexeme;
    976  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    977  1.1  christos         yylpp          = yylpsns   + save->lexeme;
    978  1.1  christos #endif
    979  1.1  christos         yylexp         = yylexemes + save->lexeme;
    980  1.1  christos         yychar         = YYEMPTY;
    981  1.1  christos         yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
    982  1.1  christos         memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
    983  1.1  christos         yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
    984  1.1  christos         memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
    985  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
    986  1.1  christos         yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
    987  1.1  christos         memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
    988  1.1  christos #endif
    989  1.1  christos         ctry           = ++save->ctry;
    990  1.1  christos         yystate        = save->state;
    991  1.1  christos         /* We tried shift, try reduce now */
    992  1.1  christos         if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
    993  1.1  christos         yyps->save     = save->save;
    994  1.1  christos         save->save     = NULL;
    995  1.1  christos         yyFreeState(save);
    996  1.1  christos 
    997  1.1  christos         /* Nothing left on the stack -- error */
    998  1.1  christos         if (!yyps->save)
    999  1.1  christos         {
   1000  1.1  christos #if YYDEBUG
   1001  1.1  christos             if (yydebug)
   1002  1.1  christos                 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
   1003  1.1  christos                                 YYPREFIX, yydepth);
   1004  1.1  christos #endif
   1005  1.1  christos             /* Restore state as it was in the most forward-advanced error */
   1006  1.1  christos             yylvp          = yylvals   + yyerrctx->lexeme;
   1007  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1008  1.1  christos             yylpp          = yylpsns   + yyerrctx->lexeme;
   1009  1.1  christos #endif
   1010  1.1  christos             yylexp         = yylexemes + yyerrctx->lexeme;
   1011  1.1  christos             yychar         = yylexp[-1];
   1012  1.1  christos             yylval         = yylvp[-1];
   1013  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1014  1.1  christos             yylloc         = yylpp[-1];
   1015  1.1  christos #endif
   1016  1.1  christos             yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
   1017  1.1  christos             memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
   1018  1.1  christos             yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
   1019  1.1  christos             memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
   1020  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1021  1.1  christos             yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
   1022  1.1  christos             memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
   1023  1.1  christos #endif
   1024  1.1  christos             yystate        = yyerrctx->state;
   1025  1.1  christos             yyFreeState(yyerrctx);
   1026  1.1  christos             yyerrctx       = NULL;
   1027  1.1  christos         }
   1028  1.1  christos         yynewerrflag = 1;
   1029  1.1  christos     }
   1030  1.1  christos     if (yynewerrflag == 0) goto yyinrecovery;
   1031  1.1  christos #endif /* YYBTYACC */
   1032  1.1  christos 
   1033  1.1  christos     YYERROR_CALL("syntax error");
   1034  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1035  1.1  christos     yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
   1036  1.1  christos #endif
   1037  1.1  christos 
   1038  1.1  christos #if !YYBTYACC
   1039  1.1  christos     goto yyerrlab;
   1040  1.1  christos yyerrlab:
   1041  1.1  christos #endif
   1042  1.1  christos     ++yynerrs;
   1043  1.1  christos 
   1044  1.1  christos yyinrecovery:
   1045  1.1  christos     if (yyerrflag < 3)
   1046  1.1  christos     {
   1047  1.1  christos         yyerrflag = 3;
   1048  1.1  christos         for (;;)
   1049  1.1  christos         {
   1050  1.1  christos             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
   1051  1.1  christos                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
   1052  1.1  christos             {
   1053  1.1  christos #if YYDEBUG
   1054  1.1  christos                 if (yydebug)
   1055  1.1  christos                     fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
   1056  1.1  christos                                     YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
   1057  1.1  christos #endif
   1058  1.1  christos                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
   1059  1.1  christos                 yystate = yytable[yyn];
   1060  1.1  christos                 *++yystack.s_mark = yytable[yyn];
   1061  1.1  christos                 *++yystack.l_mark = yylval;
   1062  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1063  1.1  christos                 /* lookahead position is error end position */
   1064  1.1  christos                 yyerror_loc_range[1] = yylloc;
   1065  1.1  christos                 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
   1066  1.1  christos                 *++yystack.p_mark = yyloc;
   1067  1.1  christos #endif
   1068  1.1  christos                 goto yyloop;
   1069  1.1  christos             }
   1070  1.1  christos             else
   1071  1.1  christos             {
   1072  1.1  christos #if YYDEBUG
   1073  1.1  christos                 if (yydebug)
   1074  1.1  christos                     fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
   1075  1.1  christos                                     YYDEBUGSTR, yydepth, *yystack.s_mark);
   1076  1.1  christos #endif
   1077  1.1  christos                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
   1078  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1079  1.1  christos                 /* the current TOS position is the error start position */
   1080  1.1  christos                 yyerror_loc_range[0] = *yystack.p_mark;
   1081  1.1  christos #endif
   1082  1.1  christos #if defined(YYDESTRUCT_CALL)
   1083  1.1  christos #if YYBTYACC
   1084  1.1  christos                 if (!yytrial)
   1085  1.1  christos #endif /* YYBTYACC */
   1086  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1087  1.1  christos                     YYDESTRUCT_CALL("error: discarding state",
   1088  1.1  christos                                     yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
   1089  1.1  christos #else
   1090  1.1  christos                     YYDESTRUCT_CALL("error: discarding state",
   1091  1.1  christos                                     yystos[*yystack.s_mark], yystack.l_mark);
   1092  1.1  christos #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
   1093  1.1  christos #endif /* defined(YYDESTRUCT_CALL) */
   1094  1.1  christos                 --yystack.s_mark;
   1095  1.1  christos                 --yystack.l_mark;
   1096  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1097  1.1  christos                 --yystack.p_mark;
   1098  1.1  christos #endif
   1099  1.1  christos             }
   1100  1.1  christos         }
   1101  1.1  christos     }
   1102  1.1  christos     else
   1103  1.1  christos     {
   1104  1.1  christos         if (yychar == YYEOF) goto yyabort;
   1105  1.1  christos #if YYDEBUG
   1106  1.1  christos         if (yydebug)
   1107  1.1  christos         {
   1108  1.1  christos             yys = yyname[YYTRANSLATE(yychar)];
   1109  1.1  christos             fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
   1110  1.1  christos                             YYDEBUGSTR, yydepth, yystate, yychar, yys);
   1111  1.1  christos         }
   1112  1.1  christos #endif
   1113  1.1  christos #if defined(YYDESTRUCT_CALL)
   1114  1.1  christos #if YYBTYACC
   1115  1.1  christos         if (!yytrial)
   1116  1.1  christos #endif /* YYBTYACC */
   1117  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1118  1.1  christos             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
   1119  1.1  christos #else
   1120  1.1  christos             YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
   1121  1.1  christos #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
   1122  1.1  christos #endif /* defined(YYDESTRUCT_CALL) */
   1123  1.1  christos         yychar = YYEMPTY;
   1124  1.1  christos         goto yyloop;
   1125  1.1  christos     }
   1126  1.1  christos 
   1127  1.1  christos yyreduce:
   1128  1.1  christos     yym = yylen[yyn];
   1129  1.1  christos #if YYDEBUG
   1130  1.1  christos     if (yydebug)
   1131  1.1  christos     {
   1132  1.1  christos         fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
   1133  1.1  christos                         YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
   1134  1.1  christos #ifdef YYSTYPE_TOSTRING
   1135  1.1  christos #if YYBTYACC
   1136  1.1  christos         if (!yytrial)
   1137  1.1  christos #endif /* YYBTYACC */
   1138  1.1  christos             if (yym > 0)
   1139  1.1  christos             {
   1140  1.1  christos                 int i;
   1141  1.1  christos                 fputc('<', stderr);
   1142  1.1  christos                 for (i = yym; i > 0; i--)
   1143  1.1  christos                 {
   1144  1.1  christos                     if (i != yym) fputs(", ", stderr);
   1145  1.1  christos                     fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
   1146  1.1  christos                                            yystack.l_mark[1-i]), stderr);
   1147  1.1  christos                 }
   1148  1.1  christos                 fputc('>', stderr);
   1149  1.1  christos             }
   1150  1.1  christos #endif
   1151  1.1  christos         fputc('\n', stderr);
   1152  1.1  christos     }
   1153  1.1  christos #endif
   1154  1.1  christos     if (yym > 0)
   1155  1.1  christos         yyval = yystack.l_mark[1-yym];
   1156  1.1  christos     else
   1157  1.1  christos         memset(&yyval, 0, sizeof yyval);
   1158  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1159  1.1  christos 
   1160  1.1  christos     /* Perform position reduction */
   1161  1.1  christos     memset(&yyloc, 0, sizeof(yyloc));
   1162  1.1  christos #if YYBTYACC
   1163  1.1  christos     if (!yytrial)
   1164  1.1  christos #endif /* YYBTYACC */
   1165  1.1  christos     {
   1166  1.1  christos         YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
   1167  1.1  christos         /* just in case YYERROR is invoked within the action, save
   1168  1.1  christos            the start of the rhs as the error start position */
   1169  1.1  christos         yyerror_loc_range[0] = yystack.p_mark[1-yym];
   1170  1.1  christos     }
   1171  1.1  christos #endif
   1172  1.1  christos 
   1173  1.1  christos     switch (yyn)
   1174  1.1  christos     {
   1175  1.1  christos case 3:
   1176  1.1  christos #line 35 "calc2.y"
   1177  1.1  christos 	{  yyerrok ; }
   1178  1.1  christos break;
   1179  1.1  christos case 4:
   1180  1.1  christos #line 39 "calc2.y"
   1181  1.1  christos 	{  printf("%d\n",yystack.l_mark[0]);}
   1182  1.1  christos break;
   1183  1.1  christos case 5:
   1184  1.1  christos #line 41 "calc2.y"
   1185  1.1  christos 	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
   1186  1.1  christos break;
   1187  1.1  christos case 6:
   1188  1.1  christos #line 45 "calc2.y"
   1189  1.1  christos 	{  yyval = yystack.l_mark[-1]; }
   1190  1.1  christos break;
   1191  1.1  christos case 7:
   1192  1.1  christos #line 47 "calc2.y"
   1193  1.1  christos 	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
   1194  1.1  christos break;
   1195  1.1  christos case 8:
   1196  1.1  christos #line 49 "calc2.y"
   1197  1.1  christos 	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
   1198  1.1  christos break;
   1199  1.1  christos case 9:
   1200  1.1  christos #line 51 "calc2.y"
   1201  1.1  christos 	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
   1202  1.1  christos break;
   1203  1.1  christos case 10:
   1204  1.1  christos #line 53 "calc2.y"
   1205  1.1  christos 	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
   1206  1.1  christos break;
   1207  1.1  christos case 11:
   1208  1.1  christos #line 55 "calc2.y"
   1209  1.1  christos 	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
   1210  1.1  christos break;
   1211  1.1  christos case 12:
   1212  1.1  christos #line 57 "calc2.y"
   1213  1.1  christos 	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
   1214  1.1  christos break;
   1215  1.1  christos case 13:
   1216  1.1  christos #line 59 "calc2.y"
   1217  1.1  christos 	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
   1218  1.1  christos break;
   1219  1.1  christos case 14:
   1220  1.1  christos #line 61 "calc2.y"
   1221  1.1  christos 	{  yyval = - yystack.l_mark[0]; }
   1222  1.1  christos break;
   1223  1.1  christos case 15:
   1224  1.1  christos #line 63 "calc2.y"
   1225  1.1  christos 	{  yyval = regs[yystack.l_mark[0]]; }
   1226  1.1  christos break;
   1227  1.1  christos case 17:
   1228  1.1  christos #line 68 "calc2.y"
   1229  1.1  christos 	{  yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
   1230  1.1  christos break;
   1231  1.1  christos case 18:
   1232  1.1  christos #line 70 "calc2.y"
   1233  1.1  christos 	{  yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
   1234  1.1  christos break;
   1235  1.1  christos #line 1236 "calc2.tab.c"
   1236  1.1  christos     default:
   1237  1.1  christos         break;
   1238  1.1  christos     }
   1239  1.1  christos     yystack.s_mark -= yym;
   1240  1.1  christos     yystate = *yystack.s_mark;
   1241  1.1  christos     yystack.l_mark -= yym;
   1242  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1243  1.1  christos     yystack.p_mark -= yym;
   1244  1.1  christos #endif
   1245  1.1  christos     yym = yylhs[yyn];
   1246  1.1  christos     if (yystate == 0 && yym == 0)
   1247  1.1  christos     {
   1248  1.1  christos #if YYDEBUG
   1249  1.1  christos         if (yydebug)
   1250  1.1  christos         {
   1251  1.1  christos             fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
   1252  1.1  christos #ifdef YYSTYPE_TOSTRING
   1253  1.1  christos #if YYBTYACC
   1254  1.1  christos             if (!yytrial)
   1255  1.1  christos #endif /* YYBTYACC */
   1256  1.1  christos                 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
   1257  1.1  christos #endif
   1258  1.1  christos             fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
   1259  1.1  christos         }
   1260  1.1  christos #endif
   1261  1.1  christos         yystate = YYFINAL;
   1262  1.1  christos         *++yystack.s_mark = YYFINAL;
   1263  1.1  christos         *++yystack.l_mark = yyval;
   1264  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1265  1.1  christos         *++yystack.p_mark = yyloc;
   1266  1.1  christos #endif
   1267  1.1  christos         if (yychar < 0)
   1268  1.1  christos         {
   1269  1.1  christos #if YYBTYACC
   1270  1.1  christos             do {
   1271  1.1  christos             if (yylvp < yylve)
   1272  1.1  christos             {
   1273  1.1  christos                 /* we're currently re-reading tokens */
   1274  1.1  christos                 yylval = *yylvp++;
   1275  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1276  1.1  christos                 yylloc = *yylpp++;
   1277  1.1  christos #endif
   1278  1.1  christos                 yychar = *yylexp++;
   1279  1.1  christos                 break;
   1280  1.1  christos             }
   1281  1.1  christos             if (yyps->save)
   1282  1.1  christos             {
   1283  1.1  christos                 /* in trial mode; save scanner results for future parse attempts */
   1284  1.1  christos                 if (yylvp == yylvlim)
   1285  1.1  christos                 {   /* Enlarge lexical value queue */
   1286  1.1  christos                     size_t p = (size_t) (yylvp - yylvals);
   1287  1.1  christos                     size_t s = (size_t) (yylvlim - yylvals);
   1288  1.1  christos 
   1289  1.1  christos                     s += YYLVQUEUEGROWTH;
   1290  1.1  christos                     if ((yylexemes = (short *)   realloc(yylexemes, s * sizeof(short))) == NULL)
   1291  1.1  christos                         goto yyenomem;
   1292  1.1  christos                     if ((yylvals   = (YYSTYPE *) realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
   1293  1.1  christos                         goto yyenomem;
   1294  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1295  1.1  christos                     if ((yylpsns   = (YYLTYPE *) realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
   1296  1.1  christos                         goto yyenomem;
   1297  1.1  christos #endif
   1298  1.1  christos                     yylvp   = yylve = yylvals + p;
   1299  1.1  christos                     yylvlim = yylvals + s;
   1300  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1301  1.1  christos                     yylpp   = yylpe = yylpsns + p;
   1302  1.1  christos                     yylplim = yylpsns + s;
   1303  1.1  christos #endif
   1304  1.1  christos                     yylexp  = yylexemes + p;
   1305  1.1  christos                 }
   1306  1.1  christos                 *yylexp = (short) YYLEX;
   1307  1.1  christos                 *yylvp++ = yylval;
   1308  1.1  christos                 yylve++;
   1309  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1310  1.1  christos                 *yylpp++ = yylloc;
   1311  1.1  christos                 yylpe++;
   1312  1.1  christos #endif
   1313  1.1  christos                 yychar = *yylexp++;
   1314  1.1  christos                 break;
   1315  1.1  christos             }
   1316  1.1  christos             /* normal operation, no conflict encountered */
   1317  1.1  christos #endif /* YYBTYACC */
   1318  1.1  christos             yychar = YYLEX;
   1319  1.1  christos #if YYBTYACC
   1320  1.1  christos             } while (0);
   1321  1.1  christos #endif /* YYBTYACC */
   1322  1.1  christos             if (yychar < 0) yychar = YYEOF;
   1323  1.1  christos             /* if ((yychar = YYLEX) < 0) yychar = YYEOF; */
   1324  1.1  christos #if YYDEBUG
   1325  1.1  christos             if (yydebug)
   1326  1.1  christos             {
   1327  1.1  christos                 yys = yyname[YYTRANSLATE(yychar)];
   1328  1.1  christos                 fprintf(stderr, "%s[%d]: state %d, reading %d (%s)\n",
   1329  1.1  christos                                 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
   1330  1.1  christos             }
   1331  1.1  christos #endif
   1332  1.1  christos         }
   1333  1.1  christos         if (yychar == YYEOF) goto yyaccept;
   1334  1.1  christos         goto yyloop;
   1335  1.1  christos     }
   1336  1.1  christos     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
   1337  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
   1338  1.1  christos         yystate = yytable[yyn];
   1339  1.1  christos     else
   1340  1.1  christos         yystate = yydgoto[yym];
   1341  1.1  christos #if YYDEBUG
   1342  1.1  christos     if (yydebug)
   1343  1.1  christos     {
   1344  1.1  christos         fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
   1345  1.1  christos #ifdef YYSTYPE_TOSTRING
   1346  1.1  christos #if YYBTYACC
   1347  1.1  christos         if (!yytrial)
   1348  1.1  christos #endif /* YYBTYACC */
   1349  1.1  christos             fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
   1350  1.1  christos #endif
   1351  1.1  christos         fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
   1352  1.1  christos     }
   1353  1.1  christos #endif
   1354  1.1  christos     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
   1355  1.1  christos     *++yystack.s_mark = (short) yystate;
   1356  1.1  christos     *++yystack.l_mark = yyval;
   1357  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1358  1.1  christos     *++yystack.p_mark = yyloc;
   1359  1.1  christos #endif
   1360  1.1  christos     goto yyloop;
   1361  1.1  christos #if YYBTYACC
   1362  1.1  christos 
   1363  1.1  christos     /* Reduction declares that this path is valid. Set yypath and do a full parse */
   1364  1.1  christos yyvalid:
   1365  1.1  christos     if (yypath) YYABORT;
   1366  1.1  christos     while (yyps->save)
   1367  1.1  christos     {
   1368  1.1  christos         YYParseState *save = yyps->save;
   1369  1.1  christos         yyps->save = save->save;
   1370  1.1  christos         save->save = yypath;
   1371  1.1  christos         yypath = save;
   1372  1.1  christos     }
   1373  1.1  christos #if YYDEBUG
   1374  1.1  christos     if (yydebug)
   1375  1.1  christos         fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
   1376  1.1  christos                         YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
   1377  1.1  christos #endif
   1378  1.1  christos     if (yyerrctx)
   1379  1.1  christos     {
   1380  1.1  christos         yyFreeState(yyerrctx);
   1381  1.1  christos         yyerrctx = NULL;
   1382  1.1  christos     }
   1383  1.1  christos     yylvp          = yylvals + yypath->lexeme;
   1384  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1385  1.1  christos     yylpp          = yylpsns + yypath->lexeme;
   1386  1.1  christos #endif
   1387  1.1  christos     yylexp         = yylexemes + yypath->lexeme;
   1388  1.1  christos     yychar         = YYEMPTY;
   1389  1.1  christos     yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
   1390  1.1  christos     memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(short));
   1391  1.1  christos     yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
   1392  1.1  christos     memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
   1393  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1394  1.1  christos     yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
   1395  1.1  christos     memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
   1396  1.1  christos #endif
   1397  1.1  christos     yystate        = yypath->state;
   1398  1.1  christos     goto yyloop;
   1399  1.1  christos #endif /* YYBTYACC */
   1400  1.1  christos 
   1401  1.1  christos yyoverflow:
   1402  1.1  christos     YYERROR_CALL("yacc stack overflow");
   1403  1.1  christos #if YYBTYACC
   1404  1.1  christos     goto yyabort_nomem;
   1405  1.1  christos yyenomem:
   1406  1.1  christos     YYERROR_CALL("memory exhausted");
   1407  1.1  christos yyabort_nomem:
   1408  1.1  christos #endif /* YYBTYACC */
   1409  1.1  christos     yyresult = 2;
   1410  1.1  christos     goto yyreturn;
   1411  1.1  christos 
   1412  1.1  christos yyabort:
   1413  1.1  christos     yyresult = 1;
   1414  1.1  christos     goto yyreturn;
   1415  1.1  christos 
   1416  1.1  christos yyaccept:
   1417  1.1  christos #if YYBTYACC
   1418  1.1  christos     if (yyps->save) goto yyvalid;
   1419  1.1  christos #endif /* YYBTYACC */
   1420  1.1  christos     yyresult = 0;
   1421  1.1  christos 
   1422  1.1  christos yyreturn:
   1423  1.1  christos #if defined(YYDESTRUCT_CALL)
   1424  1.1  christos     if (yychar != YYEOF && yychar != YYEMPTY)
   1425  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1426  1.1  christos         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
   1427  1.1  christos #else
   1428  1.1  christos         YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
   1429  1.1  christos #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
   1430  1.1  christos 
   1431  1.1  christos     {
   1432  1.1  christos         YYSTYPE *pv;
   1433  1.1  christos #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
   1434  1.1  christos         YYLTYPE *pp;
   1435  1.1  christos 
   1436  1.1  christos         for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
   1437  1.1  christos              YYDESTRUCT_CALL("cleanup: discarding state",
   1438  1.1  christos                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
   1439  1.1  christos #else
   1440  1.1  christos         for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
   1441  1.1  christos              YYDESTRUCT_CALL("cleanup: discarding state",
   1442  1.1  christos                              yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
   1443  1.1  christos #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
   1444  1.1  christos     }
   1445  1.1  christos #endif /* defined(YYDESTRUCT_CALL) */
   1446  1.1  christos 
   1447  1.1  christos #if YYBTYACC
   1448  1.1  christos     if (yyerrctx)
   1449  1.1  christos     {
   1450  1.1  christos         yyFreeState(yyerrctx);
   1451  1.1  christos         yyerrctx = NULL;
   1452  1.1  christos     }
   1453  1.1  christos     while (yyps)
   1454  1.1  christos     {
   1455  1.1  christos         YYParseState *save = yyps;
   1456  1.1  christos         yyps = save->save;
   1457  1.1  christos         save->save = NULL;
   1458  1.1  christos         yyFreeState(save);
   1459  1.1  christos     }
   1460  1.1  christos     while (yypath)
   1461  1.1  christos     {
   1462  1.1  christos         YYParseState *save = yypath;
   1463  1.1  christos         yypath = save->save;
   1464  1.1  christos         save->save = NULL;
   1465  1.1  christos         yyFreeState(save);
   1466  1.1  christos     }
   1467  1.1  christos #endif /* YYBTYACC */
   1468  1.1  christos     yyfreestack(&yystack);
   1469  1.1  christos     return (yyresult);
   1470  1.1  christos }
   1471