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