calc.tab.c revision 277086
1234287Sdim/* original parser id follows */
2234287Sdim/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
3234287Sdim/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
4234287Sdim
5234287Sdim#define YYBYACC 1
6234287Sdim#define YYMAJOR 1
7234287Sdim#define YYMINOR 9
8234287Sdim#define YYCHECK "yyyymmdd"
9234287Sdim
10234287Sdim#define YYEMPTY        (-1)
11249423Sdim#define yyclearin      (yychar = YYEMPTY)
12234287Sdim#define yyerrok        (yyerrflag = 0)
13234287Sdim#define YYRECOVERING() (yyerrflag != 0)
14249423Sdim#define YYENOMEM       (-2)
15234287Sdim#define YYEOF          0
16234287Sdim
17234287Sdim#ifndef yyparse
18234287Sdim#define yyparse    calc_parse
19234287Sdim#endif /* yyparse */
20234287Sdim
21234287Sdim#ifndef yylex
22234287Sdim#define yylex      calc_lex
23234287Sdim#endif /* yylex */
24234287Sdim
25234287Sdim#ifndef yyerror
26234287Sdim#define yyerror    calc_error
27234287Sdim#endif /* yyerror */
28234287Sdim
29234287Sdim#ifndef yychar
30234287Sdim#define yychar     calc_char
31234287Sdim#endif /* yychar */
32234287Sdim
33234287Sdim#ifndef yyval
34234287Sdim#define yyval      calc_val
35234287Sdim#endif /* yyval */
36234287Sdim
37234287Sdim#ifndef yylval
38234287Sdim#define yylval     calc_lval
39234287Sdim#endif /* yylval */
40249423Sdim
41263508Sdim#ifndef yydebug
42263508Sdim#define yydebug    calc_debug
43263508Sdim#endif /* yydebug */
44234287Sdim
45234287Sdim#ifndef yynerrs
46234287Sdim#define yynerrs    calc_nerrs
47234287Sdim#endif /* yynerrs */
48234287Sdim
49234287Sdim#ifndef yyerrflag
50234287Sdim#define yyerrflag  calc_errflag
51234287Sdim#endif /* yyerrflag */
52234287Sdim
53234287Sdim#ifndef yylhs
54234287Sdim#define yylhs      calc_lhs
55234287Sdim#endif /* yylhs */
56234287Sdim
57234287Sdim#ifndef yylen
58234287Sdim#define yylen      calc_len
59234287Sdim#endif /* yylen */
60234287Sdim
61234287Sdim#ifndef yydefred
62234287Sdim#define yydefred   calc_defred
63234287Sdim#endif /* yydefred */
64234287Sdim
65234287Sdim#ifndef yydgoto
66234287Sdim#define yydgoto    calc_dgoto
67234287Sdim#endif /* yydgoto */
68234287Sdim
69234287Sdim#ifndef yysindex
70234287Sdim#define yysindex   calc_sindex
71234287Sdim#endif /* yysindex */
72234287Sdim
73234287Sdim#ifndef yyrindex
74234287Sdim#define yyrindex   calc_rindex
75234287Sdim#endif /* yyrindex */
76234287Sdim
77234287Sdim#ifndef yygindex
78234287Sdim#define yygindex   calc_gindex
79234287Sdim#endif /* yygindex */
80234287Sdim
81234287Sdim#ifndef yytable
82234287Sdim#define yytable    calc_table
83234287Sdim#endif /* yytable */
84234287Sdim
85234287Sdim#ifndef yycheck
86234287Sdim#define yycheck    calc_check
87234287Sdim#endif /* yycheck */
88234287Sdim
89234287Sdim#ifndef yyname
90234287Sdim#define yyname     calc_name
91234287Sdim#endif /* yyname */
92234287Sdim
93234287Sdim#ifndef yyrule
94234287Sdim#define yyrule     calc_rule
95234287Sdim#endif /* yyrule */
96234287Sdim#define YYPREFIX "calc_"
97234287Sdim
98234287Sdim#define YYPURE 0
99234287Sdim
100234287Sdim#line 2 "calc.y"
101234287Sdim# include <stdio.h>
102234287Sdim# include <ctype.h>
103234287Sdim
104234287Sdimint regs[26];
105234287Sdimint base;
106234287Sdim
107234287Sdimextern int yylex(void);
108234287Sdimstatic void yyerror(const char *s);
109234287Sdim
110234287Sdim#line 111 "calc.tab.c"
111234287Sdim
112234287Sdim#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
113234287Sdim/* Default: YYSTYPE is the semantic value type. */
114234287Sdimtypedef int YYSTYPE;
115234287Sdim# define YYSTYPE_IS_DECLARED 1
116234287Sdim#endif
117234287Sdim
118234287Sdim/* compatibility with bison */
119234287Sdim#ifdef YYPARSE_PARAM
120234287Sdim/* compatibility with FreeBSD */
121234287Sdim# ifdef YYPARSE_PARAM_TYPE
122234287Sdim#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
123234287Sdim# else
124234287Sdim#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
125234287Sdim# endif
126234287Sdim#else
127234287Sdim# define YYPARSE_DECL() yyparse(void)
128234287Sdim#endif
129234287Sdim
130234287Sdim/* Parameters sent to lex. */
131234287Sdim#ifdef YYLEX_PARAM
132234287Sdim# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
133234287Sdim# define YYLEX yylex(YYLEX_PARAM)
134234287Sdim#else
135234287Sdim# define YYLEX_DECL() yylex(void)
136234287Sdim# define YYLEX yylex()
137234287Sdim#endif
138234287Sdim
139234287Sdim/* Parameters sent to yyerror. */
140234287Sdim#ifndef YYERROR_DECL
141234287Sdim#define YYERROR_DECL() yyerror(const char *s)
142234287Sdim#endif
143234287Sdim#ifndef YYERROR_CALL
144234287Sdim#define YYERROR_CALL(msg) yyerror(msg)
145234287Sdim#endif
146234287Sdim
147234287Sdimextern int YYPARSE_DECL();
148234287Sdim
149234287Sdim#define DIGIT 257
150234287Sdim#define LETTER 258
151234287Sdim#define UMINUS 259
152234287Sdim#define YYERRCODE 256
153234287Sdimtypedef int YYINT;
154234287Sdimstatic const YYINT calc_lhs[] = {                        -1,
155234287Sdim    0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
156234287Sdim    2,    2,    2,    2,    2,    2,    3,    3,
157234287Sdim};
158234287Sdimstatic const YYINT calc_len[] = {                         2,
159234287Sdim    0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
160234287Sdim    3,    3,    3,    2,    1,    1,    1,    2,
161234287Sdim};
162234287Sdimstatic const YYINT calc_defred[] = {                      1,
163234287Sdim    0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
164234287Sdim    0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
165234287Sdim    0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
166234287Sdim   10,   11,
167234287Sdim};
168234287Sdimstatic const YYINT calc_dgoto[] = {                       1,
169234287Sdim    7,    8,    9,
170234287Sdim};
171234287Sdimstatic const YYINT calc_sindex[] = {                      0,
172234287Sdim  -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
173234287Sdim  -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
174234287Sdim  -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
175234287Sdim    0,    0,
176234287Sdim};
177234287Sdimstatic const YYINT calc_rindex[] = {                      0,
178234287Sdim    0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
179234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
180234287Sdim    0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
181234287Sdim    0,    0,
182234287Sdim};
183234287Sdimstatic const YYINT calc_gindex[] = {                      0,
184234287Sdim    0,   65,    0,
185234287Sdim};
186234287Sdim#define YYTABLESIZE 220
187234287Sdimstatic const YYINT calc_table[] = {                       6,
188263508Sdim   16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
189234287Sdim   15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
190234287Sdim    0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
191234287Sdim    0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
192234287Sdim    0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
193234287Sdim    8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
194234287Sdim    0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
195234287Sdim   14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
196234287Sdim   26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
197234287Sdim    0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
198234287Sdim    0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
199234287Sdim    0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
200234287Sdim    0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
201234287Sdim    0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
202234287Sdim    0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
203234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
204234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
205234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
206234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
207234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
208234287Sdim    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
209234287Sdim    0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
210234287Sdim};
211234287Sdimstatic const YYINT calc_check[] = {                      40,
212234287Sdim   10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
213234287Sdim   10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
214234287Sdim   -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
215234287Sdim   -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
216234287Sdim   -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
217234287Sdim   38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
218234287Sdim   -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
219234287Sdim    6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
220234287Sdim   16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
221234287Sdim   -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
222234287Sdim   -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
223234287Sdim   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
224234287Sdim   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
225234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
226234287Sdim   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
227234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
228234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
229234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
230234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
231234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
232234287Sdim   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
233234287Sdim   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
234234287Sdim};
235234287Sdim#define YYFINAL 1
236234287Sdim#ifndef YYDEBUG
237263508Sdim#define YYDEBUG 0
238234287Sdim#endif
239234287Sdim#define YYMAXTOKEN 259
240234287Sdim#define YYUNDFTOKEN 265
241234287Sdim#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
242234287Sdim#if YYDEBUG
243234287Sdimstatic const char *const calc_name[] = {
244234287Sdim
245234287Sdim"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,
246234287Sdim0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
247234287Sdim0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
248234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
249234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
250234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
251234287Sdim0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
252234287Sdim0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
253234287Sdim};
254234287Sdimstatic const char *const calc_rule[] = {
255234287Sdim"$accept : list",
256234287Sdim"list :",
257234287Sdim"list : list stat '\\n'",
258234287Sdim"list : list error '\\n'",
259234287Sdim"stat : expr",
260234287Sdim"stat : LETTER '=' expr",
261234287Sdim"expr : '(' expr ')'",
262234287Sdim"expr : expr '+' expr",
263234287Sdim"expr : expr '-' expr",
264234287Sdim"expr : expr '*' expr",
265234287Sdim"expr : expr '/' expr",
266234287Sdim"expr : expr '%' expr",
267234287Sdim"expr : expr '&' expr",
268263508Sdim"expr : expr '|' expr",
269234287Sdim"expr : '-' expr",
270234287Sdim"expr : LETTER",
271234287Sdim"expr : number",
272234287Sdim"number : DIGIT",
273234287Sdim"number : number DIGIT",
274234287Sdim
275234287Sdim};
276234287Sdim#endif
277234287Sdim
278234287Sdimint      yydebug;
279234287Sdimint      yynerrs;
280234287Sdim
281234287Sdimint      yyerrflag;
282234287Sdimint      yychar;
283234287SdimYYSTYPE  yyval;
284234287SdimYYSTYPE  yylval;
285234287Sdim
286234287Sdim/* define the initial stack-sizes */
287234287Sdim#ifdef YYSTACKSIZE
288234287Sdim#undef YYMAXDEPTH
289234287Sdim#define YYMAXDEPTH  YYSTACKSIZE
290234287Sdim#else
291234287Sdim#ifdef YYMAXDEPTH
292234287Sdim#define YYSTACKSIZE YYMAXDEPTH
293234287Sdim#else
294234287Sdim#define YYSTACKSIZE 10000
295234287Sdim#define YYMAXDEPTH  10000
296234287Sdim#endif
297234287Sdim#endif
298234287Sdim
299234287Sdim#define YYINITSTACKSIZE 200
300234287Sdim
301234287Sdimtypedef struct {
302234287Sdim    unsigned stacksize;
303234287Sdim    YYINT    *s_base;
304234287Sdim    YYINT    *s_mark;
305234287Sdim    YYINT    *s_last;
306263508Sdim    YYSTYPE  *l_base;
307263508Sdim    YYSTYPE  *l_mark;
308234287Sdim} YYSTACKDATA;
309234287Sdim/* variables for the parser stack */
310234287Sdimstatic YYSTACKDATA yystack;
311234287Sdim#line 66 "calc.y"
312234287Sdim /* start of programs */
313234287Sdim
314234287Sdimint
315234287Sdimmain (void)
316234287Sdim{
317234287Sdim    while(!feof(stdin)) {
318234287Sdim	yyparse();
319234287Sdim    }
320234287Sdim    return 0;
321234287Sdim}
322234287Sdim
323234287Sdimstatic void
324234287Sdimyyerror(const char *s)
325234287Sdim{
326234287Sdim    fprintf(stderr, "%s\n", s);
327234287Sdim}
328234287Sdim
329234287Sdimint
330234287Sdimyylex(void)
331234287Sdim{
332234287Sdim	/* lexical analysis routine */
333234287Sdim	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
334234287Sdim	/* return DIGIT for a digit, yylval = 0 through 9 */
335234287Sdim	/* all other characters are returned immediately */
336234287Sdim
337239462Sdim    int c;
338234287Sdim
339234287Sdim    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
340234287Sdim
341234287Sdim    /* c is now nonblank */
342234287Sdim
343234287Sdim    if( islower( c )) {
344234287Sdim	yylval = c - 'a';
345234287Sdim	return ( LETTER );
346234287Sdim    }
347234287Sdim    if( isdigit( c )) {
348234287Sdim	yylval = c - '0';
349	return ( DIGIT );
350    }
351    return( c );
352}
353#line 354 "calc.tab.c"
354
355#if YYDEBUG
356#include <stdio.h>		/* needed for printf */
357#endif
358
359#include <stdlib.h>	/* needed for malloc, etc */
360#include <string.h>	/* needed for memset */
361
362/* allocate initial stack or double stack size, up to YYMAXDEPTH */
363static int yygrowstack(YYSTACKDATA *data)
364{
365    int i;
366    unsigned newsize;
367    YYINT *newss;
368    YYSTYPE *newvs;
369
370    if ((newsize = data->stacksize) == 0)
371        newsize = YYINITSTACKSIZE;
372    else if (newsize >= YYMAXDEPTH)
373        return YYENOMEM;
374    else if ((newsize *= 2) > YYMAXDEPTH)
375        newsize = YYMAXDEPTH;
376
377    i = (int) (data->s_mark - data->s_base);
378    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
379    if (newss == 0)
380        return YYENOMEM;
381
382    data->s_base = newss;
383    data->s_mark = newss + i;
384
385    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
386    if (newvs == 0)
387        return YYENOMEM;
388
389    data->l_base = newvs;
390    data->l_mark = newvs + i;
391
392    data->stacksize = newsize;
393    data->s_last = data->s_base + newsize - 1;
394    return 0;
395}
396
397#if YYPURE || defined(YY_NO_LEAKS)
398static void yyfreestack(YYSTACKDATA *data)
399{
400    free(data->s_base);
401    free(data->l_base);
402    memset(data, 0, sizeof(*data));
403}
404#else
405#define yyfreestack(data) /* nothing */
406#endif
407
408#define YYABORT  goto yyabort
409#define YYREJECT goto yyabort
410#define YYACCEPT goto yyaccept
411#define YYERROR  goto yyerrlab
412
413int
414YYPARSE_DECL()
415{
416    int yym, yyn, yystate;
417#if YYDEBUG
418    const char *yys;
419
420    if ((yys = getenv("YYDEBUG")) != 0)
421    {
422        yyn = *yys;
423        if (yyn >= '0' && yyn <= '9')
424            yydebug = yyn - '0';
425    }
426#endif
427
428    yynerrs = 0;
429    yyerrflag = 0;
430    yychar = YYEMPTY;
431    yystate = 0;
432
433#if YYPURE
434    memset(&yystack, 0, sizeof(yystack));
435#endif
436
437    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
438    yystack.s_mark = yystack.s_base;
439    yystack.l_mark = yystack.l_base;
440    yystate = 0;
441    *yystack.s_mark = 0;
442
443yyloop:
444    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
445    if (yychar < 0)
446    {
447        if ((yychar = YYLEX) < 0) yychar = YYEOF;
448#if YYDEBUG
449        if (yydebug)
450        {
451            yys = yyname[YYTRANSLATE(yychar)];
452            printf("%sdebug: state %d, reading %d (%s)\n",
453                    YYPREFIX, yystate, yychar, yys);
454        }
455#endif
456    }
457    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
458            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
459    {
460#if YYDEBUG
461        if (yydebug)
462            printf("%sdebug: state %d, shifting to state %d\n",
463                    YYPREFIX, yystate, yytable[yyn]);
464#endif
465        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
466        {
467            goto yyoverflow;
468        }
469        yystate = yytable[yyn];
470        *++yystack.s_mark = yytable[yyn];
471        *++yystack.l_mark = yylval;
472        yychar = YYEMPTY;
473        if (yyerrflag > 0)  --yyerrflag;
474        goto yyloop;
475    }
476    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
477            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
478    {
479        yyn = yytable[yyn];
480        goto yyreduce;
481    }
482    if (yyerrflag) goto yyinrecovery;
483
484    YYERROR_CALL("syntax error");
485
486    goto yyerrlab;
487
488yyerrlab:
489    ++yynerrs;
490
491yyinrecovery:
492    if (yyerrflag < 3)
493    {
494        yyerrflag = 3;
495        for (;;)
496        {
497            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
498                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
499            {
500#if YYDEBUG
501                if (yydebug)
502                    printf("%sdebug: state %d, error recovery shifting\
503 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
504#endif
505                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
506                {
507                    goto yyoverflow;
508                }
509                yystate = yytable[yyn];
510                *++yystack.s_mark = yytable[yyn];
511                *++yystack.l_mark = yylval;
512                goto yyloop;
513            }
514            else
515            {
516#if YYDEBUG
517                if (yydebug)
518                    printf("%sdebug: error recovery discarding state %d\n",
519                            YYPREFIX, *yystack.s_mark);
520#endif
521                if (yystack.s_mark <= yystack.s_base) goto yyabort;
522                --yystack.s_mark;
523                --yystack.l_mark;
524            }
525        }
526    }
527    else
528    {
529        if (yychar == YYEOF) goto yyabort;
530#if YYDEBUG
531        if (yydebug)
532        {
533            yys = yyname[YYTRANSLATE(yychar)];
534            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
535                    YYPREFIX, yystate, yychar, yys);
536        }
537#endif
538        yychar = YYEMPTY;
539        goto yyloop;
540    }
541
542yyreduce:
543#if YYDEBUG
544    if (yydebug)
545        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
546                YYPREFIX, yystate, yyn, yyrule[yyn]);
547#endif
548    yym = yylen[yyn];
549    if (yym)
550        yyval = yystack.l_mark[1-yym];
551    else
552        memset(&yyval, 0, sizeof yyval);
553    switch (yyn)
554    {
555case 3:
556#line 28 "calc.y"
557	{  yyerrok ; }
558break;
559case 4:
560#line 32 "calc.y"
561	{  printf("%d\n",yystack.l_mark[0]);}
562break;
563case 5:
564#line 34 "calc.y"
565	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
566break;
567case 6:
568#line 38 "calc.y"
569	{  yyval = yystack.l_mark[-1]; }
570break;
571case 7:
572#line 40 "calc.y"
573	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
574break;
575case 8:
576#line 42 "calc.y"
577	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
578break;
579case 9:
580#line 44 "calc.y"
581	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
582break;
583case 10:
584#line 46 "calc.y"
585	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
586break;
587case 11:
588#line 48 "calc.y"
589	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
590break;
591case 12:
592#line 50 "calc.y"
593	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
594break;
595case 13:
596#line 52 "calc.y"
597	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
598break;
599case 14:
600#line 54 "calc.y"
601	{  yyval = - yystack.l_mark[0]; }
602break;
603case 15:
604#line 56 "calc.y"
605	{  yyval = regs[yystack.l_mark[0]]; }
606break;
607case 17:
608#line 61 "calc.y"
609	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
610break;
611case 18:
612#line 63 "calc.y"
613	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
614break;
615#line 616 "calc.tab.c"
616    }
617    yystack.s_mark -= yym;
618    yystate = *yystack.s_mark;
619    yystack.l_mark -= yym;
620    yym = yylhs[yyn];
621    if (yystate == 0 && yym == 0)
622    {
623#if YYDEBUG
624        if (yydebug)
625            printf("%sdebug: after reduction, shifting from state 0 to\
626 state %d\n", YYPREFIX, YYFINAL);
627#endif
628        yystate = YYFINAL;
629        *++yystack.s_mark = YYFINAL;
630        *++yystack.l_mark = yyval;
631        if (yychar < 0)
632        {
633            if ((yychar = YYLEX) < 0) yychar = YYEOF;
634#if YYDEBUG
635            if (yydebug)
636            {
637                yys = yyname[YYTRANSLATE(yychar)];
638                printf("%sdebug: state %d, reading %d (%s)\n",
639                        YYPREFIX, YYFINAL, yychar, yys);
640            }
641#endif
642        }
643        if (yychar == YYEOF) goto yyaccept;
644        goto yyloop;
645    }
646    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
647            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
648        yystate = yytable[yyn];
649    else
650        yystate = yydgoto[yym];
651#if YYDEBUG
652    if (yydebug)
653        printf("%sdebug: after reduction, shifting from state %d \
654to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
655#endif
656    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
657    {
658        goto yyoverflow;
659    }
660    *++yystack.s_mark = (YYINT) yystate;
661    *++yystack.l_mark = yyval;
662    goto yyloop;
663
664yyoverflow:
665    YYERROR_CALL("yacc stack overflow");
666
667yyabort:
668    yyfreestack(&yystack);
669    return (1);
670
671yyaccept:
672    yyfreestack(&yystack);
673    return (0);
674}
675