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