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 #undef YYBTYACC
20 #define YYBTYACC 0
21 #define YYDEBUGSTR YYPREFIX "debug"
22
23 #ifndef yyparse
24 #define yyparse varsyntax_calc1_parse
25 #endif /* yyparse */
26
27 #ifndef yylex
28 #define yylex varsyntax_calc1_lex
29 #endif /* yylex */
30
31 #ifndef yyerror
32 #define yyerror varsyntax_calc1_error
33 #endif /* yyerror */
34
35 #ifndef yychar
36 #define yychar varsyntax_calc1_char
37 #endif /* yychar */
38
39 #ifndef yyval
40 #define yyval varsyntax_calc1_val
41 #endif /* yyval */
42
43 #ifndef yylval
44 #define yylval varsyntax_calc1_lval
45 #endif /* yylval */
46
47 #ifndef yydebug
48 #define yydebug varsyntax_calc1_debug
49 #endif /* yydebug */
50
51 #ifndef yynerrs
52 #define yynerrs varsyntax_calc1_nerrs
53 #endif /* yynerrs */
54
55 #ifndef yyerrflag
56 #define yyerrflag varsyntax_calc1_errflag
57 #endif /* yyerrflag */
58
59 #ifndef yylhs
60 #define yylhs varsyntax_calc1_lhs
61 #endif /* yylhs */
62
63 #ifndef yylen
64 #define yylen varsyntax_calc1_len
65 #endif /* yylen */
66
67 #ifndef yydefred
68 #define yydefred varsyntax_calc1_defred
69 #endif /* yydefred */
70
71 #ifndef yystos
72 #define yystos varsyntax_calc1_stos
73 #endif /* yystos */
74
75 #ifndef yydgoto
76 #define yydgoto varsyntax_calc1_dgoto
77 #endif /* yydgoto */
78
79 #ifndef yysindex
80 #define yysindex varsyntax_calc1_sindex
81 #endif /* yysindex */
82
83 #ifndef yyrindex
84 #define yyrindex varsyntax_calc1_rindex
85 #endif /* yyrindex */
86
87 #ifndef yygindex
88 #define yygindex varsyntax_calc1_gindex
89 #endif /* yygindex */
90
91 #ifndef yytable
92 #define yytable varsyntax_calc1_table
93 #endif /* yytable */
94
95 #ifndef yycheck
96 #define yycheck varsyntax_calc1_check
97 #endif /* yycheck */
98
99 #ifndef yyname
100 #define yyname varsyntax_calc1_name
101 #endif /* yyname */
102
103 #ifndef yyrule
104 #define yyrule varsyntax_calc1_rule
105 #endif /* yyrule */
106
107 #if YYBTYACC
108
109 #ifndef yycindex
110 #define yycindex varsyntax_calc1_cindex
111 #endif /* yycindex */
112
113 #ifndef yyctable
114 #define yyctable varsyntax_calc1_ctable
115 #endif /* yyctable */
116
117 #endif /* YYBTYACC */
118
119 #define YYPREFIX "varsyntax_calc1_"
120
121 #define YYPURE 0
122
123 #line 3 "varsyntax_calc1.y"
124
125 /* http://dinosaur.compilertools.net/yacc/index.html * /*/
126
127 #include <stdlib.h>
128 #include <stdio.h>
129 #include <ctype.h>
130 #include <math.h>
131
132 typedef struct interval
133 {
134 double lo, hi;
135 }
136 INTERVAL;
137
138 INTERVAL vmul(double, double, INTERVAL);
139 INTERVAL vdiv(double, double, INTERVAL);
140
141 extern int yylex(void);
142 static void yyerror(const char *s);
143
144 int dcheck(INTERVAL);
145
146 double dreg[26];
147 INTERVAL vreg[26];
148
149 #ifdef YYSTYPE
150 #undef YYSTYPE_IS_DECLARED
151 #define YYSTYPE_IS_DECLARED 1
152 #endif
153 #ifndef YYSTYPE_IS_DECLARED
154 #define YYSTYPE_IS_DECLARED 1
155 #line 32 "varsyntax_calc1.y"
156 typedef union
157 {
158 int ival; /* dreg & vreg array index values*/
159 double dval; /* floating point values*/
160 INTERVAL vval; /* interval values*/
161 } YYSTYPE;
162 #endif /* !YYSTYPE_IS_DECLARED */
163 #line 162 "varsyntax_calc1.tab.c"
164
165 /* compatibility with bison */
166 #ifdef YYPARSE_PARAM
167 /* compatibility with FreeBSD */
168 # ifdef YYPARSE_PARAM_TYPE
169 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
170 # else
171 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
172 # endif
173 #else
174 # define YYPARSE_DECL() yyparse(void)
175 #endif
176
177 /* Parameters sent to lex. */
178 #ifdef YYLEX_PARAM
179 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
180 # define YYLEX yylex(YYLEX_PARAM)
181 #else
182 # define YYLEX_DECL() yylex(void)
183 # define YYLEX yylex()
184 #endif
185
186 /* Parameters sent to yyerror. */
187 #ifndef YYERROR_DECL
188 #define YYERROR_DECL() yyerror(const char *s)
189 #endif
190 #ifndef YYERROR_CALL
191 #define YYERROR_CALL(msg) yyerror(msg)
192 #endif
193
194 extern int YYPARSE_DECL();
195
196 #define DREG 257
197 #define VREG 258
198 #define CONST 259
199 #define UMINUS 260
200 #define YYERRCODE 256
201 typedef short YYINT;
202 static const YYINT varsyntax_calc1_lhs[] = { -1,
203 3, 3, 0, 0, 0, 0, 0, 1, 1, 1,
204 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
205 2, 2, 2, 2, 2, 2, 2, 2,
206 };
207 static const YYINT varsyntax_calc1_len[] = { 2,
208 0, 2, 2, 2, 4, 4, 2, 1, 1, 3,
209 3, 3, 3, 2, 3, 1, 5, 1, 3, 3,
210 3, 3, 3, 3, 3, 3, 2, 3,
211 };
212 static const YYINT varsyntax_calc1_defred[] = { 0,
213 0, 0, 0, 8, 0, 0, 0, 0, 0, 7,
214 0, 0, 9, 18, 14, 27, 0, 0, 0, 0,
215 0, 0, 3, 0, 0, 0, 0, 4, 0, 0,
216 0, 0, 0, 15, 0, 28, 0, 0, 0, 0,
217 12, 24, 13, 26, 0, 0, 23, 25, 14, 0,
218 0, 0, 0, 0, 5, 6, 0, 0, 0, 12,
219 13, 17,
220 };
221 #if defined(YYDESTRUCT_CALL) || defined(YYSTYPE_TOSTRING)
222 static const YYINT varsyntax_calc1_stos[] = { 0,
223 256, 257, 258, 259, 45, 40, 262, 263, 264, 10,
224 61, 61, 257, 258, 263, 264, 263, 264, 43, 45,
225 42, 47, 10, 43, 45, 42, 47, 10, 45, 40,
226 263, 263, 264, 41, 44, 41, 263, 264, 263, 264,
227 263, 264, 263, 264, 264, 264, 264, 264, 263, 263,
228 43, 45, 42, 47, 10, 10, 263, 263, 263, 263,
229 263, 41,
230 };
231 #endif /* YYDESTRUCT_CALL || YYSTYPE_TOSTRING */
232 static const YYINT varsyntax_calc1_dgoto[] = { 7,
233 32, 9, 0,
234 };
235 static const YYINT varsyntax_calc1_sindex[] = { -40,
236 -8, -48, -47, 0, -37, -37, 0, 2, 17, 0,
237 -34, -37, 0, 0, 0, 0, -25, 90, -37, -37,
238 -37, -37, 0, -37, -37, -37, -37, 0, -34, -34,
239 25, 125, 31, 0, -34, 0, -11, 37, -11, 37,
240 0, 0, 0, 0, 37, 37, 0, 0, 0, 111,
241 -34, -34, -34, -34, 0, 0, 118, 69, 69, 0,
242 0, 0,
243 };
244 static const YYINT varsyntax_calc1_rindex[] = { 0,
245 0, 38, 44, 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, -9, 0, 0, 0, 0, 51, -3, 56, 61,
249 0, 0, 0, 0, 67, 72, 0, 0, 0, 0,
250 0, 0, 0, 0, 0, 0, 0, 78, 83, 0,
251 0, 0,
252 };
253 #if YYBTYACC
254 static const YYINT varsyntax_calc1_cindex[] = { 0,
255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0,
262 };
263 #endif
264 static const YYINT varsyntax_calc1_gindex[] = { 0,
265 4, 124, 0,
266 };
267 #define YYTABLESIZE 225
268 static const YYINT varsyntax_calc1_table[] = { 6,
269 16, 10, 6, 8, 5, 30, 20, 5, 15, 17,
270 29, 23, 11, 12, 31, 34, 21, 19, 35, 20,
271 0, 22, 37, 39, 41, 43, 28, 0, 0, 0,
272 21, 16, 49, 50, 55, 22, 0, 20, 57, 20,
273 56, 20, 0, 21, 19, 0, 20, 9, 22, 0,
274 0, 0, 0, 18, 58, 59, 60, 61, 26, 24,
275 10, 25, 0, 27, 0, 11, 53, 51, 0, 52,
276 22, 54, 26, 24, 0, 25, 19, 27, 26, 9,
277 9, 21, 9, 27, 9, 18, 18, 10, 18, 0,
278 18, 10, 11, 10, 10, 10, 11, 0, 11, 11,
279 11, 22, 0, 22, 0, 22, 0, 19, 0, 19,
280 53, 19, 21, 0, 21, 54, 21, 0, 10, 0,
281 10, 0, 10, 11, 0, 11, 0, 11, 16, 18,
282 36, 26, 24, 0, 25, 33, 27, 0, 0, 0,
283 0, 0, 38, 40, 42, 44, 0, 45, 46, 47,
284 48, 34, 53, 51, 0, 52, 0, 54, 62, 53,
285 51, 0, 52, 0, 54, 0, 21, 19, 0, 20,
286 0, 22, 0, 0, 0, 0, 0, 0, 0, 0,
287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
288 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
290 0, 0, 0, 0, 0, 1, 2, 3, 4, 13,
291 14, 4, 13, 0, 4,
292 };
293 static const YYINT varsyntax_calc1_check[] = { 40,
294 10, 10, 40, 0, 45, 40, 10, 45, 5, 6,
295 45, 10, 61, 61, 11, 41, 42, 43, 44, 45,
296 -1, 47, 19, 20, 21, 22, 10, -1, -1, -1,
297 42, 41, 29, 30, 10, 47, -1, 41, 35, 43,
298 10, 45, -1, 42, 43, -1, 45, 10, 47, -1,
299 -1, -1, -1, 10, 51, 52, 53, 54, 42, 43,
300 10, 45, -1, 47, -1, 10, 42, 43, -1, 45,
301 10, 47, 42, 43, -1, 45, 10, 47, 42, 42,
302 43, 10, 45, 47, 47, 42, 43, 10, 45, -1,
303 47, 41, 10, 43, 44, 45, 41, -1, 43, 44,
304 45, 41, -1, 43, -1, 45, -1, 41, -1, 43,
305 42, 45, 41, -1, 43, 47, 45, -1, 41, -1,
306 43, -1, 45, 41, -1, 43, -1, 45, 5, 6,
307 41, 42, 43, -1, 45, 12, 47, -1, -1, -1,
308 -1, -1, 19, 20, 21, 22, -1, 24, 25, 26,
309 27, 41, 42, 43, -1, 45, -1, 47, 41, 42,
310 43, -1, 45, -1, 47, -1, 42, 43, -1, 45,
311 -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
312 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
313 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
314 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
315 -1, -1, -1, -1, -1, 256, 257, 258, 259, 257,
316 258, 259, 257, -1, 259,
317 };
318 #if YYBTYACC
319 static const YYINT varsyntax_calc1_ctable[] = { -1,
320 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
321 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
322 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
323 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
325 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
326 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
327 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
328 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
329 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
330 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
331 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
333 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
334 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
335 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
336 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
337 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
338 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
339 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
340 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
341 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
342 -1, -1, -1, -1,
343 };
344 #endif
345 #define YYFINAL 7
346 #ifndef YYDEBUG
347 #define YYDEBUG 0
348 #endif
349 #define YYMAXTOKEN 260
350 #define YYUNDFTOKEN 266
351 #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
352 #if YYDEBUG
353 static const char *const varsyntax_calc1_name[] = {
354
355 "$end",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,0,0,0,
356 0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0,0,0,0,
357 0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
358 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
359 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
360 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
361 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
362 "error","DREG","VREG","CONST","UMINUS","$accept","line","dexp","vexp","lines",
363 "illegal-symbol",
364 };
365 static const char *const varsyntax_calc1_rule[] = {
366 "$accept : line",
367 "lines :",
368 "lines : lines line",
369 "line : dexp '\\n'",
370 "line : vexp '\\n'",
371 "line : DREG '=' dexp '\\n'",
372 "line : VREG '=' vexp '\\n'",
373 "line : error '\\n'",
374 "dexp : CONST",
375 "dexp : DREG",
376 "dexp : dexp '+' dexp",
377 "dexp : dexp '-' dexp",
378 "dexp : dexp '*' dexp",
379 "dexp : dexp '/' dexp",
380 "dexp : '-' dexp",
381 "dexp : '(' dexp ')'",
382 "vexp : dexp",
383 "vexp : '(' dexp ',' dexp ')'",
384 "vexp : VREG",
385 "vexp : vexp '+' vexp",
386 "vexp : dexp '+' vexp",
387 "vexp : vexp '-' vexp",
388 "vexp : dexp '-' vexp",
389 "vexp : vexp '*' vexp",
390 "vexp : dexp '*' vexp",
391 "vexp : vexp '/' vexp",
392 "vexp : dexp '/' vexp",
393 "vexp : '-' vexp",
394 "vexp : '(' vexp ')'",
395
396 };
397 #endif
398
399 int yydebug;
400 int yynerrs;
401
402 int yyerrflag;
403 int yychar;
404 YYSTYPE yyval;
405 YYSTYPE yylval;
406 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
407 YYLTYPE yyloc; /* position returned by actions */
408 YYLTYPE yylloc; /* position from the lexer */
409 #endif
410
411 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
412 #ifndef YYLLOC_DEFAULT
413 #define YYLLOC_DEFAULT(loc, rhs, n) \
414 do \
415 { \
416 if (n == 0) \
417 { \
418 (loc).first_line = ((rhs)[-1]).last_line; \
419 (loc).first_column = ((rhs)[-1]).last_column; \
420 (loc).last_line = ((rhs)[-1]).last_line; \
421 (loc).last_column = ((rhs)[-1]).last_column; \
422 } \
423 else \
424 { \
425 (loc).first_line = ((rhs)[ 0 ]).first_line; \
426 (loc).first_column = ((rhs)[ 0 ]).first_column; \
427 (loc).last_line = ((rhs)[n-1]).last_line; \
428 (loc).last_column = ((rhs)[n-1]).last_column; \
429 } \
430 } while (0)
431 #endif /* YYLLOC_DEFAULT */
432 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
433 #if YYBTYACC
434
435 #ifndef YYLVQUEUEGROWTH
436 #define YYLVQUEUEGROWTH 32
437 #endif
438 #endif /* YYBTYACC */
439
440 /* define the initial stack-sizes */
441 #ifdef YYSTACKSIZE
442 #undef YYMAXDEPTH
443 #define YYMAXDEPTH YYSTACKSIZE
444 #else
445 #ifdef YYMAXDEPTH
446 #define YYSTACKSIZE YYMAXDEPTH
447 #else
448 #define YYSTACKSIZE 10000
449 #define YYMAXDEPTH 10000
450 #endif
451 #endif
452
453 #ifndef YYINITSTACKSIZE
454 #define YYINITSTACKSIZE 200
455 #endif
456
457 typedef struct {
458 unsigned stacksize;
459 YYINT *s_base;
460 YYINT *s_mark;
461 YYINT *s_last;
462 YYSTYPE *l_base;
463 YYSTYPE *l_mark;
464 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
465 YYLTYPE *p_base;
466 YYLTYPE *p_mark;
467 #endif
468 } YYSTACKDATA;
469 #if YYBTYACC
470
471 struct YYParseState_s
472 {
473 struct YYParseState_s *save; /* Previously saved parser state */
474 YYSTACKDATA yystack; /* saved parser stack */
475 int state; /* saved parser state */
476 int errflag; /* saved error recovery status */
477 int lexeme; /* saved index of the conflict lexeme in the lexical queue */
478 YYINT ctry; /* saved index in yyctable[] for this conflict */
479 };
480 typedef struct YYParseState_s YYParseState;
481 #endif /* YYBTYACC */
482 /* variables for the parser stack */
483 static YYSTACKDATA yystack;
484 #if YYBTYACC
485
486 /* Current parser state */
487 static YYParseState *yyps = 0;
488
489 /* yypath != NULL: do the full parse, starting at *yypath parser state. */
490 static YYParseState *yypath = 0;
491
492 /* Base of the lexical value queue */
493 static YYSTYPE *yylvals = 0;
494
495 /* Current position at lexical value queue */
496 static YYSTYPE *yylvp = 0;
497
498 /* End position of lexical value queue */
499 static YYSTYPE *yylve = 0;
500
501 /* The last allocated position at the lexical value queue */
502 static YYSTYPE *yylvlim = 0;
503
504 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
505 /* Base of the lexical position queue */
506 static YYLTYPE *yylpsns = 0;
507
508 /* Current position at lexical position queue */
509 static YYLTYPE *yylpp = 0;
510
511 /* End position of lexical position queue */
512 static YYLTYPE *yylpe = 0;
513
514 /* The last allocated position at the lexical position queue */
515 static YYLTYPE *yylplim = 0;
516 #endif
517
518 /* Current position at lexical token queue */
519 static YYINT *yylexp = 0;
520
521 static YYINT *yylexemes = 0;
522 #endif /* YYBTYACC */
523 #line 178 "varsyntax_calc1.y"
524 /* beginning of subroutines section */
525
526 #define BSZ 50 /* buffer size for floating point numbers */
527
528 /* lexical analysis */
529
530 static void
531 yyerror(const char *s)
532 {
533 fprintf(stderr, "%s\n", s);
534 }
535
536 int
537 yylex(void)
538 {
539 int c;
540
541 while ((c = getchar()) == ' ')
542 { /* skip over blanks */
543 }
544
545 if (isupper(c))
546 {
547 yylval.ival = c - 'A';
548 return (VREG);
549 }
550 if (islower(c))
551 {
552 yylval.ival = c - 'a';
553 return (DREG);
554 }
555
556 if (isdigit(c) || c == '.')
557 {
558 /* gobble up digits, points, exponents */
559 char buf[BSZ + 1], *cp = buf;
560 int dot = 0, expr = 0;
561
562 for (; (cp - buf) < BSZ; ++cp, c = getchar())
563 {
564
565 *cp = (char) c;
566 if (isdigit(c))
567 continue;
568 if (c == '.')
569 {
570 if (dot++ || expr)
571 return ('.'); /* will cause syntax error */
572 continue;
573 }
574
575 if (c == 'e')
576 {
577 if (expr++)
578 return ('e'); /* will cause syntax error */
579 continue;
580 }
581
582 /* end of number */
583 break;
584 }
585 *cp = '\0';
586
587 if ((cp - buf) >= BSZ)
588 printf("constant too long: truncated\n");
589 else
590 ungetc(c, stdin); /* push back last char read */
591 yylval.dval = atof(buf);
592 return (CONST);
593 }
594 return (c);
595 }
596
597 static INTERVAL
598 hilo(double a, double b, double c, double d)
599 {
600 /* returns the smallest interval containing a, b, c, and d */
601 /* used by *, / routines */
602 INTERVAL v;
603
604 if (a > b)
605 {
606 v.hi = a;
607 v.lo = b;
608 }
609 else
610 {
611 v.hi = b;
612 v.lo = a;
613 }
614
615 if (c > d)
616 {
617 if (c > v.hi)
618 v.hi = c;
619 if (d < v.lo)
620 v.lo = d;
621 }
622 else
623 {
624 if (d > v.hi)
625 v.hi = d;
626 if (c < v.lo)
627 v.lo = c;
628 }
629 return (v);
630 }
631
632 INTERVAL
633 vmul(double a, double b, INTERVAL v)
634 {
635 return (hilo(a * v.hi, a * v.lo, b * v.hi, b * v.lo));
636 }
637
638 int
639 dcheck(INTERVAL v)
640 {
641 if (v.hi >= 0. && v.lo <= 0.)
642 {
643 printf("divisor interval contains 0.\n");
644 return (1);
645 }
646 return (0);
647 }
648
649 INTERVAL
650 vdiv(double a, double b, INTERVAL v)
651 {
652 return (hilo(a / v.hi, a / v.lo, b / v.hi, b / v.lo));
653 }
654 #line 653 "varsyntax_calc1.tab.c"
655
656 /* For use in generated program */
657 #define yydepth (int)(yystack.s_mark - yystack.s_base)
658 #if YYBTYACC
659 #define yytrial (yyps->save)
660 #endif /* YYBTYACC */
661
662 #if YYDEBUG
663 #include <stdio.h> /* needed for printf */
664 #endif
665
666 #include <stdlib.h> /* needed for malloc, etc */
667 #include <string.h> /* needed for memset */
668
669 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
670 static int yygrowstack(YYSTACKDATA *data)
671 {
672 int i;
673 unsigned newsize;
674 YYINT *newss;
675 YYSTYPE *newvs;
676 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
677 YYLTYPE *newps;
678 #endif
679
680 if ((newsize = data->stacksize) == 0)
681 newsize = YYINITSTACKSIZE;
682 else if (newsize >= YYMAXDEPTH)
683 return YYENOMEM;
684 else if ((newsize *= 2) > YYMAXDEPTH)
685 newsize = YYMAXDEPTH;
686
687 i = (int) (data->s_mark - data->s_base);
688 newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
689 if (newss == 0)
690 return YYENOMEM;
691
692 data->s_base = newss;
693 data->s_mark = newss + i;
694
695 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
696 if (newvs == 0)
697 return YYENOMEM;
698
699 data->l_base = newvs;
700 data->l_mark = newvs + i;
701
702 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
703 newps = (YYLTYPE *)realloc(data->p_base, newsize * sizeof(*newps));
704 if (newps == 0)
705 return YYENOMEM;
706
707 data->p_base = newps;
708 data->p_mark = newps + i;
709 #endif
710
711 data->stacksize = newsize;
712 data->s_last = data->s_base + newsize - 1;
713
714 #if YYDEBUG
715 if (yydebug)
716 fprintf(stderr, "%sdebug: stack size increased to %d\n", YYPREFIX, newsize);
717 #endif
718 return 0;
719 }
720
721 #if YYPURE || defined(YY_NO_LEAKS)
722 static void yyfreestack(YYSTACKDATA *data)
723 {
724 free(data->s_base);
725 free(data->l_base);
726 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
727 free(data->p_base);
728 #endif
729 memset(data, 0, sizeof(*data));
730 }
731 #else
732 #define yyfreestack(data) /* nothing */
733 #endif /* YYPURE || defined(YY_NO_LEAKS) */
734 #if YYBTYACC
735
736 static YYParseState *
737 yyNewState(unsigned size)
738 {
739 YYParseState *p = (YYParseState *) malloc(sizeof(YYParseState));
740 if (p == NULL) return NULL;
741
742 p->yystack.stacksize = size;
743 if (size == 0)
744 {
745 p->yystack.s_base = NULL;
746 p->yystack.l_base = NULL;
747 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
748 p->yystack.p_base = NULL;
749 #endif
750 return p;
751 }
752 p->yystack.s_base = (YYINT *) malloc(size * sizeof(YYINT));
753 if (p->yystack.s_base == NULL) return NULL;
754 p->yystack.l_base = (YYSTYPE *) malloc(size * sizeof(YYSTYPE));
755 if (p->yystack.l_base == NULL) return NULL;
756 memset(p->yystack.l_base, 0, size * sizeof(YYSTYPE));
757 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
758 p->yystack.p_base = (YYLTYPE *) malloc(size * sizeof(YYLTYPE));
759 if (p->yystack.p_base == NULL) return NULL;
760 memset(p->yystack.p_base, 0, size * sizeof(YYLTYPE));
761 #endif
762
763 return p;
764 }
765
766 static void
767 yyFreeState(YYParseState *p)
768 {
769 yyfreestack(&p->yystack);
770 free(p);
771 }
772 #endif /* YYBTYACC */
773
774 #define YYABORT goto yyabort
775 #define YYREJECT goto yyabort
776 #define YYACCEPT goto yyaccept
777 #define YYERROR goto yyerrlab
778 #if YYBTYACC
779 #define YYVALID do { if (yyps->save) goto yyvalid; } while(0)
780 #define YYVALID_NESTED do { if (yyps->save && \
781 yyps->save->save == 0) goto yyvalid; } while(0)
782 #endif /* YYBTYACC */
783
784 int
785 YYPARSE_DECL()
786 {
787 int yym, yyn, yystate, yyresult;
788 #if YYBTYACC
789 int yynewerrflag;
790 YYParseState *yyerrctx = NULL;
791 #endif /* YYBTYACC */
792 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
793 YYLTYPE yyerror_loc_range[2]; /* position of error start & end */
794 #endif
795 #if YYDEBUG
796 const char *yys;
797
798 if ((yys = getenv("YYDEBUG")) != 0)
799 {
800 yyn = *yys;
801 if (yyn >= '0' && yyn <= '9')
802 yydebug = yyn - '0';
803 }
804 if (yydebug)
805 fprintf(stderr, "%sdebug[<# of symbols on state stack>]\n", YYPREFIX);
806 #endif
807
808 #if YYBTYACC
809 yyps = yyNewState(0); if (yyps == 0) goto yyenomem;
810 yyps->save = 0;
811 #endif /* YYBTYACC */
812 yym = 0;
813 yyn = 0;
814 yynerrs = 0;
815 yyerrflag = 0;
816 yychar = YYEMPTY;
817 yystate = 0;
818
819 #if YYPURE
820 memset(&yystack, 0, sizeof(yystack));
821 #endif
822
823 if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
824 yystack.s_mark = yystack.s_base;
825 yystack.l_mark = yystack.l_base;
826 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
827 yystack.p_mark = yystack.p_base;
828 #endif
829 yystate = 0;
830 *yystack.s_mark = 0;
831
832 yyloop:
833 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
834 if (yychar < 0)
835 {
836 #if YYBTYACC
837 do {
838 if (yylvp < yylve)
839 {
840 /* we're currently re-reading tokens */
841 yylval = *yylvp++;
842 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
843 yylloc = *yylpp++;
844 #endif
845 yychar = *yylexp++;
846 break;
847 }
848 if (yyps->save)
849 {
850 /* in trial mode; save scanner results for future parse attempts */
851 if (yylvp == yylvlim)
852 { /* Enlarge lexical value queue */
853 size_t p = (size_t) (yylvp - yylvals);
854 size_t s = (size_t) (yylvlim - yylvals);
855
856 s += YYLVQUEUEGROWTH;
857 if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL) goto yyenomem;
858 if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL) goto yyenomem;
859 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
860 if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL) goto yyenomem;
861 #endif
862 yylvp = yylve = yylvals + p;
863 yylvlim = yylvals + s;
864 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
865 yylpp = yylpe = yylpsns + p;
866 yylplim = yylpsns + s;
867 #endif
868 yylexp = yylexemes + p;
869 }
870 *yylexp = (YYINT) YYLEX;
871 *yylvp++ = yylval;
872 yylve++;
873 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
874 *yylpp++ = yylloc;
875 yylpe++;
876 #endif
877 yychar = *yylexp++;
878 break;
879 }
880 /* normal operation, no conflict encountered */
881 #endif /* YYBTYACC */
882 yychar = YYLEX;
883 #if YYBTYACC
884 } while (0);
885 #endif /* YYBTYACC */
886 if (yychar < 0) yychar = YYEOF;
887 #if YYDEBUG
888 if (yydebug)
889 {
890 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
891 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)",
892 YYDEBUGSTR, yydepth, yystate, yychar, yys);
893 #ifdef YYSTYPE_TOSTRING
894 #if YYBTYACC
895 if (!yytrial)
896 #endif /* YYBTYACC */
897 fprintf(stderr, " <%s>", YYSTYPE_TOSTRING(yychar, yylval));
898 #endif
899 fputc('\n', stderr);
900 }
901 #endif
902 }
903 #if YYBTYACC
904
905 /* Do we have a conflict? */
906 if (((yyn = yycindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
907 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
908 {
909 YYINT ctry;
910
911 if (yypath)
912 {
913 YYParseState *save;
914 #if YYDEBUG
915 if (yydebug)
916 fprintf(stderr, "%s[%d]: CONFLICT in state %d: following successful trial parse\n",
917 YYDEBUGSTR, yydepth, yystate);
918 #endif
919 /* Switch to the next conflict context */
920 save = yypath;
921 yypath = save->save;
922 save->save = NULL;
923 ctry = save->ctry;
924 if (save->state != yystate) YYABORT;
925 yyFreeState(save);
926
927 }
928 else
929 {
930
931 /* Unresolved conflict - start/continue trial parse */
932 YYParseState *save;
933 #if YYDEBUG
934 if (yydebug)
935 {
936 fprintf(stderr, "%s[%d]: CONFLICT in state %d. ", YYDEBUGSTR, yydepth, yystate);
937 if (yyps->save)
938 fputs("ALREADY in conflict, continuing trial parse.\n", stderr);
939 else
940 fputs("Starting trial parse.\n", stderr);
941 }
942 #endif
943 save = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
944 if (save == NULL) goto yyenomem;
945 save->save = yyps->save;
946 save->state = yystate;
947 save->errflag = yyerrflag;
948 save->yystack.s_mark = save->yystack.s_base + (yystack.s_mark - yystack.s_base);
949 memcpy (save->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
950 save->yystack.l_mark = save->yystack.l_base + (yystack.l_mark - yystack.l_base);
951 memcpy (save->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
952 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
953 save->yystack.p_mark = save->yystack.p_base + (yystack.p_mark - yystack.p_base);
954 memcpy (save->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
955 #endif
956 ctry = yytable[yyn];
957 if (yyctable[ctry] == -1)
958 {
959 #if YYDEBUG
960 if (yydebug && yychar >= YYEOF)
961 fprintf(stderr, "%s[%d]: backtracking 1 token\n", YYDEBUGSTR, yydepth);
962 #endif
963 ctry++;
964 }
965 save->ctry = ctry;
966 if (yyps->save == NULL)
967 {
968 /* If this is a first conflict in the stack, start saving lexemes */
969 if (!yylexemes)
970 {
971 yylexemes = malloc((YYLVQUEUEGROWTH) * sizeof(YYINT));
972 if (yylexemes == NULL) goto yyenomem;
973 yylvals = (YYSTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYSTYPE));
974 if (yylvals == NULL) goto yyenomem;
975 yylvlim = yylvals + YYLVQUEUEGROWTH;
976 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
977 yylpsns = (YYLTYPE *) malloc((YYLVQUEUEGROWTH) * sizeof(YYLTYPE));
978 if (yylpsns == NULL) goto yyenomem;
979 yylplim = yylpsns + YYLVQUEUEGROWTH;
980 #endif
981 }
982 if (yylvp == yylve)
983 {
984 yylvp = yylve = yylvals;
985 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
986 yylpp = yylpe = yylpsns;
987 #endif
988 yylexp = yylexemes;
989 if (yychar >= YYEOF)
990 {
991 *yylve++ = yylval;
992 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
993 *yylpe++ = yylloc;
994 #endif
995 *yylexp = (YYINT) yychar;
996 yychar = YYEMPTY;
997 }
998 }
999 }
1000 if (yychar >= YYEOF)
1001 {
1002 yylvp--;
1003 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1004 yylpp--;
1005 #endif
1006 yylexp--;
1007 yychar = YYEMPTY;
1008 }
1009 save->lexeme = (int) (yylvp - yylvals);
1010 yyps->save = save;
1011 }
1012 if (yytable[yyn] == ctry)
1013 {
1014 #if YYDEBUG
1015 if (yydebug)
1016 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1017 YYDEBUGSTR, yydepth, yystate, yyctable[ctry]);
1018 #endif
1019 if (yychar < 0)
1020 {
1021 yylvp++;
1022 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1023 yylpp++;
1024 #endif
1025 yylexp++;
1026 }
1027 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
1028 goto yyoverflow;
1029 yystate = yyctable[ctry];
1030 *++yystack.s_mark = (YYINT) yystate;
1031 *++yystack.l_mark = yylval;
1032 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1033 *++yystack.p_mark = yylloc;
1034 #endif
1035 yychar = YYEMPTY;
1036 if (yyerrflag > 0) --yyerrflag;
1037 goto yyloop;
1038 }
1039 else
1040 {
1041 yyn = yyctable[ctry];
1042 goto yyreduce;
1043 }
1044 } /* End of code dealing with conflicts */
1045 #endif /* YYBTYACC */
1046 if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1047 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1048 {
1049 #if YYDEBUG
1050 if (yydebug)
1051 fprintf(stderr, "%s[%d]: state %d, shifting to state %d\n",
1052 YYDEBUGSTR, yydepth, yystate, yytable[yyn]);
1053 #endif
1054 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1055 yystate = yytable[yyn];
1056 *++yystack.s_mark = yytable[yyn];
1057 *++yystack.l_mark = yylval;
1058 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1059 *++yystack.p_mark = yylloc;
1060 #endif
1061 yychar = YYEMPTY;
1062 if (yyerrflag > 0) --yyerrflag;
1063 goto yyloop;
1064 }
1065 if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
1066 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
1067 {
1068 yyn = yytable[yyn];
1069 goto yyreduce;
1070 }
1071 if (yyerrflag != 0) goto yyinrecovery;
1072 #if YYBTYACC
1073
1074 yynewerrflag = 1;
1075 goto yyerrhandler;
1076 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1077
1078 yyerrlab:
1079 /* explicit YYERROR from an action -- pop the rhs of the rule reduced
1080 * before looking for error recovery */
1081 yystack.s_mark -= yym;
1082 yystate = *yystack.s_mark;
1083 yystack.l_mark -= yym;
1084 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1085 yystack.p_mark -= yym;
1086 #endif
1087
1088 yynewerrflag = 0;
1089 yyerrhandler:
1090 while (yyps->save)
1091 {
1092 int ctry;
1093 YYParseState *save = yyps->save;
1094 #if YYDEBUG
1095 if (yydebug)
1096 fprintf(stderr, "%s[%d]: ERROR in state %d, CONFLICT BACKTRACKING to state %d, %d tokens\n",
1097 YYDEBUGSTR, yydepth, yystate, yyps->save->state,
1098 (int)(yylvp - yylvals - yyps->save->lexeme));
1099 #endif
1100 /* Memorize most forward-looking error state in case it's really an error. */
1101 if (yyerrctx == NULL || yyerrctx->lexeme < yylvp - yylvals)
1102 {
1103 /* Free old saved error context state */
1104 if (yyerrctx) yyFreeState(yyerrctx);
1105 /* Create and fill out new saved error context state */
1106 yyerrctx = yyNewState((unsigned)(yystack.s_mark - yystack.s_base + 1));
1107 if (yyerrctx == NULL) goto yyenomem;
1108 yyerrctx->save = yyps->save;
1109 yyerrctx->state = yystate;
1110 yyerrctx->errflag = yyerrflag;
1111 yyerrctx->yystack.s_mark = yyerrctx->yystack.s_base + (yystack.s_mark - yystack.s_base);
1112 memcpy (yyerrctx->yystack.s_base, yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1113 yyerrctx->yystack.l_mark = yyerrctx->yystack.l_base + (yystack.l_mark - yystack.l_base);
1114 memcpy (yyerrctx->yystack.l_base, yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1115 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1116 yyerrctx->yystack.p_mark = yyerrctx->yystack.p_base + (yystack.p_mark - yystack.p_base);
1117 memcpy (yyerrctx->yystack.p_base, yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1118 #endif
1119 yyerrctx->lexeme = (int) (yylvp - yylvals);
1120 }
1121 yylvp = yylvals + save->lexeme;
1122 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1123 yylpp = yylpsns + save->lexeme;
1124 #endif
1125 yylexp = yylexemes + save->lexeme;
1126 yychar = YYEMPTY;
1127 yystack.s_mark = yystack.s_base + (save->yystack.s_mark - save->yystack.s_base);
1128 memcpy (yystack.s_base, save->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1129 yystack.l_mark = yystack.l_base + (save->yystack.l_mark - save->yystack.l_base);
1130 memcpy (yystack.l_base, save->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1131 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1132 yystack.p_mark = yystack.p_base + (save->yystack.p_mark - save->yystack.p_base);
1133 memcpy (yystack.p_base, save->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1134 #endif
1135 ctry = ++save->ctry;
1136 yystate = save->state;
1137 /* We tried shift, try reduce now */
1138 if ((yyn = yyctable[ctry]) >= 0) goto yyreduce;
1139 yyps->save = save->save;
1140 save->save = NULL;
1141 yyFreeState(save);
1142
1143 /* Nothing left on the stack -- error */
1144 if (!yyps->save)
1145 {
1146 #if YYDEBUG
1147 if (yydebug)
1148 fprintf(stderr, "%sdebug[%d,trial]: trial parse FAILED, entering ERROR mode\n",
1149 YYPREFIX, yydepth);
1150 #endif
1151 /* Restore state as it was in the most forward-advanced error */
1152 yylvp = yylvals + yyerrctx->lexeme;
1153 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1154 yylpp = yylpsns + yyerrctx->lexeme;
1155 #endif
1156 yylexp = yylexemes + yyerrctx->lexeme;
1157 yychar = yylexp[-1];
1158 yylval = yylvp[-1];
1159 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1160 yylloc = yylpp[-1];
1161 #endif
1162 yystack.s_mark = yystack.s_base + (yyerrctx->yystack.s_mark - yyerrctx->yystack.s_base);
1163 memcpy (yystack.s_base, yyerrctx->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1164 yystack.l_mark = yystack.l_base + (yyerrctx->yystack.l_mark - yyerrctx->yystack.l_base);
1165 memcpy (yystack.l_base, yyerrctx->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1166 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1167 yystack.p_mark = yystack.p_base + (yyerrctx->yystack.p_mark - yyerrctx->yystack.p_base);
1168 memcpy (yystack.p_base, yyerrctx->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1169 #endif
1170 yystate = yyerrctx->state;
1171 yyFreeState(yyerrctx);
1172 yyerrctx = NULL;
1173 }
1174 yynewerrflag = 1;
1175 }
1176 if (yynewerrflag == 0) goto yyinrecovery;
1177 #endif /* YYBTYACC */
1178
1179 YYERROR_CALL("syntax error");
1180 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1181 yyerror_loc_range[0] = yylloc; /* lookahead position is error start position */
1182 #endif
1183
1184 #if !YYBTYACC
1185 goto yyerrlab; /* redundant goto avoids 'unused label' warning */
1186 yyerrlab:
1187 #endif
1188 ++yynerrs;
1189
1190 yyinrecovery:
1191 if (yyerrflag < 3)
1192 {
1193 yyerrflag = 3;
1194 for (;;)
1195 {
1196 if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
1197 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
1198 {
1199 #if YYDEBUG
1200 if (yydebug)
1201 fprintf(stderr, "%s[%d]: state %d, error recovery shifting to state %d\n",
1202 YYDEBUGSTR, yydepth, *yystack.s_mark, yytable[yyn]);
1203 #endif
1204 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1205 yystate = yytable[yyn];
1206 *++yystack.s_mark = yytable[yyn];
1207 *++yystack.l_mark = yylval;
1208 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1209 /* lookahead position is error end position */
1210 yyerror_loc_range[1] = yylloc;
1211 YYLLOC_DEFAULT(yyloc, yyerror_loc_range, 2); /* position of error span */
1212 *++yystack.p_mark = yyloc;
1213 #endif
1214 goto yyloop;
1215 }
1216 else
1217 {
1218 #if YYDEBUG
1219 if (yydebug)
1220 fprintf(stderr, "%s[%d]: error recovery discarding state %d\n",
1221 YYDEBUGSTR, yydepth, *yystack.s_mark);
1222 #endif
1223 if (yystack.s_mark <= yystack.s_base) goto yyabort;
1224 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1225 /* the current TOS position is the error start position */
1226 yyerror_loc_range[0] = *yystack.p_mark;
1227 #endif
1228 #if defined(YYDESTRUCT_CALL)
1229 #if YYBTYACC
1230 if (!yytrial)
1231 #endif /* YYBTYACC */
1232 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1233 YYDESTRUCT_CALL("error: discarding state",
1234 yystos[*yystack.s_mark], yystack.l_mark, yystack.p_mark);
1235 #else
1236 YYDESTRUCT_CALL("error: discarding state",
1237 yystos[*yystack.s_mark], yystack.l_mark);
1238 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1239 #endif /* defined(YYDESTRUCT_CALL) */
1240 --yystack.s_mark;
1241 --yystack.l_mark;
1242 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1243 --yystack.p_mark;
1244 #endif
1245 }
1246 }
1247 }
1248 else
1249 {
1250 if (yychar == YYEOF) goto yyabort;
1251 #if YYDEBUG
1252 if (yydebug)
1253 {
1254 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1255 fprintf(stderr, "%s[%d]: state %d, error recovery discarding token %d (%s)\n",
1256 YYDEBUGSTR, yydepth, yystate, yychar, yys);
1257 }
1258 #endif
1259 #if defined(YYDESTRUCT_CALL)
1260 #if YYBTYACC
1261 if (!yytrial)
1262 #endif /* YYBTYACC */
1263 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1264 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval, &yylloc);
1265 #else
1266 YYDESTRUCT_CALL("error: discarding token", yychar, &yylval);
1267 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1268 #endif /* defined(YYDESTRUCT_CALL) */
1269 yychar = YYEMPTY;
1270 goto yyloop;
1271 }
1272
1273 yyreduce:
1274 yym = yylen[yyn];
1275 #if YYDEBUG
1276 if (yydebug)
1277 {
1278 fprintf(stderr, "%s[%d]: state %d, reducing by rule %d (%s)",
1279 YYDEBUGSTR, yydepth, yystate, yyn, yyrule[yyn]);
1280 #ifdef YYSTYPE_TOSTRING
1281 #if YYBTYACC
1282 if (!yytrial)
1283 #endif /* YYBTYACC */
1284 if (yym > 0)
1285 {
1286 int i;
1287 fputc('<', stderr);
1288 for (i = yym; i > 0; i--)
1289 {
1290 if (i != yym) fputs(", ", stderr);
1291 fputs(YYSTYPE_TOSTRING(yystos[yystack.s_mark[1-i]],
1292 yystack.l_mark[1-i]), stderr);
1293 }
1294 fputc('>', stderr);
1295 }
1296 #endif
1297 fputc('\n', stderr);
1298 }
1299 #endif
1300 if (yym > 0)
1301 yyval = yystack.l_mark[1-yym];
1302 else
1303 memset(&yyval, 0, sizeof yyval);
1304 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1305
1306 /* Perform position reduction */
1307 memset(&yyloc, 0, sizeof(yyloc));
1308 #if YYBTYACC
1309 if (!yytrial)
1310 #endif /* YYBTYACC */
1311 {
1312 YYLLOC_DEFAULT(yyloc, &yystack.p_mark[1-yym], yym);
1313 /* just in case YYERROR is invoked within the action, save
1314 the start of the rhs as the error start position */
1315 yyerror_loc_range[0] = yystack.p_mark[1-yym];
1316 }
1317 #endif
1318
1319 switch (yyn)
1320 {
1321 case 3:
1322 #line 59 "varsyntax_calc1.y"
1323 {
1324 (void) printf("%15.8f\n", yystack.l_mark[-1].dval);
1325 }
1326 break;
1327 case 4:
1328 #line 63 "varsyntax_calc1.y"
1329 {
1330 (void) printf("(%15.8f, %15.8f)\n", yystack.l_mark[-1].vval.lo, yystack.l_mark[-1].vval.hi);
1331 }
1332 break;
1333 case 5:
1334 #line 67 "varsyntax_calc1.y"
1335 {
1336 dreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].dval;
1337 }
1338 break;
1339 case 6:
1340 #line 71 "varsyntax_calc1.y"
1341 {
1342 vreg[yystack.l_mark[-3].ival] = yystack.l_mark[-1].vval;
1343 }
1344 break;
1345 case 7:
1346 #line 75 "varsyntax_calc1.y"
1347 {
1348 yyerrok;
1349 }
1350 break;
1351 case 9:
1352 #line 82 "varsyntax_calc1.y"
1353 {
1354 yyval.dval = dreg[yystack.l_mark[0].ival]; /* $$ & $1 are sufficient here*/
1355 }
1356 break;
1357 case 10:
1358 #line 86 "varsyntax_calc1.y"
1359 {
1360 yyval.dval = yystack.l_mark[-2].dval + yystack.l_mark[0].dval;
1361 }
1362 break;
1363 case 11:
1364 #line 90 "varsyntax_calc1.y"
1365 {
1366 yyval.dval = yystack.l_mark[-2].dval - yystack.l_mark[0].dval;
1367 }
1368 break;
1369 case 12:
1370 #line 94 "varsyntax_calc1.y"
1371 {
1372 yyval.dval = yystack.l_mark[-2].dval * yystack.l_mark[0].dval;
1373 }
1374 break;
1375 case 13:
1376 #line 98 "varsyntax_calc1.y"
1377 {
1378 yyval.dval = yystack.l_mark[-2].dval / yystack.l_mark[0].dval;
1379 }
1380 break;
1381 case 14:
1382 #line 102 "varsyntax_calc1.y"
1383 {
1384 yyval.dval = -yystack.l_mark[0].dval;
1385 }
1386 break;
1387 case 15:
1388 #line 106 "varsyntax_calc1.y"
1389 {
1390 yyval.dval = yystack.l_mark[-1].dval;
1391 }
1392 break;
1393 case 16:
1394 #line 112 "varsyntax_calc1.y"
1395 {
1396 yyval.vval.hi = yyval.vval.lo = yystack.l_mark[0].dval;
1397 }
1398 break;
1399 case 17:
1400 #line 116 "varsyntax_calc1.y"
1401 {
1402 yyval.vval.lo = yystack.l_mark[-3].dval;
1403 yyval.vval.hi = yystack.l_mark[-1].dval;
1404 if ( yyval.vval.lo > yyval.vval.hi )
1405 {
1406 (void) printf("interval out of order\n");
1407 YYERROR;
1408 }
1409 }
1410 break;
1411 case 18:
1412 #line 126 "varsyntax_calc1.y"
1413 {
1414 yyval.vval = vreg[yystack.l_mark[0].ival];
1415 }
1416 break;
1417 case 19:
1418 #line 130 "varsyntax_calc1.y"
1419 {
1420 yyval.vval.hi = yystack.l_mark[-2].vval.hi + yystack.l_mark[0].vval.hi;
1421 yyval.vval.lo = yystack.l_mark[-2].vval.lo + yystack.l_mark[0].vval.lo;
1422 }
1423 break;
1424 case 20:
1425 #line 135 "varsyntax_calc1.y"
1426 {
1427 yyval.vval.hi = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.hi;
1428 yyval.vval.lo = yystack.l_mark[-2].dval + yystack.l_mark[0].vval.lo;
1429 }
1430 break;
1431 case 21:
1432 #line 140 "varsyntax_calc1.y"
1433 {
1434 yyval.vval.hi = yystack.l_mark[-2].vval.hi - yystack.l_mark[0].vval.lo;
1435 yyval.vval.lo = yystack.l_mark[-2].vval.lo - yystack.l_mark[0].vval.hi;
1436 }
1437 break;
1438 case 22:
1439 #line 145 "varsyntax_calc1.y"
1440 {
1441 yyval.vval.hi = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.lo;
1442 yyval.vval.lo = yystack.l_mark[-2].dval - yystack.l_mark[0].vval.hi;
1443 }
1444 break;
1445 case 23:
1446 #line 150 "varsyntax_calc1.y"
1447 {
1448 yyval.vval = vmul( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1449 }
1450 break;
1451 case 24:
1452 #line 154 "varsyntax_calc1.y"
1453 {
1454 yyval.vval = vmul (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1455 }
1456 break;
1457 case 25:
1458 #line 158 "varsyntax_calc1.y"
1459 {
1460 if (dcheck(yystack.l_mark[0].vval)) YYERROR;
1461 yyval.vval = vdiv ( yystack.l_mark[-2].vval.lo, yystack.l_mark[-2].vval.hi, yystack.l_mark[0].vval );
1462 }
1463 break;
1464 case 26:
1465 #line 163 "varsyntax_calc1.y"
1466 {
1467 if (dcheck ( yystack.l_mark[0].vval )) YYERROR;
1468 yyval.vval = vdiv (yystack.l_mark[-2].dval, yystack.l_mark[-2].dval, yystack.l_mark[0].vval );
1469 }
1470 break;
1471 case 27:
1472 #line 168 "varsyntax_calc1.y"
1473 {
1474 yyval.vval.hi = -yystack.l_mark[0].vval.lo;
1475 yyval.vval.lo = -yystack.l_mark[0].vval.hi;
1476 }
1477 break;
1478 case 28:
1479 #line 173 "varsyntax_calc1.y"
1480 {
1481 yyval.vval = yystack.l_mark[-1].vval;
1482 }
1483 break;
1484 #line 1483 "varsyntax_calc1.tab.c"
1485 default:
1486 break;
1487 }
1488 yystack.s_mark -= yym;
1489 yystate = *yystack.s_mark;
1490 yystack.l_mark -= yym;
1491 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1492 yystack.p_mark -= yym;
1493 #endif
1494 yym = yylhs[yyn];
1495 if (yystate == 0 && yym == 0)
1496 {
1497 #if YYDEBUG
1498 if (yydebug)
1499 {
1500 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1501 #ifdef YYSTYPE_TOSTRING
1502 #if YYBTYACC
1503 if (!yytrial)
1504 #endif /* YYBTYACC */
1505 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[YYFINAL], yyval));
1506 #endif
1507 fprintf(stderr, "shifting from state 0 to final state %d\n", YYFINAL);
1508 }
1509 #endif
1510 yystate = YYFINAL;
1511 *++yystack.s_mark = YYFINAL;
1512 *++yystack.l_mark = yyval;
1513 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1514 *++yystack.p_mark = yyloc;
1515 #endif
1516 if (yychar < 0)
1517 {
1518 #if YYBTYACC
1519 do {
1520 if (yylvp < yylve)
1521 {
1522 /* we're currently re-reading tokens */
1523 yylval = *yylvp++;
1524 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1525 yylloc = *yylpp++;
1526 #endif
1527 yychar = *yylexp++;
1528 break;
1529 }
1530 if (yyps->save)
1531 {
1532 /* in trial mode; save scanner results for future parse attempts */
1533 if (yylvp == yylvlim)
1534 { /* Enlarge lexical value queue */
1535 size_t p = (size_t) (yylvp - yylvals);
1536 size_t s = (size_t) (yylvlim - yylvals);
1537
1538 s += YYLVQUEUEGROWTH;
1539 if ((yylexemes = realloc(yylexemes, s * sizeof(YYINT))) == NULL)
1540 goto yyenomem;
1541 if ((yylvals = realloc(yylvals, s * sizeof(YYSTYPE))) == NULL)
1542 goto yyenomem;
1543 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1544 if ((yylpsns = realloc(yylpsns, s * sizeof(YYLTYPE))) == NULL)
1545 goto yyenomem;
1546 #endif
1547 yylvp = yylve = yylvals + p;
1548 yylvlim = yylvals + s;
1549 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1550 yylpp = yylpe = yylpsns + p;
1551 yylplim = yylpsns + s;
1552 #endif
1553 yylexp = yylexemes + p;
1554 }
1555 *yylexp = (YYINT) YYLEX;
1556 *yylvp++ = yylval;
1557 yylve++;
1558 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1559 *yylpp++ = yylloc;
1560 yylpe++;
1561 #endif
1562 yychar = *yylexp++;
1563 break;
1564 }
1565 /* normal operation, no conflict encountered */
1566 #endif /* YYBTYACC */
1567 yychar = YYLEX;
1568 #if YYBTYACC
1569 } while (0);
1570 #endif /* YYBTYACC */
1571 if (yychar < 0) yychar = YYEOF;
1572 #if YYDEBUG
1573 if (yydebug)
1574 {
1575 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
1576 fprintf(stderr, "%s[%d]: state %d, reading token %d (%s)\n",
1577 YYDEBUGSTR, yydepth, YYFINAL, yychar, yys);
1578 }
1579 #endif
1580 }
1581 if (yychar == YYEOF) goto yyaccept;
1582 goto yyloop;
1583 }
1584 if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
1585 yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
1586 yystate = yytable[yyn];
1587 else
1588 yystate = yydgoto[yym];
1589 #if YYDEBUG
1590 if (yydebug)
1591 {
1592 fprintf(stderr, "%s[%d]: after reduction, ", YYDEBUGSTR, yydepth);
1593 #ifdef YYSTYPE_TOSTRING
1594 #if YYBTYACC
1595 if (!yytrial)
1596 #endif /* YYBTYACC */
1597 fprintf(stderr, "result is <%s>, ", YYSTYPE_TOSTRING(yystos[yystate], yyval));
1598 #endif
1599 fprintf(stderr, "shifting from state %d to state %d\n", *yystack.s_mark, yystate);
1600 }
1601 #endif
1602 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
1603 *++yystack.s_mark = (YYINT) yystate;
1604 *++yystack.l_mark = yyval;
1605 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1606 *++yystack.p_mark = yyloc;
1607 #endif
1608 goto yyloop;
1609 #if YYBTYACC
1610
1611 /* Reduction declares that this path is valid. Set yypath and do a full parse */
1612 yyvalid:
1613 if (yypath) YYABORT;
1614 while (yyps->save)
1615 {
1616 YYParseState *save = yyps->save;
1617 yyps->save = save->save;
1618 save->save = yypath;
1619 yypath = save;
1620 }
1621 #if YYDEBUG
1622 if (yydebug)
1623 fprintf(stderr, "%s[%d]: state %d, CONFLICT trial successful, backtracking to state %d, %d tokens\n",
1624 YYDEBUGSTR, yydepth, yystate, yypath->state, (int)(yylvp - yylvals - yypath->lexeme));
1625 #endif
1626 if (yyerrctx)
1627 {
1628 yyFreeState(yyerrctx);
1629 yyerrctx = NULL;
1630 }
1631 yylvp = yylvals + yypath->lexeme;
1632 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1633 yylpp = yylpsns + yypath->lexeme;
1634 #endif
1635 yylexp = yylexemes + yypath->lexeme;
1636 yychar = YYEMPTY;
1637 yystack.s_mark = yystack.s_base + (yypath->yystack.s_mark - yypath->yystack.s_base);
1638 memcpy (yystack.s_base, yypath->yystack.s_base, (size_t) (yystack.s_mark - yystack.s_base + 1) * sizeof(YYINT));
1639 yystack.l_mark = yystack.l_base + (yypath->yystack.l_mark - yypath->yystack.l_base);
1640 memcpy (yystack.l_base, yypath->yystack.l_base, (size_t) (yystack.l_mark - yystack.l_base + 1) * sizeof(YYSTYPE));
1641 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1642 yystack.p_mark = yystack.p_base + (yypath->yystack.p_mark - yypath->yystack.p_base);
1643 memcpy (yystack.p_base, yypath->yystack.p_base, (size_t) (yystack.p_mark - yystack.p_base + 1) * sizeof(YYLTYPE));
1644 #endif
1645 yystate = yypath->state;
1646 goto yyloop;
1647 #endif /* YYBTYACC */
1648
1649 yyoverflow:
1650 YYERROR_CALL("yacc stack overflow");
1651 #if YYBTYACC
1652 goto yyabort_nomem;
1653 yyenomem:
1654 YYERROR_CALL("memory exhausted");
1655 yyabort_nomem:
1656 #endif /* YYBTYACC */
1657 yyresult = 2;
1658 goto yyreturn;
1659
1660 yyabort:
1661 yyresult = 1;
1662 goto yyreturn;
1663
1664 yyaccept:
1665 #if YYBTYACC
1666 if (yyps->save) goto yyvalid;
1667 #endif /* YYBTYACC */
1668 yyresult = 0;
1669
1670 yyreturn:
1671 #if defined(YYDESTRUCT_CALL)
1672 if (yychar != YYEOF && yychar != YYEMPTY)
1673 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1674 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval, &yylloc);
1675 #else
1676 YYDESTRUCT_CALL("cleanup: discarding token", yychar, &yylval);
1677 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1678
1679 {
1680 YYSTYPE *pv;
1681 #if defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED)
1682 YYLTYPE *pp;
1683
1684 for (pv = yystack.l_base, pp = yystack.p_base; pv <= yystack.l_mark; ++pv, ++pp)
1685 YYDESTRUCT_CALL("cleanup: discarding state",
1686 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv, pp);
1687 #else
1688 for (pv = yystack.l_base; pv <= yystack.l_mark; ++pv)
1689 YYDESTRUCT_CALL("cleanup: discarding state",
1690 yystos[*(yystack.s_base + (pv - yystack.l_base))], pv);
1691 #endif /* defined(YYLTYPE) || defined(YYLTYPE_IS_DECLARED) */
1692 }
1693 #endif /* defined(YYDESTRUCT_CALL) */
1694
1695 #if YYBTYACC
1696 if (yyerrctx)
1697 {
1698 yyFreeState(yyerrctx);
1699 yyerrctx = NULL;
1700 }
1701 while (yyps)
1702 {
1703 YYParseState *save = yyps;
1704 yyps = save->save;
1705 save->save = NULL;
1706 yyFreeState(save);
1707 }
1708 while (yypath)
1709 {
1710 YYParseState *save = yypath;
1711 yypath = save->save;
1712 save->save = NULL;
1713 yyFreeState(save);
1714 }
1715 #endif /* YYBTYACC */
1716 yyfreestack(&yystack);
1717 return (yyresult);
1718 }
1719