00001
00002
00003
00004
00005 #define YYBISON 1
00006
00007 #define yyparse __gettextparse
00008 #define yylex __gettextlex
00009 #define yyerror __gettexterror
00010 #define yylval __gettextlval
00011 #define yychar __gettextchar
00012 #define yydebug __gettextdebug
00013 #define yynerrs __gettextnerrs
00014 #define EQUOP2 257
00015 #define CMPOP2 258
00016 #define ADDOP2 259
00017 #define MULOP2 260
00018 #define NUMBER 261
00019
00020 #line 1 "plural.y"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #if defined _AIX && !defined __GNUC__
00046 #pragma alloca
00047 #endif
00048
00049 #ifdef HAVE_CONFIG_H
00050 # include <config.h>
00051 #endif
00052
00053 #include <stdlib.h>
00054 #include "gettextP.h"
00055
00056
00057
00058
00059
00060 #ifdef _LIBC
00061 # define FREE_EXPRESSION __gettext_free_exp
00062 #else
00063 # define FREE_EXPRESSION gettext_free_exp__
00064 # define __gettextparse gettextparse__
00065 #endif
00066
00067 #define YYLEX_PARAM &((struct parse_args *) arg)->cp
00068 #define YYPARSE_PARAM arg
00069
00070 #line 53 "plural.y"
00071 typedef union {
00072 unsigned long int num;
00073 enum operator op;
00074 struct expression *exp;
00075 } YYSTYPE;
00076 #line 59 "plural.y"
00077
00078
00079 static struct expression *new_exp PARAMS ((int nargs, enum operator op,
00080 struct expression * const *args));
00081 static inline struct expression *new_exp_0 PARAMS ((enum operator op));
00082 static inline struct expression *new_exp_1 PARAMS ((enum operator op,
00083 struct expression *right));
00084 static struct expression *new_exp_2 PARAMS ((enum operator op,
00085 struct expression *left,
00086 struct expression *right));
00087 static inline struct expression *new_exp_3 PARAMS ((enum operator op,
00088 struct expression *bexp,
00089 struct expression *tbranch,
00090 struct expression *fbranch));
00091 static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
00092 static void yyerror PARAMS ((const char *str));
00093
00094
00095
00096 static struct expression *
00097 new_exp (nargs, op, args)
00098 int nargs;
00099 enum operator op;
00100 struct expression * const *args;
00101 {
00102 int i;
00103 struct expression *newp;
00104
00105
00106 for (i = nargs - 1; i >= 0; i--)
00107 if (args[i] == NULL)
00108 goto fail;
00109
00110
00111 newp = (struct expression *) malloc (sizeof (*newp));
00112 if (newp != NULL)
00113 {
00114 newp->nargs = nargs;
00115 newp->operation = op;
00116 for (i = nargs - 1; i >= 0; i--)
00117 newp->val.args[i] = args[i];
00118 return newp;
00119 }
00120
00121 fail:
00122 for (i = nargs - 1; i >= 0; i--)
00123 FREE_EXPRESSION (args[i]);
00124
00125 return NULL;
00126 }
00127
00128 static inline struct expression *
00129 new_exp_0 (op)
00130 enum operator op;
00131 {
00132 return new_exp (0, op, NULL);
00133 }
00134
00135 static inline struct expression *
00136 new_exp_1 (op, right)
00137 enum operator op;
00138 struct expression *right;
00139 {
00140 struct expression *args[1];
00141
00142 args[0] = right;
00143 return new_exp (1, op, args);
00144 }
00145
00146 static struct expression *
00147 new_exp_2 (op, left, right)
00148 enum operator op;
00149 struct expression *left;
00150 struct expression *right;
00151 {
00152 struct expression *args[2];
00153
00154 args[0] = left;
00155 args[1] = right;
00156 return new_exp (2, op, args);
00157 }
00158
00159 static inline struct expression *
00160 new_exp_3 (op, bexp, tbranch, fbranch)
00161 enum operator op;
00162 struct expression *bexp;
00163 struct expression *tbranch;
00164 struct expression *fbranch;
00165 {
00166 struct expression *args[3];
00167
00168 args[0] = bexp;
00169 args[1] = tbranch;
00170 args[2] = fbranch;
00171 return new_exp (3, op, args);
00172 }
00173
00174 #include <stdio.h>
00175
00176 #ifndef __cplusplus
00177 #ifndef __STDC__
00178 #define const
00179 #endif
00180 #endif
00181
00182
00183
00184 #define YYFINAL 27
00185 #define YYFLAG -32768
00186 #define YYNTBASE 16
00187
00188 #define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
00189
00190 static const char yytranslate[] = { 0,
00191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00194 2, 2, 10, 2, 2, 2, 2, 5, 2, 14,
00195 15, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00196 2, 2, 2, 2, 2, 2, 2, 12, 2, 2,
00197 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
00198 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00199 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00200 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00201 2, 2, 2, 2, 2, 2, 2, 2, 2, 13,
00202 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00203 2, 2, 2, 4, 2, 2, 2, 2, 2, 2,
00204 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00205 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00207 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00208 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00211 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00212 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00213 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00216 2, 2, 2, 2, 2, 1, 6, 7, 8, 9,
00217 11
00218 };
00219
00220 #if YYDEBUG != 0
00221 static const short yyprhs[] = { 0,
00222 0, 2, 8, 12, 16, 20, 24, 28, 32, 35,
00223 37, 39
00224 };
00225
00226 static const short yyrhs[] = { 17,
00227 0, 17, 3, 17, 12, 17, 0, 17, 4, 17,
00228 0, 17, 5, 17, 0, 17, 6, 17, 0, 17,
00229 7, 17, 0, 17, 8, 17, 0, 17, 9, 17,
00230 0, 10, 17, 0, 13, 0, 11, 0, 14, 17,
00231 15, 0
00232 };
00233
00234 #endif
00235
00236 #if YYDEBUG != 0
00237 static const short yyrline[] = { 0,
00238 178, 186, 190, 194, 198, 202, 206, 210, 214, 218,
00239 222, 227
00240 };
00241 #endif
00242
00243
00244 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
00245
00246 static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'",
00247 "'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
00248 "start","exp", NULL
00249 };
00250 #endif
00251
00252 static const short yyr1[] = { 0,
00253 16, 17, 17, 17, 17, 17, 17, 17, 17, 17,
00254 17, 17
00255 };
00256
00257 static const short yyr2[] = { 0,
00258 1, 5, 3, 3, 3, 3, 3, 3, 2, 1,
00259 1, 3
00260 };
00261
00262 static const short yydefact[] = { 0,
00263 0, 11, 10, 0, 1, 9, 0, 0, 0, 0,
00264 0, 0, 0, 0, 12, 0, 3, 4, 5, 6,
00265 7, 8, 0, 2, 0, 0, 0
00266 };
00267
00268 static const short yydefgoto[] = { 25,
00269 5
00270 };
00271
00272 static const short yypact[] = { -9,
00273 -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9,
00274 -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26,
00275 -3,-32768, -9, 34, 21, 53,-32768
00276 };
00277
00278 static const short yypgoto[] = {-32768,
00279 -1
00280 };
00281
00282
00283 #define YYLAST 53
00284
00285
00286 static const short yytable[] = { 6,
00287 1, 2, 7, 3, 4, 14, 16, 17, 18, 19,
00288 20, 21, 22, 8, 9, 10, 11, 12, 13, 14,
00289 26, 24, 12, 13, 14, 15, 8, 9, 10, 11,
00290 12, 13, 14, 13, 14, 23, 8, 9, 10, 11,
00291 12, 13, 14, 10, 11, 12, 13, 14, 11, 12,
00292 13, 14, 27
00293 };
00294
00295 static const short yycheck[] = { 1,
00296 10, 11, 4, 13, 14, 9, 8, 9, 10, 11,
00297 12, 13, 14, 3, 4, 5, 6, 7, 8, 9,
00298 0, 23, 7, 8, 9, 15, 3, 4, 5, 6,
00299 7, 8, 9, 8, 9, 12, 3, 4, 5, 6,
00300 7, 8, 9, 5, 6, 7, 8, 9, 6, 7,
00301 8, 9, 0
00302 };
00303 #define YYPURE 1
00304
00305
00306 #line 3 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337 #ifndef YYSTACK_USE_ALLOCA
00338 #ifdef alloca
00339 #define YYSTACK_USE_ALLOCA
00340 #else
00341 #ifdef __GNUC__
00342 #define YYSTACK_USE_ALLOCA
00343 #define alloca __builtin_alloca
00344 #else
00345 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
00346 #define YYSTACK_USE_ALLOCA
00347 #include <alloca.h>
00348 #else
00349
00350
00351
00352 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
00353 #if 0
00354
00355 #include <malloc.h>
00356 #endif
00357 #else
00358 #if defined(_AIX)
00359
00360
00361
00362 #pragma alloca
00363 #define YYSTACK_USE_ALLOCA
00364 #else
00365 #if 0
00366 #ifdef __hpux
00367
00368 #define YYSTACK_USE_ALLOCA
00369 #define alloca __builtin_alloca
00370 #endif
00371 #endif
00372 #endif
00373 #endif
00374 #endif
00375 #endif
00376 #endif
00377 #endif
00378
00379 #ifdef YYSTACK_USE_ALLOCA
00380 #define YYSTACK_ALLOC alloca
00381 #else
00382 #define YYSTACK_ALLOC malloc
00383 #endif
00384
00385
00386
00387
00388
00389 #define yyerrok (yyerrstatus = 0)
00390 #define yyclearin (yychar = YYEMPTY)
00391 #define YYEMPTY -2
00392 #define YYEOF 0
00393 #define YYACCEPT goto yyacceptlab
00394 #define YYABORT goto yyabortlab
00395 #define YYERROR goto yyerrlab1
00396
00397
00398
00399
00400 #define YYFAIL goto yyerrlab
00401 #define YYRECOVERING() (!!yyerrstatus)
00402 #define YYBACKUP(token, value) \
00403 do \
00404 if (yychar == YYEMPTY && yylen == 1) \
00405 { yychar = (token), yylval = (value); \
00406 yychar1 = YYTRANSLATE (yychar); \
00407 YYPOPSTACK; \
00408 goto yybackup; \
00409 } \
00410 else \
00411 { yyerror ("syntax error: cannot back up"); YYERROR; } \
00412 while (0)
00413
00414 #define YYTERROR 1
00415 #define YYERRCODE 256
00416
00417 #ifndef YYPURE
00418 #define YYLEX yylex()
00419 #endif
00420
00421 #ifdef YYPURE
00422 #ifdef YYLSP_NEEDED
00423 #ifdef YYLEX_PARAM
00424 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
00425 #else
00426 #define YYLEX yylex(&yylval, &yylloc)
00427 #endif
00428 #else
00429 #ifdef YYLEX_PARAM
00430 #define YYLEX yylex(&yylval, YYLEX_PARAM)
00431 #else
00432 #define YYLEX yylex(&yylval)
00433 #endif
00434 #endif
00435 #endif
00436
00437
00438
00439 #ifndef YYPURE
00440
00441 int yychar;
00442 YYSTYPE yylval;
00443
00444
00445 #ifdef YYLSP_NEEDED
00446 YYLTYPE yylloc;
00447
00448 #endif
00449
00450 int yynerrs;
00451 #endif
00452
00453 #if YYDEBUG != 0
00454 int yydebug;
00455
00456
00457 #endif
00458
00459
00460
00461 #ifndef YYINITDEPTH
00462 #define YYINITDEPTH 200
00463 #endif
00464
00465
00466
00467
00468 #if YYMAXDEPTH == 0
00469 #undef YYMAXDEPTH
00470 #endif
00471
00472 #ifndef YYMAXDEPTH
00473 #define YYMAXDEPTH 10000
00474 #endif
00475
00476
00477
00478
00479
00480
00481 #if __GNUC__ > 1
00482 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
00483 #else
00484 #ifndef __cplusplus
00485
00486
00487
00488 static void
00489 __yy_memcpy (to, from, count)
00490 char *to;
00491 char *from;
00492 unsigned int count;
00493 {
00494 register char *f = from;
00495 register char *t = to;
00496 register int i = count;
00497
00498 while (i-- > 0)
00499 *t++ = *f++;
00500 }
00501
00502 #else
00503
00504
00505
00506 static void
00507 __yy_memcpy (char *to, char *from, unsigned int count)
00508 {
00509 register char *t = to;
00510 register char *f = from;
00511 register int i = count;
00512
00513 while (i-- > 0)
00514 *t++ = *f++;
00515 }
00516
00517 #endif
00518 #endif
00519
00520 #line 217 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
00521
00522
00523
00524
00525
00526
00527
00528 #ifdef YYPARSE_PARAM
00529 #ifdef __cplusplus
00530 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
00531 #define YYPARSE_PARAM_DECL
00532 #else
00533 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
00534 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
00535 #endif
00536 #else
00537 #define YYPARSE_PARAM_ARG
00538 #define YYPARSE_PARAM_DECL
00539 #endif
00540
00541
00542 #ifdef __GNUC__
00543 #ifdef YYPARSE_PARAM
00544 int yyparse (void *);
00545 #else
00546 int yyparse (void);
00547 #endif
00548 #endif
00549
00550 int
00551 yyparse(YYPARSE_PARAM_ARG)
00552 YYPARSE_PARAM_DECL
00553 {
00554 register int yystate;
00555 register int yyn;
00556 register short *yyssp;
00557 register YYSTYPE *yyvsp;
00558 int yyerrstatus;
00559 int yychar1 = 0;
00560
00561 short yyssa[YYINITDEPTH];
00562 YYSTYPE yyvsa[YYINITDEPTH];
00563
00564 short *yyss = yyssa;
00565 YYSTYPE *yyvs = yyvsa;
00566
00567 #ifdef YYLSP_NEEDED
00568 YYLTYPE yylsa[YYINITDEPTH];
00569 YYLTYPE *yyls = yylsa;
00570 YYLTYPE *yylsp;
00571
00572 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
00573 #else
00574 #define YYPOPSTACK (yyvsp--, yyssp--)
00575 #endif
00576
00577 int yystacksize = YYINITDEPTH;
00578 int yyfree_stacks = 0;
00579
00580 #ifdef YYPURE
00581 int yychar;
00582 YYSTYPE yylval;
00583 int yynerrs;
00584 #ifdef YYLSP_NEEDED
00585 YYLTYPE yylloc;
00586 #endif
00587 #endif
00588
00589 YYSTYPE yyval;
00590
00591
00592
00593 int yylen;
00594
00595 #if YYDEBUG != 0
00596 if (yydebug)
00597 fprintf(stderr, "Starting parse\n");
00598 #endif
00599
00600 yystate = 0;
00601 yyerrstatus = 0;
00602 yynerrs = 0;
00603 yychar = YYEMPTY;
00604
00605
00606
00607
00608
00609
00610 yyssp = yyss - 1;
00611 yyvsp = yyvs;
00612 #ifdef YYLSP_NEEDED
00613 yylsp = yyls;
00614 #endif
00615
00616
00617
00618
00619 yynewstate:
00620
00621 *++yyssp = yystate;
00622
00623 if (yyssp >= yyss + yystacksize - 1)
00624 {
00625
00626
00627 YYSTYPE *yyvs1 = yyvs;
00628 short *yyss1 = yyss;
00629 #ifdef YYLSP_NEEDED
00630 YYLTYPE *yyls1 = yyls;
00631 #endif
00632
00633
00634 int size = yyssp - yyss + 1;
00635
00636 #ifdef yyoverflow
00637
00638
00639 #ifdef YYLSP_NEEDED
00640
00641
00642 yyoverflow("parser stack overflow",
00643 &yyss1, size * sizeof (*yyssp),
00644 &yyvs1, size * sizeof (*yyvsp),
00645 &yyls1, size * sizeof (*yylsp),
00646 &yystacksize);
00647 #else
00648 yyoverflow("parser stack overflow",
00649 &yyss1, size * sizeof (*yyssp),
00650 &yyvs1, size * sizeof (*yyvsp),
00651 &yystacksize);
00652 #endif
00653
00654 yyss = yyss1; yyvs = yyvs1;
00655 #ifdef YYLSP_NEEDED
00656 yyls = yyls1;
00657 #endif
00658 #else
00659
00660 if (yystacksize >= YYMAXDEPTH)
00661 {
00662 yyerror("parser stack overflow");
00663 if (yyfree_stacks)
00664 {
00665 free (yyss);
00666 free (yyvs);
00667 #ifdef YYLSP_NEEDED
00668 free (yyls);
00669 #endif
00670 }
00671 return 2;
00672 }
00673 yystacksize *= 2;
00674 if (yystacksize > YYMAXDEPTH)
00675 yystacksize = YYMAXDEPTH;
00676 #ifndef YYSTACK_USE_ALLOCA
00677 yyfree_stacks = 1;
00678 #endif
00679 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
00680 __yy_memcpy ((char *)yyss, (char *)yyss1,
00681 size * (unsigned int) sizeof (*yyssp));
00682 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
00683 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
00684 size * (unsigned int) sizeof (*yyvsp));
00685 #ifdef YYLSP_NEEDED
00686 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
00687 __yy_memcpy ((char *)yyls, (char *)yyls1,
00688 size * (unsigned int) sizeof (*yylsp));
00689 #endif
00690 #endif
00691
00692 yyssp = yyss + size - 1;
00693 yyvsp = yyvs + size - 1;
00694 #ifdef YYLSP_NEEDED
00695 yylsp = yyls + size - 1;
00696 #endif
00697
00698 #if YYDEBUG != 0
00699 if (yydebug)
00700 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
00701 #endif
00702
00703 if (yyssp >= yyss + yystacksize - 1)
00704 YYABORT;
00705 }
00706
00707 #if YYDEBUG != 0
00708 if (yydebug)
00709 fprintf(stderr, "Entering state %d\n", yystate);
00710 #endif
00711
00712 goto yybackup;
00713 yybackup:
00714
00715
00716
00717
00718
00719
00720
00721 yyn = yypact[yystate];
00722 if (yyn == YYFLAG)
00723 goto yydefault;
00724
00725
00726
00727
00728
00729
00730 if (yychar == YYEMPTY)
00731 {
00732 #if YYDEBUG != 0
00733 if (yydebug)
00734 fprintf(stderr, "Reading a token: ");
00735 #endif
00736 yychar = YYLEX;
00737 }
00738
00739
00740
00741 if (yychar <= 0)
00742 {
00743 yychar1 = 0;
00744 yychar = YYEOF;
00745
00746 #if YYDEBUG != 0
00747 if (yydebug)
00748 fprintf(stderr, "Now at end of input.\n");
00749 #endif
00750 }
00751 else
00752 {
00753 yychar1 = YYTRANSLATE(yychar);
00754
00755 #if YYDEBUG != 0
00756 if (yydebug)
00757 {
00758 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
00759
00760
00761 #ifdef YYPRINT
00762 YYPRINT (stderr, yychar, yylval);
00763 #endif
00764 fprintf (stderr, ")\n");
00765 }
00766 #endif
00767 }
00768
00769 yyn += yychar1;
00770 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
00771 goto yydefault;
00772
00773 yyn = yytable[yyn];
00774
00775
00776
00777
00778
00779
00780
00781
00782 if (yyn < 0)
00783 {
00784 if (yyn == YYFLAG)
00785 goto yyerrlab;
00786 yyn = -yyn;
00787 goto yyreduce;
00788 }
00789 else if (yyn == 0)
00790 goto yyerrlab;
00791
00792 if (yyn == YYFINAL)
00793 YYACCEPT;
00794
00795
00796
00797 #if YYDEBUG != 0
00798 if (yydebug)
00799 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
00800 #endif
00801
00802
00803 if (yychar != YYEOF)
00804 yychar = YYEMPTY;
00805
00806 *++yyvsp = yylval;
00807 #ifdef YYLSP_NEEDED
00808 *++yylsp = yylloc;
00809 #endif
00810
00811
00812 if (yyerrstatus) yyerrstatus--;
00813
00814 yystate = yyn;
00815 goto yynewstate;
00816
00817
00818 yydefault:
00819
00820 yyn = yydefact[yystate];
00821 if (yyn == 0)
00822 goto yyerrlab;
00823
00824
00825 yyreduce:
00826 yylen = yyr2[yyn];
00827 if (yylen > 0)
00828 yyval = yyvsp[1-yylen];
00829
00830 #if YYDEBUG != 0
00831 if (yydebug)
00832 {
00833 int i;
00834
00835 fprintf (stderr, "Reducing via rule %d (line %d), ",
00836 yyn, yyrline[yyn]);
00837
00838
00839 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
00840 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
00841 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
00842 }
00843 #endif
00844
00845
00846 switch (yyn) {
00847
00848 case 1:
00849 #line 179 "plural.y"
00850 {
00851 if (yyvsp[0].exp == NULL)
00852 YYABORT;
00853 ((struct parse_args *) arg)->res = yyvsp[0].exp;
00854 ;
00855 break;}
00856 case 2:
00857 #line 187 "plural.y"
00858 {
00859 yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
00860 ;
00861 break;}
00862 case 3:
00863 #line 191 "plural.y"
00864 {
00865 yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
00866 ;
00867 break;}
00868 case 4:
00869 #line 195 "plural.y"
00870 {
00871 yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
00872 ;
00873 break;}
00874 case 5:
00875 #line 199 "plural.y"
00876 {
00877 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
00878 ;
00879 break;}
00880 case 6:
00881 #line 203 "plural.y"
00882 {
00883 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
00884 ;
00885 break;}
00886 case 7:
00887 #line 207 "plural.y"
00888 {
00889 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
00890 ;
00891 break;}
00892 case 8:
00893 #line 211 "plural.y"
00894 {
00895 yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
00896 ;
00897 break;}
00898 case 9:
00899 #line 215 "plural.y"
00900 {
00901 yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
00902 ;
00903 break;}
00904 case 10:
00905 #line 219 "plural.y"
00906 {
00907 yyval.exp = new_exp_0 (var);
00908 ;
00909 break;}
00910 case 11:
00911 #line 223 "plural.y"
00912 {
00913 if ((yyval.exp = new_exp_0 (num)) != NULL)
00914 yyval.exp->val.num = yyvsp[0].num;
00915 ;
00916 break;}
00917 case 12:
00918 #line 228 "plural.y"
00919 {
00920 yyval.exp = yyvsp[-1].exp;
00921 ;
00922 break;}
00923 }
00924
00925 #line 543 "/home/haible/gnu/arch/linuxlibc6/share/bison.simple"
00926
00927 yyvsp -= yylen;
00928 yyssp -= yylen;
00929 #ifdef YYLSP_NEEDED
00930 yylsp -= yylen;
00931 #endif
00932
00933 #if YYDEBUG != 0
00934 if (yydebug)
00935 {
00936 short *ssp1 = yyss - 1;
00937 fprintf (stderr, "state stack now");
00938 while (ssp1 != yyssp)
00939 fprintf (stderr, " %d", *++ssp1);
00940 fprintf (stderr, "\n");
00941 }
00942 #endif
00943
00944 *++yyvsp = yyval;
00945
00946 #ifdef YYLSP_NEEDED
00947 yylsp++;
00948 if (yylen == 0)
00949 {
00950 yylsp->first_line = yylloc.first_line;
00951 yylsp->first_column = yylloc.first_column;
00952 yylsp->last_line = (yylsp-1)->last_line;
00953 yylsp->last_column = (yylsp-1)->last_column;
00954 yylsp->text = 0;
00955 }
00956 else
00957 {
00958 yylsp->last_line = (yylsp+yylen-1)->last_line;
00959 yylsp->last_column = (yylsp+yylen-1)->last_column;
00960 }
00961 #endif
00962
00963
00964
00965
00966
00967
00968 yyn = yyr1[yyn];
00969
00970 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
00971 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
00972 yystate = yytable[yystate];
00973 else
00974 yystate = yydefgoto[yyn - YYNTBASE];
00975
00976 goto yynewstate;
00977
00978 yyerrlab:
00979
00980 if (! yyerrstatus)
00981
00982 {
00983 ++yynerrs;
00984
00985 #ifdef YYERROR_VERBOSE
00986 yyn = yypact[yystate];
00987
00988 if (yyn > YYFLAG && yyn < YYLAST)
00989 {
00990 int size = 0;
00991 char *msg;
00992 int x, count;
00993
00994 count = 0;
00995
00996 for (x = (yyn < 0 ? -yyn : 0);
00997 x < (sizeof(yytname) / sizeof(char *)); x++)
00998 if (yycheck[x + yyn] == x)
00999 size += strlen(yytname[x]) + 15, count++;
01000 msg = (char *) malloc(size + 15);
01001 if (msg != 0)
01002 {
01003 strcpy(msg, "parse error");
01004
01005 if (count < 5)
01006 {
01007 count = 0;
01008 for (x = (yyn < 0 ? -yyn : 0);
01009 x < (sizeof(yytname) / sizeof(char *)); x++)
01010 if (yycheck[x + yyn] == x)
01011 {
01012 strcat(msg, count == 0 ? ", expecting `" : " or `");
01013 strcat(msg, yytname[x]);
01014 strcat(msg, "'");
01015 count++;
01016 }
01017 }
01018 yyerror(msg);
01019 free(msg);
01020 }
01021 else
01022 yyerror ("parse error; also virtual memory exceeded");
01023 }
01024 else
01025 #endif
01026 yyerror("parse error");
01027 }
01028
01029 goto yyerrlab1;
01030 yyerrlab1:
01031
01032 if (yyerrstatus == 3)
01033 {
01034
01035
01036
01037 if (yychar == YYEOF)
01038 YYABORT;
01039
01040 #if YYDEBUG != 0
01041 if (yydebug)
01042 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
01043 #endif
01044
01045 yychar = YYEMPTY;
01046 }
01047
01048
01049
01050
01051 yyerrstatus = 3;
01052
01053 goto yyerrhandle;
01054
01055 yyerrdefault:
01056
01057 #if 0
01058
01059
01060 yyn = yydefact[yystate];
01061 if (yyn) goto yydefault;
01062 #endif
01063
01064 yyerrpop:
01065
01066 if (yyssp == yyss) YYABORT;
01067 yyvsp--;
01068 yystate = *--yyssp;
01069 #ifdef YYLSP_NEEDED
01070 yylsp--;
01071 #endif
01072
01073 #if YYDEBUG != 0
01074 if (yydebug)
01075 {
01076 short *ssp1 = yyss - 1;
01077 fprintf (stderr, "Error: state stack now");
01078 while (ssp1 != yyssp)
01079 fprintf (stderr, " %d", *++ssp1);
01080 fprintf (stderr, "\n");
01081 }
01082 #endif
01083
01084 yyerrhandle:
01085
01086 yyn = yypact[yystate];
01087 if (yyn == YYFLAG)
01088 goto yyerrdefault;
01089
01090 yyn += YYTERROR;
01091 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
01092 goto yyerrdefault;
01093
01094 yyn = yytable[yyn];
01095 if (yyn < 0)
01096 {
01097 if (yyn == YYFLAG)
01098 goto yyerrpop;
01099 yyn = -yyn;
01100 goto yyreduce;
01101 }
01102 else if (yyn == 0)
01103 goto yyerrpop;
01104
01105 if (yyn == YYFINAL)
01106 YYACCEPT;
01107
01108 #if YYDEBUG != 0
01109 if (yydebug)
01110 fprintf(stderr, "Shifting error token, ");
01111 #endif
01112
01113 *++yyvsp = yylval;
01114 #ifdef YYLSP_NEEDED
01115 *++yylsp = yylloc;
01116 #endif
01117
01118 yystate = yyn;
01119 goto yynewstate;
01120
01121 yyacceptlab:
01122
01123 if (yyfree_stacks)
01124 {
01125 free (yyss);
01126 free (yyvs);
01127 #ifdef YYLSP_NEEDED
01128 free (yyls);
01129 #endif
01130 }
01131 return 0;
01132
01133 yyabortlab:
01134
01135 if (yyfree_stacks)
01136 {
01137 free (yyss);
01138 free (yyvs);
01139 #ifdef YYLSP_NEEDED
01140 free (yyls);
01141 #endif
01142 }
01143 return 1;
01144 }
01145 #line 233 "plural.y"
01146
01147
01148 void
01149 internal_function
01150 FREE_EXPRESSION (exp)
01151 struct expression *exp;
01152 {
01153 if (exp == NULL)
01154 return;
01155
01156
01157 switch (exp->nargs)
01158 {
01159 case 3:
01160 FREE_EXPRESSION (exp->val.args[2]);
01161
01162 case 2:
01163 FREE_EXPRESSION (exp->val.args[1]);
01164
01165 case 1:
01166 FREE_EXPRESSION (exp->val.args[0]);
01167
01168 default:
01169 break;
01170 }
01171
01172 free (exp);
01173 }
01174
01175
01176 static int
01177 yylex (lval, pexp)
01178 YYSTYPE *lval;
01179 const char **pexp;
01180 {
01181 const char *exp = *pexp;
01182 int result;
01183
01184 while (1)
01185 {
01186 if (exp[0] == '\0')
01187 {
01188 *pexp = exp;
01189 return YYEOF;
01190 }
01191
01192 if (exp[0] != ' ' && exp[0] != '\t')
01193 break;
01194
01195 ++exp;
01196 }
01197
01198 result = *exp++;
01199 switch (result)
01200 {
01201 case '0': case '1': case '2': case '3': case '4':
01202 case '5': case '6': case '7': case '8': case '9':
01203 {
01204 unsigned long int n = result - '0';
01205 while (exp[0] >= '0' && exp[0] <= '9')
01206 {
01207 n *= 10;
01208 n += exp[0] - '0';
01209 ++exp;
01210 }
01211 lval->num = n;
01212 result = NUMBER;
01213 }
01214 break;
01215
01216 case '=':
01217 if (exp[0] == '=')
01218 {
01219 ++exp;
01220 lval->op = equal;
01221 result = EQUOP2;
01222 }
01223 else
01224 result = YYERRCODE;
01225 break;
01226
01227 case '!':
01228 if (exp[0] == '=')
01229 {
01230 ++exp;
01231 lval->op = not_equal;
01232 result = EQUOP2;
01233 }
01234 break;
01235
01236 case '&':
01237 case '|':
01238 if (exp[0] == result)
01239 ++exp;
01240 else
01241 result = YYERRCODE;
01242 break;
01243
01244 case '<':
01245 if (exp[0] == '=')
01246 {
01247 ++exp;
01248 lval->op = less_or_equal;
01249 }
01250 else
01251 lval->op = less_than;
01252 result = CMPOP2;
01253 break;
01254
01255 case '>':
01256 if (exp[0] == '=')
01257 {
01258 ++exp;
01259 lval->op = greater_or_equal;
01260 }
01261 else
01262 lval->op = greater_than;
01263 result = CMPOP2;
01264 break;
01265
01266 case '*':
01267 lval->op = mult;
01268 result = MULOP2;
01269 break;
01270
01271 case '/':
01272 lval->op = divide;
01273 result = MULOP2;
01274 break;
01275
01276 case '%':
01277 lval->op = module;
01278 result = MULOP2;
01279 break;
01280
01281 case '+':
01282 lval->op = plus;
01283 result = ADDOP2;
01284 break;
01285
01286 case '-':
01287 lval->op = minus;
01288 result = ADDOP2;
01289 break;
01290
01291 case 'n':
01292 case '?':
01293 case ':':
01294 case '(':
01295 case ')':
01296
01297 break;
01298
01299 case ';':
01300 case '\n':
01301 case '\0':
01302
01303 --exp;
01304 result = YYEOF;
01305 break;
01306
01307 default:
01308 result = YYERRCODE;
01309 #if YYDEBUG != 0
01310 --exp;
01311 #endif
01312 break;
01313 }
01314
01315 *pexp = exp;
01316
01317 return result;
01318 }
01319
01320 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
01321 #define __attribute__(x)
01322 #endif
01323
01324 static void
01325 yyerror (str)
01326 const char *str __attribute__ ((__unused__));
01327 {
01328
01329 }