varsyntax_calc1.tab.c revision 1.2.12.1 1 /* $NetBSD: varsyntax_calc1.tab.c,v 1.2.12.1 2019/06/10 21:44:43 christos 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 #if YYDEBUG
330 int yydebug;
331 #endif
332
333 int yyerrflag;
334 int yychar;
335 YYSTYPE yyval;
336 YYSTYPE yylval;
337 int yynerrs;
338
339 /* define the initial stack-sizes */
340 #ifdef YYSTACKSIZE
341 #undef YYMAXDEPTH
342 #define YYMAXDEPTH YYSTACKSIZE
343 #else
344 #ifdef YYMAXDEPTH
345 #define YYSTACKSIZE YYMAXDEPTH
346 #else
347 #define YYSTACKSIZE 10000
348 #define YYMAXDEPTH 10000
349 #endif
350 #endif
351
352 #define YYINITSTACKSIZE 200
353
354 typedef struct {
355 unsigned stacksize;
356 YYINT *s_base;
357 YYINT *s_mark;
358 YYINT *s_last;
359 YYSTYPE *l_base;
360 YYSTYPE *l_mark;
361 } YYSTACKDATA;
362 /* variables for the parser stack */
363 static YYSTACKDATA yystack;
364 #line 178 "varsyntax_calc1.y"
365 /* beginning of subroutines section */
366
367 #define BSZ 50 /* buffer size for floating point numbers */
368
369 /* lexical analysis */
370
371 static void
372 yyerror(const char *s)
373 {
374 fprintf(stderr, "%s\n", s);
375 }
376
377 int
378 yylex(void)
379 {
380 int c;
381
382 while ((c = getchar()) == ' ')
383 { /* skip over blanks */
384 }
385
386 if (isupper(c))
387 {
388 yylval.ival = c - 'A';
389 return (VREG);
390 }
391 if (islower(c))
392 {
393 yylval.ival = c - 'a';
394 return (DREG);
395 }
396
397 if (isdigit(c) || c == '.')
398 {
399 /* gobble up digits, points, exponents */
400 char buf[BSZ + 1], *cp = buf;
401 int dot = 0, expr = 0;
402
403 for (; (cp - buf) < BSZ; ++cp, c = getchar())
404 {
405
406 *cp = (char) c;
407 if (isdigit(c))
408 continue;
409 if (c == '.')
410 {
411 if (dot++ || expr)
412 return ('.'); /* will cause syntax error */
413 continue;
414 }
415
416 if (c == 'e')
417 {
418 if (expr++)
419 return ('e'); /* will cause syntax error */
420 continue;
421 }
422
423 /* end of number */
424 break;
425 }
426 *cp = '\0';
427
428 if ((cp - buf) >= BSZ)
429 printf("constant too long: truncated\n");
430 else
431 ungetc(c, stdin); /* push back last char read */
432 yylval.dval = atof(buf);
433 return (CONST);
434 }
435 return (c);
436 }
437
438 static INTERVAL
439 hilo(double a, double b, double c, double d)
440 {
441 /* returns the smallest interval containing a, b, c, and d */
442 /* used by *, / routines */
443 INTERVAL v;
444
445 if (a > b)
446 {
447 v.hi = a;
448 v.lo = b;
449 }
450 else
451 {
452 v.hi = b;
453 v.lo = a;
454 }
455
456 if (c > d)
457 {
458 if (c > v.hi)
459 v.hi = c;
460 if (d < v.lo)
461 v.lo = d;
462 }
463 else
464 {
465 if (d > v.hi)
466 v.hi = d;
467 if (c < v.lo)
468 v.lo = c;
469 }
470 return (v);
471 }
472
473 INTERVAL
474 vmul(double a, double b, INTERVAL v)
475 {
476 return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
477 }
478
479 int
480 dcheck(INTERVAL v)
481 {
482 if (v.hi >= 0. && v.lo <= 0.)
483 {
484 printf("divisor interval contains 0.\n");
485 return (1);
486 }
487 return (0);
488 }
489
490 INTERVAL
491 vdiv(double a, double b, INTERVAL v)
492 {
493 return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
494 }
495 #line 494 "varsyntax_calc1.tab.c"
496
497 #if YYDEBUG
498 #include <stdio.h> /* needed for printf */
499 #endif
500
501 #include <stdlib.h> /* needed for malloc, etc */
502 #include <string.h> /* needed for memset */
503
504 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
505 static int yygrowstack(YYSTACKDATA *data)
506 {
507 int i;
508 unsigned newsize;
509 YYINT *newss;
510 YYSTYPE *newvs;
511
512 if ((newsize = data->stacksize) == 0)
513 newsize = YYINITSTACKSIZE;
514 else if (newsize >= YYMAXDEPTH)
515 return YYENOMEM;
516 else if ((newsize *= 2) > YYMAXDEPTH)
517 newsize = YYMAXDEPTH;
518
519 i = (int) (data->s_mark - data->s_base);
520 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
521 if (newss == 0)
522 return YYENOMEM;
523
524 data->s_base = newss;
525 data->s_mark = newss + i;
526
527 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
528 if (newvs == 0)
529 return YYENOMEM;
530
531 data->l_base = newvs;
532 data->l_mark = newvs + i;
533
534 data->stacksize = newsize;
535 data->s_last = data->s_base + newsize - 1;
536 return 0;
537 }
538
539 #if YYPURE || defined(YY_NO_LEAKS)
540 static void yyfreestack(YYSTACKDATA *data)
541 {
542 free(data->s_base);
543 free(data->l_base);
544 memset(data, 0, sizeof(*data));
545 }
546 #else
547 #define yyfreestack(data) /* nothing */
548 #endif
549
550 #define YYABORT goto yyabort
551 #define YYREJECT goto yyabort
552 #define YYACCEPT goto yyaccept
553 #define YYERROR goto yyerrlab
554
555 int
556 YYPARSE_DECL()
557 {
558 int yym, yyn, yystate;
559 #if YYDEBUG
560 const char *yys;
561
562 if ((yys = getenv("YYDEBUG")) != 0)
563 {
564 yyn = *yys;
565 if (yyn >= '0' && yyn <= '9')
566 yydebug = yyn - '0';
567 }
568 #endif
569
570 yym = 0;
571 yyn = 0;
572 yynerrs = 0;
573 yyerrflag = 0;
574 yychar = YYEMPTY;
575 yystate = 0;
576
577 #if YYPURE
578 memset(&yystack, 0, sizeof(yystack));
579 #endif
580
581 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
582 yystack.s_mark = yystack.s_base;
583 yystack.l_mark = yystack.l_base;
584 yystate = 0;
585 *yystack.s_mark = 0;
586
587 yyloop:
588 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
589 if (yychar < 0)
590 {
591 yychar = YYLEX;
592 if (yychar < 0) yychar = YYEOF;
593 #if YYDEBUG
594 if (yydebug)
595 {
596 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
597 printf("%sdebug: state %d, reading %d (%s)\n",
598 YYPREFIX, yystate, yychar, yys);
599 }
600 #endif
601 }
602 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
603 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
604 {
605 #if YYDEBUG
606 if (yydebug)
607 printf("%sdebug: state %d, shifting to state %d\n",
608 YYPREFIX, yystate, yytable[yyn]);
609 #endif
610 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
611 yystate = yytable[yyn];
612 *++yystack.s_mark = yytable[yyn];
613 *++yystack.l_mark = yylval;
614 yychar = YYEMPTY;
615 if (yyerrflag > 0) --yyerrflag;
616 goto yyloop;
617 }
618 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
619 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
620 {
621 yyn = yytable[yyn];
622 goto yyreduce;
623 }
624 if (yyerrflag != 0) goto yyinrecovery;
625
626 YYERROR_CALL("syntax error");
627
628 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
629 yyerrlab:
630 ++yynerrs;
631
632 yyinrecovery:
633 if (yyerrflag < 3)
634 {
635 yyerrflag = 3;
636 for (;;)
637 {
638 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
639 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
640 {
641 #if YYDEBUG
642 if (yydebug)
643 printf("%sdebug: state %d, error recovery shifting\
644 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
645 #endif
646 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
647 yystate = yytable[yyn];
648 *++yystack.s_mark = yytable[yyn];
649 *++yystack.l_mark = yylval;
650 goto yyloop;
651 }
652 else
653 {
654 #if YYDEBUG
655 if (yydebug)
656 printf("%sdebug: error recovery discarding state %d\n",
657 YYPREFIX, *yystack.s_mark);
658 #endif
659 if (yystack.s_mark <= yystack.s_base) goto yyabort;
660 --yystack.s_mark;
661 --yystack.l_mark;
662 }
663 }
664 }
665 else
666 {
667 if (yychar == YYEOF) goto yyabort;
668 #if YYDEBUG
669 if (yydebug)
670 {
671 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
672 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
673 YYPREFIX, yystate, yychar, yys);
674 }
675 #endif
676 yychar = YYEMPTY;
677 goto yyloop;
678 }
679
680 yyreduce:
681 #if YYDEBUG
682 if (yydebug)
683 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
684 YYPREFIX, yystate, yyn, yyrule[yyn]);
685 #endif
686 yym = yylen[yyn];
687 if (yym > 0)
688 yyval = yystack.l_mark[1-yym];
689 else
690 memset(&yyval, 0, sizeof yyval);
691
692 switch (yyn)
693 {
694 case 3:
695 #line 59 "varsyntax_calc1.y"
696 {
697 (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
698 }
699 break;
700 case 4:
701 #line 63 "varsyntax_calc1.y"
702 {
703 (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
704 }
705 break;
706 case 5:
707 #line 67 "varsyntax_calc1.y"
708 {
709 dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
710 }
711 break;
712 case 6:
713 #line 71 "varsyntax_calc1.y"
714 {
715 vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
716 }
717 break;
718 case 7:
719 #line 75 "varsyntax_calc1.y"
720 {
721 yyerrok;
722 }
723 break;
724 case 9:
725 #line 82 "varsyntax_calc1.y"
726 {
727 yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
728 }
729 break;
730 case 10:
731 #line 86 "varsyntax_calc1.y"
732 {
733 yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
734 }
735 break;
736 case 11:
737 #line 90 "varsyntax_calc1.y"
738 {
739 yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
740 }
741 break;
742 case 12:
743 #line 94 "varsyntax_calc1.y"
744 {
745 yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
746 }
747 break;
748 case 13:
749 #line 98 "varsyntax_calc1.y"
750 {
751 yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
752 }
753 break;
754 case 14:
755 #line 102 "varsyntax_calc1.y"
756 {
757 yyval.dval = -yystack.l_mark[0].dval;
758 }
759 break;
760 case 15:
761 #line 106 "varsyntax_calc1.y"
762 {
763 yyval.dval = yystack.l_mark[-1].dval;
764 }
765 break;
766 case 16:
767 #line 112 "varsyntax_calc1.y"
768 {
769 yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
770 }
771 break;
772 case 17:
773 #line 116 "varsyntax_calc1.y"
774 {
775 yyval.vval.lo = yystack.l_mark[-3].dval;
776 yyval.vval.hi = yystack.l_mark[-1].dval;
777 if ( yyval.vval.lo > yyval.vval.hi )
778 {
779 (void) printf("interval out of order\n");
780 YYERROR;
781 }
782 }
783 break;
784 case 18:
785 #line 126 "varsyntax_calc1.y"
786 {
787 yyval.vval = vreg[yystack.l_mark[0].ival];
788 }
789 break;
790 case 19:
791 #line 130 "varsyntax_calc1.y"
792 {
793 yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
794 yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
795 }
796 break;
797 case 20:
798 #line 135 "varsyntax_calc1.y"
799 {
800 yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
801 yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
802 }
803 break;
804 case 21:
805 #line 140 "varsyntax_calc1.y"
806 {
807 yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
808 yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
809 }
810 break;
811 case 22:
812 #line 145 "varsyntax_calc1.y"
813 {
814 yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
815 yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
816 }
817 break;
818 case 23:
819 #line 150 "varsyntax_calc1.y"
820 {
821 yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
822 }
823 break;
824 case 24:
825 #line 154 "varsyntax_calc1.y"
826 {
827 yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
828 }
829 break;
830 case 25:
831 #line 158 "varsyntax_calc1.y"
832 {
833 if (dcheck(yystack.l_mark[0].vval)) YYERROR;
834 yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
835 }
836 break;
837 case 26:
838 #line 163 "varsyntax_calc1.y"
839 {
840 if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
841 yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
842 }
843 break;
844 case 27:
845 #line 168 "varsyntax_calc1.y"
846 {
847 yyval.vval.hi = -yystack.l_mark[0].vval.lo;
848 yyval.vval.lo = -yystack.l_mark[0].vval.hi;
849 }
850 break;
851 case 28:
852 #line 173 "varsyntax_calc1.y"
853 {
854 yyval.vval = yystack.l_mark[-1].vval;
855 }
856 break;
857 #line 856 "varsyntax_calc1.tab.c"
858 }
859 yystack.s_mark -= yym;
860 yystate = *yystack.s_mark;
861 yystack.l_mark -= yym;
862 yym = yylhs[yyn];
863 if (yystate == 0 && yym == 0)
864 {
865 #if YYDEBUG
866 if (yydebug)
867 printf("%sdebug: after reduction, shifting from state 0 to\
868 state %d\n", YYPREFIX, YYFINAL);
869 #endif
870 yystate = YYFINAL;
871 *++yystack.s_mark = YYFINAL;
872 *++yystack.l_mark = yyval;
873 if (yychar < 0)
874 {
875 yychar = YYLEX;
876 if (yychar < 0) yychar = YYEOF;
877 #if YYDEBUG
878 if (yydebug)
879 {
880 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
881 printf("%sdebug: state %d, reading %d (%s)\n",
882 YYPREFIX, YYFINAL, yychar, yys);
883 }
884 #endif
885 }
886 if (yychar == YYEOF) goto yyaccept;
887 goto yyloop;
888 }
889 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
890 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
891 yystate = yytable[yyn];
892 else
893 yystate = yydgoto[yym];
894 #if YYDEBUG
895 if (yydebug)
896 printf("%sdebug: after reduction, shifting from state %d \
897 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
898 #endif
899 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
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 }
915