Home | History | Annotate | Line # | Download | only in yacc
calc1.tab.c revision 1.1.1.1
      1  1.1  christos /*	$NetBSD: calc1.tab.c,v 1.1.1.1 2015/01/03 22:58:24 christos Exp $	*/
      2  1.1  christos 
      3  1.1  christos /* original parser id follows */
      4  1.1  christos /* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
      5  1.1  christos /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
      6  1.1  christos 
      7  1.1  christos #define YYBYACC 1
      8  1.1  christos #define YYMAJOR 1
      9  1.1  christos #define YYMINOR 9
     10  1.1  christos #define YYCHECK "yyyymmdd"
     11  1.1  christos 
     12  1.1  christos #define YYEMPTY        (-1)
     13  1.1  christos #define yyclearin      (yychar = YYEMPTY)
     14  1.1  christos #define yyerrok        (yyerrflag = 0)
     15  1.1  christos #define YYRECOVERING() (yyerrflag != 0)
     16  1.1  christos #define YYENOMEM       (-2)
     17  1.1  christos #define YYEOF          0
     18  1.1  christos 
     19  1.1  christos #ifndef yyparse
     20  1.1  christos #define yyparse    calc1_parse
     21  1.1  christos #endif /* yyparse */
     22  1.1  christos 
     23  1.1  christos #ifndef yylex
     24  1.1  christos #define yylex      calc1_lex
     25  1.1  christos #endif /* yylex */
     26  1.1  christos 
     27  1.1  christos #ifndef yyerror
     28  1.1  christos #define yyerror    calc1_error
     29  1.1  christos #endif /* yyerror */
     30  1.1  christos 
     31  1.1  christos #ifndef yychar
     32  1.1  christos #define yychar     calc1_char
     33  1.1  christos #endif /* yychar */
     34  1.1  christos 
     35  1.1  christos #ifndef yyval
     36  1.1  christos #define yyval      calc1_val
     37  1.1  christos #endif /* yyval */
     38  1.1  christos 
     39  1.1  christos #ifndef yylval
     40  1.1  christos #define yylval     calc1_lval
     41  1.1  christos #endif /* yylval */
     42  1.1  christos 
     43  1.1  christos #ifndef yydebug
     44  1.1  christos #define yydebug    calc1_debug
     45  1.1  christos #endif /* yydebug */
     46  1.1  christos 
     47  1.1  christos #ifndef yynerrs
     48  1.1  christos #define yynerrs    calc1_nerrs
     49  1.1  christos #endif /* yynerrs */
     50  1.1  christos 
     51  1.1  christos #ifndef yyerrflag
     52  1.1  christos #define yyerrflag  calc1_errflag
     53  1.1  christos #endif /* yyerrflag */
     54  1.1  christos 
     55  1.1  christos #ifndef yylhs
     56  1.1  christos #define yylhs      calc1_lhs
     57  1.1  christos #endif /* yylhs */
     58  1.1  christos 
     59  1.1  christos #ifndef yylen
     60  1.1  christos #define yylen      calc1_len
     61  1.1  christos #endif /* yylen */
     62  1.1  christos 
     63  1.1  christos #ifndef yydefred
     64  1.1  christos #define yydefred   calc1_defred
     65  1.1  christos #endif /* yydefred */
     66  1.1  christos 
     67  1.1  christos #ifndef yydgoto
     68  1.1  christos #define yydgoto    calc1_dgoto
     69  1.1  christos #endif /* yydgoto */
     70  1.1  christos 
     71  1.1  christos #ifndef yysindex
     72  1.1  christos #define yysindex   calc1_sindex
     73  1.1  christos #endif /* yysindex */
     74  1.1  christos 
     75  1.1  christos #ifndef yyrindex
     76  1.1  christos #define yyrindex   calc1_rindex
     77  1.1  christos #endif /* yyrindex */
     78  1.1  christos 
     79  1.1  christos #ifndef yygindex
     80  1.1  christos #define yygindex   calc1_gindex
     81  1.1  christos #endif /* yygindex */
     82  1.1  christos 
     83  1.1  christos #ifndef yytable
     84  1.1  christos #define yytable    calc1_table
     85  1.1  christos #endif /* yytable */
     86  1.1  christos 
     87  1.1  christos #ifndef yycheck
     88  1.1  christos #define yycheck    calc1_check
     89  1.1  christos #endif /* yycheck */
     90  1.1  christos 
     91  1.1  christos #ifndef yyname
     92  1.1  christos #define yyname     calc1_name
     93  1.1  christos #endif /* yyname */
     94  1.1  christos 
     95  1.1  christos #ifndef yyrule
     96  1.1  christos #define yyrule     calc1_rule
     97  1.1  christos #endif /* yyrule */
     98  1.1  christos #define YYPREFIX "calc1_"
     99  1.1  christos 
    100  1.1  christos #define YYPURE 0
    101  1.1  christos 
    102  1.1  christos #line 2 "calc1.y"
    103  1.1  christos 
    104  1.1  christos /* http://dinosaur.compilertools.net/yacc/index.html */
    105  1.1  christos 
    106  1.1  christos #include <stdlib.h>
    107  1.1  christos #include <stdio.h>
    108  1.1  christos #include <ctype.h>
    109  1.1  christos #include <math.h>
    110  1.1  christos 
    111  1.1  christos typedef struct interval
    112  1.1  christos {
    113  1.1  christos     double lo, hi;
    114  1.1  christos }
    115  1.1  christos INTERVAL;
    116  1.1  christos 
    117  1.1  christos INTERVAL vmul(double, double, INTERVAL);
    118  1.1  christos INTERVAL vdiv(double, double, INTERVAL);
    119  1.1  christos 
    120  1.1  christos extern int yylex(void);
    121  1.1  christos static void yyerror(const char *s);
    122  1.1  christos 
    123  1.1  christos int dcheck(INTERVAL);
    124  1.1  christos 
    125  1.1  christos double dreg[26];
    126  1.1  christos INTERVAL vreg[26];
    127  1.1  christos 
    128  1.1  christos #line 31 "calc1.y"
    129  1.1  christos #ifdef YYSTYPE
    130  1.1  christos #undef  YYSTYPE_IS_DECLARED
    131  1.1  christos #define YYSTYPE_IS_DECLARED 1
    132  1.1  christos #endif
    133  1.1  christos #ifndef YYSTYPE_IS_DECLARED
    134  1.1  christos #define YYSTYPE_IS_DECLARED 1
    135  1.1  christos typedef union
    136  1.1  christos {
    137  1.1  christos 	int ival;
    138  1.1  christos 	double dval;
    139  1.1  christos 	INTERVAL vval;
    140  1.1  christos } YYSTYPE;
    141  1.1  christos #endif /* !YYSTYPE_IS_DECLARED */
    142  1.1  christos #line 141 "calc1.tab.c"
    143  1.1  christos 
    144  1.1  christos /* compatibility with bison */
    145  1.1  christos #ifdef YYPARSE_PARAM
    146  1.1  christos /* compatibility with FreeBSD */
    147  1.1  christos # ifdef YYPARSE_PARAM_TYPE
    148  1.1  christos #  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
    149  1.1  christos # else
    150  1.1  christos #  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
    151  1.1  christos # endif
    152  1.1  christos #else
    153  1.1  christos # define YYPARSE_DECL() yyparse(void)
    154  1.1  christos #endif
    155  1.1  christos 
    156  1.1  christos /* Parameters sent to lex. */
    157  1.1  christos #ifdef YYLEX_PARAM
    158  1.1  christos # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
    159  1.1  christos # define YYLEX yylex(YYLEX_PARAM)
    160  1.1  christos #else
    161  1.1  christos # define YYLEX_DECL() yylex(void)
    162  1.1  christos # define YYLEX yylex()
    163  1.1  christos #endif
    164  1.1  christos 
    165  1.1  christos /* Parameters sent to yyerror. */
    166  1.1  christos #ifndef YYERROR_DECL
    167  1.1  christos #define YYERROR_DECL() yyerror(const char *s)
    168  1.1  christos #endif
    169  1.1  christos #ifndef YYERROR_CALL
    170  1.1  christos #define YYERROR_CALL(msg) yyerror(msg)
    171  1.1  christos #endif
    172  1.1  christos 
    173  1.1  christos extern int YYPARSE_DECL();
    174  1.1  christos 
    175  1.1  christos #define DREG 257
    176  1.1  christos #define VREG 258
    177  1.1  christos #define CONST 259
    178  1.1  christos #define UMINUS 260
    179  1.1  christos #define YYERRCODE 256
    180  1.1  christos typedef short YYINT;
    181  1.1  christos static const YYINT calc1_lhs[] = {                       -1,
    182  1.1  christos     3,    3,    0,    0,    0,    0,    0,    1,    1,    1,
    183  1.1  christos     1,    1,    1,    1,    1,    2,    2,    2,    2,    2,
    184  1.1  christos     2,    2,    2,    2,    2,    2,    2,    2,
    185  1.1  christos };
    186  1.1  christos static const YYINT calc1_len[] = {                        2,
    187  1.1  christos     0,    2,    2,    2,    4,    4,    2,    1,    1,    3,
    188  1.1  christos     3,    3,    3,    2,    3,    1,    5,    1,    3,    3,
    189  1.1  christos     3,    3,    3,    3,    3,    3,    2,    3,
    190  1.1  christos };
    191  1.1  christos static const YYINT calc1_defred[] = {                     0,
    192  1.1  christos     0,    0,    0,    8,    0,    0,    0,    0,    0,    7,
    193  1.1  christos     0,    0,    9,   18,   14,   27,    0,    0,    0,    0,
    194  1.1  christos     0,    0,    3,    0,    0,    0,    0,    4,    0,    0,
    195  1.1  christos     0,    0,    0,   15,    0,   28,    0,    0,    0,    0,
    196  1.1  christos    12,   24,   13,   26,    0,    0,   23,   25,   14,    0,
    197  1.1  christos     0,    0,    0,    0,    5,    6,    0,    0,    0,   12,
    198  1.1  christos    13,   17,
    199  1.1  christos };
    200  1.1  christos static const YYINT calc1_dgoto[] = {                      7,
    201  1.1  christos    32,    9,    0,
    202  1.1  christos };
    203  1.1  christos static const YYINT calc1_sindex[] = {                   -40,
    204  1.1  christos    -8,  -48,  -47,    0,  -37,  -37,    0,    2,   17,    0,
    205  1.1  christos   -34,  -37,    0,    0,    0,    0,  -25,   90,  -37,  -37,
    206  1.1  christos   -37,  -37,    0,  -37,  -37,  -37,  -37,    0,  -34,  -34,
    207  1.1  christos    25,  125,   31,    0,  -34,    0,  -11,   37,  -11,   37,
    208  1.1  christos     0,    0,    0,    0,   37,   37,    0,    0,    0,  111,
    209  1.1  christos   -34,  -34,  -34,  -34,    0,    0,  118,   69,   69,    0,
    210  1.1  christos     0,    0,
    211  1.1  christos };
    212  1.1  christos static const YYINT calc1_rindex[] = {                     0,
    213  1.1  christos     0,   38,   44,    0,    0,    0,    0,    0,    0,    0,
    214  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    215  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    216  1.1  christos     0,   -9,    0,    0,    0,    0,   51,   -3,   56,   61,
    217  1.1  christos     0,    0,    0,    0,   67,   72,    0,    0,    0,    0,
    218  1.1  christos     0,    0,    0,    0,    0,    0,    0,   78,   83,    0,
    219  1.1  christos     0,    0,
    220  1.1  christos };
    221  1.1  christos static const YYINT calc1_gindex[] = {                     0,
    222  1.1  christos     4,  124,    0,
    223  1.1  christos };
    224  1.1  christos #define YYTABLESIZE 225
    225  1.1  christos static const YYINT calc1_table[] = {                      6,
    226  1.1  christos    16,   10,    6,    8,    5,   30,   20,    5,   15,   17,
    227  1.1  christos    29,   23,   11,   12,   31,   34,   21,   19,   35,   20,
    228  1.1  christos     0,   22,   37,   39,   41,   43,   28,    0,    0,    0,
    229  1.1  christos    21,   16,   49,   50,   55,   22,    0,   20,   57,   20,
    230  1.1  christos    56,   20,    0,   21,   19,    0,   20,    9,   22,    0,
    231  1.1  christos     0,    0,    0,   18,   58,   59,   60,   61,   26,   24,
    232  1.1  christos    10,   25,    0,   27,    0,   11,   53,   51,    0,   52,
    233  1.1  christos    22,   54,   26,   24,    0,   25,   19,   27,   26,    9,
    234  1.1  christos     9,   21,    9,   27,    9,   18,   18,   10,   18,    0,
    235  1.1  christos    18,   10,   11,   10,   10,   10,   11,    0,   11,   11,
    236  1.1  christos    11,   22,    0,   22,    0,   22,    0,   19,    0,   19,
    237  1.1  christos    53,   19,   21,    0,   21,   54,   21,    0,   10,    0,
    238  1.1  christos    10,    0,   10,   11,    0,   11,    0,   11,   16,   18,
    239  1.1  christos    36,   26,   24,    0,   25,   33,   27,    0,    0,    0,
    240  1.1  christos     0,    0,   38,   40,   42,   44,    0,   45,   46,   47,
    241  1.1  christos    48,   34,   53,   51,    0,   52,    0,   54,   62,   53,
    242  1.1  christos    51,    0,   52,    0,   54,    0,   21,   19,    0,   20,
    243  1.1  christos     0,   22,    0,    0,    0,    0,    0,    0,    0,    0,
    244  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    245  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    246  1.1  christos     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    247  1.1  christos     0,    0,    0,    0,    0,    1,    2,    3,    4,   13,
    248  1.1  christos    14,    4,   13,    0,    4,
    249  1.1  christos };
    250  1.1  christos static const YYINT calc1_check[] = {                     40,
    251  1.1  christos    10,   10,   40,    0,   45,   40,   10,   45,    5,    6,
    252  1.1  christos    45,   10,   61,   61,   11,   41,   42,   43,   44,   45,
    253  1.1  christos    -1,   47,   19,   20,   21,   22,   10,   -1,   -1,   -1,
    254  1.1  christos    42,   41,   29,   30,   10,   47,   -1,   41,   35,   43,
    255  1.1  christos    10,   45,   -1,   42,   43,   -1,   45,   10,   47,   -1,
    256  1.1  christos    -1,   -1,   -1,   10,   51,   52,   53,   54,   42,   43,
    257  1.1  christos    10,   45,   -1,   47,   -1,   10,   42,   43,   -1,   45,
    258  1.1  christos    10,   47,   42,   43,   -1,   45,   10,   47,   42,   42,
    259  1.1  christos    43,   10,   45,   47,   47,   42,   43,   10,   45,   -1,
    260  1.1  christos    47,   41,   10,   43,   44,   45,   41,   -1,   43,   44,
    261  1.1  christos    45,   41,   -1,   43,   -1,   45,   -1,   41,   -1,   43,
    262  1.1  christos    42,   45,   41,   -1,   43,   47,   45,   -1,   41,   -1,
    263  1.1  christos    43,   -1,   45,   41,   -1,   43,   -1,   45,    5,    6,
    264  1.1  christos    41,   42,   43,   -1,   45,   12,   47,   -1,   -1,   -1,
    265  1.1  christos    -1,   -1,   19,   20,   21,   22,   -1,   24,   25,   26,
    266  1.1  christos    27,   41,   42,   43,   -1,   45,   -1,   47,   41,   42,
    267  1.1  christos    43,   -1,   45,   -1,   47,   -1,   42,   43,   -1,   45,
    268  1.1  christos    -1,   47,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    269  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    270  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    271  1.1  christos    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    272  1.1  christos    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  259,  257,
    273  1.1  christos   258,  259,  257,   -1,  259,
    274  1.1  christos };
    275  1.1  christos #define YYFINAL 7
    276  1.1  christos #ifndef YYDEBUG
    277  1.1  christos #define YYDEBUG 0
    278  1.1  christos #endif
    279  1.1  christos #define YYMAXTOKEN 260
    280  1.1  christos #define YYUNDFTOKEN 266
    281  1.1  christos #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
    282  1.1  christos #if YYDEBUG
    283  1.1  christos static const char *const calc1_name[] = {
    284  1.1  christos 
    285  1.1  christos "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,
    286  1.1  christos 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
    287  1.1  christos 0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    288  1.1  christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    289  1.1  christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    290  1.1  christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    291  1.1  christos 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    292  1.1  christos 0,0,"DREG","VREG","CONST","UMINUS",0,0,0,0,0,"illegal-symbol",
    293  1.1  christos };
    294  1.1  christos static const char *const calc1_rule[] = {
    295  1.1  christos "$accept : line",
    296  1.1  christos "lines :",
    297  1.1  christos "lines : lines line",
    298  1.1  christos "line : dexp '\\n'",
    299  1.1  christos "line : vexp '\\n'",
    300  1.1  christos "line : DREG '=' dexp '\\n'",
    301  1.1  christos "line : VREG '=' vexp '\\n'",
    302  1.1  christos "line : error '\\n'",
    303  1.1  christos "dexp : CONST",
    304  1.1  christos "dexp : DREG",
    305  1.1  christos "dexp : dexp '+' dexp",
    306  1.1  christos "dexp : dexp '-' dexp",
    307  1.1  christos "dexp : dexp '*' dexp",
    308  1.1  christos "dexp : dexp '/' dexp",
    309  1.1  christos "dexp : '-' dexp",
    310  1.1  christos "dexp : '(' dexp ')'",
    311  1.1  christos "vexp : dexp",
    312  1.1  christos "vexp : '(' dexp ',' dexp ')'",
    313  1.1  christos "vexp : VREG",
    314  1.1  christos "vexp : vexp '+' vexp",
    315  1.1  christos "vexp : dexp '+' vexp",
    316  1.1  christos "vexp : vexp '-' vexp",
    317  1.1  christos "vexp : dexp '-' vexp",
    318  1.1  christos "vexp : vexp '*' vexp",
    319  1.1  christos "vexp : dexp '*' vexp",
    320  1.1  christos "vexp : vexp '/' vexp",
    321  1.1  christos "vexp : dexp '/' vexp",
    322  1.1  christos "vexp : '-' vexp",
    323  1.1  christos "vexp : '(' vexp ')'",
    324  1.1  christos 
    325  1.1  christos };
    326  1.1  christos #endif
    327  1.1  christos 
    328  1.1  christos int      yydebug;
    329  1.1  christos int      yynerrs;
    330  1.1  christos 
    331  1.1  christos int      yyerrflag;
    332  1.1  christos int      yychar;
    333  1.1  christos YYSTYPE  yyval;
    334  1.1  christos YYSTYPE  yylval;
    335  1.1  christos 
    336  1.1  christos /* define the initial stack-sizes */
    337  1.1  christos #ifdef YYSTACKSIZE
    338  1.1  christos #undef YYMAXDEPTH
    339  1.1  christos #define YYMAXDEPTH  YYSTACKSIZE
    340  1.1  christos #else
    341  1.1  christos #ifdef YYMAXDEPTH
    342  1.1  christos #define YYSTACKSIZE YYMAXDEPTH
    343  1.1  christos #else
    344  1.1  christos #define YYSTACKSIZE 10000
    345  1.1  christos #define YYMAXDEPTH  10000
    346  1.1  christos #endif
    347  1.1  christos #endif
    348  1.1  christos 
    349  1.1  christos #define YYINITSTACKSIZE 200
    350  1.1  christos 
    351  1.1  christos typedef struct {
    352  1.1  christos     unsigned stacksize;
    353  1.1  christos     YYINT    *s_base;
    354  1.1  christos     YYINT    *s_mark;
    355  1.1  christos     YYINT    *s_last;
    356  1.1  christos     YYSTYPE  *l_base;
    357  1.1  christos     YYSTYPE  *l_mark;
    358  1.1  christos } YYSTACKDATA;
    359  1.1  christos /* variables for the parser stack */
    360  1.1  christos static YYSTACKDATA yystack;
    361  1.1  christos #line 176 "calc1.y"
    362  1.1  christos 	/* beginning of subroutines section */
    363  1.1  christos 
    364  1.1  christos #define BSZ 50			/* buffer size for floating point numbers */
    365  1.1  christos 
    366  1.1  christos 	/* lexical analysis */
    367  1.1  christos 
    368  1.1  christos static void
    369  1.1  christos yyerror(const char *s)
    370  1.1  christos {
    371  1.1  christos     fprintf(stderr, "%s\n", s);
    372  1.1  christos }
    373  1.1  christos 
    374  1.1  christos int
    375  1.1  christos yylex(void)
    376  1.1  christos {
    377  1.1  christos     int c;
    378  1.1  christos 
    379  1.1  christos     while ((c = getchar()) == ' ')
    380  1.1  christos     {				/* skip over blanks */
    381  1.1  christos     }
    382  1.1  christos 
    383  1.1  christos     if (isupper(c))
    384  1.1  christos     {
    385  1.1  christos 	yylval.ival = c - 'A';
    386  1.1  christos 	return (VREG);
    387  1.1  christos     }
    388  1.1  christos     if (islower(c))
    389  1.1  christos     {
    390  1.1  christos 	yylval.ival = c - 'a';
    391  1.1  christos 	return (DREG);
    392  1.1  christos     }
    393  1.1  christos 
    394  1.1  christos     if (isdigit(c) || c == '.')
    395  1.1  christos     {
    396  1.1  christos 	/* gobble up digits, points, exponents */
    397  1.1  christos 	char buf[BSZ + 1], *cp = buf;
    398  1.1  christos 	int dot = 0, expr = 0;
    399  1.1  christos 
    400  1.1  christos 	for (; (cp - buf) < BSZ; ++cp, c = getchar())
    401  1.1  christos 	{
    402  1.1  christos 
    403  1.1  christos 	    *cp = (char) c;
    404  1.1  christos 	    if (isdigit(c))
    405  1.1  christos 		continue;
    406  1.1  christos 	    if (c == '.')
    407  1.1  christos 	    {
    408  1.1  christos 		if (dot++ || expr)
    409  1.1  christos 		    return ('.');	/* will cause syntax error */
    410  1.1  christos 		continue;
    411  1.1  christos 	    }
    412  1.1  christos 
    413  1.1  christos 	    if (c == 'e')
    414  1.1  christos 	    {
    415  1.1  christos 		if (expr++)
    416  1.1  christos 		    return ('e');	/*  will  cause  syntax  error  */
    417  1.1  christos 		continue;
    418  1.1  christos 	    }
    419  1.1  christos 
    420  1.1  christos 	    /*  end  of  number  */
    421  1.1  christos 	    break;
    422  1.1  christos 	}
    423  1.1  christos 	*cp = '\0';
    424  1.1  christos 
    425  1.1  christos 	if ((cp - buf) >= BSZ)
    426  1.1  christos 	    printf("constant  too  long:  truncated\n");
    427  1.1  christos 	else
    428  1.1  christos 	    ungetc(c, stdin);	/*  push  back  last  char  read  */
    429  1.1  christos 	yylval.dval = atof(buf);
    430  1.1  christos 	return (CONST);
    431  1.1  christos     }
    432  1.1  christos     return (c);
    433  1.1  christos }
    434  1.1  christos 
    435  1.1  christos static INTERVAL
    436  1.1  christos hilo(double a, double b, double c, double d)
    437  1.1  christos {
    438  1.1  christos     /*  returns  the  smallest  interval  containing  a,  b,  c,  and  d  */
    439  1.1  christos     /*  used  by  *,  /  routines  */
    440  1.1  christos     INTERVAL v;
    441  1.1  christos 
    442  1.1  christos     if (a > b)
    443  1.1  christos     {
    444  1.1  christos 	v.hi = a;
    445  1.1  christos 	v.lo = b;
    446  1.1  christos     }
    447  1.1  christos     else
    448  1.1  christos     {
    449  1.1  christos 	v.hi = b;
    450  1.1  christos 	v.lo = a;
    451  1.1  christos     }
    452  1.1  christos 
    453  1.1  christos     if (c > d)
    454  1.1  christos     {
    455  1.1  christos 	if (c > v.hi)
    456  1.1  christos 	    v.hi = c;
    457  1.1  christos 	if (d < v.lo)
    458  1.1  christos 	    v.lo = d;
    459  1.1  christos     }
    460  1.1  christos     else
    461  1.1  christos     {
    462  1.1  christos 	if (d > v.hi)
    463  1.1  christos 	    v.hi = d;
    464  1.1  christos 	if (c < v.lo)
    465  1.1  christos 	    v.lo = c;
    466  1.1  christos     }
    467  1.1  christos     return (v);
    468  1.1  christos }
    469  1.1  christos 
    470  1.1  christos INTERVAL
    471  1.1  christos vmul(double a, double b, INTERVAL v)
    472  1.1  christos {
    473  1.1  christos     return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
    474  1.1  christos }
    475  1.1  christos 
    476  1.1  christos int
    477  1.1  christos dcheck(INTERVAL v)
    478  1.1  christos {
    479  1.1  christos     if (v.hi >= 0. && v.lo <= 0.)
    480  1.1  christos     {
    481  1.1  christos 	printf("divisor  interval  contains  0.\n");
    482  1.1  christos 	return (1);
    483  1.1  christos     }
    484  1.1  christos     return (0);
    485  1.1  christos }
    486  1.1  christos 
    487  1.1  christos INTERVAL
    488  1.1  christos vdiv(double a, double b, INTERVAL v)
    489  1.1  christos {
    490  1.1  christos     return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
    491  1.1  christos }
    492  1.1  christos #line 491 "calc1.tab.c"
    493  1.1  christos 
    494  1.1  christos #if YYDEBUG
    495  1.1  christos #include <stdio.h>		/* needed for printf */
    496  1.1  christos #endif
    497  1.1  christos 
    498  1.1  christos #include <stdlib.h>	/* needed for malloc, etc */
    499  1.1  christos #include <string.h>	/* needed for memset */
    500  1.1  christos 
    501  1.1  christos /* allocate initial stack or double stack size, up to YYMAXDEPTH */
    502  1.1  christos static int yygrowstack(YYSTACKDATA *data)
    503  1.1  christos {
    504  1.1  christos     int i;
    505  1.1  christos     unsigned newsize;
    506  1.1  christos     YYINT *newss;
    507  1.1  christos     YYSTYPE *newvs;
    508  1.1  christos 
    509  1.1  christos     if ((newsize = data->stacksize) == 0)
    510  1.1  christos         newsize = YYINITSTACKSIZE;
    511  1.1  christos     else if (newsize >= YYMAXDEPTH)
    512  1.1  christos         return YYENOMEM;
    513  1.1  christos     else if ((newsize *= 2) > YYMAXDEPTH)
    514  1.1  christos         newsize = YYMAXDEPTH;
    515  1.1  christos 
    516  1.1  christos     i = (int) (data->s_mark - data->s_base);
    517  1.1  christos     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
    518  1.1  christos     if (newss == 0)
    519  1.1  christos         return YYENOMEM;
    520  1.1  christos 
    521  1.1  christos     data->s_base = newss;
    522  1.1  christos     data->s_mark = newss + i;
    523  1.1  christos 
    524  1.1  christos     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
    525  1.1  christos     if (newvs == 0)
    526  1.1  christos         return YYENOMEM;
    527  1.1  christos 
    528  1.1  christos     data->l_base = newvs;
    529  1.1  christos     data->l_mark = newvs + i;
    530  1.1  christos 
    531  1.1  christos     data->stacksize = newsize;
    532  1.1  christos     data->s_last = data->s_base + newsize - 1;
    533  1.1  christos     return 0;
    534  1.1  christos }
    535  1.1  christos 
    536  1.1  christos #if YYPURE || defined(YY_NO_LEAKS)
    537  1.1  christos static void yyfreestack(YYSTACKDATA *data)
    538  1.1  christos {
    539  1.1  christos     free(data->s_base);
    540  1.1  christos     free(data->l_base);
    541  1.1  christos     memset(data, 0, sizeof(*data));
    542  1.1  christos }
    543  1.1  christos #else
    544  1.1  christos #define yyfreestack(data) /* nothing */
    545  1.1  christos #endif
    546  1.1  christos 
    547  1.1  christos #define YYABORT  goto yyabort
    548  1.1  christos #define YYREJECT goto yyabort
    549  1.1  christos #define YYACCEPT goto yyaccept
    550  1.1  christos #define YYERROR  goto yyerrlab
    551  1.1  christos 
    552  1.1  christos int
    553  1.1  christos YYPARSE_DECL()
    554  1.1  christos {
    555  1.1  christos     int yym, yyn, yystate;
    556  1.1  christos #if YYDEBUG
    557  1.1  christos     const char *yys;
    558  1.1  christos 
    559  1.1  christos     if ((yys = getenv("YYDEBUG")) != 0)
    560  1.1  christos     {
    561  1.1  christos         yyn = *yys;
    562  1.1  christos         if (yyn >= '0' && yyn <= '9')
    563  1.1  christos             yydebug = yyn - '0';
    564  1.1  christos     }
    565  1.1  christos #endif
    566  1.1  christos 
    567  1.1  christos     yynerrs = 0;
    568  1.1  christos     yyerrflag = 0;
    569  1.1  christos     yychar = YYEMPTY;
    570  1.1  christos     yystate = 0;
    571  1.1  christos 
    572  1.1  christos #if YYPURE
    573  1.1  christos     memset(&yystack, 0, sizeof(yystack));
    574  1.1  christos #endif
    575  1.1  christos 
    576  1.1  christos     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
    577  1.1  christos     yystack.s_mark = yystack.s_base;
    578  1.1  christos     yystack.l_mark = yystack.l_base;
    579  1.1  christos     yystate = 0;
    580  1.1  christos     *yystack.s_mark = 0;
    581  1.1  christos 
    582  1.1  christos yyloop:
    583  1.1  christos     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
    584  1.1  christos     if (yychar < 0)
    585  1.1  christos     {
    586  1.1  christos         if ((yychar = YYLEX) < 0) yychar = YYEOF;
    587  1.1  christos #if YYDEBUG
    588  1.1  christos         if (yydebug)
    589  1.1  christos         {
    590  1.1  christos             yys = yyname[YYTRANSLATE(yychar)];
    591  1.1  christos             printf("%sdebug: state %d, reading %d (%s)\n",
    592  1.1  christos                     YYPREFIX, yystate, yychar, yys);
    593  1.1  christos         }
    594  1.1  christos #endif
    595  1.1  christos     }
    596  1.1  christos     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
    597  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    598  1.1  christos     {
    599  1.1  christos #if YYDEBUG
    600  1.1  christos         if (yydebug)
    601  1.1  christos             printf("%sdebug: state %d, shifting to state %d\n",
    602  1.1  christos                     YYPREFIX, yystate, yytable[yyn]);
    603  1.1  christos #endif
    604  1.1  christos         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    605  1.1  christos         {
    606  1.1  christos             goto yyoverflow;
    607  1.1  christos         }
    608  1.1  christos         yystate = yytable[yyn];
    609  1.1  christos         *++yystack.s_mark = yytable[yyn];
    610  1.1  christos         *++yystack.l_mark = yylval;
    611  1.1  christos         yychar = YYEMPTY;
    612  1.1  christos         if (yyerrflag > 0)  --yyerrflag;
    613  1.1  christos         goto yyloop;
    614  1.1  christos     }
    615  1.1  christos     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
    616  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
    617  1.1  christos     {
    618  1.1  christos         yyn = yytable[yyn];
    619  1.1  christos         goto yyreduce;
    620  1.1  christos     }
    621  1.1  christos     if (yyerrflag) goto yyinrecovery;
    622  1.1  christos 
    623  1.1  christos     YYERROR_CALL("syntax error");
    624  1.1  christos 
    625  1.1  christos     goto yyerrlab;
    626  1.1  christos 
    627  1.1  christos yyerrlab:
    628  1.1  christos     ++yynerrs;
    629  1.1  christos 
    630  1.1  christos yyinrecovery:
    631  1.1  christos     if (yyerrflag < 3)
    632  1.1  christos     {
    633  1.1  christos         yyerrflag = 3;
    634  1.1  christos         for (;;)
    635  1.1  christos         {
    636  1.1  christos             if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
    637  1.1  christos                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
    638  1.1  christos             {
    639  1.1  christos #if YYDEBUG
    640  1.1  christos                 if (yydebug)
    641  1.1  christos                     printf("%sdebug: state %d, error recovery shifting\
    642  1.1  christos  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
    643  1.1  christos #endif
    644  1.1  christos                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    645  1.1  christos                 {
    646  1.1  christos                     goto yyoverflow;
    647  1.1  christos                 }
    648  1.1  christos                 yystate = yytable[yyn];
    649  1.1  christos                 *++yystack.s_mark = yytable[yyn];
    650  1.1  christos                 *++yystack.l_mark = yylval;
    651  1.1  christos                 goto yyloop;
    652  1.1  christos             }
    653  1.1  christos             else
    654  1.1  christos             {
    655  1.1  christos #if YYDEBUG
    656  1.1  christos                 if (yydebug)
    657  1.1  christos                     printf("%sdebug: error recovery discarding state %d\n",
    658  1.1  christos                             YYPREFIX, *yystack.s_mark);
    659  1.1  christos #endif
    660  1.1  christos                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
    661  1.1  christos                 --yystack.s_mark;
    662  1.1  christos                 --yystack.l_mark;
    663  1.1  christos             }
    664  1.1  christos         }
    665  1.1  christos     }
    666  1.1  christos     else
    667  1.1  christos     {
    668  1.1  christos         if (yychar == YYEOF) goto yyabort;
    669  1.1  christos #if YYDEBUG
    670  1.1  christos         if (yydebug)
    671  1.1  christos         {
    672  1.1  christos             yys = yyname[YYTRANSLATE(yychar)];
    673  1.1  christos             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
    674  1.1  christos                     YYPREFIX, yystate, yychar, yys);
    675  1.1  christos         }
    676  1.1  christos #endif
    677  1.1  christos         yychar = YYEMPTY;
    678  1.1  christos         goto yyloop;
    679  1.1  christos     }
    680  1.1  christos 
    681  1.1  christos yyreduce:
    682  1.1  christos #if YYDEBUG
    683  1.1  christos     if (yydebug)
    684  1.1  christos         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
    685  1.1  christos                 YYPREFIX, yystate, yyn, yyrule[yyn]);
    686  1.1  christos #endif
    687  1.1  christos     yym = yylen[yyn];
    688  1.1  christos     if (yym)
    689  1.1  christos         yyval = yystack.l_mark[1-yym];
    690  1.1  christos     else
    691  1.1  christos         memset(&yyval, 0, sizeof yyval);
    692  1.1  christos     switch (yyn)
    693  1.1  christos     {
    694  1.1  christos case 3:
    695  1.1  christos #line 57 "calc1.y"
    696  1.1  christos 	{
    697  1.1  christos 		(void) printf("%15.8f\n", yystack.l_mark[-1].dval);
    698  1.1  christos 	}
    699  1.1  christos break;
    700  1.1  christos case 4:
    701  1.1  christos #line 61 "calc1.y"
    702  1.1  christos 	{
    703  1.1  christos 		(void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
    704  1.1  christos 	}
    705  1.1  christos break;
    706  1.1  christos case 5:
    707  1.1  christos #line 65 "calc1.y"
    708  1.1  christos 	{
    709  1.1  christos 		dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
    710  1.1  christos 	}
    711  1.1  christos break;
    712  1.1  christos case 6:
    713  1.1  christos #line 69 "calc1.y"
    714  1.1  christos 	{
    715  1.1  christos 		vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
    716  1.1  christos 	}
    717  1.1  christos break;
    718  1.1  christos case 7:
    719  1.1  christos #line 73 "calc1.y"
    720  1.1  christos 	{
    721  1.1  christos 		yyerrok;
    722  1.1  christos 	}
    723  1.1  christos break;
    724  1.1  christos case 9:
    725  1.1  christos #line 80 "calc1.y"
    726  1.1  christos 	{
    727  1.1  christos 		yyval.dval = dreg[yystack.l_mark[0].ival];
    728  1.1  christos 	}
    729  1.1  christos break;
    730  1.1  christos case 10:
    731  1.1  christos #line 84 "calc1.y"
    732  1.1  christos 	{
    733  1.1  christos 		yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
    734  1.1  christos 	}
    735  1.1  christos break;
    736  1.1  christos case 11:
    737  1.1  christos #line 88 "calc1.y"
    738  1.1  christos 	{
    739  1.1  christos 		yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
    740  1.1  christos 	}
    741  1.1  christos break;
    742  1.1  christos case 12:
    743  1.1  christos #line 92 "calc1.y"
    744  1.1  christos 	{
    745  1.1  christos 		yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
    746  1.1  christos 	}
    747  1.1  christos break;
    748  1.1  christos case 13:
    749  1.1  christos #line 96 "calc1.y"
    750  1.1  christos 	{
    751  1.1  christos 		yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
    752  1.1  christos 	}
    753  1.1  christos break;
    754  1.1  christos case 14:
    755  1.1  christos #line 100 "calc1.y"
    756  1.1  christos 	{
    757  1.1  christos 		yyval.dval = -yystack.l_mark[0].dval;
    758  1.1  christos 	}
    759  1.1  christos break;
    760  1.1  christos case 15:
    761  1.1  christos #line 104 "calc1.y"
    762  1.1  christos 	{
    763  1.1  christos 		yyval.dval = yystack.l_mark[-1].dval;
    764  1.1  christos 	}
    765  1.1  christos break;
    766  1.1  christos case 16:
    767  1.1  christos #line 110 "calc1.y"
    768  1.1  christos 	{
    769  1.1  christos 		yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
    770  1.1  christos 	}
    771  1.1  christos break;
    772  1.1  christos case 17:
    773  1.1  christos #line 114 "calc1.y"
    774  1.1  christos 	{
    775  1.1  christos 		yyval.vval.lo = yystack.l_mark[-3].dval;
    776  1.1  christos 		yyval.vval.hi = yystack.l_mark[-1].dval;
    777  1.1  christos 		if ( yyval.vval.lo > yyval.vval.hi )
    778  1.1  christos 		{
    779  1.1  christos 			(void) printf("interval out of order\n");
    780  1.1  christos 			YYERROR;
    781  1.1  christos 		}
    782  1.1  christos 	}
    783  1.1  christos break;
    784  1.1  christos case 18:
    785  1.1  christos #line 124 "calc1.y"
    786  1.1  christos 	{
    787  1.1  christos 		yyval.vval = vreg[yystack.l_mark[0].ival];
    788  1.1  christos 	}
    789  1.1  christos break;
    790  1.1  christos case 19:
    791  1.1  christos #line 128 "calc1.y"
    792  1.1  christos 	{
    793  1.1  christos 		yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
    794  1.1  christos 		yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
    795  1.1  christos 	}
    796  1.1  christos break;
    797  1.1  christos case 20:
    798  1.1  christos #line 133 "calc1.y"
    799  1.1  christos 	{
    800  1.1  christos 		yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
    801  1.1  christos 		yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
    802  1.1  christos 	}
    803  1.1  christos break;
    804  1.1  christos case 21:
    805  1.1  christos #line 138 "calc1.y"
    806  1.1  christos 	{
    807  1.1  christos 		yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
    808  1.1  christos 		yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
    809  1.1  christos 	}
    810  1.1  christos break;
    811  1.1  christos case 22:
    812  1.1  christos #line 143 "calc1.y"
    813  1.1  christos 	{
    814  1.1  christos 		yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
    815  1.1  christos 		yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
    816  1.1  christos 	}
    817  1.1  christos break;
    818  1.1  christos case 23:
    819  1.1  christos #line 148 "calc1.y"
    820  1.1  christos 	{
    821  1.1  christos 		yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
    822  1.1  christos 	}
    823  1.1  christos break;
    824  1.1  christos case 24:
    825  1.1  christos #line 152 "calc1.y"
    826  1.1  christos 	{
    827  1.1  christos 		yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
    828  1.1  christos 	}
    829  1.1  christos break;
    830  1.1  christos case 25:
    831  1.1  christos #line 156 "calc1.y"
    832  1.1  christos 	{
    833  1.1  christos 		if (dcheck(yystack.l_mark[0].vval)) YYERROR;
    834  1.1  christos 		yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
    835  1.1  christos 	}
    836  1.1  christos break;
    837  1.1  christos case 26:
    838  1.1  christos #line 161 "calc1.y"
    839  1.1  christos 	{
    840  1.1  christos 		if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
    841  1.1  christos 		yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
    842  1.1  christos 	}
    843  1.1  christos break;
    844  1.1  christos case 27:
    845  1.1  christos #line 166 "calc1.y"
    846  1.1  christos 	{
    847  1.1  christos 		yyval.vval.hi = -yystack.l_mark[0].vval.lo;
    848  1.1  christos 		yyval.vval.lo = -yystack.l_mark[0].vval.hi;
    849  1.1  christos 	}
    850  1.1  christos break;
    851  1.1  christos case 28:
    852  1.1  christos #line 171 "calc1.y"
    853  1.1  christos 	{
    854  1.1  christos 		yyval.vval = yystack.l_mark[-1].vval;
    855  1.1  christos 	}
    856  1.1  christos break;
    857  1.1  christos #line 856 "calc1.tab.c"
    858  1.1  christos     }
    859  1.1  christos     yystack.s_mark -= yym;
    860  1.1  christos     yystate = *yystack.s_mark;
    861  1.1  christos     yystack.l_mark -= yym;
    862  1.1  christos     yym = yylhs[yyn];
    863  1.1  christos     if (yystate == 0 && yym == 0)
    864  1.1  christos     {
    865  1.1  christos #if YYDEBUG
    866  1.1  christos         if (yydebug)
    867  1.1  christos             printf("%sdebug: after reduction, shifting from state 0 to\
    868  1.1  christos  state %d\n", YYPREFIX, YYFINAL);
    869  1.1  christos #endif
    870  1.1  christos         yystate = YYFINAL;
    871  1.1  christos         *++yystack.s_mark = YYFINAL;
    872  1.1  christos         *++yystack.l_mark = yyval;
    873  1.1  christos         if (yychar < 0)
    874  1.1  christos         {
    875  1.1  christos             if ((yychar = YYLEX) < 0) yychar = YYEOF;
    876  1.1  christos #if YYDEBUG
    877  1.1  christos             if (yydebug)
    878  1.1  christos             {
    879  1.1  christos                 yys = yyname[YYTRANSLATE(yychar)];
    880  1.1  christos                 printf("%sdebug: state %d, reading %d (%s)\n",
    881  1.1  christos                         YYPREFIX, YYFINAL, yychar, yys);
    882  1.1  christos             }
    883  1.1  christos #endif
    884  1.1  christos         }
    885  1.1  christos         if (yychar == YYEOF) goto yyaccept;
    886  1.1  christos         goto yyloop;
    887  1.1  christos     }
    888  1.1  christos     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
    889  1.1  christos             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
    890  1.1  christos         yystate = yytable[yyn];
    891  1.1  christos     else
    892  1.1  christos         yystate = yydgoto[yym];
    893  1.1  christos #if YYDEBUG
    894  1.1  christos     if (yydebug)
    895  1.1  christos         printf("%sdebug: after reduction, shifting from state %d \
    896  1.1  christos to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
    897  1.1  christos #endif
    898  1.1  christos     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
    899  1.1  christos     {
    900  1.1  christos         goto yyoverflow;
    901  1.1  christos     }
    902  1.1  christos     *++yystack.s_mark = (YYINT) yystate;
    903  1.1  christos     *++yystack.l_mark = yyval;
    904  1.1  christos     goto yyloop;
    905  1.1  christos 
    906  1.1  christos yyoverflow:
    907  1.1  christos     YYERROR_CALL("yacc stack overflow");
    908  1.1  christos 
    909  1.1  christos yyabort:
    910  1.1  christos     yyfreestack(&yystack);
    911  1.1  christos     return (1);
    912  1.1  christos 
    913  1.1  christos yyaccept:
    914  1.1  christos     yyfreestack(&yystack);
    915  1.1  christos     return (0);
    916  1.1  christos }
    917