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