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