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