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_calc3_parse
19 #endif /* yyparse */
20 
21 #ifndef yylex
22 #define yylex      quote_calc3_lex
23 #endif /* yylex */
24 
25 #ifndef yyerror
26 #define yyerror    quote_calc3_error
27 #endif /* yyerror */
28 
29 #ifndef yychar
30 #define yychar     quote_calc3_char
31 #endif /* yychar */
32 
33 #ifndef yyval
34 #define yyval      quote_calc3_val
35 #endif /* yyval */
36 
37 #ifndef yylval
38 #define yylval     quote_calc3_lval
39 #endif /* yylval */
40 
41 #ifndef yydebug
42 #define yydebug    quote_calc3_debug
43 #endif /* yydebug */
44 
45 #ifndef yynerrs
46 #define yynerrs    quote_calc3_nerrs
47 #endif /* yynerrs */
48 
49 #ifndef yyerrflag
50 #define yyerrflag  quote_calc3_errflag
51 #endif /* yyerrflag */
52 
53 #ifndef yylhs
54 #define yylhs      quote_calc3_lhs
55 #endif /* yylhs */
56 
57 #ifndef yylen
58 #define yylen      quote_calc3_len
59 #endif /* yylen */
60 
61 #ifndef yydefred
62 #define yydefred   quote_calc3_defred
63 #endif /* yydefred */
64 
65 #ifndef yydgoto
66 #define yydgoto    quote_calc3_dgoto
67 #endif /* yydgoto */
68 
69 #ifndef yysindex
70 #define yysindex   quote_calc3_sindex
71 #endif /* yysindex */
72 
73 #ifndef yyrindex
74 #define yyrindex   quote_calc3_rindex
75 #endif /* yyrindex */
76 
77 #ifndef yygindex
78 #define yygindex   quote_calc3_gindex
79 #endif /* yygindex */
80 
81 #ifndef yytable
82 #define yytable    quote_calc3_table
83 #endif /* yytable */
84 
85 #ifndef yycheck
86 #define yycheck    quote_calc3_check
87 #endif /* yycheck */
88 
89 #ifndef yyname
90 #define yyname     quote_calc3_name
91 #endif /* yyname */
92 
93 #ifndef yyrule
94 #define yyrule     quote_calc3_rule
95 #endif /* yyrule */
96 #define YYPREFIX "quote_calc3_"
97 
98 #define YYPURE 0
99 
100 #line 2 "quote_calc3.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_calc3.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_calc3_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_calc3_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_calc3_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_calc3_dgoto[] = {                1,
175     7,    8,    9,
176 };
177 static const YYINT quote_calc3_sindex[] = {               0,
178   -38,    5,  -36,    0,  -51,  -36,    7, -121, -248,    0,
179     0, -243,  -36,  -22,    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_calc3_rindex[] = {               0,
184     0,    0,    0,    0,   -9,    0,    0,   13,  -10,    0,
185     0,   -5,    0,    0,    0,    0,    0,    0,    0,    0,
186     0,    0,    0,   15,    0,   -3,   -2,   -1,    1,    2,
187     3,   -4,
188 };
189 static const YYINT quote_calc3_gindex[] = {               0,
190     0,   42,    0,
191 };
192 #define YYTABLESIZE 258
193 static const YYINT quote_calc3_table[] = {               16,
194    15,    6,   22,    6,   14,   13,    7,    8,    9,   13,
195    10,   11,   12,   16,   10,   17,   15,   18,   25,   19,
196    23,   20,    4,   21,    5,    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     0,   22,    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,   16,    0,   17,    0,   18,
208     0,   19,    0,   20,    0,   21,    0,    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     3,    0,    3,    0,    0,    0,    0,    0,    0,    0,
217     4,    5,    4,   11,   16,    0,   17,    0,   18,    0,
218    19,    0,   20,    0,   21,    0,   16,   15,   16,   15,
219    16,   15,   16,   15,   16,   15,   16,   15,
220 };
221 static const YYINT quote_calc3_check[] = {               10,
222    10,   40,  124,   40,   10,   10,   10,   10,   10,   61,
223    10,   10,   10,  257,   10,  259,   10,  261,   41,  263,
224   269,  265,   10,  267,   10,   -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    -1,  124,   -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,  257,   -1,  259,   -1,  261,
236    -1,  263,   -1,  265,   -1,  267,   -1,   -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   259,   -1,  259,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
245   269,  270,  269,  270,  257,   -1,  259,   -1,  261,   -1,
246   263,   -1,  265,   -1,  267,   -1,  257,  257,  259,  259,
247   261,  261,  263,  263,  265,  265,  267,  267,
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_calc3_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-operator\"","OP_SUB","\"SUB-operator\"","OP_MUL",
267 "\"MUL-operator\"","OP_DIV","\"DIV-operator\"","OP_MOD","\"MOD-operator\"",
268 "OP_AND","\"AND-operator\"","DIGIT","LETTER","UMINUS",0,0,0,0,0,
269 "illegal-symbol",
270 };
271 static const char *const quote_calc3_rule[] = {
272 "$accept : list",
273 "list :",
274 "list : list stat '\\n'",
275 "list : list error '\\n'",
276 "stat : expr",
277 "stat : LETTER '=' expr",
278 "expr : '(' expr ')'",
279 "expr : expr OP_ADD expr",
280 "expr : expr OP_SUB expr",
281 "expr : expr OP_MUL expr",
282 "expr : expr OP_DIV expr",
283 "expr : expr OP_MOD expr",
284 "expr : expr OP_AND expr",
285 "expr : expr '|' expr",
286 "expr : OP_SUB expr",
287 "expr : LETTER",
288 "expr : number",
289 "number : DIGIT",
290 "number : number DIGIT",
291 
292 };
293 #endif
294 
295 int      yydebug;
296 int      yynerrs;
297 
298 int      yyerrflag;
299 int      yychar;
300 YYSTYPE  yyval;
301 YYSTYPE  yylval;
302 
303 /* define the initial stack-sizes */
304 #ifdef YYSTACKSIZE
305 #undef YYMAXDEPTH
306 #define YYMAXDEPTH  YYSTACKSIZE
307 #else
308 #ifdef YYMAXDEPTH
309 #define YYSTACKSIZE YYMAXDEPTH
310 #else
311 #define YYSTACKSIZE 10000
312 #define YYMAXDEPTH  10000
313 #endif
314 #endif
315 
316 #define YYINITSTACKSIZE 200
317 
318 typedef struct {
319     unsigned stacksize;
320     YYINT    *s_base;
321     YYINT    *s_mark;
322     YYINT    *s_last;
323     YYSTYPE  *l_base;
324     YYSTYPE  *l_mark;
325 } YYSTACKDATA;
326 /* variables for the parser stack */
327 static YYSTACKDATA yystack;
328 #line 73 "quote_calc3.y"
329  /* start of programs */
330 
331 int
332 main (void)
333 {
334     while(!feof(stdin)) {
335 	yyparse();
336     }
337     return 0;
338 }
339 
340 static void
341 yyerror(const char *s)
342 {
343     fprintf(stderr, "%s\n", s);
344 }
345 
346 int
347 yylex(void) {
348 	/* lexical analysis routine */
349 	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
350 	/* return DIGIT for a digit, yylval = 0 through 9 */
351 	/* all other characters are returned immediately */
352 
353     int c;
354 
355     while( (c=getchar()) == ' ' )   { /* skip blanks */ }
356 
357     /* c is now nonblank */
358 
359     if( islower( c )) {
360 	yylval = c - 'a';
361 	return ( LETTER );
362     }
363     if( isdigit( c )) {
364 	yylval = c - '0';
365 	return ( DIGIT );
366     }
367     return( c );
368 }
369 #line 370 "quote_calc3.tab.c"
370 
371 #if YYDEBUG
372 #include <stdio.h>	/* needed for printf */
373 #endif
374 
375 #include <stdlib.h>	/* needed for malloc, etc */
376 #include <string.h>	/* needed for memset */
377 
378 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
379 static int yygrowstack(YYSTACKDATA *data)
380 {
381     int i;
382     unsigned newsize;
383     YYINT *newss;
384     YYSTYPE *newvs;
385 
386     if ((newsize = data->stacksize) == 0)
387         newsize = YYINITSTACKSIZE;
388     else if (newsize >= YYMAXDEPTH)
389         return YYENOMEM;
390     else if ((newsize *= 2) > YYMAXDEPTH)
391         newsize = YYMAXDEPTH;
392 
393     i = (int) (data->s_mark - data->s_base);
394     newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
395     if (newss == 0)
396         return YYENOMEM;
397 
398     data->s_base = newss;
399     data->s_mark = newss + i;
400 
401     newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
402     if (newvs == 0)
403         return YYENOMEM;
404 
405     data->l_base = newvs;
406     data->l_mark = newvs + i;
407 
408     data->stacksize = newsize;
409     data->s_last = data->s_base + newsize - 1;
410     return 0;
411 }
412 
413 #if YYPURE || defined(YY_NO_LEAKS)
414 static void yyfreestack(YYSTACKDATA *data)
415 {
416     free(data->s_base);
417     free(data->l_base);
418     memset(data, 0, sizeof(*data));
419 }
420 #else
421 #define yyfreestack(data) /* nothing */
422 #endif
423 
424 #define YYABORT  goto yyabort
425 #define YYREJECT goto yyabort
426 #define YYACCEPT goto yyaccept
427 #define YYERROR  goto yyerrlab
428 
429 int
430 YYPARSE_DECL()
431 {
432     int yym, yyn, yystate;
433 #if YYDEBUG
434     const char *yys;
435 
436     if ((yys = getenv("YYDEBUG")) != 0)
437     {
438         yyn = *yys;
439         if (yyn >= '0' && yyn <= '9')
440             yydebug = yyn - '0';
441     }
442 #endif
443 
444     yym = 0;
445     yyn = 0;
446     yynerrs = 0;
447     yyerrflag = 0;
448     yychar = YYEMPTY;
449     yystate = 0;
450 
451 #if YYPURE
452     memset(&yystack, 0, sizeof(yystack));
453 #endif
454 
455     if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
456     yystack.s_mark = yystack.s_base;
457     yystack.l_mark = yystack.l_base;
458     yystate = 0;
459     *yystack.s_mark = 0;
460 
461 yyloop:
462     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
463     if (yychar < 0)
464     {
465         yychar = YYLEX;
466         if (yychar < 0) yychar = YYEOF;
467 #if YYDEBUG
468         if (yydebug)
469         {
470             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
471             printf("%sdebug: state %d, reading %d (%s)\n",
472                     YYPREFIX, yystate, yychar, yys);
473         }
474 #endif
475     }
476     if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
477             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
478     {
479 #if YYDEBUG
480         if (yydebug)
481             printf("%sdebug: state %d, shifting to state %d\n",
482                     YYPREFIX, yystate, yytable[yyn]);
483 #endif
484         if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
485         yystate = yytable[yyn];
486         *++yystack.s_mark = yytable[yyn];
487         *++yystack.l_mark = yylval;
488         yychar = YYEMPTY;
489         if (yyerrflag > 0)  --yyerrflag;
490         goto yyloop;
491     }
492     if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
493             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
494     {
495         yyn = yytable[yyn];
496         goto yyreduce;
497     }
498     if (yyerrflag != 0) goto yyinrecovery;
499 
500     YYERROR_CALL("syntax error");
501 
502     goto yyerrlab; /* redundant goto avoids 'unused label' warning */
503 yyerrlab:
504     ++yynerrs;
505 
506 yyinrecovery:
507     if (yyerrflag < 3)
508     {
509         yyerrflag = 3;
510         for (;;)
511         {
512             if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
513                     yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
514             {
515 #if YYDEBUG
516                 if (yydebug)
517                     printf("%sdebug: state %d, error recovery shifting\
518  to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
519 #endif
520                 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
521                 yystate = yytable[yyn];
522                 *++yystack.s_mark = yytable[yyn];
523                 *++yystack.l_mark = yylval;
524                 goto yyloop;
525             }
526             else
527             {
528 #if YYDEBUG
529                 if (yydebug)
530                     printf("%sdebug: error recovery discarding state %d\n",
531                             YYPREFIX, *yystack.s_mark);
532 #endif
533                 if (yystack.s_mark <= yystack.s_base) goto yyabort;
534                 --yystack.s_mark;
535                 --yystack.l_mark;
536             }
537         }
538     }
539     else
540     {
541         if (yychar == YYEOF) goto yyabort;
542 #if YYDEBUG
543         if (yydebug)
544         {
545             if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
546             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
547                     YYPREFIX, yystate, yychar, yys);
548         }
549 #endif
550         yychar = YYEMPTY;
551         goto yyloop;
552     }
553 
554 yyreduce:
555 #if YYDEBUG
556     if (yydebug)
557         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
558                 YYPREFIX, yystate, yyn, yyrule[yyn]);
559 #endif
560     yym = yylen[yyn];
561     if (yym > 0)
562         yyval = yystack.l_mark[1-yym];
563     else
564         memset(&yyval, 0, sizeof yyval);
565 
566     switch (yyn)
567     {
568 case 3:
569 #line 35 "quote_calc3.y"
570 	{  yyerrok ; }
571 break;
572 case 4:
573 #line 39 "quote_calc3.y"
574 	{  printf("%d\n",yystack.l_mark[0]);}
575 break;
576 case 5:
577 #line 41 "quote_calc3.y"
578 	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
579 break;
580 case 6:
581 #line 45 "quote_calc3.y"
582 	{  yyval = yystack.l_mark[-1]; }
583 break;
584 case 7:
585 #line 47 "quote_calc3.y"
586 	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
587 break;
588 case 8:
589 #line 49 "quote_calc3.y"
590 	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
591 break;
592 case 9:
593 #line 51 "quote_calc3.y"
594 	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
595 break;
596 case 10:
597 #line 53 "quote_calc3.y"
598 	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
599 break;
600 case 11:
601 #line 55 "quote_calc3.y"
602 	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
603 break;
604 case 12:
605 #line 57 "quote_calc3.y"
606 	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
607 break;
608 case 13:
609 #line 59 "quote_calc3.y"
610 	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
611 break;
612 case 14:
613 #line 61 "quote_calc3.y"
614 	{  yyval = - yystack.l_mark[0]; }
615 break;
616 case 15:
617 #line 63 "quote_calc3.y"
618 	{  yyval = regs[yystack.l_mark[0]]; }
619 break;
620 case 17:
621 #line 68 "quote_calc3.y"
622 	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
623 break;
624 case 18:
625 #line 70 "quote_calc3.y"
626 	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
627 break;
628 #line 629 "quote_calc3.tab.c"
629     }
630     yystack.s_mark -= yym;
631     yystate = *yystack.s_mark;
632     yystack.l_mark -= yym;
633     yym = yylhs[yyn];
634     if (yystate == 0 && yym == 0)
635     {
636 #if YYDEBUG
637         if (yydebug)
638             printf("%sdebug: after reduction, shifting from state 0 to\
639  state %d\n", YYPREFIX, YYFINAL);
640 #endif
641         yystate = YYFINAL;
642         *++yystack.s_mark = YYFINAL;
643         *++yystack.l_mark = yyval;
644         if (yychar < 0)
645         {
646             yychar = YYLEX;
647             if (yychar < 0) yychar = YYEOF;
648 #if YYDEBUG
649             if (yydebug)
650             {
651                 if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
652                 printf("%sdebug: state %d, reading %d (%s)\n",
653                         YYPREFIX, YYFINAL, yychar, yys);
654             }
655 #endif
656         }
657         if (yychar == YYEOF) goto yyaccept;
658         goto yyloop;
659     }
660     if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
661             yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
662         yystate = yytable[yyn];
663     else
664         yystate = yydgoto[yym];
665 #if YYDEBUG
666     if (yydebug)
667         printf("%sdebug: after reduction, shifting from state %d \
668 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
669 #endif
670     if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
671     *++yystack.s_mark = (YYINT) yystate;
672     *++yystack.l_mark = yyval;
673     goto yyloop;
674 
675 yyoverflow:
676     YYERROR_CALL("yacc stack overflow");
677 
678 yyabort:
679     yyfreestack(&yystack);
680     return (1);
681 
682 yyaccept:
683     yyfreestack(&yystack);
684     return (0);
685 }
686