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