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