xref: /netbsd/tools/m4/bootstrap/parser.c (revision 6550d01e)
1 #if HAVE_NBTOOL_CONFIG_H
2 #include "nbtool_config.h"
3 #endif
4 #include <stdlib.h>
5 #ifndef lint
6 #if 0
7 static char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
8 #else
9 #if defined(__NetBSD__) && defined(__IDSTRING)
10 __IDSTRING(yyrcsid, "NetBSD: skeleton.c,v 1.29 2008/07/18 14:25:37 drochner Exp ");
11 #endif /* __NetBSD__ && __IDSTRING */
12 #endif /* 0 */
13 #endif /* lint */
14 #define YYBYACC 1
15 #define YYMAJOR 1
16 #define YYMINOR 9
17 #define YYLEX yylex()
18 #define YYEMPTY -1
19 #define yyclearin (yychar=(YYEMPTY))
20 #define yyerrok (yyerrflag=0)
21 #define YYRECOVERING (yyerrflag!=0)
22 #define YYPREFIX "yy"
23 #line 2 "../../../usr.bin/m4/parser.y"
24 /* NetBSD: parser.y,v 1.2 2009/10/26 21:11:28 christos Exp  */
25 /* $OpenBSD: parser.y,v 1.6 2008/08/21 21:00:14 espie Exp $ */
26 /*
27  * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
28  *
29  * Permission to use, copy, modify, and distribute this software for any
30  * purpose with or without fee is hereby granted, provided that the above
31  * copyright notice and this permission notice appear in all copies.
32  *
33  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
34  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
35  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
36  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
37  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
38  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
39  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
40  */
41 #if HAVE_NBTOOL_CONFIG_H
42 #include "nbtool_config.h"
43 #endif
44 __RCSID("NetBSD: parser.y,v 1.2 2009/10/26 21:11:28 christos Exp ");
45 #include <stdint.h>
46 #define YYSTYPE	int32_t
47 extern int32_t end_result;
48 extern int yylex(void);
49 extern int yyerror(const char *);
50 #line 48 "parser.c"
51 #define NUMBER 257
52 #define ERROR 258
53 #define LOR 259
54 #define LAND 260
55 #define EQ 261
56 #define NE 262
57 #define LE 263
58 #define GE 264
59 #define LSHIFT 265
60 #define RSHIFT 266
61 #define UMINUS 267
62 #define UPLUS 268
63 #define YYERRCODE 256
64 const short yylhs[] = {                                        -1,
65     0,    1,    1,    1,    1,    1,    1,    1,    1,    1,
66     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
67     1,    1,    1,    1,    1,
68 };
69 const short yylen[] = {                                         2,
70     1,    3,    3,    3,    3,    3,    3,    3,    3,    3,
71     3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
72     2,    2,    2,    2,    1,
73 };
74 const short yydefred[] = {                                      0,
75    25,    0,    0,    0,    0,    0,    0,    0,   22,   21,
76    23,   24,    0,    0,    0,    0,    0,    0,    0,    0,
77     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
78     0,   20,    0,    0,    0,    0,    0,    0,    0,    0,
79     0,    0,    0,    0,    0,    0,    0,    4,    5,    6,
80 };
81 const short yydgoto[] = {                                       7,
82     8,
83 };
84 const short yysindex[] = {                                    -13,
85     0,  -13,  -13,  -13,  -13,  -13,    0,  190,    0,    0,
86     0,    0,  114,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
87   -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,  -13,
88   -13,    0,  321,  347,  159,  397,  354,  -24,  -24,  -35,
89   -35,  -35,  -35,  136,  136,  -31,  -31,    0,    0,    0,
90 };
91 const short yyrindex[] = {                                      0,
92     0,    0,    0,    0,    0,    0,    0,    3,    0,    0,
93     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
94     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
95     0,    0,   65,   56,   51,   48,   74,   60,   66,   34,
96    40,   76,   83,   17,   26,    1,    9,    0,    0,    0,
97 };
98 const short yygindex[] = {                                      0,
99   458,
100 };
101 #define YYTABLESIZE 663
102 const short yytable[] = {                                       0,
103     2,   31,    1,    0,    0,   31,   29,   27,    3,   28,
104    29,   30,   31,    0,    0,   30,    7,   29,   27,    4,
105    28,    0,   30,    0,    0,    8,    6,    0,    0,    2,
106     0,    3,    0,    9,    0,   21,    0,   23,    2,   11,
107     0,    2,    0,    2,    0,    2,    3,   16,    0,    3,
108    17,    3,    0,    3,    7,   18,    0,    7,    0,   13,
109     2,    0,    2,    8,   19,   14,    8,    0,    3,    0,
110     3,    9,    0,   15,    9,   10,    7,   11,    7,    0,
111    11,    0,   12,    0,    0,    8,    0,    8,   16,    0,
112     0,   17,    0,    9,    2,    9,   18,   13,    0,   11,
113    13,   11,    3,   14,    0,   19,   14,    0,    0,    0,
114     7,   15,    5,   10,   15,    0,   10,    0,    0,    8,
115    12,    0,    0,   12,    2,    0,    0,    9,    0,    0,
116     0,    0,    3,   11,    0,   10,    0,   10,    0,    0,
117     7,   16,   12,    0,   12,    0,    0,    0,    0,    8,
118    31,   18,    0,   13,   32,   29,   27,    9,   28,   14,
119    30,    0,    0,   11,    0,    0,    0,   15,    0,   10,
120     0,   16,   31,   21,   17,   23,   12,   29,   27,    0,
121    28,    0,   30,   13,    0,    0,    0,    0,    0,   14,
122     0,    0,    0,    0,    0,   31,   18,   15,    0,   10,
123    29,   27,    0,   28,    0,   30,   12,   17,    0,    0,
124     0,    0,    0,    0,    0,    0,    0,    0,   21,    0,
125    23,    0,    0,    0,    0,    0,   31,   18,    0,   25,
126    26,   29,   27,    0,   28,    0,   30,   16,   22,   24,
127    25,   26,    0,    1,    0,    0,    0,    0,    0,   21,
128     0,   23,   17,    0,    0,    0,    0,    0,    0,    2,
129     2,    2,    2,    2,    2,    2,    2,    3,    3,    3,
130     3,    3,    3,    3,    3,    7,    7,    7,    7,    7,
131     7,    7,    7,   17,    8,    8,    8,    8,    8,    8,
132     8,    8,    9,    9,    9,    9,    9,    9,   11,   11,
133    11,   11,   11,   11,    0,    0,   16,   16,    0,   17,
134    17,    0,    0,   16,   18,   18,    0,    0,   13,   13,
135    13,   13,    0,   19,   14,   14,   14,   14,    0,    0,
136     0,    0,   15,   15,   10,   10,   10,   10,   10,   10,
137     0,   12,   12,   12,   12,   12,   12,    0,    0,    0,
138     0,    0,    0,    0,    0,    0,    0,   31,   18,    0,
139     0,    0,   29,   27,    0,   28,    0,   30,    0,    0,
140     0,    0,   14,   15,   19,   20,   22,   24,   25,   26,
141    21,    0,   23,   31,   18,    0,    0,    0,   29,   27,
142    31,   28,    0,   30,    0,   29,   27,    0,   28,    0,
143    30,    0,    0,    0,    0,    0,   21,    0,   23,    0,
144     0,    0,    0,   21,   17,   23,    0,    0,    0,   19,
145    20,   22,   24,   25,   26,    0,    0,    0,    0,    0,
146     0,    0,    0,   31,   18,    0,    0,    0,   29,   27,
147    17,   28,    0,   30,   16,    0,    0,    0,   14,   15,
148    19,   20,   22,   24,   25,   26,   21,    0,   23,    9,
149    10,   11,   12,   13,    0,    0,    0,    0,    0,    0,
150    16,   33,   34,   35,   36,   37,   38,   39,   40,   41,
151    42,   43,   44,   45,   46,   47,   48,   49,   50,    0,
152     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
153     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
154     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
155     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
156     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
157     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
158     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
159     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
160     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
161    15,   19,   20,   22,   24,   25,   26,    0,    0,    0,
162     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
163     0,    0,    0,    0,    0,    0,    0,   19,   20,   22,
164    24,   25,   26,    0,   19,   20,   22,   24,   25,   26,
165     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
166     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
167     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
168     0,    0,    0,    0,    0,    0,    0,   19,   20,   22,
169    24,   25,   26,
170 };
171 const short yycheck[] = {                                      -1,
172     0,   37,    0,   -1,   -1,   37,   42,   43,    0,   45,
173    42,   47,   37,   -1,   -1,   47,    0,   42,   43,   33,
174    45,   -1,   47,   -1,   -1,    0,   40,   -1,   -1,   43,
175    -1,   45,   -1,    0,   -1,   60,   -1,   62,   38,    0,
176    -1,   41,   -1,   43,   -1,   45,   38,    0,   -1,   41,
177     0,   43,   -1,   45,   38,    0,   -1,   41,   -1,    0,
178    60,   -1,   62,   38,    0,    0,   41,   -1,   60,   -1,
179    62,   38,   -1,    0,   41,    0,   60,   38,   62,   -1,
180    41,   -1,    0,   -1,   -1,   60,   -1,   62,   41,   -1,
181    -1,   41,   -1,   60,   94,   62,   41,   38,   -1,   60,
182    41,   62,   94,   38,   -1,   41,   41,   -1,   -1,   -1,
183    94,   38,  126,   38,   41,   -1,   41,   -1,   -1,   94,
184    38,   -1,   -1,   41,  124,   -1,   -1,   94,   -1,   -1,
185    -1,   -1,  124,   94,   -1,   60,   -1,   62,   -1,   -1,
186   124,   94,   60,   -1,   62,   -1,   -1,   -1,   -1,  124,
187    37,   38,   -1,   94,   41,   42,   43,  124,   45,   94,
188    47,   -1,   -1,  124,   -1,   -1,   -1,   94,   -1,   94,
189    -1,  124,   37,   60,  124,   62,   94,   42,   43,   -1,
190    45,   -1,   47,  124,   -1,   -1,   -1,   -1,   -1,  124,
191    -1,   -1,   -1,   -1,   -1,   37,   38,  124,   -1,  124,
192    42,   43,   -1,   45,   -1,   47,  124,   94,   -1,   -1,
193    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,   -1,
194    62,   -1,   -1,   -1,   -1,   -1,   37,   38,   -1,  265,
195   266,   42,   43,   -1,   45,   -1,   47,  124,  263,  264,
196   265,  266,   -1,  257,   -1,   -1,   -1,   -1,   -1,   60,
197    -1,   62,   94,   -1,   -1,   -1,   -1,   -1,   -1,  259,
198   260,  261,  262,  263,  264,  265,  266,  259,  260,  261,
199   262,  263,  264,  265,  266,  259,  260,  261,  262,  263,
200   264,  265,  266,   94,  259,  260,  261,  262,  263,  264,
201   265,  266,  259,  260,  261,  262,  263,  264,  259,  260,
202   261,  262,  263,  264,   -1,   -1,  259,  260,   -1,  259,
203   260,   -1,   -1,  124,  259,  260,   -1,   -1,  259,  260,
204   261,  262,   -1,  259,  259,  260,  261,  262,   -1,   -1,
205    -1,   -1,  259,  260,  259,  260,  261,  262,  263,  264,
206    -1,  259,  260,  261,  262,  263,  264,   -1,   -1,   -1,
207    -1,   -1,   -1,   -1,   -1,   -1,   -1,   37,   38,   -1,
208    -1,   -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,
209    -1,   -1,  259,  260,  261,  262,  263,  264,  265,  266,
210    60,   -1,   62,   37,   38,   -1,   -1,   -1,   42,   43,
211    37,   45,   -1,   47,   -1,   42,   43,   -1,   45,   -1,
212    47,   -1,   -1,   -1,   -1,   -1,   60,   -1,   62,   -1,
213    -1,   -1,   -1,   60,   94,   62,   -1,   -1,   -1,  261,
214   262,  263,  264,  265,  266,   -1,   -1,   -1,   -1,   -1,
215    -1,   -1,   -1,   37,   38,   -1,   -1,   -1,   42,   43,
216    94,   45,   -1,   47,  124,   -1,   -1,   -1,  259,  260,
217   261,  262,  263,  264,  265,  266,   60,   -1,   62,    2,
218     3,    4,    5,    6,   -1,   -1,   -1,   -1,   -1,   -1,
219   124,   14,   15,   16,   17,   18,   19,   20,   21,   22,
220    23,   24,   25,   26,   27,   28,   29,   30,   31,   -1,
221    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
222    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
223    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
224    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
225    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
226    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
227    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
228    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
229    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
230   260,  261,  262,  263,  264,  265,  266,   -1,   -1,   -1,
231    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
232    -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,  262,  263,
233   264,  265,  266,   -1,  261,  262,  263,  264,  265,  266,
234    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
235    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
236    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
237    -1,   -1,   -1,   -1,   -1,   -1,   -1,  261,  262,  263,
238   264,  265,  266,
239 };
240 #define YYFINAL 7
241 #ifndef YYDEBUG
242 #define YYDEBUG 0
243 #endif
244 #define YYMAXTOKEN 268
245 #if YYDEBUG
246 const char * const yyname[] = {
247 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
248 "'!'",0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
249 0,0,0,0,0,"'<'",0,"'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
250 0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,
251 "'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
252 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
253 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
254 0,0,0,0,0,0,0,0,0,0,0,0,0,"NUMBER","ERROR","LOR","LAND","EQ","NE","LE","GE",
255 "LSHIFT","RSHIFT","UMINUS","UPLUS",
256 };
257 const char * const yyrule[] = {
258 "$accept : top",
259 "top : expr",
260 "expr : expr '+' expr",
261 "expr : expr '-' expr",
262 "expr : expr '*' expr",
263 "expr : expr '/' expr",
264 "expr : expr '%' expr",
265 "expr : expr LSHIFT expr",
266 "expr : expr RSHIFT expr",
267 "expr : expr '<' expr",
268 "expr : expr '>' expr",
269 "expr : expr LE expr",
270 "expr : expr GE expr",
271 "expr : expr EQ expr",
272 "expr : expr NE expr",
273 "expr : expr '&' expr",
274 "expr : expr '^' expr",
275 "expr : expr '|' expr",
276 "expr : expr LAND expr",
277 "expr : expr LOR expr",
278 "expr : '(' expr ')'",
279 "expr : '-' expr",
280 "expr : '+' expr",
281 "expr : '!' expr",
282 "expr : '~' expr",
283 "expr : NUMBER",
284 };
285 #endif
286 #ifndef YYSTYPE
287 typedef int YYSTYPE;
288 #endif
289 #ifdef YYSTACKSIZE
290 #undef YYMAXDEPTH
291 #define YYMAXDEPTH YYSTACKSIZE
292 #else
293 #ifdef YYMAXDEPTH
294 #define YYSTACKSIZE YYMAXDEPTH
295 #else
296 #define YYSTACKSIZE 10000
297 #define YYMAXDEPTH 10000
298 #endif
299 #endif
300 #define YYINITSTACKSIZE 200
301 int yydebug;
302 int yynerrs;
303 int yyerrflag;
304 int yychar;
305 short *yyssp;
306 YYSTYPE *yyvsp;
307 YYSTYPE yyval;
308 static YYSTYPE yyvalzero;
309 YYSTYPE yylval;
310 short *yyss;
311 short *yysslim;
312 YYSTYPE *yyvs;
313 int yystacksize;
314 int yyparse(void);
315 #line 85 "../../../usr.bin/m4/parser.y"
316 
317 #line 315 "parser.c"
318 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
319 static int yygrowstack(void);
320 static int yygrowstack(void)
321 {
322     int newsize, i;
323     short *newss;
324     YYSTYPE *newvs;
325 
326     if ((newsize = yystacksize) == 0)
327         newsize = YYINITSTACKSIZE;
328     else if (newsize >= YYMAXDEPTH)
329         return -1;
330     else if ((newsize *= 2) > YYMAXDEPTH)
331         newsize = YYMAXDEPTH;
332     i = yyssp - yyss;
333     if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL)
334         return -1;
335     yyss = newss;
336     yyssp = newss + i;
337     if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL)
338         return -1;
339     yyvs = newvs;
340     yyvsp = newvs + i;
341     yystacksize = newsize;
342     yysslim = yyss + newsize - 1;
343     return 0;
344 }
345 
346 #define YYABORT goto yyabort
347 #define YYREJECT goto yyabort
348 #define YYACCEPT goto yyaccept
349 #define YYERROR goto yyerrlab
350 int
351 yyparse(void)
352 {
353     int yym, yyn, yystate;
354 #if YYDEBUG
355     const char *yys;
356 
357     if ((yys = getenv("YYDEBUG")) != NULL)
358     {
359         yyn = *yys;
360         if (yyn >= '0' && yyn <= '9')
361             yydebug = yyn - '0';
362     }
363 #endif
364 
365     yynerrs = 0;
366     yyerrflag = 0;
367     yychar = (-1);
368 
369     if (yyss == NULL && yygrowstack()) goto yyoverflow;
370     yyssp = yyss;
371     yyvsp = yyvs;
372     *yyssp = yystate = 0;
373 
374 yyloop:
375     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
376     if (yychar < 0)
377     {
378         if ((yychar = yylex()) < 0) yychar = 0;
379 #if YYDEBUG
380         if (yydebug)
381         {
382             yys = 0;
383             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
384             if (!yys) yys = "illegal-symbol";
385             printf("%sdebug: state %d, reading %d (%s)\n",
386                     YYPREFIX, yystate, yychar, yys);
387         }
388 #endif
389     }
390     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
391             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
392     {
393 #if YYDEBUG
394         if (yydebug)
395             printf("%sdebug: state %d, shifting to state %d\n",
396                     YYPREFIX, yystate, yytable[yyn]);
397 #endif
398         if (yyssp >= yysslim && yygrowstack())
399         {
400             goto yyoverflow;
401         }
402         *++yyssp = yystate = yytable[yyn];
403         *++yyvsp = yylval;
404         yychar = (-1);
405         if (yyerrflag > 0)  --yyerrflag;
406         goto yyloop;
407     }
408     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
409             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
410     {
411         yyn = yytable[yyn];
412         goto yyreduce;
413     }
414     if (yyerrflag) goto yyinrecovery;
415     goto yynewerror;
416 yynewerror:
417     yyerror("syntax error");
418     goto yyerrlab;
419 yyerrlab:
420     ++yynerrs;
421 yyinrecovery:
422     if (yyerrflag < 3)
423     {
424         yyerrflag = 3;
425         for (;;)
426         {
427             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
428                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
429             {
430 #if YYDEBUG
431                 if (yydebug)
432                     printf("%sdebug: state %d, error recovery shifting\
433  to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
434 #endif
435                 if (yyssp >= yysslim && yygrowstack())
436                 {
437                     goto yyoverflow;
438                 }
439                 *++yyssp = yystate = yytable[yyn];
440                 *++yyvsp = yylval;
441                 goto yyloop;
442             }
443             else
444             {
445 #if YYDEBUG
446                 if (yydebug)
447                     printf("%sdebug: error recovery discarding state %d\n",
448                             YYPREFIX, *yyssp);
449 #endif
450                 if (yyssp <= yyss) goto yyabort;
451                 --yyssp;
452                 --yyvsp;
453             }
454         }
455     }
456     else
457     {
458         if (yychar == 0) goto yyabort;
459 #if YYDEBUG
460         if (yydebug)
461         {
462             yys = 0;
463             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
464             if (!yys) yys = "illegal-symbol";
465             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
466                     YYPREFIX, yystate, yychar, yys);
467         }
468 #endif
469         yychar = (-1);
470         goto yyloop;
471     }
472 yyreduce:
473 #if YYDEBUG
474     if (yydebug)
475         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
476                 YYPREFIX, yystate, yyn, yyrule[yyn]);
477 #endif
478     yym = yylen[yyn];
479     if (yym)
480         yyval = yyvsp[1-yym];
481     else
482         yyval = yyvalzero;
483     switch (yyn)
484     {
485 case 1:
486 #line 45 "../../../usr.bin/m4/parser.y"
487 { end_result = yyvsp[0]; }
488 break;
489 case 2:
490 #line 47 "../../../usr.bin/m4/parser.y"
491 { yyval = yyvsp[-2] + yyvsp[0]; }
492 break;
493 case 3:
494 #line 48 "../../../usr.bin/m4/parser.y"
495 { yyval = yyvsp[-2] - yyvsp[0]; }
496 break;
497 case 4:
498 #line 49 "../../../usr.bin/m4/parser.y"
499 { yyval = yyvsp[-2] * yyvsp[0]; }
500 break;
501 case 5:
502 #line 50 "../../../usr.bin/m4/parser.y"
503 {
504 		if (yyvsp[0] == 0) {
505 			yyerror("division by zero");
506 			exit(1);
507 		}
508 		yyval = yyvsp[-2] / yyvsp[0];
509 	}
510 break;
511 case 6:
512 #line 57 "../../../usr.bin/m4/parser.y"
513 {
514 		if (yyvsp[0] == 0) {
515 			yyerror("modulo zero");
516 			exit(1);
517 		}
518 		yyval = yyvsp[-2] % yyvsp[0];
519 	}
520 break;
521 case 7:
522 #line 64 "../../../usr.bin/m4/parser.y"
523 { yyval = yyvsp[-2] << yyvsp[0]; }
524 break;
525 case 8:
526 #line 65 "../../../usr.bin/m4/parser.y"
527 { yyval = yyvsp[-2] >> yyvsp[0]; }
528 break;
529 case 9:
530 #line 66 "../../../usr.bin/m4/parser.y"
531 { yyval = yyvsp[-2] < yyvsp[0]; }
532 break;
533 case 10:
534 #line 67 "../../../usr.bin/m4/parser.y"
535 { yyval = yyvsp[-2] > yyvsp[0]; }
536 break;
537 case 11:
538 #line 68 "../../../usr.bin/m4/parser.y"
539 { yyval = yyvsp[-2] <= yyvsp[0]; }
540 break;
541 case 12:
542 #line 69 "../../../usr.bin/m4/parser.y"
543 { yyval = yyvsp[-2] >= yyvsp[0]; }
544 break;
545 case 13:
546 #line 70 "../../../usr.bin/m4/parser.y"
547 { yyval = yyvsp[-2] == yyvsp[0]; }
548 break;
549 case 14:
550 #line 71 "../../../usr.bin/m4/parser.y"
551 { yyval = yyvsp[-2] != yyvsp[0]; }
552 break;
553 case 15:
554 #line 72 "../../../usr.bin/m4/parser.y"
555 { yyval = yyvsp[-2] & yyvsp[0]; }
556 break;
557 case 16:
558 #line 73 "../../../usr.bin/m4/parser.y"
559 { yyval = yyvsp[-2] ^ yyvsp[0]; }
560 break;
561 case 17:
562 #line 74 "../../../usr.bin/m4/parser.y"
563 { yyval = yyvsp[-2] | yyvsp[0]; }
564 break;
565 case 18:
566 #line 75 "../../../usr.bin/m4/parser.y"
567 { yyval = yyvsp[-2] && yyvsp[0]; }
568 break;
569 case 19:
570 #line 76 "../../../usr.bin/m4/parser.y"
571 { yyval = yyvsp[-2] || yyvsp[0]; }
572 break;
573 case 20:
574 #line 77 "../../../usr.bin/m4/parser.y"
575 { yyval = yyvsp[-1]; }
576 break;
577 case 21:
578 #line 78 "../../../usr.bin/m4/parser.y"
579 { yyval = -yyvsp[0]; }
580 break;
581 case 22:
582 #line 79 "../../../usr.bin/m4/parser.y"
583 { yyval = yyvsp[0]; }
584 break;
585 case 23:
586 #line 80 "../../../usr.bin/m4/parser.y"
587 { yyval = !yyvsp[0]; }
588 break;
589 case 24:
590 #line 81 "../../../usr.bin/m4/parser.y"
591 { yyval = ~yyvsp[0]; }
592 break;
593 #line 591 "parser.c"
594     }
595     yyssp -= yym;
596     yystate = *yyssp;
597     yyvsp -= yym;
598     yym = yylhs[yyn];
599     if (yystate == 0 && yym == 0)
600     {
601 #if YYDEBUG
602         if (yydebug)
603             printf("%sdebug: after reduction, shifting from state 0 to\
604  state %d\n", YYPREFIX, YYFINAL);
605 #endif
606         yystate = YYFINAL;
607         *++yyssp = YYFINAL;
608         *++yyvsp = yyval;
609         if (yychar < 0)
610         {
611             if ((yychar = yylex()) < 0) yychar = 0;
612 #if YYDEBUG
613             if (yydebug)
614             {
615                 yys = 0;
616                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
617                 if (!yys) yys = "illegal-symbol";
618                 printf("%sdebug: state %d, reading %d (%s)\n",
619                         YYPREFIX, YYFINAL, yychar, yys);
620             }
621 #endif
622         }
623         if (yychar == 0) goto yyaccept;
624         goto yyloop;
625     }
626     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
627             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
628         yystate = yytable[yyn];
629     else
630         yystate = yydgoto[yym];
631 #if YYDEBUG
632     if (yydebug)
633         printf("%sdebug: after reduction, shifting from state %d \
634 to state %d\n", YYPREFIX, *yyssp, yystate);
635 #endif
636     if (yyssp >= yysslim && yygrowstack())
637     {
638         goto yyoverflow;
639     }
640     *++yyssp = yystate;
641     *++yyvsp = yyval;
642     goto yyloop;
643 yyoverflow:
644     yyerror("yacc stack overflow");
645 yyabort:
646     return (1);
647 yyaccept:
648     return (0);
649 }
650