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