1234949Sbapt#ifndef lint
2234949Sbaptstatic const char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
3234949Sbapt#endif
4234949Sbapt
5234949Sbapt#define YYBYACC 1
6234949Sbapt#define YYMAJOR 1
7234949Sbapt#define YYMINOR 9
8234949Sbapt
9234949Sbapt#define YYEMPTY        (-1)
10234949Sbapt#define yyclearin      (yychar = YYEMPTY)
11234949Sbapt#define yyerrok        (yyerrflag = 0)
12234949Sbapt#define YYRECOVERING() (yyerrflag != 0)
13234949Sbapt
14234949Sbapt
15234949Sbapt#ifndef yyparse
16234949Sbapt#define yyparse    calc_parse
17234949Sbapt#endif /* yyparse */
18234949Sbapt
19234949Sbapt#ifndef yylex
20234949Sbapt#define yylex      calc_lex
21234949Sbapt#endif /* yylex */
22234949Sbapt
23234949Sbapt#ifndef yyerror
24234949Sbapt#define yyerror    calc_error
25234949Sbapt#endif /* yyerror */
26234949Sbapt
27234949Sbapt#ifndef yychar
28234949Sbapt#define yychar     calc_char
29234949Sbapt#endif /* yychar */
30234949Sbapt
31234949Sbapt#ifndef yyval
32234949Sbapt#define yyval      calc_val
33234949Sbapt#endif /* yyval */
34234949Sbapt
35234949Sbapt#ifndef yylval
36234949Sbapt#define yylval     calc_lval
37234949Sbapt#endif /* yylval */
38234949Sbapt
39234949Sbapt#ifndef yydebug
40234949Sbapt#define yydebug    calc_debug
41234949Sbapt#endif /* yydebug */
42234949Sbapt
43234949Sbapt#ifndef yynerrs
44234949Sbapt#define yynerrs    calc_nerrs
45234949Sbapt#endif /* yynerrs */
46234949Sbapt
47234949Sbapt#ifndef yyerrflag
48234949Sbapt#define yyerrflag  calc_errflag
49234949Sbapt#endif /* yyerrflag */
50234949Sbapt
51234949Sbapt#ifndef yylhs
52234949Sbapt#define yylhs      calc_lhs
53234949Sbapt#endif /* yylhs */
54234949Sbapt
55234949Sbapt#ifndef yylen
56234949Sbapt#define yylen      calc_len
57234949Sbapt#endif /* yylen */
58234949Sbapt
59234949Sbapt#ifndef yydefred
60234949Sbapt#define yydefred   calc_defred
61234949Sbapt#endif /* yydefred */
62234949Sbapt
63234949Sbapt#ifndef yydgoto
64234949Sbapt#define yydgoto    calc_dgoto
65234949Sbapt#endif /* yydgoto */
66234949Sbapt
67234949Sbapt#ifndef yysindex
68234949Sbapt#define yysindex   calc_sindex
69234949Sbapt#endif /* yysindex */
70234949Sbapt
71234949Sbapt#ifndef yyrindex
72234949Sbapt#define yyrindex   calc_rindex
73234949Sbapt#endif /* yyrindex */
74234949Sbapt
75234949Sbapt#ifndef yygindex
76234949Sbapt#define yygindex   calc_gindex
77234949Sbapt#endif /* yygindex */
78234949Sbapt
79234949Sbapt#ifndef yytable
80234949Sbapt#define yytable    calc_table
81234949Sbapt#endif /* yytable */
82234949Sbapt
83234949Sbapt#ifndef yycheck
84234949Sbapt#define yycheck    calc_check
85234949Sbapt#endif /* yycheck */
86234949Sbapt
87234949Sbapt#ifndef yyname
88234949Sbapt#define yyname     calc_name
89234949Sbapt#endif /* yyname */
90234949Sbapt
91234949Sbapt#ifndef yyrule
92234949Sbapt#define yyrule     calc_rule
93234949Sbapt#endif /* yyrule */
94234949Sbapt#define YYPREFIX "calc_"
95234949Sbapt
96234949Sbapt#define YYPURE 0
97234949Sbapt
98234949Sbapt#line 2 "calc.y"
99234949Sbapt# include <stdio.h>
100234949Sbapt# include <ctype.h>
101234949Sbapt
102234949Sbaptint regs[26];
103234949Sbaptint base;
104234949Sbapt
105234949Sbaptextern int yylex(void);
106234949Sbaptstatic void yyerror(const char *s);
107234949Sbapt
108234949Sbapt#line 109 "calc.tab.c"
109234949Sbapt
110234949Sbapt#ifndef YYSTYPE
111234949Sbapttypedef int YYSTYPE;
112234949Sbapt#endif
113234949Sbapt
114234949Sbapt/* compatibility with bison */
115234949Sbapt#ifdef YYPARSE_PARAM
116234949Sbapt/* compatibility with FreeBSD */
117234949Sbapt# ifdef YYPARSE_PARAM_TYPE
118234949Sbapt#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
119234949Sbapt# else
120234949Sbapt#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
121234949Sbapt# endif
122234949Sbapt#else
123234949Sbapt# define YYPARSE_DECL() yyparse(void)
124234949Sbapt#endif
125234949Sbapt
126234949Sbapt/* Parameters sent to lex. */
127234949Sbapt#ifdef YYLEX_PARAM
128234949Sbapt# define YYLEX_DECL() yylex(void *YYLEX_PARAM)
129234949Sbapt# define YYLEX yylex(YYLEX_PARAM)
130234949Sbapt#else
131234949Sbapt# define YYLEX_DECL() yylex(void)
132234949Sbapt# define YYLEX yylex()
133234949Sbapt#endif
134234949Sbapt
135234949Sbapt/* Parameters sent to yyerror. */
136234949Sbapt#ifndef YYERROR_DECL
137234949Sbapt#define YYERROR_DECL() yyerror(const char *s)
138234949Sbapt#endif
139234949Sbapt#ifndef YYERROR_CALL
140234949Sbapt#define YYERROR_CALL(msg) yyerror(msg)
141234949Sbapt#endif
142234949Sbapt
143234949Sbaptextern int YYPARSE_DECL();
144234949Sbapt
145234949Sbapt#define DIGIT 257
146234949Sbapt#define LETTER 258
147234949Sbapt#define UMINUS 259
148234949Sbapt#define YYERRCODE 256
149234949Sbaptstatic const short calc_lhs[] = {                        -1,
150234949Sbapt    0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
151234949Sbapt    2,    2,    2,    2,    2,    2,    3,    3,
152234949Sbapt};
153234949Sbaptstatic const short calc_len[] = {                         2,
154234949Sbapt    0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
155234949Sbapt    3,    3,    3,    2,    1,    1,    1,    2,
156234949Sbapt};
157234949Sbaptstatic const short calc_defred[] = {                      1,
158234949Sbapt    0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
159234949Sbapt    0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
160234949Sbapt    0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
161234949Sbapt   10,   11,
162234949Sbapt};
163234949Sbaptstatic const short calc_dgoto[] = {                       1,
164234949Sbapt    7,    8,    9,
165234949Sbapt};
166234949Sbaptstatic const short calc_sindex[] = {                      0,
167234949Sbapt  -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
168234949Sbapt  -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
169234949Sbapt  -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
170234949Sbapt    0,    0,
171234949Sbapt};
172234949Sbaptstatic const short calc_rindex[] = {                      0,
173234949Sbapt    0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
174234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
175234949Sbapt    0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
176234949Sbapt    0,    0,
177234949Sbapt};
178234949Sbaptstatic const short calc_gindex[] = {                      0,
179234949Sbapt    0,   65,    0,
180234949Sbapt};
181234949Sbapt#define YYTABLESIZE 220
182234949Sbaptstatic const short calc_table[] = {                       6,
183234949Sbapt   16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
184234949Sbapt   15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
185234949Sbapt    0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
186234949Sbapt    0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
187234949Sbapt    0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
188234949Sbapt    8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
189234949Sbapt    0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
190234949Sbapt   14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
191234949Sbapt   26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
192234949Sbapt    0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
193234949Sbapt    0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
194234949Sbapt    0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
195234949Sbapt    0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
196234949Sbapt    0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
197234949Sbapt    0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
198234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
199234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
200234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
201234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
202234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
203234949Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
204234949Sbapt    0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
205234949Sbapt};
206234949Sbaptstatic const short calc_check[] = {                      40,
207234949Sbapt   10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
208234949Sbapt   10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
209234949Sbapt   -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
210234949Sbapt   -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
211234949Sbapt   -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
212234949Sbapt   38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
213234949Sbapt   -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
214234949Sbapt    6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
215234949Sbapt   16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
216234949Sbapt   -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
217234949Sbapt   -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
218234949Sbapt   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
219234949Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
220234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
221234949Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
222234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
223234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
224234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
225234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
226234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
227234949Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
228234949Sbapt   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
229234949Sbapt};
230234949Sbapt#define YYFINAL 1
231234949Sbapt#ifndef YYDEBUG
232234949Sbapt#define YYDEBUG 0
233234949Sbapt#endif
234234949Sbapt#define YYMAXTOKEN 259
235234949Sbapt#if YYDEBUG
236234949Sbaptstatic const char *yyname[] = {
237234949Sbapt
238234949Sbapt"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,
239234949Sbapt0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
240234949Sbapt0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
241234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
242234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
243234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
244234949Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
245234949Sbapt0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",
246234949Sbapt};
247234949Sbaptstatic const char *yyrule[] = {
248234949Sbapt"$accept : list",
249234949Sbapt"list :",
250234949Sbapt"list : list stat '\\n'",
251234949Sbapt"list : list error '\\n'",
252234949Sbapt"stat : expr",
253234949Sbapt"stat : LETTER '=' expr",
254234949Sbapt"expr : '(' expr ')'",
255234949Sbapt"expr : expr '+' expr",
256234949Sbapt"expr : expr '-' expr",
257234949Sbapt"expr : expr '*' expr",
258234949Sbapt"expr : expr '/' expr",
259234949Sbapt"expr : expr '%' expr",
260234949Sbapt"expr : expr '&' expr",
261234949Sbapt"expr : expr '|' expr",
262234949Sbapt"expr : '-' expr",
263234949Sbapt"expr : LETTER",
264234949Sbapt"expr : number",
265234949Sbapt"number : DIGIT",
266234949Sbapt"number : number DIGIT",
267234949Sbapt
268234949Sbapt};
269234949Sbapt#endif
270234949Sbapt
271234949Sbaptint      yydebug;
272234949Sbaptint      yynerrs;
273234949Sbapt
274234949Sbaptint      yyerrflag;
275234949Sbaptint      yychar;
276234949SbaptYYSTYPE  yyval;
277234949SbaptYYSTYPE  yylval;
278234949Sbapt
279234949Sbapt/* define the initial stack-sizes */
280234949Sbapt#ifdef YYSTACKSIZE
281234949Sbapt#undef YYMAXDEPTH
282234949Sbapt#define YYMAXDEPTH  YYSTACKSIZE
283234949Sbapt#else
284234949Sbapt#ifdef YYMAXDEPTH
285234949Sbapt#define YYSTACKSIZE YYMAXDEPTH
286234949Sbapt#else
287234949Sbapt#define YYSTACKSIZE 500
288234949Sbapt#define YYMAXDEPTH  500
289234949Sbapt#endif
290234949Sbapt#endif
291234949Sbapt
292234949Sbapt#define YYINITSTACKSIZE 500
293234949Sbapt
294234949Sbapttypedef struct {
295234949Sbapt    unsigned stacksize;
296234949Sbapt    short    *s_base;
297234949Sbapt    short    *s_mark;
298234949Sbapt    short    *s_last;
299234949Sbapt    YYSTYPE  *l_base;
300234949Sbapt    YYSTYPE  *l_mark;
301234949Sbapt} YYSTACKDATA;
302234949Sbapt/* variables for the parser stack */
303234949Sbaptstatic YYSTACKDATA yystack;
304234949Sbapt#line 66 "calc.y"
305234949Sbapt /* start of programs */
306234949Sbapt
307234949Sbaptint
308234949Sbaptmain (void)
309234949Sbapt{
310234949Sbapt    while(!feof(stdin)) {
311234949Sbapt	yyparse();
312234949Sbapt    }
313234949Sbapt    return 0;
314234949Sbapt}
315234949Sbapt
316234949Sbaptstatic void
317234949Sbaptyyerror(const char *s)
318234949Sbapt{
319234949Sbapt    fprintf(stderr, "%s\n", s);
320234949Sbapt}
321234949Sbapt
322234949Sbaptint
323234949Sbaptyylex(void)
324234949Sbapt{
325234949Sbapt	/* lexical analysis routine */
326234949Sbapt	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
327234949Sbapt	/* return DIGIT for a digit, yylval = 0 through 9 */
328234949Sbapt	/* all other characters are returned immediately */
329234949Sbapt
330234949Sbapt    int c;
331234949Sbapt
332234949Sbapt    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
333234949Sbapt
334234949Sbapt    /* c is now nonblank */
335234949Sbapt
336234949Sbapt    if( islower( c )) {
337234949Sbapt	yylval = c - 'a';
338234949Sbapt	return ( LETTER );
339234949Sbapt    }
340234949Sbapt    if( isdigit( c )) {
341234949Sbapt	yylval = c - '0';
342234949Sbapt	return ( DIGIT );
343234949Sbapt    }
344234949Sbapt    return( c );
345234949Sbapt}
346234949Sbapt#line 347 "calc.tab.c"
347234949Sbapt
348234949Sbapt#if YYDEBUG
349234949Sbapt#include <stdio.h>		/* needed for printf */
350234949Sbapt#endif
351234949Sbapt
352234949Sbapt#include <stdlib.h>	/* needed for malloc, etc */
353234949Sbapt#include <string.h>	/* needed for memset */
354234949Sbapt
355234949Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */
356234949Sbaptstatic int yygrowstack(YYSTACKDATA *data)
357234949Sbapt{
358234949Sbapt    int i;
359234949Sbapt    unsigned newsize;
360234949Sbapt    short *newss;
361234949Sbapt    YYSTYPE *newvs;
362234949Sbapt
363234949Sbapt    if ((newsize = data->stacksize) == 0)
364234949Sbapt        newsize = YYINITSTACKSIZE;
365234949Sbapt    else if (newsize >= YYMAXDEPTH)
366234949Sbapt        return -1;
367234949Sbapt    else if ((newsize *= 2) > YYMAXDEPTH)
368234949Sbapt        newsize = YYMAXDEPTH;
369234949Sbapt
370251143Sbapt    i = (int) (data->s_mark - data->s_base);
371234949Sbapt    newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
372234949Sbapt    if (newss == 0)
373234949Sbapt        return -1;
374234949Sbapt
375234949Sbapt    data->s_base = newss;
376234949Sbapt    data->s_mark = newss + i;
377234949Sbapt
378234949Sbapt    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
379234949Sbapt    if (newvs == 0)
380234949Sbapt        return -1;
381234949Sbapt
382234949Sbapt    data->l_base = newvs;
383234949Sbapt    data->l_mark = newvs + i;
384234949Sbapt
385234949Sbapt    data->stacksize = newsize;
386234949Sbapt    data->s_last = data->s_base + newsize - 1;
387234949Sbapt    return 0;
388234949Sbapt}
389234949Sbapt
390234949Sbapt#if YYPURE || defined(YY_NO_LEAKS)
391234949Sbaptstatic void yyfreestack(YYSTACKDATA *data)
392234949Sbapt{
393234949Sbapt    free(data->s_base);
394234949Sbapt    free(data->l_base);
395234949Sbapt    memset(data, 0, sizeof(*data));
396234949Sbapt}
397234949Sbapt#else
398234949Sbapt#define yyfreestack(data) /* nothing */
399234949Sbapt#endif
400234949Sbapt
401234949Sbapt#define YYABORT  goto yyabort
402234949Sbapt#define YYREJECT goto yyabort
403234949Sbapt#define YYACCEPT goto yyaccept
404234949Sbapt#define YYERROR  goto yyerrlab
405234949Sbapt
406234949Sbaptint
407234949SbaptYYPARSE_DECL()
408234949Sbapt{
409234949Sbapt    int yym, yyn, yystate;
410234949Sbapt#if YYDEBUG
411234949Sbapt    const char *yys;
412234949Sbapt
413234949Sbapt    if ((yys = getenv("YYDEBUG")) != 0)
414234949Sbapt    {
415234949Sbapt        yyn = *yys;
416234949Sbapt        if (yyn >= '0' && yyn <= '9')
417234949Sbapt            yydebug = yyn - '0';
418234949Sbapt    }
419234949Sbapt#endif
420234949Sbapt
421234949Sbapt    yynerrs = 0;
422234949Sbapt    yyerrflag = 0;
423234949Sbapt    yychar = YYEMPTY;
424234949Sbapt    yystate = 0;
425234949Sbapt
426234949Sbapt#if YYPURE
427234949Sbapt    memset(&yystack, 0, sizeof(yystack));
428234949Sbapt#endif
429234949Sbapt
430234949Sbapt    if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
431234949Sbapt    yystack.s_mark = yystack.s_base;
432234949Sbapt    yystack.l_mark = yystack.l_base;
433234949Sbapt    yystate = 0;
434234949Sbapt    *yystack.s_mark = 0;
435234949Sbapt
436234949Sbaptyyloop:
437234949Sbapt    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
438234949Sbapt    if (yychar < 0)
439234949Sbapt    {
440234949Sbapt        if ((yychar = YYLEX) < 0) yychar = 0;
441234949Sbapt#if YYDEBUG
442234949Sbapt        if (yydebug)
443234949Sbapt        {
444234949Sbapt            yys = 0;
445234949Sbapt            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
446234949Sbapt            if (!yys) yys = "illegal-symbol";
447234949Sbapt            printf("%sdebug: state %d, reading %d (%s)\n",
448234949Sbapt                    YYPREFIX, yystate, yychar, yys);
449234949Sbapt        }
450234949Sbapt#endif
451234949Sbapt    }
452234949Sbapt    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
453234949Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
454234949Sbapt    {
455234949Sbapt#if YYDEBUG
456234949Sbapt        if (yydebug)
457234949Sbapt            printf("%sdebug: state %d, shifting to state %d\n",
458234949Sbapt                    YYPREFIX, yystate, yytable[yyn]);
459234949Sbapt#endif
460234949Sbapt        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
461234949Sbapt        {
462234949Sbapt            goto yyoverflow;
463234949Sbapt        }
464234949Sbapt        yystate = yytable[yyn];
465234949Sbapt        *++yystack.s_mark = yytable[yyn];
466234949Sbapt        *++yystack.l_mark = yylval;
467234949Sbapt        yychar = YYEMPTY;
468234949Sbapt        if (yyerrflag > 0)  --yyerrflag;
469234949Sbapt        goto yyloop;
470234949Sbapt    }
471234949Sbapt    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
472234949Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
473234949Sbapt    {
474234949Sbapt        yyn = yytable[yyn];
475234949Sbapt        goto yyreduce;
476234949Sbapt    }
477234949Sbapt    if (yyerrflag) goto yyinrecovery;
478234949Sbapt
479234949Sbapt    yyerror("syntax error");
480234949Sbapt
481234949Sbapt    goto yyerrlab;
482234949Sbapt
483234949Sbaptyyerrlab:
484234949Sbapt    ++yynerrs;
485234949Sbapt
486234949Sbaptyyinrecovery:
487234949Sbapt    if (yyerrflag < 3)
488234949Sbapt    {
489234949Sbapt        yyerrflag = 3;
490234949Sbapt        for (;;)
491234949Sbapt        {
492234949Sbapt            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
493234949Sbapt                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
494234949Sbapt            {
495234949Sbapt#if YYDEBUG
496234949Sbapt                if (yydebug)
497234949Sbapt                    printf("%sdebug: state %d, error recovery shifting\
498234949Sbapt to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
499234949Sbapt#endif
500234949Sbapt                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
501234949Sbapt                {
502234949Sbapt                    goto yyoverflow;
503234949Sbapt                }
504234949Sbapt                yystate = yytable[yyn];
505234949Sbapt                *++yystack.s_mark = yytable[yyn];
506234949Sbapt                *++yystack.l_mark = yylval;
507234949Sbapt                goto yyloop;
508234949Sbapt            }
509234949Sbapt            else
510234949Sbapt            {
511234949Sbapt#if YYDEBUG
512234949Sbapt                if (yydebug)
513234949Sbapt                    printf("%sdebug: error recovery discarding state %d\n",
514234949Sbapt                            YYPREFIX, *yystack.s_mark);
515234949Sbapt#endif
516234949Sbapt                if (yystack.s_mark <= yystack.s_base) goto yyabort;
517234949Sbapt                --yystack.s_mark;
518234949Sbapt                --yystack.l_mark;
519234949Sbapt            }
520234949Sbapt        }
521234949Sbapt    }
522234949Sbapt    else
523234949Sbapt    {
524234949Sbapt        if (yychar == 0) goto yyabort;
525234949Sbapt#if YYDEBUG
526234949Sbapt        if (yydebug)
527234949Sbapt        {
528234949Sbapt            yys = 0;
529234949Sbapt            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
530234949Sbapt            if (!yys) yys = "illegal-symbol";
531234949Sbapt            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
532234949Sbapt                    YYPREFIX, yystate, yychar, yys);
533234949Sbapt        }
534234949Sbapt#endif
535234949Sbapt        yychar = YYEMPTY;
536234949Sbapt        goto yyloop;
537234949Sbapt    }
538234949Sbapt
539234949Sbaptyyreduce:
540234949Sbapt#if YYDEBUG
541234949Sbapt    if (yydebug)
542234949Sbapt        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
543234949Sbapt                YYPREFIX, yystate, yyn, yyrule[yyn]);
544234949Sbapt#endif
545234949Sbapt    yym = yylen[yyn];
546234949Sbapt    if (yym)
547234949Sbapt        yyval = yystack.l_mark[1-yym];
548234949Sbapt    else
549234949Sbapt        memset(&yyval, 0, sizeof yyval);
550234949Sbapt    switch (yyn)
551234949Sbapt    {
552234949Sbaptcase 3:
553234949Sbapt#line 28 "calc.y"
554234949Sbapt	{  yyerrok ; }
555234949Sbaptbreak;
556234949Sbaptcase 4:
557234949Sbapt#line 32 "calc.y"
558234949Sbapt	{  printf("%d\n",yystack.l_mark[0]);}
559234949Sbaptbreak;
560234949Sbaptcase 5:
561234949Sbapt#line 34 "calc.y"
562234949Sbapt	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
563234949Sbaptbreak;
564234949Sbaptcase 6:
565234949Sbapt#line 38 "calc.y"
566234949Sbapt	{  yyval = yystack.l_mark[-1]; }
567234949Sbaptbreak;
568234949Sbaptcase 7:
569234949Sbapt#line 40 "calc.y"
570234949Sbapt	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
571234949Sbaptbreak;
572234949Sbaptcase 8:
573234949Sbapt#line 42 "calc.y"
574234949Sbapt	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
575234949Sbaptbreak;
576234949Sbaptcase 9:
577234949Sbapt#line 44 "calc.y"
578234949Sbapt	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
579234949Sbaptbreak;
580234949Sbaptcase 10:
581234949Sbapt#line 46 "calc.y"
582234949Sbapt	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
583234949Sbaptbreak;
584234949Sbaptcase 11:
585234949Sbapt#line 48 "calc.y"
586234949Sbapt	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
587234949Sbaptbreak;
588234949Sbaptcase 12:
589234949Sbapt#line 50 "calc.y"
590234949Sbapt	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
591234949Sbaptbreak;
592234949Sbaptcase 13:
593234949Sbapt#line 52 "calc.y"
594234949Sbapt	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
595234949Sbaptbreak;
596234949Sbaptcase 14:
597234949Sbapt#line 54 "calc.y"
598234949Sbapt	{  yyval = - yystack.l_mark[0]; }
599234949Sbaptbreak;
600234949Sbaptcase 15:
601234949Sbapt#line 56 "calc.y"
602234949Sbapt	{  yyval = regs[yystack.l_mark[0]]; }
603234949Sbaptbreak;
604234949Sbaptcase 17:
605234949Sbapt#line 61 "calc.y"
606234949Sbapt	{  yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
607234949Sbaptbreak;
608234949Sbaptcase 18:
609234949Sbapt#line 63 "calc.y"
610234949Sbapt	{  yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
611234949Sbaptbreak;
612234949Sbapt#line 613 "calc.tab.c"
613234949Sbapt    }
614234949Sbapt    yystack.s_mark -= yym;
615234949Sbapt    yystate = *yystack.s_mark;
616234949Sbapt    yystack.l_mark -= yym;
617234949Sbapt    yym = yylhs[yyn];
618234949Sbapt    if (yystate == 0 && yym == 0)
619234949Sbapt    {
620234949Sbapt#if YYDEBUG
621234949Sbapt        if (yydebug)
622234949Sbapt            printf("%sdebug: after reduction, shifting from state 0 to\
623234949Sbapt state %d\n", YYPREFIX, YYFINAL);
624234949Sbapt#endif
625234949Sbapt        yystate = YYFINAL;
626234949Sbapt        *++yystack.s_mark = YYFINAL;
627234949Sbapt        *++yystack.l_mark = yyval;
628234949Sbapt        if (yychar < 0)
629234949Sbapt        {
630234949Sbapt            if ((yychar = YYLEX) < 0) yychar = 0;
631234949Sbapt#if YYDEBUG
632234949Sbapt            if (yydebug)
633234949Sbapt            {
634234949Sbapt                yys = 0;
635234949Sbapt                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
636234949Sbapt                if (!yys) yys = "illegal-symbol";
637234949Sbapt                printf("%sdebug: state %d, reading %d (%s)\n",
638234949Sbapt                        YYPREFIX, YYFINAL, yychar, yys);
639234949Sbapt            }
640234949Sbapt#endif
641234949Sbapt        }
642234949Sbapt        if (yychar == 0) goto yyaccept;
643234949Sbapt        goto yyloop;
644234949Sbapt    }
645234949Sbapt    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
646234949Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
647234949Sbapt        yystate = yytable[yyn];
648234949Sbapt    else
649234949Sbapt        yystate = yydgoto[yym];
650234949Sbapt#if YYDEBUG
651234949Sbapt    if (yydebug)
652234949Sbapt        printf("%sdebug: after reduction, shifting from state %d \
653234949Sbaptto state %d\n", YYPREFIX, *yystack.s_mark, yystate);
654234949Sbapt#endif
655234949Sbapt    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
656234949Sbapt    {
657234949Sbapt        goto yyoverflow;
658234949Sbapt    }
659234949Sbapt    *++yystack.s_mark = (short) yystate;
660234949Sbapt    *++yystack.l_mark = yyval;
661234949Sbapt    goto yyloop;
662234949Sbapt
663234949Sbaptyyoverflow:
664234949Sbapt    yyerror("yacc stack overflow");
665234949Sbapt
666234949Sbaptyyabort:
667234949Sbapt    yyfreestack(&yystack);
668234949Sbapt    return (1);
669234949Sbapt
670234949Sbaptyyaccept:
671234949Sbapt    yyfreestack(&yystack);
672234949Sbapt    return (0);
673234949Sbapt}
674