1#if HAVE_NBTOOL_CONFIG_H
2#include "nbtool_config.h"
3#endif
4#include <stdlib.h>
5#ifndef lint
6#if 0
7static 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
47extern int32_t end_result;
48extern int yylex(void);
49extern 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
64const 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};
69const 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};
74const 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};
81const short yydgoto[] = {                                       7,
82    8,
83};
84const 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};
91const 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};
98const short yygindex[] = {                                      0,
99  458,
100};
101#define YYTABLESIZE 663
102const 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};
171const 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
246const 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,
2490,0,0,0,0,"'<'",0,"'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2500,0,0,"'^'",0,0,0,0,0,0,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,
2520,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2540,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};
257const 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
287typedef 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
301int yydebug;
302int yynerrs;
303int yyerrflag;
304int yychar;
305short *yyssp;
306YYSTYPE *yyvsp;
307YYSTYPE yyval;
308static YYSTYPE yyvalzero;
309YYSTYPE yylval;
310short *yyss;
311short *yysslim;
312YYSTYPE *yyvs;
313int yystacksize;
314int 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 */
319static int yygrowstack(void);
320static 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
350int
351yyparse(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
374yyloop:
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;
416yynewerror:
417    yyerror("syntax error");
418    goto yyerrlab;
419yyerrlab:
420    ++yynerrs;
421yyinrecovery:
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    }
472yyreduce:
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    {
485case 1:
486#line 45 "../../../usr.bin/m4/parser.y"
487{ end_result = yyvsp[0]; }
488break;
489case 2:
490#line 47 "../../../usr.bin/m4/parser.y"
491{ yyval = yyvsp[-2] + yyvsp[0]; }
492break;
493case 3:
494#line 48 "../../../usr.bin/m4/parser.y"
495{ yyval = yyvsp[-2] - yyvsp[0]; }
496break;
497case 4:
498#line 49 "../../../usr.bin/m4/parser.y"
499{ yyval = yyvsp[-2] * yyvsp[0]; }
500break;
501case 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	}
510break;
511case 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	}
520break;
521case 7:
522#line 64 "../../../usr.bin/m4/parser.y"
523{ yyval = yyvsp[-2] << yyvsp[0]; }
524break;
525case 8:
526#line 65 "../../../usr.bin/m4/parser.y"
527{ yyval = yyvsp[-2] >> yyvsp[0]; }
528break;
529case 9:
530#line 66 "../../../usr.bin/m4/parser.y"
531{ yyval = yyvsp[-2] < yyvsp[0]; }
532break;
533case 10:
534#line 67 "../../../usr.bin/m4/parser.y"
535{ yyval = yyvsp[-2] > yyvsp[0]; }
536break;
537case 11:
538#line 68 "../../../usr.bin/m4/parser.y"
539{ yyval = yyvsp[-2] <= yyvsp[0]; }
540break;
541case 12:
542#line 69 "../../../usr.bin/m4/parser.y"
543{ yyval = yyvsp[-2] >= yyvsp[0]; }
544break;
545case 13:
546#line 70 "../../../usr.bin/m4/parser.y"
547{ yyval = yyvsp[-2] == yyvsp[0]; }
548break;
549case 14:
550#line 71 "../../../usr.bin/m4/parser.y"
551{ yyval = yyvsp[-2] != yyvsp[0]; }
552break;
553case 15:
554#line 72 "../../../usr.bin/m4/parser.y"
555{ yyval = yyvsp[-2] & yyvsp[0]; }
556break;
557case 16:
558#line 73 "../../../usr.bin/m4/parser.y"
559{ yyval = yyvsp[-2] ^ yyvsp[0]; }
560break;
561case 17:
562#line 74 "../../../usr.bin/m4/parser.y"
563{ yyval = yyvsp[-2] | yyvsp[0]; }
564break;
565case 18:
566#line 75 "../../../usr.bin/m4/parser.y"
567{ yyval = yyvsp[-2] && yyvsp[0]; }
568break;
569case 19:
570#line 76 "../../../usr.bin/m4/parser.y"
571{ yyval = yyvsp[-2] || yyvsp[0]; }
572break;
573case 20:
574#line 77 "../../../usr.bin/m4/parser.y"
575{ yyval = yyvsp[-1]; }
576break;
577case 21:
578#line 78 "../../../usr.bin/m4/parser.y"
579{ yyval = -yyvsp[0]; }
580break;
581case 22:
582#line 79 "../../../usr.bin/m4/parser.y"
583{ yyval = yyvsp[0]; }
584break;
585case 23:
586#line 80 "../../../usr.bin/m4/parser.y"
587{ yyval = !yyvsp[0]; }
588break;
589case 24:
590#line 81 "../../../usr.bin/m4/parser.y"
591{ yyval = ~yyvsp[0]; }
592break;
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 \
634to 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;
643yyoverflow:
644    yyerror("yacc stack overflow");
645yyabort:
646    return (1);
647yyaccept:
648    return (0);
649}
650