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