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