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