1 /* A Bison parser, made from plural.y 2 by GNU bison 1.35. */ 3 4 #define YYBISON 1 /* Identify Bison output. */ 5 6 #define yyparse __gettextparse 7 #define yylex __gettextlex 8 #define yyerror __gettexterror 9 #define yylval __gettextlval 10 #define yychar __gettextchar 11 #define yydebug __gettextdebug 12 #define yynerrs __gettextnerrs 13 # define EQUOP2 257 14 # define CMPOP2 258 15 # define ADDOP2 259 16 # define MULOP2 260 17 # define NUMBER 261 18 19 #line 1 "plural.y" 20 21 /* Expression parsing for plural form selection. 22 Copyright (C) 2000, 2001 Free Software Foundation, Inc. 23 Written by Ulrich Drepper <drepper (at) cygnus.com>, 2000. 24 25 This program is free software; you can redistribute it and/or modify it 26 under the terms of the GNU Library General Public License as published 27 by the Free Software Foundation; either version 2, or (at your option) 28 any later version. 29 30 This program is distributed in the hope that it will be useful, 31 but WITHOUT ANY WARRANTY; without even the implied warranty of 32 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 33 Library General Public License for more details. 34 35 You should have received a copy of the GNU Library General Public 36 License along with this program; if not, write to the Free Software 37 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, 38 USA. */ 39 40 /* The bison generated parser uses alloca. AIX 3 forces us to put this 41 declaration at the beginning of the file. The declaration in bison's 42 skeleton file comes too late. This must come before <config.h> 43 because <config.h> may include arbitrary system headers. */ 44 #if defined _AIX && !defined __GNUC__ 45 #pragma alloca 46 #endif 47 48 #ifdef HAVE_CONFIG_H 49 # include <config.h> 50 #endif 51 52 #include <stddef.h> 53 #include <stdlib.h> 54 #include "plural-exp.h" 55 56 /* The main function generated by the parser is called __gettextparse, 57 but we want it to be called PLURAL_PARSE. */ 58 #ifndef _LIBC 59 # define __gettextparse PLURAL_PARSE 60 #endif 61 62 #define YYLEX_PARAM &((struct parse_args *) arg)->cp 63 #define YYPARSE_PARAM arg 64 65 #line 49 "plural.y" 66 #ifndef YYSTYPE 67 typedef union { 68 unsigned long int num; 69 enum operator op; 70 struct expression *exp; 71 } yystype; 72 # define YYSTYPE yystype 73 # define YYSTYPE_IS_TRIVIAL 1 74 #endif 75 #line 55 "plural.y" 76 77 /* Prototypes for local functions. */ 78 static struct expression *new_exp PARAMS ((int nargs, enum operator op, 79 struct expression * const *args)); 80 static inline struct expression *new_exp_0 PARAMS ((enum operator op)); 81 static inline struct expression *new_exp_1 PARAMS ((enum operator op, 82 struct expression *right)); 83 static struct expression *new_exp_2 PARAMS ((enum operator op, 84 struct expression *left, 85 struct expression *right)); 86 static inline struct expression *new_exp_3 PARAMS ((enum operator op, 87 struct expression *bexp, 88 struct expression *tbranch, 89 struct expression *fbranch)); 90 static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); 91 static void yyerror PARAMS ((const char *str)); 92 93 /* Allocation of expressions. */ 94 95 static struct expression * 96 new_exp (nargs, op, args) 97 int nargs; 98 enum operator op; 99 struct expression * const *args; 100 { 101 int i; 102 struct expression *newp; 103 104 /* If any of the argument could not be malloc'ed, just return NULL. */ 105 for (i = nargs - 1; i >= 0; i--) 106 if (args[i] == NULL) 107 goto fail; 108 109 /* Allocate a new expression. */ 110 newp = (struct expression *) malloc (sizeof (*newp)); 111 if (newp != NULL) 112 { 113 newp->nargs = nargs; 114 newp->operation = op; 115 for (i = nargs - 1; i >= 0; i--) 116 newp->val.args[i] = args[i]; 117 return newp; 118 } 119 120 fail: 121 for (i = nargs - 1; i >= 0; i--) 122 FREE_EXPRESSION (args[i]); 123 124 return NULL; 125 } 126 127 static inline struct expression * 128 new_exp_0 (op) 129 enum operator op; 130 { 131 return new_exp (0, op, NULL); 132 } 133 134 static inline struct expression * 135 new_exp_1 (op, right) 136 enum operator op; 137 struct expression *right; 138 { 139 struct expression *args[1]; 140 141 args[0] = right; 142 return new_exp (1, op, args); 143 } 144 145 static struct expression * 146 new_exp_2 (op, left, right) 147 enum operator op; 148 struct expression *left; 149 struct expression *right; 150 { 151 struct expression *args[2]; 152 153 args[0] = left; 154 args[1] = right; 155 return new_exp (2, op, args); 156 } 157 158 static inline struct expression * 159 new_exp_3 (op, bexp, tbranch, fbranch) 160 enum operator op; 161 struct expression *bexp; 162 struct expression *tbranch; 163 struct expression *fbranch; 164 { 165 struct expression *args[3]; 166 167 args[0] = bexp; 168 args[1] = tbranch; 169 args[2] = fbranch; 170 return new_exp (3, op, args); 171 } 172 173 #ifndef YYDEBUG 174 # define YYDEBUG 0 175 #endif 176 177 178 179 #define YYFINAL 27 180 #define YYFLAG -32768 181 #define YYNTBASE 16 182 183 /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ 184 #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) 185 186 /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ 187 static const char yytranslate[] = 188 { 189 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 192 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 193 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 194 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 195 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 196 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 197 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 198 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 199 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 200 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 201 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 202 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 203 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 204 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 205 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 207 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 208 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 211 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 212 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 213 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 214 2, 2, 2, 2, 2, 2, 1, 6, 7, 8, 215 9, 11 216 }; 217 218 #if YYDEBUG 219 static const short yyprhs[] = 220 { 221 0, 0, 2, 8, 12, 16, 20, 24, 28, 32, 222 35, 37, 39 223 }; 224 static const short yyrhs[] = 225 { 226 17, 0, 17, 3, 17, 12, 17, 0, 17, 4, 227 17, 0, 17, 5, 17, 0, 17, 6, 17, 0, 228 17, 7, 17, 0, 17, 8, 17, 0, 17, 9, 229 17, 0, 10, 17, 0, 13, 0, 11, 0, 14, 230 17, 15, 0 231 }; 232 233 #endif 234 235 #if YYDEBUG 236 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 237 static const short yyrline[] = 238 { 239 0, 174, 182, 186, 190, 194, 198, 202, 206, 210, 240 214, 218, 223 241 }; 242 #endif 243 244 245 #if (YYDEBUG) || defined YYERROR_VERBOSE 246 247 /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ 248 static const char *const yytname[] = 249 { 250 "$", "error", "$undefined.", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", 251 "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", 252 "start", "exp", 0 253 }; 254 #endif 255 256 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 257 static const short yyr1[] = 258 { 259 0, 16, 17, 17, 17, 17, 17, 17, 17, 17, 260 17, 17, 17 261 }; 262 263 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 264 static const short yyr2[] = 265 { 266 0, 1, 5, 3, 3, 3, 3, 3, 3, 2, 267 1, 1, 3 268 }; 269 270 /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE 271 doesn't specify something else to do. Zero means the default is an 272 error. */ 273 static const short yydefact[] = 274 { 275 0, 0, 11, 10, 0, 1, 9, 0, 0, 0, 276 0, 0, 0, 0, 0, 12, 0, 3, 4, 5, 277 6, 7, 8, 0, 2, 0, 0, 0 278 }; 279 280 static const short yydefgoto[] = 281 { 282 25, 5 283 }; 284 285 static const short yypact[] = 286 { 287 -9, -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, 288 -9, -9, -9, -9, -9,-32768, 24, 39, 43, 16, 289 26, -3,-32768, -9, 34, 21, 53,-32768 290 }; 291 292 static const short yypgoto[] = 293 { 294 -32768, -1 295 }; 296 297 298 #define YYLAST 53 299 300 301 static const short yytable[] = 302 { 303 6, 1, 2, 7, 3, 4, 14, 16, 17, 18, 304 19, 20, 21, 22, 8, 9, 10, 11, 12, 13, 305 14, 26, 24, 12, 13, 14, 15, 8, 9, 10, 306 11, 12, 13, 14, 13, 14, 23, 8, 9, 10, 307 11, 12, 13, 14, 10, 11, 12, 13, 14, 11, 308 12, 13, 14, 27 309 }; 310 311 static const short yycheck[] = 312 { 313 1, 10, 11, 4, 13, 14, 9, 8, 9, 10, 314 11, 12, 13, 14, 3, 4, 5, 6, 7, 8, 315 9, 0, 23, 7, 8, 9, 15, 3, 4, 5, 316 6, 7, 8, 9, 8, 9, 12, 3, 4, 5, 317 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 318 7, 8, 9, 0 319 }; 320 #define YYPURE 1 321 322 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ 323 #line 3 "/usr/local/share/bison/bison.simple" 324 325 /* Skeleton output parser for bison, 326 327 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software 328 Foundation, Inc. 329 330 This program is free software; you can redistribute it and/or modify 331 it under the terms of the GNU General Public License as published by 332 the Free Software Foundation; either version 2, or (at your option) 333 any later version. 334 335 This program is distributed in the hope that it will be useful, 336 but WITHOUT ANY WARRANTY; without even the implied warranty of 337 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 338 GNU General Public License for more details. 339 340 You should have received a copy of the GNU General Public License 341 along with this program; if not, write to the Free Software 342 Foundation, Inc., 51 Franklin Street - Fifth Floor, 343 Boston, MA 02110-1301, USA. */ 344 345 /* As a special exception, when this file is copied by Bison into a 346 Bison output file, you may use that output file without restriction. 347 This special exception was added by the Free Software Foundation 348 in version 1.24 of Bison. */ 349 350 /* This is the parser code that is written into each bison parser when 351 the %semantic_parser declaration is not specified in the grammar. 352 It was written by Richard Stallman by simplifying the hairy parser 353 used when %semantic_parser is specified. */ 354 355 /* All symbols defined below should begin with yy or YY, to avoid 356 infringing on user name space. This should be done even for local 357 variables, as they might otherwise be expanded by user macros. 358 There are some unavoidable exceptions within include files to 359 define necessary library symbols; they are noted "INFRINGES ON 360 USER NAME SPACE" below. */ 361 362 #if ! defined (yyoverflow) || defined (YYERROR_VERBOSE) 363 364 /* The parser invokes alloca or malloc; define the necessary symbols. */ 365 366 # if YYSTACK_USE_ALLOCA 367 # define YYSTACK_ALLOC alloca 368 # else 369 # ifndef YYSTACK_USE_ALLOCA 370 # if defined (alloca) || defined (_ALLOCA_H) 371 # define YYSTACK_ALLOC alloca 372 # else 373 # ifdef __GNUC__ 374 # define YYSTACK_ALLOC __builtin_alloca 375 # endif 376 # endif 377 # endif 378 # endif 379 380 # ifdef YYSTACK_ALLOC 381 /* Pacify GCC's `empty if-body' warning. */ 382 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 383 # else 384 # if defined (__STDC__) || defined (__cplusplus) 385 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 386 # define YYSIZE_T size_t 387 # endif 388 # define YYSTACK_ALLOC malloc 389 # define YYSTACK_FREE free 390 # endif 391 #endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */ 392 393 394 #if (! defined (yyoverflow) \ 395 && (! defined (__cplusplus) \ 396 || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 397 398 /* A type that is properly aligned for any stack member. */ 399 union yyalloc 400 { 401 short yyss; 402 YYSTYPE yyvs; 403 # if YYLSP_NEEDED 404 YYLTYPE yyls; 405 # endif 406 }; 407 408 /* The size of the maximum gap between one aligned stack and the next. */ 409 # define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1) 410 411 /* The size of an array large to enough to hold all stacks, each with 412 N elements. */ 413 # if YYLSP_NEEDED 414 # define YYSTACK_BYTES(N) \ 415 ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ 416 + 2 * YYSTACK_GAP_MAX) 417 # else 418 # define YYSTACK_BYTES(N) \ 419 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ 420 + YYSTACK_GAP_MAX) 421 # endif 422 423 /* Copy COUNT objects from FROM to TO. The source and destination do 424 not overlap. */ 425 # ifndef YYCOPY 426 # if 1 < __GNUC__ 427 # define YYCOPY(To, From, Count) \ 428 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 429 # else 430 # define YYCOPY(To, From, Count) \ 431 do \ 432 { \ 433 register YYSIZE_T yyi; \ 434 for (yyi = 0; yyi < (Count); yyi++) \ 435 (To)[yyi] = (From)[yyi]; \ 436 } \ 437 while (0) 438 # endif 439 # endif 440 441 /* Relocate STACK from its old location to the new one. The 442 local variables YYSIZE and YYSTACKSIZE give the old and new number of 443 elements in the stack, and YYPTR gives the new location of the 444 stack. Advance YYPTR to a properly aligned location for the next 445 stack. */ 446 # define YYSTACK_RELOCATE(Stack) \ 447 do \ 448 { \ 449 YYSIZE_T yynewbytes; \ 450 YYCOPY (&yyptr->Stack, Stack, yysize); \ 451 Stack = &yyptr->Stack; \ 452 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \ 453 yyptr += yynewbytes / sizeof (*yyptr); \ 454 } \ 455 while (0) 456 457 #endif 458 459 460 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) 461 # define YYSIZE_T __SIZE_TYPE__ 462 #endif 463 #if ! defined (YYSIZE_T) && defined (size_t) 464 # define YYSIZE_T size_t 465 #endif 466 #if ! defined (YYSIZE_T) 467 # if defined (__STDC__) || defined (__cplusplus) 468 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 469 # define YYSIZE_T size_t 470 # endif 471 #endif 472 #if ! defined (YYSIZE_T) 473 # define YYSIZE_T unsigned int 474 #endif 475 476 #define yyerrok (yyerrstatus = 0) 477 #define yyclearin (yychar = YYEMPTY) 478 #define YYEMPTY -2 479 #define YYEOF 0 480 #define YYACCEPT goto yyacceptlab 481 #define YYABORT goto yyabortlab 482 #define YYERROR goto yyerrlab1 483 /* Like YYERROR except do call yyerror. This remains here temporarily 484 to ease the transition to the new meaning of YYERROR, for GCC. 485 Once GCC version 2 has supplanted version 1, this can go. */ 486 #define YYFAIL goto yyerrlab 487 #define YYRECOVERING() (!!yyerrstatus) 488 #define YYBACKUP(Token, Value) \ 489 do \ 490 if (yychar == YYEMPTY && yylen == 1) \ 491 { \ 492 yychar = (Token); \ 493 yylval = (Value); \ 494 yychar1 = YYTRANSLATE (yychar); \ 495 YYPOPSTACK; \ 496 goto yybackup; \ 497 } \ 498 else \ 499 { \ 500 yyerror ("syntax error: cannot back up"); \ 501 YYERROR; \ 502 } \ 503 while (0) 504 505 #define YYTERROR 1 506 #define YYERRCODE 256 507 508 509 /* YYLLOC_DEFAULT -- Compute the default location (before the actions 510 are run). 511 512 When YYLLOC_DEFAULT is run, CURRENT is set the location of the 513 first token. By default, to implement support for ranges, extend 514 its range to the last symbol. */ 515 516 #ifndef YYLLOC_DEFAULT 517 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 518 Current.last_line = Rhs[N].last_line; \ 519 Current.last_column = Rhs[N].last_column; 520 #endif 521 522 523 /* YYLEX -- calling `yylex' with the right arguments. */ 524 525 #if YYPURE 526 # if YYLSP_NEEDED 527 # ifdef YYLEX_PARAM 528 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) 529 # else 530 # define YYLEX yylex (&yylval, &yylloc) 531 # endif 532 # else /* !YYLSP_NEEDED */ 533 # ifdef YYLEX_PARAM 534 # define YYLEX yylex (&yylval, YYLEX_PARAM) 535 # else 536 # define YYLEX yylex (&yylval) 537 # endif 538 # endif /* !YYLSP_NEEDED */ 539 #else /* !YYPURE */ 540 # define YYLEX yylex () 541 #endif /* !YYPURE */ 542 543 544 /* Enable debugging if requested. */ 545 #if YYDEBUG 546 547 # ifndef YYFPRINTF 548 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 549 # define YYFPRINTF fprintf 550 # endif 551 552 # define YYDPRINTF(Args) \ 553 do { \ 554 if (yydebug) \ 555 YYFPRINTF Args; \ 556 } while (0) 557 /* Nonzero means print parse trace. It is left uninitialized so that 558 multiple parsers can coexist. */ 559 int yydebug; 560 #else /* !YYDEBUG */ 561 # define YYDPRINTF(Args) 562 #endif /* !YYDEBUG */ 563 564 /* YYINITDEPTH -- initial size of the parser's stacks. */ 565 #ifndef YYINITDEPTH 566 # define YYINITDEPTH 200 567 #endif 568 569 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 570 if the built-in stack extension method is used). 571 572 Do not make this value too large; the results are undefined if 573 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) 574 evaluated with infinite-precision integer arithmetic. */ 575 576 #if YYMAXDEPTH == 0 577 # undef YYMAXDEPTH 578 #endif 579 580 #ifndef YYMAXDEPTH 581 # define YYMAXDEPTH 10000 582 #endif 583 584 #ifdef YYERROR_VERBOSE 586 587 # ifndef yystrlen 588 # if defined (__GLIBC__) && defined (_STRING_H) 589 # define yystrlen strlen 590 # else 591 /* Return the length of YYSTR. */ 592 static YYSIZE_T 593 # if defined (__STDC__) || defined (__cplusplus) 594 yystrlen (const char *yystr) 595 # else 596 yystrlen (yystr) 597 const char *yystr; 598 # endif 599 { 600 register const char *yys = yystr; 601 602 while (*yys++ != '\0') 603 continue; 604 605 return yys - yystr - 1; 606 } 607 # endif 608 # endif 609 610 # ifndef yystpcpy 611 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) 612 # define yystpcpy stpcpy 613 # else 614 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 615 YYDEST. */ 616 static char * 617 # if defined (__STDC__) || defined (__cplusplus) 618 yystpcpy (char *yydest, const char *yysrc) 619 # else 620 yystpcpy (yydest, yysrc) 621 char *yydest; 622 const char *yysrc; 623 # endif 624 { 625 register char *yyd = yydest; 626 register const char *yys = yysrc; 627 628 while ((*yyd++ = *yys++) != '\0') 629 continue; 630 631 return yyd - 1; 632 } 633 # endif 634 # endif 635 #endif 636 637 #line 315 "/usr/local/share/bison/bison.simple" 639 640 641 /* The user can define YYPARSE_PARAM as the name of an argument to be passed 642 into yyparse. The argument should have type void *. 643 It should actually point to an object. 644 Grammar actions can access the variable by casting it 645 to the proper pointer type. */ 646 647 #ifdef YYPARSE_PARAM 648 # if defined (__STDC__) || defined (__cplusplus) 649 # define YYPARSE_PARAM_ARG void *YYPARSE_PARAM 650 # define YYPARSE_PARAM_DECL 651 # else 652 # define YYPARSE_PARAM_ARG YYPARSE_PARAM 653 # define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; 654 # endif 655 #else /* !YYPARSE_PARAM */ 656 # define YYPARSE_PARAM_ARG 657 # define YYPARSE_PARAM_DECL 658 #endif /* !YYPARSE_PARAM */ 659 660 /* Prevent warning if -Wstrict-prototypes. */ 661 #ifdef __GNUC__ 662 # ifdef YYPARSE_PARAM 663 int yyparse (void *); 664 # else 665 int yyparse (void); 666 # endif 667 #endif 668 669 /* YY_DECL_VARIABLES -- depending whether we use a pure parser, 670 variables are global, or local to YYPARSE. */ 671 672 #define YY_DECL_NON_LSP_VARIABLES \ 673 /* The lookahead symbol. */ \ 674 int yychar; \ 675 \ 676 /* The semantic value of the lookahead symbol. */ \ 677 YYSTYPE yylval; \ 678 \ 679 /* Number of parse errors so far. */ \ 680 int yynerrs; 681 682 #if YYLSP_NEEDED 683 # define YY_DECL_VARIABLES \ 684 YY_DECL_NON_LSP_VARIABLES \ 685 \ 686 /* Location data for the lookahead symbol. */ \ 687 YYLTYPE yylloc; 688 #else 689 # define YY_DECL_VARIABLES \ 690 YY_DECL_NON_LSP_VARIABLES 691 #endif 692 693 694 /* If nonreentrant, generate the variables here. */ 695 696 #if !YYPURE 697 YY_DECL_VARIABLES 698 #endif /* !YYPURE */ 699 700 int 701 yyparse (YYPARSE_PARAM_ARG) 702 YYPARSE_PARAM_DECL 703 { 704 /* If reentrant, generate the variables here. */ 705 #if YYPURE 706 YY_DECL_VARIABLES 707 #endif /* !YYPURE */ 708 709 register int yystate; 710 register int yyn; 711 int yyresult; 712 /* Number of tokens to shift before error messages enabled. */ 713 int yyerrstatus; 714 /* Lookahead token as an internal (translated) token number. */ 715 int yychar1 = 0; 716 717 /* Three stacks and their tools: 718 `yyss': related to states, 719 `yyvs': related to semantic values, 720 `yyls': related to locations. 721 722 Refer to the stacks thru separate pointers, to allow yyoverflow 723 to reallocate them elsewhere. */ 724 725 /* The state stack. */ 726 short yyssa[YYINITDEPTH]; 727 short *yyss = yyssa; 728 register short *yyssp; 729 730 /* The semantic value stack. */ 731 YYSTYPE yyvsa[YYINITDEPTH]; 732 YYSTYPE *yyvs = yyvsa; 733 register YYSTYPE *yyvsp; 734 735 #if YYLSP_NEEDED 736 /* The location stack. */ 737 YYLTYPE yylsa[YYINITDEPTH]; 738 YYLTYPE *yyls = yylsa; 739 YYLTYPE *yylsp; 740 #endif 741 742 #if YYLSP_NEEDED 743 # define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) 744 #else 745 # define YYPOPSTACK (yyvsp--, yyssp--) 746 #endif 747 748 YYSIZE_T yystacksize = YYINITDEPTH; 749 750 751 /* The variables used to return semantic value and location from the 752 action routines. */ 753 YYSTYPE yyval; 754 #if YYLSP_NEEDED 755 YYLTYPE yyloc; 756 #endif 757 758 /* When reducing, the number of symbols on the RHS of the reduced 759 rule. */ 760 int yylen; 761 762 YYDPRINTF ((stderr, "Starting parse\n")); 763 764 yystate = 0; 765 yyerrstatus = 0; 766 yynerrs = 0; 767 yychar = YYEMPTY; /* Cause a token to be read. */ 768 769 /* Initialize stack pointers. 770 Waste one element of value and location stack 771 so that they stay on the same level as the state stack. 772 The wasted elements are never initialized. */ 773 774 yyssp = yyss; 775 yyvsp = yyvs; 776 #if YYLSP_NEEDED 777 yylsp = yyls; 778 #endif 779 goto yysetstate; 780 781 /*------------------------------------------------------------. 782 | yynewstate -- Push a new state, which is found in yystate. | 783 `------------------------------------------------------------*/ 784 yynewstate: 785 /* In all cases, when you get here, the value and location stacks 786 have just been pushed. so pushing a state here evens the stacks. 787 */ 788 yyssp++; 789 790 yysetstate: 791 *yyssp = yystate; 792 793 if (yyssp >= yyss + yystacksize - 1) 794 { 795 /* Get the current used size of the three stacks, in elements. */ 796 YYSIZE_T yysize = yyssp - yyss + 1; 797 798 #ifdef yyoverflow 799 { 800 /* Give user a chance to reallocate the stack. Use copies of 801 these so that the &'s don't force the real ones into 802 memory. */ 803 YYSTYPE *yyvs1 = yyvs; 804 short *yyss1 = yyss; 805 806 /* Each stack pointer address is followed by the size of the 807 data in use in that stack, in bytes. */ 808 # if YYLSP_NEEDED 809 YYLTYPE *yyls1 = yyls; 810 /* This used to be a conditional around just the two extra args, 811 but that might be undefined if yyoverflow is a macro. */ 812 yyoverflow ("parser stack overflow", 813 &yyss1, yysize * sizeof (*yyssp), 814 &yyvs1, yysize * sizeof (*yyvsp), 815 &yyls1, yysize * sizeof (*yylsp), 816 &yystacksize); 817 yyls = yyls1; 818 # else 819 yyoverflow ("parser stack overflow", 820 &yyss1, yysize * sizeof (*yyssp), 821 &yyvs1, yysize * sizeof (*yyvsp), 822 &yystacksize); 823 # endif 824 yyss = yyss1; 825 yyvs = yyvs1; 826 } 827 #else /* no yyoverflow */ 828 # ifndef YYSTACK_RELOCATE 829 goto yyoverflowlab; 830 # else 831 /* Extend the stack our own way. */ 832 if (yystacksize >= YYMAXDEPTH) 833 goto yyoverflowlab; 834 yystacksize *= 2; 835 if (yystacksize > YYMAXDEPTH) 836 yystacksize = YYMAXDEPTH; 837 838 { 839 short *yyss1 = yyss; 840 union yyalloc *yyptr = 841 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 842 if (! yyptr) 843 goto yyoverflowlab; 844 YYSTACK_RELOCATE (yyss); 845 YYSTACK_RELOCATE (yyvs); 846 # if YYLSP_NEEDED 847 YYSTACK_RELOCATE (yyls); 848 # endif 849 # undef YYSTACK_RELOCATE 850 if (yyss1 != yyssa) 851 YYSTACK_FREE (yyss1); 852 } 853 # endif 854 #endif /* no yyoverflow */ 855 856 yyssp = yyss + yysize - 1; 857 yyvsp = yyvs + yysize - 1; 858 #if YYLSP_NEEDED 859 yylsp = yyls + yysize - 1; 860 #endif 861 862 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 863 (unsigned long int) yystacksize)); 864 865 if (yyssp >= yyss + yystacksize - 1) 866 YYABORT; 867 } 868 869 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 870 871 goto yybackup; 872 873 874 /*-----------. 875 | yybackup. | 876 `-----------*/ 877 yybackup: 878 879 /* Do appropriate processing given the current state. */ 880 /* Read a lookahead token if we need one and don't already have one. */ 881 /* yyresume: */ 882 883 /* First try to decide what to do without reference to lookahead token. */ 884 885 yyn = yypact[yystate]; 886 if (yyn == YYFLAG) 887 goto yydefault; 888 889 /* Not known => get a lookahead token if don't already have one. */ 890 891 /* yychar is either YYEMPTY or YYEOF 892 or a valid token in external form. */ 893 894 if (yychar == YYEMPTY) 895 { 896 YYDPRINTF ((stderr, "Reading a token: ")); 897 yychar = YYLEX; 898 } 899 900 /* Convert token to internal form (in yychar1) for indexing tables with */ 901 902 if (yychar <= 0) /* This means end of input. */ 903 { 904 yychar1 = 0; 905 yychar = YYEOF; /* Don't call YYLEX any more */ 906 907 YYDPRINTF ((stderr, "Now at end of input.\n")); 908 } 909 else 910 { 911 yychar1 = YYTRANSLATE (yychar); 912 913 #if YYDEBUG 914 /* We have to keep this `#if YYDEBUG', since we use variables 915 which are defined only if `YYDEBUG' is set. */ 916 if (yydebug) 917 { 918 YYFPRINTF (stderr, "Next token is %d (%s", 919 yychar, yytname[yychar1]); 920 /* Give the individual parser a way to print the precise 921 meaning of a token, for further debugging info. */ 922 # ifdef YYPRINT 923 YYPRINT (stderr, yychar, yylval); 924 # endif 925 YYFPRINTF (stderr, ")\n"); 926 } 927 #endif 928 } 929 930 yyn += yychar1; 931 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) 932 goto yydefault; 933 934 yyn = yytable[yyn]; 935 936 /* yyn is what to do for this token type in this state. 937 Negative => reduce, -yyn is rule number. 938 Positive => shift, yyn is new state. 939 New state is final state => don't bother to shift, 940 just return success. 941 0, or most negative number => error. */ 942 943 if (yyn < 0) 944 { 945 if (yyn == YYFLAG) 946 goto yyerrlab; 947 yyn = -yyn; 948 goto yyreduce; 949 } 950 else if (yyn == 0) 951 goto yyerrlab; 952 953 if (yyn == YYFINAL) 954 YYACCEPT; 955 956 /* Shift the lookahead token. */ 957 YYDPRINTF ((stderr, "Shifting token %d (%s), ", 958 yychar, yytname[yychar1])); 959 960 /* Discard the token being shifted unless it is eof. */ 961 if (yychar != YYEOF) 962 yychar = YYEMPTY; 963 964 *++yyvsp = yylval; 965 #if YYLSP_NEEDED 966 *++yylsp = yylloc; 967 #endif 968 969 /* Count tokens shifted since error; after three, turn off error 970 status. */ 971 if (yyerrstatus) 972 yyerrstatus--; 973 974 yystate = yyn; 975 goto yynewstate; 976 977 978 /*-----------------------------------------------------------. 979 | yydefault -- do the default action for the current state. | 980 `-----------------------------------------------------------*/ 981 yydefault: 982 yyn = yydefact[yystate]; 983 if (yyn == 0) 984 goto yyerrlab; 985 goto yyreduce; 986 987 988 /*-----------------------------. 989 | yyreduce -- Do a reduction. | 990 `-----------------------------*/ 991 yyreduce: 992 /* yyn is the number of a rule to reduce with. */ 993 yylen = yyr2[yyn]; 994 995 /* If YYLEN is nonzero, implement the default value of the action: 996 `$$ = $1'. 997 998 Otherwise, the following line sets YYVAL to the semantic value of 999 the lookahead token. This behavior is undocumented and Bison 1000 users should not rely upon it. Assigning to YYVAL 1001 unconditionally makes the parser a bit smaller, and it avoids a 1002 GCC warning that YYVAL may be used uninitialized. */ 1003 yyval = yyvsp[1-yylen]; 1004 1005 #if YYLSP_NEEDED 1006 /* Similarly for the default location. Let the user run additional 1007 commands if for instance locations are ranges. */ 1008 yyloc = yylsp[1-yylen]; 1009 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); 1010 #endif 1011 1012 #if YYDEBUG 1013 /* We have to keep this `#if YYDEBUG', since we use variables which 1014 are defined only if `YYDEBUG' is set. */ 1015 if (yydebug) 1016 { 1017 int yyi; 1018 1019 YYFPRINTF (stderr, "Reducing via rule %d (line %d), ", 1020 yyn, yyrline[yyn]); 1021 1022 /* Print the symbols being reduced, and their result. */ 1023 for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++) 1024 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); 1025 YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]); 1026 } 1027 #endif 1028 1029 switch (yyn) { 1030 1031 case 1: 1032 #line 175 "plural.y" 1033 { 1034 if (yyvsp[0].exp == NULL) 1035 YYABORT; 1036 ((struct parse_args *) arg)->res = yyvsp[0].exp; 1037 } 1038 break; 1039 case 2: 1040 #line 183 "plural.y" 1041 { 1042 yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); 1043 } 1044 break; 1045 case 3: 1046 #line 187 "plural.y" 1047 { 1048 yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); 1049 } 1050 break; 1051 case 4: 1052 #line 191 "plural.y" 1053 { 1054 yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); 1055 } 1056 break; 1057 case 5: 1058 #line 195 "plural.y" 1059 { 1060 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); 1061 } 1062 break; 1063 case 6: 1064 #line 199 "plural.y" 1065 { 1066 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); 1067 } 1068 break; 1069 case 7: 1070 #line 203 "plural.y" 1071 { 1072 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); 1073 } 1074 break; 1075 case 8: 1076 #line 207 "plural.y" 1077 { 1078 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); 1079 } 1080 break; 1081 case 9: 1082 #line 211 "plural.y" 1083 { 1084 yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); 1085 } 1086 break; 1087 case 10: 1088 #line 215 "plural.y" 1089 { 1090 yyval.exp = new_exp_0 (var); 1091 } 1092 break; 1093 case 11: 1094 #line 219 "plural.y" 1095 { 1096 if ((yyval.exp = new_exp_0 (num)) != NULL) 1097 yyval.exp->val.num = yyvsp[0].num; 1098 } 1099 break; 1100 case 12: 1101 #line 224 "plural.y" 1102 { 1103 yyval.exp = yyvsp[-1].exp; 1104 } 1105 break; 1106 } 1107 1108 #line 705 "/usr/local/share/bison/bison.simple" 1109 1110 1111 yyvsp -= yylen; 1113 yyssp -= yylen; 1114 #if YYLSP_NEEDED 1115 yylsp -= yylen; 1116 #endif 1117 1118 #if YYDEBUG 1119 if (yydebug) 1120 { 1121 short *yyssp1 = yyss - 1; 1122 YYFPRINTF (stderr, "state stack now"); 1123 while (yyssp1 != yyssp) 1124 YYFPRINTF (stderr, " %d", *++yyssp1); 1125 YYFPRINTF (stderr, "\n"); 1126 } 1127 #endif 1128 1129 *++yyvsp = yyval; 1130 #if YYLSP_NEEDED 1131 *++yylsp = yyloc; 1132 #endif 1133 1134 /* Now `shift' the result of the reduction. Determine what state 1135 that goes to, based on the state we popped back to and the rule 1136 number reduced by. */ 1137 1138 yyn = yyr1[yyn]; 1139 1140 yystate = yypgoto[yyn - YYNTBASE] + *yyssp; 1141 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) 1142 yystate = yytable[yystate]; 1143 else 1144 yystate = yydefgoto[yyn - YYNTBASE]; 1145 1146 goto yynewstate; 1147 1148 1149 /*------------------------------------. 1150 | yyerrlab -- here on detecting error | 1151 `------------------------------------*/ 1152 yyerrlab: 1153 /* If not already recovering from an error, report this error. */ 1154 if (!yyerrstatus) 1155 { 1156 ++yynerrs; 1157 1158 #ifdef YYERROR_VERBOSE 1159 yyn = yypact[yystate]; 1160 1161 if (yyn > YYFLAG && yyn < YYLAST) 1162 { 1163 YYSIZE_T yysize = 0; 1164 char *yymsg; 1165 int yyx, yycount; 1166 1167 yycount = 0; 1168 /* Start YYX at -YYN if negative to avoid negative indexes in 1169 YYCHECK. */ 1170 for (yyx = yyn < 0 ? -yyn : 0; 1171 yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) 1172 if (yycheck[yyx + yyn] == yyx) 1173 yysize += yystrlen (yytname[yyx]) + 15, yycount++; 1174 yysize += yystrlen ("parse error, unexpected ") + 1; 1175 yysize += yystrlen (yytname[YYTRANSLATE (yychar)]); 1176 yymsg = (char *) YYSTACK_ALLOC (yysize); 1177 if (yymsg != 0) 1178 { 1179 char *yyp = yystpcpy (yymsg, "parse error, unexpected "); 1180 yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]); 1181 1182 if (yycount < 5) 1183 { 1184 yycount = 0; 1185 for (yyx = yyn < 0 ? -yyn : 0; 1186 yyx < (int) (sizeof (yytname) / sizeof (char *)); 1187 yyx++) 1188 if (yycheck[yyx + yyn] == yyx) 1189 { 1190 const char *yyq = ! yycount ? ", expecting " : " or "; 1191 yyp = yystpcpy (yyp, yyq); 1192 yyp = yystpcpy (yyp, yytname[yyx]); 1193 yycount++; 1194 } 1195 } 1196 yyerror (yymsg); 1197 YYSTACK_FREE (yymsg); 1198 } 1199 else 1200 yyerror ("parse error; also virtual memory exhausted"); 1201 } 1202 else 1203 #endif /* defined (YYERROR_VERBOSE) */ 1204 yyerror ("parse error"); 1205 } 1206 goto yyerrlab1; 1207 1208 1209 /*--------------------------------------------------. 1210 | yyerrlab1 -- error raised explicitly by an action | 1211 `--------------------------------------------------*/ 1212 yyerrlab1: 1213 if (yyerrstatus == 3) 1214 { 1215 /* If just tried and failed to reuse lookahead token after an 1216 error, discard it. */ 1217 1218 /* return failure if at end of input */ 1219 if (yychar == YYEOF) 1220 YYABORT; 1221 YYDPRINTF ((stderr, "Discarding token %d (%s).\n", 1222 yychar, yytname[yychar1])); 1223 yychar = YYEMPTY; 1224 } 1225 1226 /* Else will try to reuse lookahead token after shifting the error 1227 token. */ 1228 1229 yyerrstatus = 3; /* Each real token shifted decrements this */ 1230 1231 goto yyerrhandle; 1232 1233 1234 /*-------------------------------------------------------------------. 1235 | yyerrdefault -- current state does not do anything special for the | 1236 | error token. | 1237 `-------------------------------------------------------------------*/ 1238 yyerrdefault: 1239 #if 0 1240 /* This is wrong; only states that explicitly want error tokens 1241 should shift them. */ 1242 1243 /* If its default is to accept any token, ok. Otherwise pop it. */ 1244 yyn = yydefact[yystate]; 1245 if (yyn) 1246 goto yydefault; 1247 #endif 1248 1249 1250 /*---------------------------------------------------------------. 1251 | yyerrpop -- pop the current state because it cannot handle the | 1252 | error token | 1253 `---------------------------------------------------------------*/ 1254 yyerrpop: 1255 if (yyssp == yyss) 1256 YYABORT; 1257 yyvsp--; 1258 yystate = *--yyssp; 1259 #if YYLSP_NEEDED 1260 yylsp--; 1261 #endif 1262 1263 #if YYDEBUG 1264 if (yydebug) 1265 { 1266 short *yyssp1 = yyss - 1; 1267 YYFPRINTF (stderr, "Error: state stack now"); 1268 while (yyssp1 != yyssp) 1269 YYFPRINTF (stderr, " %d", *++yyssp1); 1270 YYFPRINTF (stderr, "\n"); 1271 } 1272 #endif 1273 1274 /*--------------. 1275 | yyerrhandle. | 1276 `--------------*/ 1277 yyerrhandle: 1278 yyn = yypact[yystate]; 1279 if (yyn == YYFLAG) 1280 goto yyerrdefault; 1281 1282 yyn += YYTERROR; 1283 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) 1284 goto yyerrdefault; 1285 1286 yyn = yytable[yyn]; 1287 if (yyn < 0) 1288 { 1289 if (yyn == YYFLAG) 1290 goto yyerrpop; 1291 yyn = -yyn; 1292 goto yyreduce; 1293 } 1294 else if (yyn == 0) 1295 goto yyerrpop; 1296 1297 if (yyn == YYFINAL) 1298 YYACCEPT; 1299 1300 YYDPRINTF ((stderr, "Shifting error token, ")); 1301 1302 *++yyvsp = yylval; 1303 #if YYLSP_NEEDED 1304 *++yylsp = yylloc; 1305 #endif 1306 1307 yystate = yyn; 1308 goto yynewstate; 1309 1310 1311 /*-------------------------------------. 1312 | yyacceptlab -- YYACCEPT comes here. | 1313 `-------------------------------------*/ 1314 yyacceptlab: 1315 yyresult = 0; 1316 goto yyreturn; 1317 1318 /*-----------------------------------. 1319 | yyabortlab -- YYABORT comes here. | 1320 `-----------------------------------*/ 1321 yyabortlab: 1322 yyresult = 1; 1323 goto yyreturn; 1324 1325 /*---------------------------------------------. 1326 | yyoverflowab -- parser overflow comes here. | 1327 `---------------------------------------------*/ 1328 yyoverflowlab: 1329 yyerror ("parser stack overflow"); 1330 yyresult = 2; 1331 /* Fall through. */ 1332 1333 yyreturn: 1334 #ifndef yyoverflow 1335 if (yyss != yyssa) 1336 YYSTACK_FREE (yyss); 1337 #endif 1338 return yyresult; 1339 } 1340 #line 229 "plural.y" 1341 1342 1343 void 1344 internal_function 1345 FREE_EXPRESSION (exp) 1346 struct expression *exp; 1347 { 1348 if (exp == NULL) 1349 return; 1350 1351 /* Handle the recursive case. */ 1352 switch (exp->nargs) 1353 { 1354 case 3: 1355 FREE_EXPRESSION (exp->val.args[2]); 1356 /* FALLTHROUGH */ 1357 case 2: 1358 FREE_EXPRESSION (exp->val.args[1]); 1359 /* FALLTHROUGH */ 1360 case 1: 1361 FREE_EXPRESSION (exp->val.args[0]); 1362 /* FALLTHROUGH */ 1363 default: 1364 break; 1365 } 1366 1367 free (exp); 1368 } 1369 1370 1371 static int 1372 yylex (lval, pexp) 1373 YYSTYPE *lval; 1374 const char **pexp; 1375 { 1376 const char *exp = *pexp; 1377 int result; 1378 1379 while (1) 1380 { 1381 if (exp[0] == '\0') 1382 { 1383 *pexp = exp; 1384 return YYEOF; 1385 } 1386 1387 if (exp[0] != ' ' && exp[0] != '\t') 1388 break; 1389 1390 ++exp; 1391 } 1392 1393 result = *exp++; 1394 switch (result) 1395 { 1396 case '0': case '1': case '2': case '3': case '4': 1397 case '5': case '6': case '7': case '8': case '9': 1398 { 1399 unsigned long int n = result - '0'; 1400 while (exp[0] >= '0' && exp[0] <= '9') 1401 { 1402 n *= 10; 1403 n += exp[0] - '0'; 1404 ++exp; 1405 } 1406 lval->num = n; 1407 result = NUMBER; 1408 } 1409 break; 1410 1411 case '=': 1412 if (exp[0] == '=') 1413 { 1414 ++exp; 1415 lval->op = equal; 1416 result = EQUOP2; 1417 } 1418 else 1419 result = YYERRCODE; 1420 break; 1421 1422 case '!': 1423 if (exp[0] == '=') 1424 { 1425 ++exp; 1426 lval->op = not_equal; 1427 result = EQUOP2; 1428 } 1429 break; 1430 1431 case '&': 1432 case '|': 1433 if (exp[0] == result) 1434 ++exp; 1435 else 1436 result = YYERRCODE; 1437 break; 1438 1439 case '<': 1440 if (exp[0] == '=') 1441 { 1442 ++exp; 1443 lval->op = less_or_equal; 1444 } 1445 else 1446 lval->op = less_than; 1447 result = CMPOP2; 1448 break; 1449 1450 case '>': 1451 if (exp[0] == '=') 1452 { 1453 ++exp; 1454 lval->op = greater_or_equal; 1455 } 1456 else 1457 lval->op = greater_than; 1458 result = CMPOP2; 1459 break; 1460 1461 case '*': 1462 lval->op = mult; 1463 result = MULOP2; 1464 break; 1465 1466 case '/': 1467 lval->op = divide; 1468 result = MULOP2; 1469 break; 1470 1471 case '%': 1472 lval->op = module; 1473 result = MULOP2; 1474 break; 1475 1476 case '+': 1477 lval->op = plus; 1478 result = ADDOP2; 1479 break; 1480 1481 case '-': 1482 lval->op = minus; 1483 result = ADDOP2; 1484 break; 1485 1486 case 'n': 1487 case '?': 1488 case ':': 1489 case '(': 1490 case ')': 1491 /* Nothing, just return the character. */ 1492 break; 1493 1494 case ';': 1495 case '\n': 1496 case '\0': 1497 /* Be safe and let the user call this function again. */ 1498 --exp; 1499 result = YYEOF; 1500 break; 1501 1502 default: 1503 result = YYERRCODE; 1504 #if YYDEBUG != 0 1505 --exp; 1506 #endif 1507 break; 1508 } 1509 1510 *pexp = exp; 1511 1512 return result; 1513 } 1514 1515 1516 static void 1517 yyerror (str) 1518 const char *str; 1519 { 1520 /* Do nothing. We don't print error messages here. */ 1521 } 1522