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