defines3.calc.c revision 1.1 1 1.1 christos /* $NetBSD: defines3.calc.c,v 1.1 2019/10/06 23:19:26 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 christos #define YYMAJOR 1
9 1.1 christos #define YYMINOR 9
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 #define YYPREFIX "yy"
19 1.1 christos
20 1.1 christos #define YYPURE 0
21 1.1 christos
22 1.1 christos #line 2 "calc.y"
23 1.1 christos # include <stdio.h>
24 1.1 christos # include <ctype.h>
25 1.1 christos
26 1.1 christos int regs[26];
27 1.1 christos int base;
28 1.1 christos
29 1.1 christos extern int yylex(void);
30 1.1 christos static void yyerror(const char *s);
31 1.1 christos
32 1.1 christos #line 31 "prefix.tab.c"
33 1.1 christos
34 1.1 christos #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
35 1.1 christos /* Default: YYSTYPE is the semantic value type. */
36 1.1 christos typedef int YYSTYPE;
37 1.1 christos # define YYSTYPE_IS_DECLARED 1
38 1.1 christos #endif
39 1.1 christos
40 1.1 christos /* compatibility with bison */
41 1.1 christos #ifdef YYPARSE_PARAM
42 1.1 christos /* compatibility with FreeBSD */
43 1.1 christos # ifdef YYPARSE_PARAM_TYPE
44 1.1 christos # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
45 1.1 christos # else
46 1.1 christos # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
47 1.1 christos # endif
48 1.1 christos #else
49 1.1 christos # define YYPARSE_DECL() yyparse(void)
50 1.1 christos #endif
51 1.1 christos
52 1.1 christos /* Parameters sent to lex. */
53 1.1 christos #ifdef YYLEX_PARAM
54 1.1 christos # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
55 1.1 christos # define YYLEX yylex(YYLEX_PARAM)
56 1.1 christos #else
57 1.1 christos # define YYLEX_DECL() yylex(void)
58 1.1 christos # define YYLEX yylex()
59 1.1 christos #endif
60 1.1 christos
61 1.1 christos #if !(defined(yylex) || defined(YYSTATE))
62 1.1 christos int YYLEX_DECL();
63 1.1 christos #endif
64 1.1 christos
65 1.1 christos /* Parameters sent to yyerror. */
66 1.1 christos #ifndef YYERROR_DECL
67 1.1 christos #define YYERROR_DECL() yyerror(const char *s)
68 1.1 christos #endif
69 1.1 christos #ifndef YYERROR_CALL
70 1.1 christos #define YYERROR_CALL(msg) yyerror(msg)
71 1.1 christos #endif
72 1.1 christos
73 1.1 christos extern int YYPARSE_DECL();
74 1.1 christos
75 1.1 christos #define DIGIT 257
76 1.1 christos #define LETTER 258
77 1.1 christos #define UMINUS 259
78 1.1 christos #define YYERRCODE 256
79 1.1 christos typedef short YYINT;
80 1.1 christos static const YYINT yylhs[] = { -1,
81 1.1 christos 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
82 1.1 christos 2, 2, 2, 2, 2, 2, 3, 3,
83 1.1 christos };
84 1.1 christos static const YYINT yylen[] = { 2,
85 1.1 christos 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
86 1.1 christos 3, 3, 3, 2, 1, 1, 1, 2,
87 1.1 christos };
88 1.1 christos static const YYINT yydefred[] = { 1,
89 1.1 christos 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
90 1.1 christos 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
91 1.1 christos 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
92 1.1 christos 10, 11,
93 1.1 christos };
94 1.1 christos static const YYINT yydgoto[] = { 1,
95 1.1 christos 7, 8, 9,
96 1.1 christos };
97 1.1 christos static const YYINT yysindex[] = { 0,
98 1.1 christos -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
99 1.1 christos -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
100 1.1 christos -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
101 1.1 christos 0, 0,
102 1.1 christos };
103 1.1 christos static const YYINT yyrindex[] = { 0,
104 1.1 christos 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
105 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106 1.1 christos 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
107 1.1 christos 0, 0,
108 1.1 christos };
109 1.1 christos static const YYINT yygindex[] = { 0,
110 1.1 christos 0, 65, 0,
111 1.1 christos };
112 1.1 christos #define YYTABLESIZE 220
113 1.1 christos static const YYINT yytable[] = { 6,
114 1.1 christos 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
115 1.1 christos 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
116 1.1 christos 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
117 1.1 christos 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
118 1.1 christos 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
119 1.1 christos 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
120 1.1 christos 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
121 1.1 christos 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
122 1.1 christos 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
123 1.1 christos 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
124 1.1 christos 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
125 1.1 christos 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
126 1.1 christos 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
127 1.1 christos 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
128 1.1 christos 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
129 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
130 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
131 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
133 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
134 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
135 1.1 christos 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
136 1.1 christos };
137 1.1 christos static const YYINT yycheck[] = { 40,
138 1.1 christos 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
139 1.1 christos 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
140 1.1 christos -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
141 1.1 christos -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
142 1.1 christos -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
143 1.1 christos 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
144 1.1 christos -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
145 1.1 christos 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
146 1.1 christos 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
147 1.1 christos -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
148 1.1 christos -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
149 1.1 christos -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
150 1.1 christos -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
151 1.1 christos -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
152 1.1 christos -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
153 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
154 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
155 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
156 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
157 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
158 1.1 christos -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
159 1.1 christos -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
160 1.1 christos };
161 1.1 christos #define YYFINAL 1
162 1.1 christos #ifndef YYDEBUG
163 1.1 christos #define YYDEBUG 0
164 1.1 christos #endif
165 1.1 christos #define YYMAXTOKEN 259
166 1.1 christos #define YYUNDFTOKEN 265
167 1.1 christos #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
168 1.1 christos #if YYDEBUG
169 1.1 christos static const char *const yyname[] = {
170 1.1 christos
171 1.1 christos "end-of-file",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,
172 1.1 christos 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
173 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,
174 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,
175 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,
176 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,
177 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,
178 1.1 christos 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
179 1.1 christos };
180 1.1 christos static const char *const yyrule[] = {
181 1.1 christos "$accept : list",
182 1.1 christos "list :",
183 1.1 christos "list : list stat '\\n'",
184 1.1 christos "list : list error '\\n'",
185 1.1 christos "stat : expr",
186 1.1 christos "stat : LETTER '=' expr",
187 1.1 christos "expr : '(' expr ')'",
188 1.1 christos "expr : expr '+' expr",
189 1.1 christos "expr : expr '-' expr",
190 1.1 christos "expr : expr '*' expr",
191 1.1 christos "expr : expr '/' expr",
192 1.1 christos "expr : expr '%' expr",
193 1.1 christos "expr : expr '&' expr",
194 1.1 christos "expr : expr '|' expr",
195 1.1 christos "expr : '-' expr",
196 1.1 christos "expr : LETTER",
197 1.1 christos "expr : number",
198 1.1 christos "number : DIGIT",
199 1.1 christos "number : number DIGIT",
200 1.1 christos
201 1.1 christos };
202 1.1 christos #endif
203 1.1 christos
204 1.1 christos #if YYDEBUG
205 1.1 christos int yydebug;
206 1.1 christos #endif
207 1.1 christos
208 1.1 christos int yyerrflag;
209 1.1 christos int yychar;
210 1.1 christos YYSTYPE yyval;
211 1.1 christos YYSTYPE yylval;
212 1.1 christos int yynerrs;
213 1.1 christos
214 1.1 christos /* define the initial stack-sizes */
215 1.1 christos #ifdef YYSTACKSIZE
216 1.1 christos #undef YYMAXDEPTH
217 1.1 christos #define YYMAXDEPTH YYSTACKSIZE
218 1.1 christos #else
219 1.1 christos #ifdef YYMAXDEPTH
220 1.1 christos #define YYSTACKSIZE YYMAXDEPTH
221 1.1 christos #else
222 1.1 christos #define YYSTACKSIZE 10000
223 1.1 christos #define YYMAXDEPTH 10000
224 1.1 christos #endif
225 1.1 christos #endif
226 1.1 christos
227 1.1 christos #define YYINITSTACKSIZE 200
228 1.1 christos
229 1.1 christos typedef struct {
230 1.1 christos unsigned stacksize;
231 1.1 christos YYINT *s_base;
232 1.1 christos YYINT *s_mark;
233 1.1 christos YYINT *s_last;
234 1.1 christos YYSTYPE *l_base;
235 1.1 christos YYSTYPE *l_mark;
236 1.1 christos } YYSTACKDATA;
237 1.1 christos /* variables for the parser stack */
238 1.1 christos static YYSTACKDATA yystack;
239 1.1 christos #line 66 "calc.y"
240 1.1 christos /* start of programs */
241 1.1 christos
242 1.1 christos int
243 1.1 christos main (void)
244 1.1 christos {
245 1.1 christos while(!feof(stdin)) {
246 1.1 christos yyparse();
247 1.1 christos }
248 1.1 christos return 0;
249 1.1 christos }
250 1.1 christos
251 1.1 christos static void
252 1.1 christos yyerror(const char *s)
253 1.1 christos {
254 1.1 christos fprintf(stderr, "%s\n", s);
255 1.1 christos }
256 1.1 christos
257 1.1 christos int
258 1.1 christos yylex(void)
259 1.1 christos {
260 1.1 christos /* lexical analysis routine */
261 1.1 christos /* returns LETTER for a lower case letter, yylval = 0 through 25 */
262 1.1 christos /* return DIGIT for a digit, yylval = 0 through 9 */
263 1.1 christos /* all other characters are returned immediately */
264 1.1 christos
265 1.1 christos int c;
266 1.1 christos
267 1.1 christos while( (c=getchar()) == ' ' ) { /* skip blanks */ }
268 1.1 christos
269 1.1 christos /* c is now nonblank */
270 1.1 christos
271 1.1 christos if( islower( c )) {
272 1.1 christos yylval = c - 'a';
273 1.1 christos return ( LETTER );
274 1.1 christos }
275 1.1 christos if( isdigit( c )) {
276 1.1 christos yylval = c - '0';
277 1.1 christos return ( DIGIT );
278 1.1 christos }
279 1.1 christos return( c );
280 1.1 christos }
281 1.1 christos #line 280 "prefix.tab.c"
282 1.1 christos
283 1.1 christos #if YYDEBUG
284 1.1 christos #include <stdio.h> /* needed for printf */
285 1.1 christos #endif
286 1.1 christos
287 1.1 christos #include <stdlib.h> /* needed for malloc, etc */
288 1.1 christos #include <string.h> /* needed for memset */
289 1.1 christos
290 1.1 christos /* allocate initial stack or double stack size, up to YYMAXDEPTH */
291 1.1 christos static int yygrowstack(YYSTACKDATA *data)
292 1.1 christos {
293 1.1 christos int i;
294 1.1 christos unsigned newsize;
295 1.1 christos YYINT *newss;
296 1.1 christos YYSTYPE *newvs;
297 1.1 christos
298 1.1 christos if ((newsize = data->stacksize) == 0)
299 1.1 christos newsize = YYINITSTACKSIZE;
300 1.1 christos else if (newsize >= YYMAXDEPTH)
301 1.1 christos return YYENOMEM;
302 1.1 christos else if ((newsize *= 2) > YYMAXDEPTH)
303 1.1 christos newsize = YYMAXDEPTH;
304 1.1 christos
305 1.1 christos i = (int) (data->s_mark - data->s_base);
306 1.1 christos newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
307 1.1 christos if (newss == 0)
308 1.1 christos return YYENOMEM;
309 1.1 christos
310 1.1 christos data->s_base = newss;
311 1.1 christos data->s_mark = newss + i;
312 1.1 christos
313 1.1 christos newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
314 1.1 christos if (newvs == 0)
315 1.1 christos return YYENOMEM;
316 1.1 christos
317 1.1 christos data->l_base = newvs;
318 1.1 christos data->l_mark = newvs + i;
319 1.1 christos
320 1.1 christos data->stacksize = newsize;
321 1.1 christos data->s_last = data->s_base + newsize - 1;
322 1.1 christos return 0;
323 1.1 christos }
324 1.1 christos
325 1.1 christos #if YYPURE || defined(YY_NO_LEAKS)
326 1.1 christos static void yyfreestack(YYSTACKDATA *data)
327 1.1 christos {
328 1.1 christos free(data->s_base);
329 1.1 christos free(data->l_base);
330 1.1 christos memset(data, 0, sizeof(*data));
331 1.1 christos }
332 1.1 christos #else
333 1.1 christos #define yyfreestack(data) /* nothing */
334 1.1 christos #endif
335 1.1 christos
336 1.1 christos #define YYABORT goto yyabort
337 1.1 christos #define YYREJECT goto yyabort
338 1.1 christos #define YYACCEPT goto yyaccept
339 1.1 christos #define YYERROR goto yyerrlab
340 1.1 christos
341 1.1 christos int
342 1.1 christos YYPARSE_DECL()
343 1.1 christos {
344 1.1 christos int yym, yyn, yystate;
345 1.1 christos #if YYDEBUG
346 1.1 christos const char *yys;
347 1.1 christos
348 1.1 christos if ((yys = getenv("YYDEBUG")) != 0)
349 1.1 christos {
350 1.1 christos yyn = *yys;
351 1.1 christos if (yyn >= '0' && yyn <= '9')
352 1.1 christos yydebug = yyn - '0';
353 1.1 christos }
354 1.1 christos #endif
355 1.1 christos
356 1.1 christos yym = 0;
357 1.1 christos yyn = 0;
358 1.1 christos yynerrs = 0;
359 1.1 christos yyerrflag = 0;
360 1.1 christos yychar = YYEMPTY;
361 1.1 christos yystate = 0;
362 1.1 christos
363 1.1 christos #if YYPURE
364 1.1 christos memset(&yystack, 0, sizeof(yystack));
365 1.1 christos #endif
366 1.1 christos
367 1.1 christos if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
368 1.1 christos yystack.s_mark = yystack.s_base;
369 1.1 christos yystack.l_mark = yystack.l_base;
370 1.1 christos yystate = 0;
371 1.1 christos *yystack.s_mark = 0;
372 1.1 christos
373 1.1 christos yyloop:
374 1.1 christos if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
375 1.1 christos if (yychar < 0)
376 1.1 christos {
377 1.1 christos yychar = YYLEX;
378 1.1 christos if (yychar < 0) yychar = YYEOF;
379 1.1 christos #if YYDEBUG
380 1.1 christos if (yydebug)
381 1.1 christos {
382 1.1 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
383 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
384 1.1 christos YYPREFIX, yystate, yychar, yys);
385 1.1 christos }
386 1.1 christos #endif
387 1.1 christos }
388 1.1 christos if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
389 1.1 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
390 1.1 christos {
391 1.1 christos #if YYDEBUG
392 1.1 christos if (yydebug)
393 1.1 christos printf("%sdebug: state %d, shifting to state %d\n",
394 1.1 christos YYPREFIX, yystate, yytable[yyn]);
395 1.1 christos #endif
396 1.1 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
397 1.1 christos yystate = yytable[yyn];
398 1.1 christos *++yystack.s_mark = yytable[yyn];
399 1.1 christos *++yystack.l_mark = yylval;
400 1.1 christos yychar = YYEMPTY;
401 1.1 christos if (yyerrflag > 0) --yyerrflag;
402 1.1 christos goto yyloop;
403 1.1 christos }
404 1.1 christos if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
405 1.1 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
406 1.1 christos {
407 1.1 christos yyn = yytable[yyn];
408 1.1 christos goto yyreduce;
409 1.1 christos }
410 1.1 christos if (yyerrflag != 0) goto yyinrecovery;
411 1.1 christos
412 1.1 christos YYERROR_CALL("syntax error");
413 1.1 christos
414 1.1 christos goto yyerrlab; /* redundant goto avoids 'unused label' warning */
415 1.1 christos yyerrlab:
416 1.1 christos ++yynerrs;
417 1.1 christos
418 1.1 christos yyinrecovery:
419 1.1 christos if (yyerrflag < 3)
420 1.1 christos {
421 1.1 christos yyerrflag = 3;
422 1.1 christos for (;;)
423 1.1 christos {
424 1.1 christos if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
425 1.1 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
426 1.1 christos {
427 1.1 christos #if YYDEBUG
428 1.1 christos if (yydebug)
429 1.1 christos printf("%sdebug: state %d, error recovery shifting\
430 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
431 1.1 christos #endif
432 1.1 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
433 1.1 christos yystate = yytable[yyn];
434 1.1 christos *++yystack.s_mark = yytable[yyn];
435 1.1 christos *++yystack.l_mark = yylval;
436 1.1 christos goto yyloop;
437 1.1 christos }
438 1.1 christos else
439 1.1 christos {
440 1.1 christos #if YYDEBUG
441 1.1 christos if (yydebug)
442 1.1 christos printf("%sdebug: error recovery discarding state %d\n",
443 1.1 christos YYPREFIX, *yystack.s_mark);
444 1.1 christos #endif
445 1.1 christos if (yystack.s_mark <= yystack.s_base) goto yyabort;
446 1.1 christos --yystack.s_mark;
447 1.1 christos --yystack.l_mark;
448 1.1 christos }
449 1.1 christos }
450 1.1 christos }
451 1.1 christos else
452 1.1 christos {
453 1.1 christos if (yychar == YYEOF) goto yyabort;
454 1.1 christos #if YYDEBUG
455 1.1 christos if (yydebug)
456 1.1 christos {
457 1.1 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
458 1.1 christos printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
459 1.1 christos YYPREFIX, yystate, yychar, yys);
460 1.1 christos }
461 1.1 christos #endif
462 1.1 christos yychar = YYEMPTY;
463 1.1 christos goto yyloop;
464 1.1 christos }
465 1.1 christos
466 1.1 christos yyreduce:
467 1.1 christos #if YYDEBUG
468 1.1 christos if (yydebug)
469 1.1 christos printf("%sdebug: state %d, reducing by rule %d (%s)\n",
470 1.1 christos YYPREFIX, yystate, yyn, yyrule[yyn]);
471 1.1 christos #endif
472 1.1 christos yym = yylen[yyn];
473 1.1 christos if (yym > 0)
474 1.1 christos yyval = yystack.l_mark[1-yym];
475 1.1 christos else
476 1.1 christos memset(&yyval, 0, sizeof yyval);
477 1.1 christos
478 1.1 christos switch (yyn)
479 1.1 christos {
480 1.1 christos case 3:
481 1.1 christos #line 28 "calc.y"
482 1.1 christos { yyerrok ; }
483 1.1 christos break;
484 1.1 christos case 4:
485 1.1 christos #line 32 "calc.y"
486 1.1 christos { printf("%d\n",yystack.l_mark[0]);}
487 1.1 christos break;
488 1.1 christos case 5:
489 1.1 christos #line 34 "calc.y"
490 1.1 christos { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
491 1.1 christos break;
492 1.1 christos case 6:
493 1.1 christos #line 38 "calc.y"
494 1.1 christos { yyval = yystack.l_mark[-1]; }
495 1.1 christos break;
496 1.1 christos case 7:
497 1.1 christos #line 40 "calc.y"
498 1.1 christos { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
499 1.1 christos break;
500 1.1 christos case 8:
501 1.1 christos #line 42 "calc.y"
502 1.1 christos { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
503 1.1 christos break;
504 1.1 christos case 9:
505 1.1 christos #line 44 "calc.y"
506 1.1 christos { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
507 1.1 christos break;
508 1.1 christos case 10:
509 1.1 christos #line 46 "calc.y"
510 1.1 christos { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
511 1.1 christos break;
512 1.1 christos case 11:
513 1.1 christos #line 48 "calc.y"
514 1.1 christos { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
515 1.1 christos break;
516 1.1 christos case 12:
517 1.1 christos #line 50 "calc.y"
518 1.1 christos { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
519 1.1 christos break;
520 1.1 christos case 13:
521 1.1 christos #line 52 "calc.y"
522 1.1 christos { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
523 1.1 christos break;
524 1.1 christos case 14:
525 1.1 christos #line 54 "calc.y"
526 1.1 christos { yyval = - yystack.l_mark[0]; }
527 1.1 christos break;
528 1.1 christos case 15:
529 1.1 christos #line 56 "calc.y"
530 1.1 christos { yyval = regs[yystack.l_mark[0]]; }
531 1.1 christos break;
532 1.1 christos case 17:
533 1.1 christos #line 61 "calc.y"
534 1.1 christos { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
535 1.1 christos break;
536 1.1 christos case 18:
537 1.1 christos #line 63 "calc.y"
538 1.1 christos { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
539 1.1 christos break;
540 1.1 christos #line 539 "prefix.tab.c"
541 1.1 christos }
542 1.1 christos yystack.s_mark -= yym;
543 1.1 christos yystate = *yystack.s_mark;
544 1.1 christos yystack.l_mark -= yym;
545 1.1 christos yym = yylhs[yyn];
546 1.1 christos if (yystate == 0 && yym == 0)
547 1.1 christos {
548 1.1 christos #if YYDEBUG
549 1.1 christos if (yydebug)
550 1.1 christos printf("%sdebug: after reduction, shifting from state 0 to\
551 1.1 christos state %d\n", YYPREFIX, YYFINAL);
552 1.1 christos #endif
553 1.1 christos yystate = YYFINAL;
554 1.1 christos *++yystack.s_mark = YYFINAL;
555 1.1 christos *++yystack.l_mark = yyval;
556 1.1 christos if (yychar < 0)
557 1.1 christos {
558 1.1 christos yychar = YYLEX;
559 1.1 christos if (yychar < 0) yychar = YYEOF;
560 1.1 christos #if YYDEBUG
561 1.1 christos if (yydebug)
562 1.1 christos {
563 1.1 christos if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
564 1.1 christos printf("%sdebug: state %d, reading %d (%s)\n",
565 1.1 christos YYPREFIX, YYFINAL, yychar, yys);
566 1.1 christos }
567 1.1 christos #endif
568 1.1 christos }
569 1.1 christos if (yychar == YYEOF) goto yyaccept;
570 1.1 christos goto yyloop;
571 1.1 christos }
572 1.1 christos if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
573 1.1 christos yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
574 1.1 christos yystate = yytable[yyn];
575 1.1 christos else
576 1.1 christos yystate = yydgoto[yym];
577 1.1 christos #if YYDEBUG
578 1.1 christos if (yydebug)
579 1.1 christos printf("%sdebug: after reduction, shifting from state %d \
580 1.1 christos to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
581 1.1 christos #endif
582 1.1 christos if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
583 1.1 christos *++yystack.s_mark = (YYINT) yystate;
584 1.1 christos *++yystack.l_mark = yyval;
585 1.1 christos goto yyloop;
586 1.1 christos
587 1.1 christos yyoverflow:
588 1.1 christos YYERROR_CALL("yacc stack overflow");
589 1.1 christos
590 1.1 christos yyabort:
591 1.1 christos yyfreestack(&yystack);
592 1.1 christos return (1);
593 1.1 christos
594 1.1 christos yyaccept:
595 1.1 christos yyfreestack(&yystack);
596 1.1 christos return (0);
597 1.1 christos }
598