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