1264790Sbapt/* original parser id follows */
2264790Sbapt/* yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93" */
3264790Sbapt/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
4264790Sbapt
5264790Sbapt#define YYBYACC 1
6264790Sbapt#define YYMAJOR 1
7264790Sbapt#define YYMINOR 9
8264790Sbapt#define YYCHECK "yyyymmdd"
9264790Sbapt
10264790Sbapt#define YYEMPTY        (-1)
11264790Sbapt#define yyclearin      (yychar = YYEMPTY)
12264790Sbapt#define yyerrok        (yyerrflag = 0)
13264790Sbapt#define YYRECOVERING() (yyerrflag != 0)
14264790Sbapt#define YYENOMEM       (-2)
15264790Sbapt#define YYEOF          0
16264790Sbapt
17264790Sbapt#ifndef yyparse
18264790Sbapt#define yyparse    calc3_parse
19264790Sbapt#endif /* yyparse */
20264790Sbapt
21264790Sbapt#ifndef yylex
22264790Sbapt#define yylex      calc3_lex
23264790Sbapt#endif /* yylex */
24264790Sbapt
25264790Sbapt#ifndef yyerror
26264790Sbapt#define yyerror    calc3_error
27264790Sbapt#endif /* yyerror */
28264790Sbapt
29264790Sbapt#ifndef yychar
30264790Sbapt#define yychar     calc3_char
31264790Sbapt#endif /* yychar */
32264790Sbapt
33264790Sbapt#ifndef yyval
34264790Sbapt#define yyval      calc3_val
35264790Sbapt#endif /* yyval */
36264790Sbapt
37264790Sbapt#ifndef yylval
38264790Sbapt#define yylval     calc3_lval
39264790Sbapt#endif /* yylval */
40264790Sbapt
41264790Sbapt#ifndef yydebug
42264790Sbapt#define yydebug    calc3_debug
43264790Sbapt#endif /* yydebug */
44264790Sbapt
45264790Sbapt#ifndef yynerrs
46264790Sbapt#define yynerrs    calc3_nerrs
47264790Sbapt#endif /* yynerrs */
48264790Sbapt
49264790Sbapt#ifndef yyerrflag
50264790Sbapt#define yyerrflag  calc3_errflag
51264790Sbapt#endif /* yyerrflag */
52264790Sbapt
53264790Sbapt#ifndef yylhs
54264790Sbapt#define yylhs      calc3_lhs
55264790Sbapt#endif /* yylhs */
56264790Sbapt
57264790Sbapt#ifndef yylen
58264790Sbapt#define yylen      calc3_len
59264790Sbapt#endif /* yylen */
60264790Sbapt
61264790Sbapt#ifndef yydefred
62264790Sbapt#define yydefred   calc3_defred
63264790Sbapt#endif /* yydefred */
64264790Sbapt
65264790Sbapt#ifndef yydgoto
66264790Sbapt#define yydgoto    calc3_dgoto
67264790Sbapt#endif /* yydgoto */
68264790Sbapt
69264790Sbapt#ifndef yysindex
70264790Sbapt#define yysindex   calc3_sindex
71264790Sbapt#endif /* yysindex */
72264790Sbapt
73264790Sbapt#ifndef yyrindex
74264790Sbapt#define yyrindex   calc3_rindex
75264790Sbapt#endif /* yyrindex */
76264790Sbapt
77264790Sbapt#ifndef yygindex
78264790Sbapt#define yygindex   calc3_gindex
79264790Sbapt#endif /* yygindex */
80264790Sbapt
81264790Sbapt#ifndef yytable
82264790Sbapt#define yytable    calc3_table
83264790Sbapt#endif /* yytable */
84264790Sbapt
85264790Sbapt#ifndef yycheck
86264790Sbapt#define yycheck    calc3_check
87264790Sbapt#endif /* yycheck */
88264790Sbapt
89264790Sbapt#ifndef yyname
90264790Sbapt#define yyname     calc3_name
91264790Sbapt#endif /* yyname */
92264790Sbapt
93264790Sbapt#ifndef yyrule
94264790Sbapt#define yyrule     calc3_rule
95264790Sbapt#endif /* yyrule */
96264790Sbapt#define YYPREFIX "calc3_"
97264790Sbapt
98264790Sbapt#define YYPURE 1
99264790Sbapt
100264790Sbapt#line 9 "calc3.y"
101264790Sbapt# include <stdio.h>
102264790Sbapt# include <ctype.h>
103264790Sbapt
104264790Sbapt#ifdef YYBISON
105264790Sbapt#define YYSTYPE int
106264790Sbapt#define YYLEX_PARAM base
107264790Sbapt#define YYLEX_DECL() yylex(YYSTYPE *yylval, int *YYLEX_PARAM)
108264790Sbapt#define YYERROR_DECL() yyerror(int regs[26], int *base, const char *s)
109264790Sbaptint YYLEX_DECL();
110264790Sbaptstatic void YYERROR_DECL();
111264790Sbapt#endif
112264790Sbapt
113264790Sbapt#line 114 "calc3.tab.c"
114264790Sbapt
115264790Sbapt#if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
116264790Sbapt/* Default: YYSTYPE is the semantic value type. */
117264790Sbapttypedef int YYSTYPE;
118264790Sbapt# define YYSTYPE_IS_DECLARED 1
119264790Sbapt#endif
120264790Sbapt
121264790Sbapt/* compatibility with bison */
122264790Sbapt#ifdef YYPARSE_PARAM
123264790Sbapt/* compatibility with FreeBSD */
124264790Sbapt# ifdef YYPARSE_PARAM_TYPE
125264790Sbapt#  define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
126264790Sbapt# else
127264790Sbapt#  define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
128264790Sbapt# endif
129264790Sbapt#else
130264790Sbapt# define YYPARSE_DECL() yyparse(int  regs[26], int * base)
131264790Sbapt#endif
132264790Sbapt
133264790Sbapt/* Parameters sent to lex. */
134264790Sbapt#ifdef YYLEX_PARAM
135264790Sbapt# ifdef YYLEX_PARAM_TYPE
136264790Sbapt#  define YYLEX_DECL() yylex(YYSTYPE *yylval, YYLEX_PARAM_TYPE YYLEX_PARAM)
137264790Sbapt# else
138264790Sbapt#  define YYLEX_DECL() yylex(YYSTYPE *yylval, void * YYLEX_PARAM)
139264790Sbapt# endif
140264790Sbapt# define YYLEX yylex(&yylval, YYLEX_PARAM)
141264790Sbapt#else
142264790Sbapt# define YYLEX_DECL() yylex(YYSTYPE *yylval, int * base)
143264790Sbapt# define YYLEX yylex(&yylval, base)
144264790Sbapt#endif
145264790Sbapt
146264790Sbapt/* Parameters sent to yyerror. */
147264790Sbapt#ifndef YYERROR_DECL
148264790Sbapt#define YYERROR_DECL() yyerror(int  regs[26], int * base, const char *s)
149264790Sbapt#endif
150264790Sbapt#ifndef YYERROR_CALL
151264790Sbapt#define YYERROR_CALL(msg) yyerror(regs, base, msg)
152264790Sbapt#endif
153264790Sbapt
154264790Sbaptextern int YYPARSE_DECL();
155264790Sbapt
156264790Sbapt#define DIGIT 257
157264790Sbapt#define LETTER 258
158264790Sbapt#define UMINUS 259
159264790Sbapt#define YYERRCODE 256
160264790Sbapttypedef short YYINT;
161264790Sbaptstatic const YYINT calc3_lhs[] = {                       -1,
162264790Sbapt    0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
163264790Sbapt    2,    2,    2,    2,    2,    2,    3,    3,
164264790Sbapt};
165264790Sbaptstatic const YYINT calc3_len[] = {                        2,
166264790Sbapt    0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
167264790Sbapt    3,    3,    3,    2,    1,    1,    1,    2,
168264790Sbapt};
169264790Sbaptstatic const YYINT calc3_defred[] = {                     1,
170264790Sbapt    0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
171264790Sbapt    0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
172264790Sbapt    0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
173264790Sbapt   10,   11,
174264790Sbapt};
175264790Sbaptstatic const YYINT calc3_dgoto[] = {                      1,
176264790Sbapt    7,    8,    9,
177264790Sbapt};
178264790Sbaptstatic const YYINT calc3_sindex[] = {                     0,
179264790Sbapt  -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
180264790Sbapt  -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
181264790Sbapt  -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
182264790Sbapt    0,    0,
183264790Sbapt};
184264790Sbaptstatic const YYINT calc3_rindex[] = {                     0,
185264790Sbapt    0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
186264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
187264790Sbapt    0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
188264790Sbapt    0,    0,
189264790Sbapt};
190264790Sbaptstatic const YYINT calc3_gindex[] = {                     0,
191264790Sbapt    0,   65,    0,
192264790Sbapt};
193264790Sbapt#define YYTABLESIZE 220
194264790Sbaptstatic const YYINT calc3_table[] = {                      6,
195264790Sbapt   16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
196264790Sbapt   15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
197264790Sbapt    0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
198264790Sbapt    0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
199264790Sbapt    0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
200264790Sbapt    8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
201264790Sbapt    0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
202264790Sbapt   14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
203264790Sbapt   26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
204264790Sbapt    0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
205264790Sbapt    0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
206264790Sbapt    0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
207264790Sbapt    0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
208264790Sbapt    0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
209264790Sbapt    0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
210264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
211264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
212264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
213264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
214264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
215264790Sbapt    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
216264790Sbapt    0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
217264790Sbapt};
218264790Sbaptstatic const YYINT calc3_check[] = {                     40,
219264790Sbapt   10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
220264790Sbapt   10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
221264790Sbapt   -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
222264790Sbapt   -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
223264790Sbapt   -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
224264790Sbapt   38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
225264790Sbapt   -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
226264790Sbapt    6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
227264790Sbapt   16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
228264790Sbapt   -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
229264790Sbapt   -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
230264790Sbapt   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
231264790Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
232264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
233264790Sbapt   -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
234264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
235264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
236264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
237264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
238264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
239264790Sbapt   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
240264790Sbapt   -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
241264790Sbapt};
242264790Sbapt#define YYFINAL 1
243264790Sbapt#ifndef YYDEBUG
244264790Sbapt#define YYDEBUG 0
245264790Sbapt#endif
246264790Sbapt#define YYMAXTOKEN 259
247264790Sbapt#define YYUNDFTOKEN 265
248264790Sbapt#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
249264790Sbapt#if YYDEBUG
250264790Sbaptstatic const char *const calc3_name[] = {
251264790Sbapt
252264790Sbapt"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,
253264790Sbapt0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
254264790Sbapt0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
255264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
256264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
257264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
258264790Sbapt0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
259264790Sbapt0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
260264790Sbapt};
261264790Sbaptstatic const char *const calc3_rule[] = {
262264790Sbapt"$accept : list",
263264790Sbapt"list :",
264264790Sbapt"list : list stat '\\n'",
265264790Sbapt"list : list error '\\n'",
266264790Sbapt"stat : expr",
267264790Sbapt"stat : LETTER '=' expr",
268264790Sbapt"expr : '(' expr ')'",
269264790Sbapt"expr : expr '+' expr",
270264790Sbapt"expr : expr '-' expr",
271264790Sbapt"expr : expr '*' expr",
272264790Sbapt"expr : expr '/' expr",
273264790Sbapt"expr : expr '%' expr",
274264790Sbapt"expr : expr '&' expr",
275264790Sbapt"expr : expr '|' expr",
276264790Sbapt"expr : '-' expr",
277264790Sbapt"expr : LETTER",
278264790Sbapt"expr : number",
279264790Sbapt"number : DIGIT",
280264790Sbapt"number : number DIGIT",
281264790Sbapt
282264790Sbapt};
283264790Sbapt#endif
284264790Sbapt
285264790Sbaptint      yydebug;
286264790Sbaptint      yynerrs;
287264790Sbapt
288264790Sbapt/* define the initial stack-sizes */
289264790Sbapt#ifdef YYSTACKSIZE
290264790Sbapt#undef YYMAXDEPTH
291264790Sbapt#define YYMAXDEPTH  YYSTACKSIZE
292264790Sbapt#else
293264790Sbapt#ifdef YYMAXDEPTH
294264790Sbapt#define YYSTACKSIZE YYMAXDEPTH
295264790Sbapt#else
296264790Sbapt#define YYSTACKSIZE 10000
297264790Sbapt#define YYMAXDEPTH  10000
298264790Sbapt#endif
299264790Sbapt#endif
300264790Sbapt
301264790Sbapt#define YYINITSTACKSIZE 200
302264790Sbapt
303264790Sbapttypedef struct {
304264790Sbapt    unsigned stacksize;
305264790Sbapt    YYINT    *s_base;
306264790Sbapt    YYINT    *s_mark;
307264790Sbapt    YYINT    *s_last;
308264790Sbapt    YYSTYPE  *l_base;
309264790Sbapt    YYSTYPE  *l_mark;
310264790Sbapt} YYSTACKDATA;
311264790Sbapt#line 76 "calc3.y"
312264790Sbapt /* start of programs */
313264790Sbapt
314264790Sbapt#ifdef YYBYACC
315264790Sbaptextern int YYLEX_DECL();
316264790Sbapt#endif
317264790Sbapt
318264790Sbaptint
319264790Sbaptmain (void)
320264790Sbapt{
321264790Sbapt    int regs[26];
322264790Sbapt    int base = 10;
323264790Sbapt
324264790Sbapt    while(!feof(stdin)) {
325264790Sbapt	yyparse(regs, &base);
326264790Sbapt    }
327264790Sbapt    return 0;
328264790Sbapt}
329264790Sbapt
330264790Sbapt#define UNUSED(x) ((void)(x))
331264790Sbapt
332264790Sbaptstatic void
333264790SbaptYYERROR_DECL()
334264790Sbapt{
335264790Sbapt    UNUSED(regs); /* %parse-param regs is not actually used here */
336264790Sbapt    UNUSED(base); /* %parse-param base is not actually used here */
337264790Sbapt    fprintf(stderr, "%s\n", s);
338264790Sbapt}
339264790Sbapt
340264790Sbaptint
341264790SbaptYYLEX_DECL()
342264790Sbapt{
343264790Sbapt	/* lexical analysis routine */
344264790Sbapt	/* returns LETTER for a lower case letter, yylval = 0 through 25 */
345264790Sbapt	/* return DIGIT for a digit, yylval = 0 through 9 */
346264790Sbapt	/* all other characters are returned immediately */
347264790Sbapt
348264790Sbapt    int c;
349264790Sbapt
350264790Sbapt    while( (c=getchar()) == ' ' )   { /* skip blanks */ }
351264790Sbapt
352264790Sbapt    /* c is now nonblank */
353264790Sbapt
354264790Sbapt    if( islower( c )) {
355264790Sbapt	*yylval = (c - 'a');
356264790Sbapt	return ( LETTER );
357264790Sbapt    }
358264790Sbapt    if( isdigit( c )) {
359264790Sbapt	*yylval = (c - '0') % (*base);
360264790Sbapt	return ( DIGIT );
361264790Sbapt    }
362264790Sbapt    return( c );
363264790Sbapt}
364264790Sbapt#line 365 "calc3.tab.c"
365264790Sbapt
366264790Sbapt#if YYDEBUG
367264790Sbapt#include <stdio.h>		/* needed for printf */
368264790Sbapt#endif
369264790Sbapt
370264790Sbapt#include <stdlib.h>	/* needed for malloc, etc */
371264790Sbapt#include <string.h>	/* needed for memset */
372264790Sbapt
373264790Sbapt/* allocate initial stack or double stack size, up to YYMAXDEPTH */
374264790Sbaptstatic int yygrowstack(YYSTACKDATA *data)
375264790Sbapt{
376264790Sbapt    int i;
377264790Sbapt    unsigned newsize;
378264790Sbapt    YYINT *newss;
379264790Sbapt    YYSTYPE *newvs;
380264790Sbapt
381264790Sbapt    if ((newsize = data->stacksize) == 0)
382264790Sbapt        newsize = YYINITSTACKSIZE;
383264790Sbapt    else if (newsize >= YYMAXDEPTH)
384264790Sbapt        return YYENOMEM;
385264790Sbapt    else if ((newsize *= 2) > YYMAXDEPTH)
386264790Sbapt        newsize = YYMAXDEPTH;
387264790Sbapt
388264790Sbapt    i = (int) (data->s_mark - data->s_base);
389264790Sbapt    newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
390264790Sbapt    if (newss == 0)
391264790Sbapt        return YYENOMEM;
392264790Sbapt
393264790Sbapt    data->s_base = newss;
394264790Sbapt    data->s_mark = newss + i;
395264790Sbapt
396264790Sbapt    newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
397264790Sbapt    if (newvs == 0)
398264790Sbapt        return YYENOMEM;
399264790Sbapt
400264790Sbapt    data->l_base = newvs;
401264790Sbapt    data->l_mark = newvs + i;
402264790Sbapt
403264790Sbapt    data->stacksize = newsize;
404264790Sbapt    data->s_last = data->s_base + newsize - 1;
405264790Sbapt    return 0;
406264790Sbapt}
407264790Sbapt
408264790Sbapt#if YYPURE || defined(YY_NO_LEAKS)
409264790Sbaptstatic void yyfreestack(YYSTACKDATA *data)
410264790Sbapt{
411264790Sbapt    free(data->s_base);
412264790Sbapt    free(data->l_base);
413264790Sbapt    memset(data, 0, sizeof(*data));
414264790Sbapt}
415264790Sbapt#else
416264790Sbapt#define yyfreestack(data) /* nothing */
417264790Sbapt#endif
418264790Sbapt
419264790Sbapt#define YYABORT  goto yyabort
420264790Sbapt#define YYREJECT goto yyabort
421264790Sbapt#define YYACCEPT goto yyaccept
422264790Sbapt#define YYERROR  goto yyerrlab
423264790Sbapt
424264790Sbaptint
425264790SbaptYYPARSE_DECL()
426264790Sbapt{
427264790Sbapt    int      yyerrflag;
428264790Sbapt    int      yychar;
429264790Sbapt    YYSTYPE  yyval;
430264790Sbapt    YYSTYPE  yylval;
431264790Sbapt
432264790Sbapt    /* variables for the parser stack */
433264790Sbapt    YYSTACKDATA yystack;
434264790Sbapt    int yym, yyn, yystate;
435264790Sbapt#if YYDEBUG
436264790Sbapt    const char *yys;
437264790Sbapt
438264790Sbapt    if ((yys = getenv("YYDEBUG")) != 0)
439264790Sbapt    {
440264790Sbapt        yyn = *yys;
441264790Sbapt        if (yyn >= '0' && yyn <= '9')
442264790Sbapt            yydebug = yyn - '0';
443264790Sbapt    }
444264790Sbapt#endif
445264790Sbapt
446264790Sbapt    yynerrs = 0;
447264790Sbapt    yyerrflag = 0;
448264790Sbapt    yychar = YYEMPTY;
449264790Sbapt    yystate = 0;
450264790Sbapt
451264790Sbapt#if YYPURE
452264790Sbapt    memset(&yystack, 0, sizeof(yystack));
453264790Sbapt#endif
454264790Sbapt
455264790Sbapt    if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
456264790Sbapt    yystack.s_mark = yystack.s_base;
457264790Sbapt    yystack.l_mark = yystack.l_base;
458264790Sbapt    yystate = 0;
459264790Sbapt    *yystack.s_mark = 0;
460264790Sbapt
461264790Sbaptyyloop:
462264790Sbapt    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
463264790Sbapt    if (yychar < 0)
464264790Sbapt    {
465264790Sbapt        if ((yychar = YYLEX) < 0) yychar = YYEOF;
466264790Sbapt#if YYDEBUG
467264790Sbapt        if (yydebug)
468264790Sbapt        {
469264790Sbapt            yys = yyname[YYTRANSLATE(yychar)];
470264790Sbapt            printf("%sdebug: state %d, reading %d (%s)\n",
471264790Sbapt                    YYPREFIX, yystate, yychar, yys);
472264790Sbapt        }
473264790Sbapt#endif
474264790Sbapt    }
475264790Sbapt    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
476264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
477264790Sbapt    {
478264790Sbapt#if YYDEBUG
479264790Sbapt        if (yydebug)
480264790Sbapt            printf("%sdebug: state %d, shifting to state %d\n",
481264790Sbapt                    YYPREFIX, yystate, yytable[yyn]);
482264790Sbapt#endif
483264790Sbapt        if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
484264790Sbapt        {
485264790Sbapt            goto yyoverflow;
486264790Sbapt        }
487264790Sbapt        yystate = yytable[yyn];
488264790Sbapt        *++yystack.s_mark = yytable[yyn];
489264790Sbapt        *++yystack.l_mark = yylval;
490264790Sbapt        yychar = YYEMPTY;
491264790Sbapt        if (yyerrflag > 0)  --yyerrflag;
492264790Sbapt        goto yyloop;
493264790Sbapt    }
494264790Sbapt    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
495264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
496264790Sbapt    {
497264790Sbapt        yyn = yytable[yyn];
498264790Sbapt        goto yyreduce;
499264790Sbapt    }
500264790Sbapt    if (yyerrflag) goto yyinrecovery;
501264790Sbapt
502264790Sbapt    YYERROR_CALL("syntax error");
503264790Sbapt
504264790Sbapt    goto yyerrlab;
505264790Sbapt
506264790Sbaptyyerrlab:
507264790Sbapt    ++yynerrs;
508264790Sbapt
509264790Sbaptyyinrecovery:
510264790Sbapt    if (yyerrflag < 3)
511264790Sbapt    {
512264790Sbapt        yyerrflag = 3;
513264790Sbapt        for (;;)
514264790Sbapt        {
515264790Sbapt            if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
516264790Sbapt                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
517264790Sbapt            {
518264790Sbapt#if YYDEBUG
519264790Sbapt                if (yydebug)
520264790Sbapt                    printf("%sdebug: state %d, error recovery shifting\
521264790Sbapt to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
522264790Sbapt#endif
523264790Sbapt                if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
524264790Sbapt                {
525264790Sbapt                    goto yyoverflow;
526264790Sbapt                }
527264790Sbapt                yystate = yytable[yyn];
528264790Sbapt                *++yystack.s_mark = yytable[yyn];
529264790Sbapt                *++yystack.l_mark = yylval;
530264790Sbapt                goto yyloop;
531264790Sbapt            }
532264790Sbapt            else
533264790Sbapt            {
534264790Sbapt#if YYDEBUG
535264790Sbapt                if (yydebug)
536264790Sbapt                    printf("%sdebug: error recovery discarding state %d\n",
537264790Sbapt                            YYPREFIX, *yystack.s_mark);
538264790Sbapt#endif
539264790Sbapt                if (yystack.s_mark <= yystack.s_base) goto yyabort;
540264790Sbapt                --yystack.s_mark;
541264790Sbapt                --yystack.l_mark;
542264790Sbapt            }
543264790Sbapt        }
544264790Sbapt    }
545264790Sbapt    else
546264790Sbapt    {
547264790Sbapt        if (yychar == YYEOF) goto yyabort;
548264790Sbapt#if YYDEBUG
549264790Sbapt        if (yydebug)
550264790Sbapt        {
551264790Sbapt            yys = yyname[YYTRANSLATE(yychar)];
552264790Sbapt            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
553264790Sbapt                    YYPREFIX, yystate, yychar, yys);
554264790Sbapt        }
555264790Sbapt#endif
556264790Sbapt        yychar = YYEMPTY;
557264790Sbapt        goto yyloop;
558264790Sbapt    }
559264790Sbapt
560264790Sbaptyyreduce:
561264790Sbapt#if YYDEBUG
562264790Sbapt    if (yydebug)
563264790Sbapt        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
564264790Sbapt                YYPREFIX, yystate, yyn, yyrule[yyn]);
565264790Sbapt#endif
566264790Sbapt    yym = yylen[yyn];
567264790Sbapt    if (yym)
568264790Sbapt        yyval = yystack.l_mark[1-yym];
569264790Sbapt    else
570264790Sbapt        memset(&yyval, 0, sizeof yyval);
571264790Sbapt    switch (yyn)
572264790Sbapt    {
573264790Sbaptcase 3:
574264790Sbapt#line 38 "calc3.y"
575264790Sbapt	{  yyerrok ; }
576264790Sbaptbreak;
577264790Sbaptcase 4:
578264790Sbapt#line 42 "calc3.y"
579264790Sbapt	{  printf("%d\n",yystack.l_mark[0]);}
580264790Sbaptbreak;
581264790Sbaptcase 5:
582264790Sbapt#line 44 "calc3.y"
583264790Sbapt	{  regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
584264790Sbaptbreak;
585264790Sbaptcase 6:
586264790Sbapt#line 48 "calc3.y"
587264790Sbapt	{  yyval = yystack.l_mark[-1]; }
588264790Sbaptbreak;
589264790Sbaptcase 7:
590264790Sbapt#line 50 "calc3.y"
591264790Sbapt	{  yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
592264790Sbaptbreak;
593264790Sbaptcase 8:
594264790Sbapt#line 52 "calc3.y"
595264790Sbapt	{  yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
596264790Sbaptbreak;
597264790Sbaptcase 9:
598264790Sbapt#line 54 "calc3.y"
599264790Sbapt	{  yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
600264790Sbaptbreak;
601264790Sbaptcase 10:
602264790Sbapt#line 56 "calc3.y"
603264790Sbapt	{  yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
604264790Sbaptbreak;
605264790Sbaptcase 11:
606264790Sbapt#line 58 "calc3.y"
607264790Sbapt	{  yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
608264790Sbaptbreak;
609264790Sbaptcase 12:
610264790Sbapt#line 60 "calc3.y"
611264790Sbapt	{  yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
612264790Sbaptbreak;
613264790Sbaptcase 13:
614264790Sbapt#line 62 "calc3.y"
615264790Sbapt	{  yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
616264790Sbaptbreak;
617264790Sbaptcase 14:
618264790Sbapt#line 64 "calc3.y"
619264790Sbapt	{  yyval = - yystack.l_mark[0]; }
620264790Sbaptbreak;
621264790Sbaptcase 15:
622264790Sbapt#line 66 "calc3.y"
623264790Sbapt	{  yyval = regs[yystack.l_mark[0]]; }
624264790Sbaptbreak;
625264790Sbaptcase 17:
626264790Sbapt#line 71 "calc3.y"
627264790Sbapt	{  yyval = yystack.l_mark[0]; (*base) = (yystack.l_mark[0]==0) ? 8 : 10; }
628264790Sbaptbreak;
629264790Sbaptcase 18:
630264790Sbapt#line 73 "calc3.y"
631264790Sbapt	{  yyval = (*base) * yystack.l_mark[-1] + yystack.l_mark[0]; }
632264790Sbaptbreak;
633264790Sbapt#line 634 "calc3.tab.c"
634264790Sbapt    }
635264790Sbapt    yystack.s_mark -= yym;
636264790Sbapt    yystate = *yystack.s_mark;
637264790Sbapt    yystack.l_mark -= yym;
638264790Sbapt    yym = yylhs[yyn];
639264790Sbapt    if (yystate == 0 && yym == 0)
640264790Sbapt    {
641264790Sbapt#if YYDEBUG
642264790Sbapt        if (yydebug)
643264790Sbapt            printf("%sdebug: after reduction, shifting from state 0 to\
644264790Sbapt state %d\n", YYPREFIX, YYFINAL);
645264790Sbapt#endif
646264790Sbapt        yystate = YYFINAL;
647264790Sbapt        *++yystack.s_mark = YYFINAL;
648264790Sbapt        *++yystack.l_mark = yyval;
649264790Sbapt        if (yychar < 0)
650264790Sbapt        {
651264790Sbapt            if ((yychar = YYLEX) < 0) yychar = YYEOF;
652264790Sbapt#if YYDEBUG
653264790Sbapt            if (yydebug)
654264790Sbapt            {
655264790Sbapt                yys = yyname[YYTRANSLATE(yychar)];
656264790Sbapt                printf("%sdebug: state %d, reading %d (%s)\n",
657264790Sbapt                        YYPREFIX, YYFINAL, yychar, yys);
658264790Sbapt            }
659264790Sbapt#endif
660264790Sbapt        }
661264790Sbapt        if (yychar == YYEOF) goto yyaccept;
662264790Sbapt        goto yyloop;
663264790Sbapt    }
664264790Sbapt    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
665264790Sbapt            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
666264790Sbapt        yystate = yytable[yyn];
667264790Sbapt    else
668264790Sbapt        yystate = yydgoto[yym];
669264790Sbapt#if YYDEBUG
670264790Sbapt    if (yydebug)
671264790Sbapt        printf("%sdebug: after reduction, shifting from state %d \
672264790Sbaptto state %d\n", YYPREFIX, *yystack.s_mark, yystate);
673264790Sbapt#endif
674264790Sbapt    if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM)
675264790Sbapt    {
676264790Sbapt        goto yyoverflow;
677264790Sbapt    }
678264790Sbapt    *++yystack.s_mark = (YYINT) yystate;
679264790Sbapt    *++yystack.l_mark = yyval;
680264790Sbapt    goto yyloop;
681264790Sbapt
682264790Sbaptyyoverflow:
683264790Sbapt    YYERROR_CALL("yacc stack overflow");
684264790Sbapt
685264790Sbaptyyabort:
686264790Sbapt    yyfreestack(&yystack);
687264790Sbapt    return (1);
688264790Sbapt
689264790Sbaptyyaccept:
690264790Sbapt    yyfreestack(&yystack);
691264790Sbapt    return (0);
692264790Sbapt}
693