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