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