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