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