defines3.calc.c revision 1.1.1.1.4.2 1 1.1.1.1.4.2 martin /* $NetBSD: defines3.calc.c,v 1.1.1.1.4.2 2020/04/13 07:45:51 martin Exp $ */
2 1.1.1.1.4.2 martin
3 1.1.1.1.4.2 martin /* original parser id follows */
4 1.1.1.1.4.2 martin /* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */
5 1.1.1.1.4.2 martin /* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */
6 1.1.1.1.4.2 martin
7 1.1.1.1.4.2 martin #define YYBYACC 1
8 1.1.1.1.4.2 martin #define YYMAJOR 1
9 1.1.1.1.4.2 martin #define YYMINOR 9
10 1.1.1.1.4.2 martin #define YYCHECK "yyyymmdd"
11 1.1.1.1.4.2 martin
12 1.1.1.1.4.2 martin #define YYEMPTY (-1)
13 1.1.1.1.4.2 martin #define yyclearin (yychar = YYEMPTY)
14 1.1.1.1.4.2 martin #define yyerrok (yyerrflag = 0)
15 1.1.1.1.4.2 martin #define YYRECOVERING() (yyerrflag != 0)
16 1.1.1.1.4.2 martin #define YYENOMEM (-2)
17 1.1.1.1.4.2 martin #define YYEOF 0
18 1.1.1.1.4.2 martin #define YYPREFIX "yy"
19 1.1.1.1.4.2 martin
20 1.1.1.1.4.2 martin #define YYPURE 0
21 1.1.1.1.4.2 martin
22 1.1.1.1.4.2 martin #line 2 "calc.y"
23 1.1.1.1.4.2 martin # include <stdio.h>
24 1.1.1.1.4.2 martin # include <ctype.h>
25 1.1.1.1.4.2 martin
26 1.1.1.1.4.2 martin int regs[26];
27 1.1.1.1.4.2 martin int base;
28 1.1.1.1.4.2 martin
29 1.1.1.1.4.2 martin extern int yylex(void);
30 1.1.1.1.4.2 martin static void yyerror(const char *s);
31 1.1.1.1.4.2 martin
32 1.1.1.1.4.2 martin #line 31 "prefix.tab.c"
33 1.1.1.1.4.2 martin
34 1.1.1.1.4.2 martin #if ! defined(YYSTYPE) && ! defined(YYSTYPE_IS_DECLARED)
35 1.1.1.1.4.2 martin /* Default: YYSTYPE is the semantic value type. */
36 1.1.1.1.4.2 martin typedef int YYSTYPE;
37 1.1.1.1.4.2 martin # define YYSTYPE_IS_DECLARED 1
38 1.1.1.1.4.2 martin #endif
39 1.1.1.1.4.2 martin
40 1.1.1.1.4.2 martin /* compatibility with bison */
41 1.1.1.1.4.2 martin #ifdef YYPARSE_PARAM
42 1.1.1.1.4.2 martin /* compatibility with FreeBSD */
43 1.1.1.1.4.2 martin # ifdef YYPARSE_PARAM_TYPE
44 1.1.1.1.4.2 martin # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
45 1.1.1.1.4.2 martin # else
46 1.1.1.1.4.2 martin # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
47 1.1.1.1.4.2 martin # endif
48 1.1.1.1.4.2 martin #else
49 1.1.1.1.4.2 martin # define YYPARSE_DECL() yyparse(void)
50 1.1.1.1.4.2 martin #endif
51 1.1.1.1.4.2 martin
52 1.1.1.1.4.2 martin /* Parameters sent to lex. */
53 1.1.1.1.4.2 martin #ifdef YYLEX_PARAM
54 1.1.1.1.4.2 martin # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
55 1.1.1.1.4.2 martin # define YYLEX yylex(YYLEX_PARAM)
56 1.1.1.1.4.2 martin #else
57 1.1.1.1.4.2 martin # define YYLEX_DECL() yylex(void)
58 1.1.1.1.4.2 martin # define YYLEX yylex()
59 1.1.1.1.4.2 martin #endif
60 1.1.1.1.4.2 martin
61 1.1.1.1.4.2 martin #if !(defined(yylex) || defined(YYSTATE))
62 1.1.1.1.4.2 martin int YYLEX_DECL();
63 1.1.1.1.4.2 martin #endif
64 1.1.1.1.4.2 martin
65 1.1.1.1.4.2 martin /* Parameters sent to yyerror. */
66 1.1.1.1.4.2 martin #ifndef YYERROR_DECL
67 1.1.1.1.4.2 martin #define YYERROR_DECL() yyerror(const char *s)
68 1.1.1.1.4.2 martin #endif
69 1.1.1.1.4.2 martin #ifndef YYERROR_CALL
70 1.1.1.1.4.2 martin #define YYERROR_CALL(msg) yyerror(msg)
71 1.1.1.1.4.2 martin #endif
72 1.1.1.1.4.2 martin
73 1.1.1.1.4.2 martin extern int YYPARSE_DECL();
74 1.1.1.1.4.2 martin
75 1.1.1.1.4.2 martin #define DIGIT 257
76 1.1.1.1.4.2 martin #define LETTER 258
77 1.1.1.1.4.2 martin #define UMINUS 259
78 1.1.1.1.4.2 martin #define YYERRCODE 256
79 1.1.1.1.4.2 martin typedef short YYINT;
80 1.1.1.1.4.2 martin static const YYINT yylhs[] = { -1,
81 1.1.1.1.4.2 martin 0, 0, 0, 1, 1, 2, 2, 2, 2, 2,
82 1.1.1.1.4.2 martin 2, 2, 2, 2, 2, 2, 3, 3,
83 1.1.1.1.4.2 martin };
84 1.1.1.1.4.2 martin static const YYINT yylen[] = { 2,
85 1.1.1.1.4.2 martin 0, 3, 3, 1, 3, 3, 3, 3, 3, 3,
86 1.1.1.1.4.2 martin 3, 3, 3, 2, 1, 1, 1, 2,
87 1.1.1.1.4.2 martin };
88 1.1.1.1.4.2 martin static const YYINT yydefred[] = { 1,
89 1.1.1.1.4.2 martin 0, 0, 17, 0, 0, 0, 0, 0, 0, 3,
90 1.1.1.1.4.2 martin 0, 15, 14, 0, 2, 0, 0, 0, 0, 0,
91 1.1.1.1.4.2 martin 0, 0, 18, 0, 6, 0, 0, 0, 0, 9,
92 1.1.1.1.4.2 martin 10, 11,
93 1.1.1.1.4.2 martin };
94 1.1.1.1.4.2 martin static const YYINT yydgoto[] = { 1,
95 1.1.1.1.4.2 martin 7, 8, 9,
96 1.1.1.1.4.2 martin };
97 1.1.1.1.4.2 martin static const YYINT yysindex[] = { 0,
98 1.1.1.1.4.2 martin -40, -7, 0, -55, -38, -38, 1, -29, -247, 0,
99 1.1.1.1.4.2 martin -38, 0, 0, 22, 0, -38, -38, -38, -38, -38,
100 1.1.1.1.4.2 martin -38, -38, 0, -29, 0, 51, 60, -20, -20, 0,
101 1.1.1.1.4.2 martin 0, 0,
102 1.1.1.1.4.2 martin };
103 1.1.1.1.4.2 martin static const YYINT yyrindex[] = { 0,
104 1.1.1.1.4.2 martin 0, 0, 0, 2, 0, 0, 0, 9, -9, 0,
105 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106 1.1.1.1.4.2 martin 0, 0, 0, 10, 0, -6, 14, 5, 13, 0,
107 1.1.1.1.4.2 martin 0, 0,
108 1.1.1.1.4.2 martin };
109 1.1.1.1.4.2 martin static const YYINT yygindex[] = { 0,
110 1.1.1.1.4.2 martin 0, 65, 0,
111 1.1.1.1.4.2 martin };
112 1.1.1.1.4.2 martin #define YYTABLESIZE 220
113 1.1.1.1.4.2 martin static const YYINT yytable[] = { 6,
114 1.1.1.1.4.2 martin 16, 6, 10, 13, 5, 11, 5, 22, 17, 23,
115 1.1.1.1.4.2 martin 15, 15, 20, 18, 7, 19, 22, 21, 4, 5,
116 1.1.1.1.4.2 martin 0, 20, 8, 12, 0, 0, 21, 16, 16, 0,
117 1.1.1.1.4.2 martin 0, 16, 16, 16, 13, 16, 0, 16, 15, 15,
118 1.1.1.1.4.2 martin 0, 0, 7, 15, 15, 7, 15, 7, 15, 7,
119 1.1.1.1.4.2 martin 8, 12, 0, 8, 12, 8, 0, 8, 22, 17,
120 1.1.1.1.4.2 martin 0, 0, 25, 20, 18, 0, 19, 0, 21, 13,
121 1.1.1.1.4.2 martin 14, 0, 0, 0, 0, 24, 0, 0, 0, 0,
122 1.1.1.1.4.2 martin 26, 27, 28, 29, 30, 31, 32, 22, 17, 0,
123 1.1.1.1.4.2 martin 0, 0, 20, 18, 16, 19, 22, 21, 0, 0,
124 1.1.1.1.4.2 martin 0, 20, 18, 0, 19, 0, 21, 0, 0, 0,
125 1.1.1.1.4.2 martin 0, 0, 0, 0, 16, 0, 0, 13, 0, 0,
126 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 15, 0, 0, 7, 0,
127 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 8, 12, 0, 0,
128 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 16, 0, 0, 0, 0,
129 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
130 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
131 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
133 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
134 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
135 1.1.1.1.4.2 martin 0, 0, 0, 0, 0, 2, 3, 4, 3, 12,
136 1.1.1.1.4.2 martin };
137 1.1.1.1.4.2 martin static const YYINT yycheck[] = { 40,
138 1.1.1.1.4.2 martin 10, 40, 10, 10, 45, 61, 45, 37, 38, 257,
139 1.1.1.1.4.2 martin 10, 10, 42, 43, 10, 45, 37, 47, 10, 10,
140 1.1.1.1.4.2 martin -1, 42, 10, 10, -1, -1, 47, 37, 38, -1,
141 1.1.1.1.4.2 martin -1, 41, 42, 43, 41, 45, -1, 47, 37, 38,
142 1.1.1.1.4.2 martin -1, -1, 38, 42, 43, 41, 45, 43, 47, 45,
143 1.1.1.1.4.2 martin 38, 38, -1, 41, 41, 43, -1, 45, 37, 38,
144 1.1.1.1.4.2 martin -1, -1, 41, 42, 43, -1, 45, -1, 47, 5,
145 1.1.1.1.4.2 martin 6, -1, -1, -1, -1, 11, -1, -1, -1, -1,
146 1.1.1.1.4.2 martin 16, 17, 18, 19, 20, 21, 22, 37, 38, -1,
147 1.1.1.1.4.2 martin -1, -1, 42, 43, 124, 45, 37, 47, -1, -1,
148 1.1.1.1.4.2 martin -1, 42, 43, -1, 45, -1, 47, -1, -1, -1,
149 1.1.1.1.4.2 martin -1, -1, -1, -1, 124, -1, -1, 124, -1, -1,
150 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, 124, -1, -1, 124, -1,
151 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, 124, 124, -1, -1,
152 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, 124, -1, -1, -1, -1,
153 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
154 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
155 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
156 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
157 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
158 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
159 1.1.1.1.4.2 martin -1, -1, -1, -1, -1, 256, 257, 258, 257, 258,
160 1.1.1.1.4.2 martin };
161 1.1.1.1.4.2 martin #define YYFINAL 1
162 1.1.1.1.4.2 martin #ifndef YYDEBUG
163 1.1.1.1.4.2 martin #define YYDEBUG 0
164 1.1.1.1.4.2 martin #endif
165 1.1.1.1.4.2 martin #define YYMAXTOKEN 259
166 1.1.1.1.4.2 martin #define YYUNDFTOKEN 265
167 1.1.1.1.4.2 martin #define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a))
168 1.1.1.1.4.2 martin #if YYDEBUG
169 1.1.1.1.4.2 martin static const char *const yyname[] = {
170 1.1.1.1.4.2 martin
171 1.1.1.1.4.2 martin "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,
172 1.1.1.1.4.2 martin 0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
173 1.1.1.1.4.2 martin 0,0,0,0,0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
174 1.1.1.1.4.2 martin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,0,0,0,0,0,
175 1.1.1.1.4.2 martin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
176 1.1.1.1.4.2 martin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
177 1.1.1.1.4.2 martin 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
178 1.1.1.1.4.2 martin 0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",0,0,0,0,0,"illegal-symbol",
179 1.1.1.1.4.2 martin };
180 1.1.1.1.4.2 martin static const char *const yyrule[] = {
181 1.1.1.1.4.2 martin "$accept : list",
182 1.1.1.1.4.2 martin "list :",
183 1.1.1.1.4.2 martin "list : list stat '\\n'",
184 1.1.1.1.4.2 martin "list : list error '\\n'",
185 1.1.1.1.4.2 martin "stat : expr",
186 1.1.1.1.4.2 martin "stat : LETTER '=' expr",
187 1.1.1.1.4.2 martin "expr : '(' expr ')'",
188 1.1.1.1.4.2 martin "expr : expr '+' expr",
189 1.1.1.1.4.2 martin "expr : expr '-' expr",
190 1.1.1.1.4.2 martin "expr : expr '*' expr",
191 1.1.1.1.4.2 martin "expr : expr '/' expr",
192 1.1.1.1.4.2 martin "expr : expr '%' expr",
193 1.1.1.1.4.2 martin "expr : expr '&' expr",
194 1.1.1.1.4.2 martin "expr : expr '|' expr",
195 1.1.1.1.4.2 martin "expr : '-' expr",
196 1.1.1.1.4.2 martin "expr : LETTER",
197 1.1.1.1.4.2 martin "expr : number",
198 1.1.1.1.4.2 martin "number : DIGIT",
199 1.1.1.1.4.2 martin "number : number DIGIT",
200 1.1.1.1.4.2 martin
201 1.1.1.1.4.2 martin };
202 1.1.1.1.4.2 martin #endif
203 1.1.1.1.4.2 martin
204 1.1.1.1.4.2 martin #if YYDEBUG
205 1.1.1.1.4.2 martin int yydebug;
206 1.1.1.1.4.2 martin #endif
207 1.1.1.1.4.2 martin
208 1.1.1.1.4.2 martin int yyerrflag;
209 1.1.1.1.4.2 martin int yychar;
210 1.1.1.1.4.2 martin YYSTYPE yyval;
211 1.1.1.1.4.2 martin YYSTYPE yylval;
212 1.1.1.1.4.2 martin int yynerrs;
213 1.1.1.1.4.2 martin
214 1.1.1.1.4.2 martin /* define the initial stack-sizes */
215 1.1.1.1.4.2 martin #ifdef YYSTACKSIZE
216 1.1.1.1.4.2 martin #undef YYMAXDEPTH
217 1.1.1.1.4.2 martin #define YYMAXDEPTH YYSTACKSIZE
218 1.1.1.1.4.2 martin #else
219 1.1.1.1.4.2 martin #ifdef YYMAXDEPTH
220 1.1.1.1.4.2 martin #define YYSTACKSIZE YYMAXDEPTH
221 1.1.1.1.4.2 martin #else
222 1.1.1.1.4.2 martin #define YYSTACKSIZE 10000
223 1.1.1.1.4.2 martin #define YYMAXDEPTH 10000
224 1.1.1.1.4.2 martin #endif
225 1.1.1.1.4.2 martin #endif
226 1.1.1.1.4.2 martin
227 1.1.1.1.4.2 martin #define YYINITSTACKSIZE 200
228 1.1.1.1.4.2 martin
229 1.1.1.1.4.2 martin typedef struct {
230 1.1.1.1.4.2 martin unsigned stacksize;
231 1.1.1.1.4.2 martin YYINT *s_base;
232 1.1.1.1.4.2 martin YYINT *s_mark;
233 1.1.1.1.4.2 martin YYINT *s_last;
234 1.1.1.1.4.2 martin YYSTYPE *l_base;
235 1.1.1.1.4.2 martin YYSTYPE *l_mark;
236 1.1.1.1.4.2 martin } YYSTACKDATA;
237 1.1.1.1.4.2 martin /* variables for the parser stack */
238 1.1.1.1.4.2 martin static YYSTACKDATA yystack;
239 1.1.1.1.4.2 martin #line 66 "calc.y"
240 1.1.1.1.4.2 martin /* start of programs */
241 1.1.1.1.4.2 martin
242 1.1.1.1.4.2 martin int
243 1.1.1.1.4.2 martin main (void)
244 1.1.1.1.4.2 martin {
245 1.1.1.1.4.2 martin while(!feof(stdin)) {
246 1.1.1.1.4.2 martin yyparse();
247 1.1.1.1.4.2 martin }
248 1.1.1.1.4.2 martin return 0;
249 1.1.1.1.4.2 martin }
250 1.1.1.1.4.2 martin
251 1.1.1.1.4.2 martin static void
252 1.1.1.1.4.2 martin yyerror(const char *s)
253 1.1.1.1.4.2 martin {
254 1.1.1.1.4.2 martin fprintf(stderr, "%s\n", s);
255 1.1.1.1.4.2 martin }
256 1.1.1.1.4.2 martin
257 1.1.1.1.4.2 martin int
258 1.1.1.1.4.2 martin yylex(void)
259 1.1.1.1.4.2 martin {
260 1.1.1.1.4.2 martin /* lexical analysis routine */
261 1.1.1.1.4.2 martin /* returns LETTER for a lower case letter, yylval = 0 through 25 */
262 1.1.1.1.4.2 martin /* return DIGIT for a digit, yylval = 0 through 9 */
263 1.1.1.1.4.2 martin /* all other characters are returned immediately */
264 1.1.1.1.4.2 martin
265 1.1.1.1.4.2 martin int c;
266 1.1.1.1.4.2 martin
267 1.1.1.1.4.2 martin while( (c=getchar()) == ' ' ) { /* skip blanks */ }
268 1.1.1.1.4.2 martin
269 1.1.1.1.4.2 martin /* c is now nonblank */
270 1.1.1.1.4.2 martin
271 1.1.1.1.4.2 martin if( islower( c )) {
272 1.1.1.1.4.2 martin yylval = c - 'a';
273 1.1.1.1.4.2 martin return ( LETTER );
274 1.1.1.1.4.2 martin }
275 1.1.1.1.4.2 martin if( isdigit( c )) {
276 1.1.1.1.4.2 martin yylval = c - '0';
277 1.1.1.1.4.2 martin return ( DIGIT );
278 1.1.1.1.4.2 martin }
279 1.1.1.1.4.2 martin return( c );
280 1.1.1.1.4.2 martin }
281 1.1.1.1.4.2 martin #line 280 "prefix.tab.c"
282 1.1.1.1.4.2 martin
283 1.1.1.1.4.2 martin #if YYDEBUG
284 1.1.1.1.4.2 martin #include <stdio.h> /* needed for printf */
285 1.1.1.1.4.2 martin #endif
286 1.1.1.1.4.2 martin
287 1.1.1.1.4.2 martin #include <stdlib.h> /* needed for malloc, etc */
288 1.1.1.1.4.2 martin #include <string.h> /* needed for memset */
289 1.1.1.1.4.2 martin
290 1.1.1.1.4.2 martin /* allocate initial stack or double stack size, up to YYMAXDEPTH */
291 1.1.1.1.4.2 martin static int yygrowstack(YYSTACKDATA *data)
292 1.1.1.1.4.2 martin {
293 1.1.1.1.4.2 martin int i;
294 1.1.1.1.4.2 martin unsigned newsize;
295 1.1.1.1.4.2 martin YYINT *newss;
296 1.1.1.1.4.2 martin YYSTYPE *newvs;
297 1.1.1.1.4.2 martin
298 1.1.1.1.4.2 martin if ((newsize = data->stacksize) == 0)
299 1.1.1.1.4.2 martin newsize = YYINITSTACKSIZE;
300 1.1.1.1.4.2 martin else if (newsize >= YYMAXDEPTH)
301 1.1.1.1.4.2 martin return YYENOMEM;
302 1.1.1.1.4.2 martin else if ((newsize *= 2) > YYMAXDEPTH)
303 1.1.1.1.4.2 martin newsize = YYMAXDEPTH;
304 1.1.1.1.4.2 martin
305 1.1.1.1.4.2 martin i = (int) (data->s_mark - data->s_base);
306 1.1.1.1.4.2 martin newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss));
307 1.1.1.1.4.2 martin if (newss == 0)
308 1.1.1.1.4.2 martin return YYENOMEM;
309 1.1.1.1.4.2 martin
310 1.1.1.1.4.2 martin data->s_base = newss;
311 1.1.1.1.4.2 martin data->s_mark = newss + i;
312 1.1.1.1.4.2 martin
313 1.1.1.1.4.2 martin newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
314 1.1.1.1.4.2 martin if (newvs == 0)
315 1.1.1.1.4.2 martin return YYENOMEM;
316 1.1.1.1.4.2 martin
317 1.1.1.1.4.2 martin data->l_base = newvs;
318 1.1.1.1.4.2 martin data->l_mark = newvs + i;
319 1.1.1.1.4.2 martin
320 1.1.1.1.4.2 martin data->stacksize = newsize;
321 1.1.1.1.4.2 martin data->s_last = data->s_base + newsize - 1;
322 1.1.1.1.4.2 martin return 0;
323 1.1.1.1.4.2 martin }
324 1.1.1.1.4.2 martin
325 1.1.1.1.4.2 martin #if YYPURE || defined(YY_NO_LEAKS)
326 1.1.1.1.4.2 martin static void yyfreestack(YYSTACKDATA *data)
327 1.1.1.1.4.2 martin {
328 1.1.1.1.4.2 martin free(data->s_base);
329 1.1.1.1.4.2 martin free(data->l_base);
330 1.1.1.1.4.2 martin memset(data, 0, sizeof(*data));
331 1.1.1.1.4.2 martin }
332 1.1.1.1.4.2 martin #else
333 1.1.1.1.4.2 martin #define yyfreestack(data) /* nothing */
334 1.1.1.1.4.2 martin #endif
335 1.1.1.1.4.2 martin
336 1.1.1.1.4.2 martin #define YYABORT goto yyabort
337 1.1.1.1.4.2 martin #define YYREJECT goto yyabort
338 1.1.1.1.4.2 martin #define YYACCEPT goto yyaccept
339 1.1.1.1.4.2 martin #define YYERROR goto yyerrlab
340 1.1.1.1.4.2 martin
341 1.1.1.1.4.2 martin int
342 1.1.1.1.4.2 martin YYPARSE_DECL()
343 1.1.1.1.4.2 martin {
344 1.1.1.1.4.2 martin int yym, yyn, yystate;
345 1.1.1.1.4.2 martin #if YYDEBUG
346 1.1.1.1.4.2 martin const char *yys;
347 1.1.1.1.4.2 martin
348 1.1.1.1.4.2 martin if ((yys = getenv("YYDEBUG")) != 0)
349 1.1.1.1.4.2 martin {
350 1.1.1.1.4.2 martin yyn = *yys;
351 1.1.1.1.4.2 martin if (yyn >= '0' && yyn <= '9')
352 1.1.1.1.4.2 martin yydebug = yyn - '0';
353 1.1.1.1.4.2 martin }
354 1.1.1.1.4.2 martin #endif
355 1.1.1.1.4.2 martin
356 1.1.1.1.4.2 martin yym = 0;
357 1.1.1.1.4.2 martin yyn = 0;
358 1.1.1.1.4.2 martin yynerrs = 0;
359 1.1.1.1.4.2 martin yyerrflag = 0;
360 1.1.1.1.4.2 martin yychar = YYEMPTY;
361 1.1.1.1.4.2 martin yystate = 0;
362 1.1.1.1.4.2 martin
363 1.1.1.1.4.2 martin #if YYPURE
364 1.1.1.1.4.2 martin memset(&yystack, 0, sizeof(yystack));
365 1.1.1.1.4.2 martin #endif
366 1.1.1.1.4.2 martin
367 1.1.1.1.4.2 martin if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
368 1.1.1.1.4.2 martin yystack.s_mark = yystack.s_base;
369 1.1.1.1.4.2 martin yystack.l_mark = yystack.l_base;
370 1.1.1.1.4.2 martin yystate = 0;
371 1.1.1.1.4.2 martin *yystack.s_mark = 0;
372 1.1.1.1.4.2 martin
373 1.1.1.1.4.2 martin yyloop:
374 1.1.1.1.4.2 martin if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
375 1.1.1.1.4.2 martin if (yychar < 0)
376 1.1.1.1.4.2 martin {
377 1.1.1.1.4.2 martin yychar = YYLEX;
378 1.1.1.1.4.2 martin if (yychar < 0) yychar = YYEOF;
379 1.1.1.1.4.2 martin #if YYDEBUG
380 1.1.1.1.4.2 martin if (yydebug)
381 1.1.1.1.4.2 martin {
382 1.1.1.1.4.2 martin if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
383 1.1.1.1.4.2 martin printf("%sdebug: state %d, reading %d (%s)\n",
384 1.1.1.1.4.2 martin YYPREFIX, yystate, yychar, yys);
385 1.1.1.1.4.2 martin }
386 1.1.1.1.4.2 martin #endif
387 1.1.1.1.4.2 martin }
388 1.1.1.1.4.2 martin if (((yyn = yysindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
389 1.1.1.1.4.2 martin yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
390 1.1.1.1.4.2 martin {
391 1.1.1.1.4.2 martin #if YYDEBUG
392 1.1.1.1.4.2 martin if (yydebug)
393 1.1.1.1.4.2 martin printf("%sdebug: state %d, shifting to state %d\n",
394 1.1.1.1.4.2 martin YYPREFIX, yystate, yytable[yyn]);
395 1.1.1.1.4.2 martin #endif
396 1.1.1.1.4.2 martin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
397 1.1.1.1.4.2 martin yystate = yytable[yyn];
398 1.1.1.1.4.2 martin *++yystack.s_mark = yytable[yyn];
399 1.1.1.1.4.2 martin *++yystack.l_mark = yylval;
400 1.1.1.1.4.2 martin yychar = YYEMPTY;
401 1.1.1.1.4.2 martin if (yyerrflag > 0) --yyerrflag;
402 1.1.1.1.4.2 martin goto yyloop;
403 1.1.1.1.4.2 martin }
404 1.1.1.1.4.2 martin if (((yyn = yyrindex[yystate]) != 0) && (yyn += yychar) >= 0 &&
405 1.1.1.1.4.2 martin yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yychar)
406 1.1.1.1.4.2 martin {
407 1.1.1.1.4.2 martin yyn = yytable[yyn];
408 1.1.1.1.4.2 martin goto yyreduce;
409 1.1.1.1.4.2 martin }
410 1.1.1.1.4.2 martin if (yyerrflag != 0) goto yyinrecovery;
411 1.1.1.1.4.2 martin
412 1.1.1.1.4.2 martin YYERROR_CALL("syntax error");
413 1.1.1.1.4.2 martin
414 1.1.1.1.4.2 martin goto yyerrlab; /* redundant goto avoids 'unused label' warning */
415 1.1.1.1.4.2 martin yyerrlab:
416 1.1.1.1.4.2 martin ++yynerrs;
417 1.1.1.1.4.2 martin
418 1.1.1.1.4.2 martin yyinrecovery:
419 1.1.1.1.4.2 martin if (yyerrflag < 3)
420 1.1.1.1.4.2 martin {
421 1.1.1.1.4.2 martin yyerrflag = 3;
422 1.1.1.1.4.2 martin for (;;)
423 1.1.1.1.4.2 martin {
424 1.1.1.1.4.2 martin if (((yyn = yysindex[*yystack.s_mark]) != 0) && (yyn += YYERRCODE) >= 0 &&
425 1.1.1.1.4.2 martin yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) YYERRCODE)
426 1.1.1.1.4.2 martin {
427 1.1.1.1.4.2 martin #if YYDEBUG
428 1.1.1.1.4.2 martin if (yydebug)
429 1.1.1.1.4.2 martin printf("%sdebug: state %d, error recovery shifting\
430 1.1.1.1.4.2 martin to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
431 1.1.1.1.4.2 martin #endif
432 1.1.1.1.4.2 martin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
433 1.1.1.1.4.2 martin yystate = yytable[yyn];
434 1.1.1.1.4.2 martin *++yystack.s_mark = yytable[yyn];
435 1.1.1.1.4.2 martin *++yystack.l_mark = yylval;
436 1.1.1.1.4.2 martin goto yyloop;
437 1.1.1.1.4.2 martin }
438 1.1.1.1.4.2 martin else
439 1.1.1.1.4.2 martin {
440 1.1.1.1.4.2 martin #if YYDEBUG
441 1.1.1.1.4.2 martin if (yydebug)
442 1.1.1.1.4.2 martin printf("%sdebug: error recovery discarding state %d\n",
443 1.1.1.1.4.2 martin YYPREFIX, *yystack.s_mark);
444 1.1.1.1.4.2 martin #endif
445 1.1.1.1.4.2 martin if (yystack.s_mark <= yystack.s_base) goto yyabort;
446 1.1.1.1.4.2 martin --yystack.s_mark;
447 1.1.1.1.4.2 martin --yystack.l_mark;
448 1.1.1.1.4.2 martin }
449 1.1.1.1.4.2 martin }
450 1.1.1.1.4.2 martin }
451 1.1.1.1.4.2 martin else
452 1.1.1.1.4.2 martin {
453 1.1.1.1.4.2 martin if (yychar == YYEOF) goto yyabort;
454 1.1.1.1.4.2 martin #if YYDEBUG
455 1.1.1.1.4.2 martin if (yydebug)
456 1.1.1.1.4.2 martin {
457 1.1.1.1.4.2 martin if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
458 1.1.1.1.4.2 martin printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
459 1.1.1.1.4.2 martin YYPREFIX, yystate, yychar, yys);
460 1.1.1.1.4.2 martin }
461 1.1.1.1.4.2 martin #endif
462 1.1.1.1.4.2 martin yychar = YYEMPTY;
463 1.1.1.1.4.2 martin goto yyloop;
464 1.1.1.1.4.2 martin }
465 1.1.1.1.4.2 martin
466 1.1.1.1.4.2 martin yyreduce:
467 1.1.1.1.4.2 martin #if YYDEBUG
468 1.1.1.1.4.2 martin if (yydebug)
469 1.1.1.1.4.2 martin printf("%sdebug: state %d, reducing by rule %d (%s)\n",
470 1.1.1.1.4.2 martin YYPREFIX, yystate, yyn, yyrule[yyn]);
471 1.1.1.1.4.2 martin #endif
472 1.1.1.1.4.2 martin yym = yylen[yyn];
473 1.1.1.1.4.2 martin if (yym > 0)
474 1.1.1.1.4.2 martin yyval = yystack.l_mark[1-yym];
475 1.1.1.1.4.2 martin else
476 1.1.1.1.4.2 martin memset(&yyval, 0, sizeof yyval);
477 1.1.1.1.4.2 martin
478 1.1.1.1.4.2 martin switch (yyn)
479 1.1.1.1.4.2 martin {
480 1.1.1.1.4.2 martin case 3:
481 1.1.1.1.4.2 martin #line 28 "calc.y"
482 1.1.1.1.4.2 martin { yyerrok ; }
483 1.1.1.1.4.2 martin break;
484 1.1.1.1.4.2 martin case 4:
485 1.1.1.1.4.2 martin #line 32 "calc.y"
486 1.1.1.1.4.2 martin { printf("%d\n",yystack.l_mark[0]);}
487 1.1.1.1.4.2 martin break;
488 1.1.1.1.4.2 martin case 5:
489 1.1.1.1.4.2 martin #line 34 "calc.y"
490 1.1.1.1.4.2 martin { regs[yystack.l_mark[-2]] = yystack.l_mark[0]; }
491 1.1.1.1.4.2 martin break;
492 1.1.1.1.4.2 martin case 6:
493 1.1.1.1.4.2 martin #line 38 "calc.y"
494 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-1]; }
495 1.1.1.1.4.2 martin break;
496 1.1.1.1.4.2 martin case 7:
497 1.1.1.1.4.2 martin #line 40 "calc.y"
498 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] + yystack.l_mark[0]; }
499 1.1.1.1.4.2 martin break;
500 1.1.1.1.4.2 martin case 8:
501 1.1.1.1.4.2 martin #line 42 "calc.y"
502 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] - yystack.l_mark[0]; }
503 1.1.1.1.4.2 martin break;
504 1.1.1.1.4.2 martin case 9:
505 1.1.1.1.4.2 martin #line 44 "calc.y"
506 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] * yystack.l_mark[0]; }
507 1.1.1.1.4.2 martin break;
508 1.1.1.1.4.2 martin case 10:
509 1.1.1.1.4.2 martin #line 46 "calc.y"
510 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] / yystack.l_mark[0]; }
511 1.1.1.1.4.2 martin break;
512 1.1.1.1.4.2 martin case 11:
513 1.1.1.1.4.2 martin #line 48 "calc.y"
514 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] % yystack.l_mark[0]; }
515 1.1.1.1.4.2 martin break;
516 1.1.1.1.4.2 martin case 12:
517 1.1.1.1.4.2 martin #line 50 "calc.y"
518 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] & yystack.l_mark[0]; }
519 1.1.1.1.4.2 martin break;
520 1.1.1.1.4.2 martin case 13:
521 1.1.1.1.4.2 martin #line 52 "calc.y"
522 1.1.1.1.4.2 martin { yyval = yystack.l_mark[-2] | yystack.l_mark[0]; }
523 1.1.1.1.4.2 martin break;
524 1.1.1.1.4.2 martin case 14:
525 1.1.1.1.4.2 martin #line 54 "calc.y"
526 1.1.1.1.4.2 martin { yyval = - yystack.l_mark[0]; }
527 1.1.1.1.4.2 martin break;
528 1.1.1.1.4.2 martin case 15:
529 1.1.1.1.4.2 martin #line 56 "calc.y"
530 1.1.1.1.4.2 martin { yyval = regs[yystack.l_mark[0]]; }
531 1.1.1.1.4.2 martin break;
532 1.1.1.1.4.2 martin case 17:
533 1.1.1.1.4.2 martin #line 61 "calc.y"
534 1.1.1.1.4.2 martin { yyval = yystack.l_mark[0]; base = (yystack.l_mark[0]==0) ? 8 : 10; }
535 1.1.1.1.4.2 martin break;
536 1.1.1.1.4.2 martin case 18:
537 1.1.1.1.4.2 martin #line 63 "calc.y"
538 1.1.1.1.4.2 martin { yyval = base * yystack.l_mark[-1] + yystack.l_mark[0]; }
539 1.1.1.1.4.2 martin break;
540 1.1.1.1.4.2 martin #line 539 "prefix.tab.c"
541 1.1.1.1.4.2 martin }
542 1.1.1.1.4.2 martin yystack.s_mark -= yym;
543 1.1.1.1.4.2 martin yystate = *yystack.s_mark;
544 1.1.1.1.4.2 martin yystack.l_mark -= yym;
545 1.1.1.1.4.2 martin yym = yylhs[yyn];
546 1.1.1.1.4.2 martin if (yystate == 0 && yym == 0)
547 1.1.1.1.4.2 martin {
548 1.1.1.1.4.2 martin #if YYDEBUG
549 1.1.1.1.4.2 martin if (yydebug)
550 1.1.1.1.4.2 martin printf("%sdebug: after reduction, shifting from state 0 to\
551 1.1.1.1.4.2 martin state %d\n", YYPREFIX, YYFINAL);
552 1.1.1.1.4.2 martin #endif
553 1.1.1.1.4.2 martin yystate = YYFINAL;
554 1.1.1.1.4.2 martin *++yystack.s_mark = YYFINAL;
555 1.1.1.1.4.2 martin *++yystack.l_mark = yyval;
556 1.1.1.1.4.2 martin if (yychar < 0)
557 1.1.1.1.4.2 martin {
558 1.1.1.1.4.2 martin yychar = YYLEX;
559 1.1.1.1.4.2 martin if (yychar < 0) yychar = YYEOF;
560 1.1.1.1.4.2 martin #if YYDEBUG
561 1.1.1.1.4.2 martin if (yydebug)
562 1.1.1.1.4.2 martin {
563 1.1.1.1.4.2 martin if ((yys = yyname[YYTRANSLATE(yychar)]) == NULL) yys = yyname[YYUNDFTOKEN];
564 1.1.1.1.4.2 martin printf("%sdebug: state %d, reading %d (%s)\n",
565 1.1.1.1.4.2 martin YYPREFIX, YYFINAL, yychar, yys);
566 1.1.1.1.4.2 martin }
567 1.1.1.1.4.2 martin #endif
568 1.1.1.1.4.2 martin }
569 1.1.1.1.4.2 martin if (yychar == YYEOF) goto yyaccept;
570 1.1.1.1.4.2 martin goto yyloop;
571 1.1.1.1.4.2 martin }
572 1.1.1.1.4.2 martin if (((yyn = yygindex[yym]) != 0) && (yyn += yystate) >= 0 &&
573 1.1.1.1.4.2 martin yyn <= YYTABLESIZE && yycheck[yyn] == (YYINT) yystate)
574 1.1.1.1.4.2 martin yystate = yytable[yyn];
575 1.1.1.1.4.2 martin else
576 1.1.1.1.4.2 martin yystate = yydgoto[yym];
577 1.1.1.1.4.2 martin #if YYDEBUG
578 1.1.1.1.4.2 martin if (yydebug)
579 1.1.1.1.4.2 martin printf("%sdebug: after reduction, shifting from state %d \
580 1.1.1.1.4.2 martin to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
581 1.1.1.1.4.2 martin #endif
582 1.1.1.1.4.2 martin if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow;
583 1.1.1.1.4.2 martin *++yystack.s_mark = (YYINT) yystate;
584 1.1.1.1.4.2 martin *++yystack.l_mark = yyval;
585 1.1.1.1.4.2 martin goto yyloop;
586 1.1.1.1.4.2 martin
587 1.1.1.1.4.2 martin yyoverflow:
588 1.1.1.1.4.2 martin YYERROR_CALL("yacc stack overflow");
589 1.1.1.1.4.2 martin
590 1.1.1.1.4.2 martin yyabort:
591 1.1.1.1.4.2 martin yyfreestack(&yystack);
592 1.1.1.1.4.2 martin return (1);
593 1.1.1.1.4.2 martin
594 1.1.1.1.4.2 martin yyaccept:
595 1.1.1.1.4.2 martin yyfreestack(&yystack);
596 1.1.1.1.4.2 martin return (0);
597 1.1.1.1.4.2 martin }
598