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