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