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