Imported Upstream version 0.18.3.2
[platform/upstream/gettext.git] / gettext-runtime / intl / plural.c
1 /* A Bison parser, made by GNU Bison 2.3a.  */
2
3 /* Skeleton implementation for Bison's Yacc-like parsers in C
4
5    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6    Free Software Foundation, Inc.
7
8    This program is free software: you can redistribute it and/or modify
9    it under the terms of the GNU Lesser General Public License as published by
10    the Free Software Foundation; either version 2.1 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU Lesser General Public License for more details.
17
18    You should have received a copy of the GNU Lesser General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
21 /* As a special exception, you may create a larger work that contains
22    part or all of the Bison parser skeleton and distribute that work
23    under terms of your choice, so long as that work isn't itself a
24    parser generator using the skeleton or a modified version thereof
25    as a parser skeleton.  Alternatively, if you modify or redistribute
26    the parser skeleton itself, you may (at your option) remove this
27    special exception, which will cause the skeleton and the resulting
28    Bison output files to be licensed under the GNU General Public
29    License without this special exception.
30
31    This special exception was added by the Free Software Foundation in
32    version 2.2 of Bison.  */
33
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35    simplifying the original so-called "semantic" parser.  */
36
37 /* All symbols defined below should begin with yy or YY, to avoid
38    infringing on user name space.  This should be done even for local
39    variables, as they might otherwise be expanded by user macros.
40    There are some unavoidable exceptions within include files to
41    define necessary library symbols; they are noted "INFRINGES ON
42    USER NAME SPACE" below.  */
43
44 /* Identify Bison output.  */
45 #define YYBISON 1
46
47 /* Bison version.  */
48 #define YYBISON_VERSION "2.3a"
49
50 /* Skeleton name.  */
51 #define YYSKELETON_NAME "yacc.c"
52
53 /* Pure parsers.  */
54 #define YYPURE 1
55
56 /* Using locations.  */
57 #define YYLSP_NEEDED 0
58
59 /* Substitute the variable and function names.  */
60 #define yyparse __gettextparse
61 #define yylex   __gettextlex
62 #define yyerror __gettexterror
63 #define yylval  __gettextlval
64 #define yychar  __gettextchar
65 #define yydebug __gettextdebug
66 #define yynerrs __gettextnerrs
67
68
69 /* Copy the first part of user declarations.  */
70 /* Line 164 of yacc.c.  */
71 #line 1 "plural.y"
72
73 /* Expression parsing for plural form selection.
74    Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
75    Written by Ulrich Drepper <drepper@cygnus.com>, 2000.
76
77    This program is free software; you can redistribute it and/or modify it
78    under the terms of the GNU Library General Public License as published
79    by the Free Software Foundation; either version 2, or (at your option)
80    any later version.
81
82    This program is distributed in the hope that it will be useful,
83    but WITHOUT ANY WARRANTY; without even the implied warranty of
84    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
85    Library General Public License for more details.
86
87    You should have received a copy of the GNU Library General Public
88    License along with this program; if not, write to the Free Software
89    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
90    USA.  */
91
92 /* For bison < 2.0, the bison generated parser uses alloca.  AIX 3 forces us
93    to put this declaration at the beginning of the file.  The declaration in
94    bison's skeleton file comes too late.  This must come before <config.h>
95    because <config.h> may include arbitrary system headers.
96    This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0.  */
97 #if defined _AIX && !defined __GNUC__
98  #pragma alloca
99 #endif
100
101 #ifdef HAVE_CONFIG_H
102 # include <config.h>
103 #endif
104
105 #include <stddef.h>
106 #include <stdlib.h>
107 #include <string.h>
108 #include "plural-exp.h"
109
110 /* The main function generated by the parser is called __gettextparse,
111    but we want it to be called PLURAL_PARSE.  */
112 #ifndef _LIBC
113 # define __gettextparse PLURAL_PARSE
114 #endif
115
116 #define YYLEX_PARAM     &((struct parse_args *) arg)->cp
117 #define YYPARSE_PARAM   arg
118
119
120 /* Enabling traces.  */
121 #ifndef YYDEBUG
122 # define YYDEBUG 0
123 #endif
124
125 /* Enabling verbose error messages.  */
126 #ifdef YYERROR_VERBOSE
127 # undef YYERROR_VERBOSE
128 # define YYERROR_VERBOSE 1
129 #else
130 # define YYERROR_VERBOSE 0
131 #endif
132
133 /* Enabling the token table.  */
134 #ifndef YYTOKEN_TABLE
135 # define YYTOKEN_TABLE 0
136 #endif
137
138
139 /* Tokens.  */
140 #ifndef YYTOKENTYPE
141 # define YYTOKENTYPE
142    /* Put the tokens into the symbol table, so that GDB and other debuggers
143       know about them.  */
144    enum yytokentype {
145      EQUOP2 = 258,
146      CMPOP2 = 259,
147      ADDOP2 = 260,
148      MULOP2 = 261,
149      NUMBER = 262
150    };
151 #endif
152 /* Tokens.  */
153 #define EQUOP2 258
154 #define CMPOP2 259
155 #define ADDOP2 260
156 #define MULOP2 261
157 #define NUMBER 262
158
159
160
161
162 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
163 typedef union YYSTYPE
164 {/* Line 191 of yacc.c.  */
165 #line 51 "plural.y"
166
167   unsigned long int num;
168   enum expression_operator op;
169   struct expression *exp;
170 }
171 /* Line 191 of yacc.c.  */
172 #line 175 "plural.c"
173         YYSTYPE;
174 # define YYSTYPE_IS_TRIVIAL 1
175 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
176 # define YYSTYPE_IS_DECLARED 1
177 #endif
178
179
180
181
182 /* Copy the second part of user declarations.  */
183 /* Line 221 of yacc.c.  */
184 #line 57 "plural.y"
185
186 /* Prototypes for local functions.  */
187 static int yylex (YYSTYPE *lval, const char **pexp);
188 static void yyerror (const char *str);
189
190 /* Allocation of expressions.  */
191
192 static struct expression *
193 new_exp (int nargs, enum expression_operator op,
194          struct expression * const *args)
195 {
196   int i;
197   struct expression *newp;
198
199   /* If any of the argument could not be malloc'ed, just return NULL.  */
200   for (i = nargs - 1; i >= 0; i--)
201     if (args[i] == NULL)
202       goto fail;
203
204   /* Allocate a new expression.  */
205   newp = (struct expression *) malloc (sizeof (*newp));
206   if (newp != NULL)
207     {
208       newp->nargs = nargs;
209       newp->operation = op;
210       for (i = nargs - 1; i >= 0; i--)
211         newp->val.args[i] = args[i];
212       return newp;
213     }
214
215  fail:
216   for (i = nargs - 1; i >= 0; i--)
217     FREE_EXPRESSION (args[i]);
218
219   return NULL;
220 }
221
222 static inline struct expression *
223 new_exp_0 (enum expression_operator op)
224 {
225   return new_exp (0, op, NULL);
226 }
227
228 static inline struct expression *
229 new_exp_1 (enum expression_operator op, struct expression *right)
230 {
231   struct expression *args[1];
232
233   args[0] = right;
234   return new_exp (1, op, args);
235 }
236
237 static struct expression *
238 new_exp_2 (enum expression_operator op, struct expression *left,
239            struct expression *right)
240 {
241   struct expression *args[2];
242
243   args[0] = left;
244   args[1] = right;
245   return new_exp (2, op, args);
246 }
247
248 static inline struct expression *
249 new_exp_3 (enum expression_operator op, struct expression *bexp,
250            struct expression *tbranch, struct expression *fbranch)
251 {
252   struct expression *args[3];
253
254   args[0] = bexp;
255   args[1] = tbranch;
256   args[2] = fbranch;
257   return new_exp (3, op, args);
258 }
259
260
261 /* Line 221 of yacc.c.  */
262 #line 265 "plural.c"
263
264 #ifdef short
265 # undef short
266 #endif
267
268 #ifdef YYTYPE_UINT8
269 typedef YYTYPE_UINT8 yytype_uint8;
270 #else
271 typedef unsigned char yytype_uint8;
272 #endif
273
274 #ifdef YYTYPE_INT8
275 typedef YYTYPE_INT8 yytype_int8;
276 #elif (defined __STDC__ || defined __C99__FUNC__ \
277      || defined __cplusplus || defined _MSC_VER)
278 typedef signed char yytype_int8;
279 #else
280 typedef short int yytype_int8;
281 #endif
282
283 #ifdef YYTYPE_UINT16
284 typedef YYTYPE_UINT16 yytype_uint16;
285 #else
286 typedef unsigned short int yytype_uint16;
287 #endif
288
289 #ifdef YYTYPE_INT16
290 typedef YYTYPE_INT16 yytype_int16;
291 #else
292 typedef short int yytype_int16;
293 #endif
294
295 #ifndef YYSIZE_T
296 # ifdef __SIZE_TYPE__
297 #  define YYSIZE_T __SIZE_TYPE__
298 # elif defined size_t
299 #  define YYSIZE_T size_t
300 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
301      || defined __cplusplus || defined _MSC_VER)
302 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
303 #  define YYSIZE_T size_t
304 # else
305 #  define YYSIZE_T unsigned int
306 # endif
307 #endif
308
309 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
310
311 #ifndef YY_
312 # if YYENABLE_NLS
313 #  if ENABLE_NLS
314 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
315 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
316 #  endif
317 # endif
318 # ifndef YY_
319 #  define YY_(msgid) msgid
320 # endif
321 #endif
322
323 /* Suppress unused-variable warnings by "using" E.  */
324 #if ! defined lint || defined __GNUC__
325 # define YYUSE(e) ((void) (e))
326 #else
327 # define YYUSE(e) /* empty */
328 #endif
329
330 /* Identity function, used to suppress warnings about constant conditions.  */
331 #ifndef lint
332 # define YYID(n) (n)
333 #else
334 #if (defined __STDC__ || defined __C99__FUNC__ \
335      || defined __cplusplus || defined _MSC_VER)
336 static int
337 YYID (int yyi)
338 #else
339 static int
340 YYID (yyi)
341     int yyi;
342 #endif
343 {
344   return yyi;
345 }
346 #endif
347
348 #if ! defined yyoverflow || YYERROR_VERBOSE
349
350 /* The parser invokes alloca or malloc; define the necessary symbols.  */
351
352 # ifdef YYSTACK_USE_ALLOCA
353 #  if YYSTACK_USE_ALLOCA
354 #   ifdef __GNUC__
355 #    define YYSTACK_ALLOC __builtin_alloca
356 #   elif defined __BUILTIN_VA_ARG_INCR
357 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
358 #   elif defined _AIX
359 #    define YYSTACK_ALLOC __alloca
360 #   elif defined _MSC_VER
361 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
362 #    define alloca _alloca
363 #   else
364 #    define YYSTACK_ALLOC alloca
365 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
366      || defined __cplusplus || defined _MSC_VER)
367 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
368 #     ifndef _STDLIB_H
369 #      define _STDLIB_H 1
370 #     endif
371 #    endif
372 #   endif
373 #  endif
374 # endif
375
376 # ifdef YYSTACK_ALLOC
377    /* Pacify GCC's `empty if-body' warning.  */
378 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
379 #  ifndef YYSTACK_ALLOC_MAXIMUM
380     /* The OS might guarantee only one guard page at the bottom of the stack,
381        and a page size can be as small as 4096 bytes.  So we cannot safely
382        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
383        to allow for a few compiler-allocated temporary stack slots.  */
384 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
385 #  endif
386 # else
387 #  define YYSTACK_ALLOC YYMALLOC
388 #  define YYSTACK_FREE YYFREE
389 #  ifndef YYSTACK_ALLOC_MAXIMUM
390 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
391 #  endif
392 #  if (defined __cplusplus && ! defined _STDLIB_H \
393        && ! ((defined YYMALLOC || defined malloc) \
394              && (defined YYFREE || defined free)))
395 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
396 #   ifndef _STDLIB_H
397 #    define _STDLIB_H 1
398 #   endif
399 #  endif
400 #  ifndef YYMALLOC
401 #   define YYMALLOC malloc
402 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
403      || defined __cplusplus || defined _MSC_VER)
404 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
405 #   endif
406 #  endif
407 #  ifndef YYFREE
408 #   define YYFREE free
409 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
410      || defined __cplusplus || defined _MSC_VER)
411 void free (void *); /* INFRINGES ON USER NAME SPACE */
412 #   endif
413 #  endif
414 # endif
415 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
416
417
418 #if (! defined yyoverflow \
419      && (! defined __cplusplus \
420          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
421
422 /* A type that is properly aligned for any stack member.  */
423 union yyalloc
424 {
425   yytype_int16 yyss;
426   YYSTYPE yyvs;
427   };
428
429 /* The size of the maximum gap between one aligned stack and the next.  */
430 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
431
432 /* The size of an array large to enough to hold all stacks, each with
433    N elements.  */
434 # define YYSTACK_BYTES(N) \
435      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
436       + YYSTACK_GAP_MAXIMUM)
437
438 /* Copy COUNT objects from FROM to TO.  The source and destination do
439    not overlap.  */
440 # ifndef YYCOPY
441 #  if defined __GNUC__ && 1 < __GNUC__
442 #   define YYCOPY(To, From, Count) \
443       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
444 #  else
445 #   define YYCOPY(To, From, Count)              \
446       do                                        \
447         {                                       \
448           YYSIZE_T yyi;                         \
449           for (yyi = 0; yyi < (Count); yyi++)   \
450             (To)[yyi] = (From)[yyi];            \
451         }                                       \
452       while (YYID (0))
453 #  endif
454 # endif
455
456 /* Relocate STACK from its old location to the new one.  The
457    local variables YYSIZE and YYSTACKSIZE give the old and new number of
458    elements in the stack, and YYPTR gives the new location of the
459    stack.  Advance YYPTR to a properly aligned location for the next
460    stack.  */
461 # define YYSTACK_RELOCATE(Stack)                                        \
462     do                                                                  \
463       {                                                                 \
464         YYSIZE_T yynewbytes;                                            \
465         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
466         Stack = &yyptr->Stack;                                          \
467         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
468         yyptr += yynewbytes / sizeof (*yyptr);                          \
469       }                                                                 \
470     while (YYID (0))
471
472 #endif
473
474 /* YYFINAL -- State number of the termination state.  */
475 #define YYFINAL  9
476 /* YYLAST -- Last index in YYTABLE.  */
477 #define YYLAST   54
478
479 /* YYNTOKENS -- Number of terminals.  */
480 #define YYNTOKENS  16
481 /* YYNNTS -- Number of nonterminals.  */
482 #define YYNNTS  3
483 /* YYNRULES -- Number of rules.  */
484 #define YYNRULES  13
485 /* YYNRULES -- Number of states.  */
486 #define YYNSTATES  27
487
488 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
489 #define YYUNDEFTOK  2
490 #define YYMAXUTOK   262
491
492 #define YYTRANSLATE(YYX)                                                \
493   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
494
495 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
496 static const yytype_uint8 yytranslate[] =
497 {
498        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
499        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
500        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
501        2,     2,     2,    10,     2,     2,     2,     2,     5,     2,
502       14,    15,     2,     2,     2,     2,     2,     2,     2,     2,
503        2,     2,     2,     2,     2,     2,     2,     2,    12,     2,
504        2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
505        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
506        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
507        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
508        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
509       13,     2,     2,     2,     2,     2,     2,     2,     2,     2,
510        2,     2,     2,     2,     4,     2,     2,     2,     2,     2,
511        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
512        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
513        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
514        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
515        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
516        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
517        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
518        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
519        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
520        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
521        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
522        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
523        2,     2,     2,     2,     2,     2,     1,     2,     6,     7,
524        8,     9,    11
525 };
526
527 #if YYDEBUG
528 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
529    YYRHS.  */
530 static const yytype_uint8 yyprhs[] =
531 {
532        0,     0,     3,     5,    11,    15,    19,    23,    27,    31,
533       35,    38,    40,    42
534 };
535
536 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
537 static const yytype_int8 yyrhs[] =
538 {
539       17,     0,    -1,    18,    -1,    18,     3,    18,    12,    18,
540       -1,    18,     4,    18,    -1,    18,     5,    18,    -1,    18,
541        6,    18,    -1,    18,     7,    18,    -1,    18,     8,    18,
542       -1,    18,     9,    18,    -1,    10,    18,    -1,    13,    -1,
543       11,    -1,    14,    18,    15,    -1
544 };
545
546 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
547 static const yytype_uint8 yyrline[] =
548 {
549        0,   154,   154,   162,   166,   170,   174,   178,   182,   186,
550      190,   194,   198,   203
551 };
552 #endif
553
554 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
555 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
556    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
557 static const char *const yytname[] =
558 {
559   "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
560   "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
561   "$accept", "start", "exp", 0
562 };
563 #endif
564
565 # ifdef YYPRINT
566 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
567    token YYLEX-NUM.  */
568 static const yytype_uint16 yytoknum[] =
569 {
570        0,   256,   257,    63,   124,    38,   258,   259,   260,   261,
571       33,   262,    58,   110,    40,    41
572 };
573 # endif
574
575 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
576 static const yytype_uint8 yyr1[] =
577 {
578        0,    16,    17,    18,    18,    18,    18,    18,    18,    18,
579       18,    18,    18,    18
580 };
581
582 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
583 static const yytype_uint8 yyr2[] =
584 {
585        0,     2,     1,     5,     3,     3,     3,     3,     3,     3,
586        2,     1,     1,     3
587 };
588
589 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
590    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
591    means the default is an error.  */
592 static const yytype_uint8 yydefact[] =
593 {
594        0,     0,    12,    11,     0,     0,     2,    10,     0,     1,
595        0,     0,     0,     0,     0,     0,     0,    13,     0,     4,
596        5,     6,     7,     8,     9,     0,     3
597 };
598
599 /* YYDEFGOTO[NTERM-NUM].  */
600 static const yytype_int8 yydefgoto[] =
601 {
602       -1,     5,     6
603 };
604
605 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
606    STATE-NUM.  */
607 #define YYPACT_NINF -10
608 static const yytype_int8 yypact[] =
609 {
610       -9,    -9,   -10,   -10,    -9,     8,    36,   -10,    13,   -10,
611       -9,    -9,    -9,    -9,    -9,    -9,    -9,   -10,    26,    41,
612       45,    18,    -2,    14,   -10,    -9,    36
613 };
614
615 /* YYPGOTO[NTERM-NUM].  */
616 static const yytype_int8 yypgoto[] =
617 {
618      -10,   -10,    -1
619 };
620
621 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
622    positive, shift that token.  If negative, reduce the rule which
623    number is the opposite.  If zero, do what YYDEFACT says.
624    If YYTABLE_NINF, syntax error.  */
625 #define YYTABLE_NINF -1
626 static const yytype_uint8 yytable[] =
627 {
628        7,     1,     2,     8,     3,     4,    15,    16,     9,    18,
629       19,    20,    21,    22,    23,    24,    10,    11,    12,    13,
630       14,    15,    16,    16,    26,    14,    15,    16,    17,    10,
631       11,    12,    13,    14,    15,    16,     0,     0,    25,    10,
632       11,    12,    13,    14,    15,    16,    12,    13,    14,    15,
633       16,    13,    14,    15,    16
634 };
635
636 static const yytype_int8 yycheck[] =
637 {
638        1,    10,    11,     4,    13,    14,     8,     9,     0,    10,
639       11,    12,    13,    14,    15,    16,     3,     4,     5,     6,
640        7,     8,     9,     9,    25,     7,     8,     9,    15,     3,
641        4,     5,     6,     7,     8,     9,    -1,    -1,    12,     3,
642        4,     5,     6,     7,     8,     9,     5,     6,     7,     8,
643        9,     6,     7,     8,     9
644 };
645
646 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
647    symbol of state STATE-NUM.  */
648 static const yytype_uint8 yystos[] =
649 {
650        0,    10,    11,    13,    14,    17,    18,    18,    18,     0,
651        3,     4,     5,     6,     7,     8,     9,    15,    18,    18,
652       18,    18,    18,    18,    18,    12,    18
653 };
654
655 #define yyerrok         (yyerrstatus = 0)
656 #define yyclearin       (yychar = YYEMPTY)
657 #define YYEMPTY         (-2)
658 #define YYEOF           0
659
660 #define YYACCEPT        goto yyacceptlab
661 #define YYABORT         goto yyabortlab
662 #define YYERROR         goto yyerrorlab
663
664
665 /* Like YYERROR except do call yyerror.  This remains here temporarily
666    to ease the transition to the new meaning of YYERROR, for GCC.
667    Once GCC version 2 has supplanted version 1, this can go.  */
668
669 #define YYFAIL          goto yyerrlab
670
671 #define YYRECOVERING()  (!!yyerrstatus)
672
673 #define YYBACKUP(Token, Value)                                  \
674 do                                                              \
675   if (yychar == YYEMPTY && yylen == 1)                          \
676     {                                                           \
677       yychar = (Token);                                         \
678       yylval = (Value);                                         \
679       yytoken = YYTRANSLATE (yychar);                           \
680       YYPOPSTACK (1);                                           \
681       goto yybackup;                                            \
682     }                                                           \
683   else                                                          \
684     {                                                           \
685       yyerror (YY_("syntax error: cannot back up")); \
686       YYERROR;                                                  \
687     }                                                           \
688 while (YYID (0))
689
690
691 #define YYTERROR        1
692 #define YYERRCODE       256
693
694
695 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
696    If N is 0, then set CURRENT to the empty location which ends
697    the previous symbol: RHS[0] (always defined).  */
698
699 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
700 #ifndef YYLLOC_DEFAULT
701 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
702     do                                                                  \
703       if (YYID (N))                                                    \
704         {                                                               \
705           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
706           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
707           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
708           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
709         }                                                               \
710       else                                                              \
711         {                                                               \
712           (Current).first_line   = (Current).last_line   =              \
713             YYRHSLOC (Rhs, 0).last_line;                                \
714           (Current).first_column = (Current).last_column =              \
715             YYRHSLOC (Rhs, 0).last_column;                              \
716         }                                                               \
717     while (YYID (0))
718 #endif
719
720
721 /* YY_LOCATION_PRINT -- Print the location on the stream.
722    This macro was not mandated originally: define only if we know
723    we won't break user code: when these are the locations we know.  */
724
725 #ifndef YY_LOCATION_PRINT
726 # if YYLTYPE_IS_TRIVIAL
727 #  define YY_LOCATION_PRINT(File, Loc)                  \
728      fprintf (File, "%d.%d-%d.%d",                      \
729               (Loc).first_line, (Loc).first_column,     \
730               (Loc).last_line,  (Loc).last_column)
731 # else
732 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
733 # endif
734 #endif
735
736
737 /* YYLEX -- calling `yylex' with the right arguments.  */
738
739 #ifdef YYLEX_PARAM
740 # define YYLEX yylex (&yylval, YYLEX_PARAM)
741 #else
742 # define YYLEX yylex (&yylval)
743 #endif
744
745 /* Enable debugging if requested.  */
746 #if YYDEBUG
747
748 # ifndef YYFPRINTF
749 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
750 #  define YYFPRINTF fprintf
751 # endif
752
753 # define YYDPRINTF(Args)                        \
754 do {                                            \
755   if (yydebug)                                  \
756     YYFPRINTF Args;                             \
757 } while (YYID (0))
758
759 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
760 do {                                                                      \
761   if (yydebug)                                                            \
762     {                                                                     \
763       YYFPRINTF (stderr, "%s ", Title);                                   \
764       yy_symbol_print (stderr,                                            \
765                   Type, Value); \
766       YYFPRINTF (stderr, "\n");                                           \
767     }                                                                     \
768 } while (YYID (0))
769
770
771 /*--------------------------------.
772 | Print this symbol on YYOUTPUT.  |
773 `--------------------------------*/
774
775 /*ARGSUSED*/
776 #if (defined __STDC__ || defined __C99__FUNC__ \
777      || defined __cplusplus || defined _MSC_VER)
778 static void
779 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
780 #else
781 static void
782 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
783     FILE *yyoutput;
784     int yytype;
785     YYSTYPE const * const yyvaluep;
786 #endif
787 {
788   if (!yyvaluep)
789     return;
790 # ifdef YYPRINT
791   if (yytype < YYNTOKENS)
792     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
793 # else
794   YYUSE (yyoutput);
795 # endif
796   switch (yytype)
797     {
798       default:
799         break;
800     }
801 }
802
803
804 /*--------------------------------.
805 | Print this symbol on YYOUTPUT.  |
806 `--------------------------------*/
807
808 #if (defined __STDC__ || defined __C99__FUNC__ \
809      || defined __cplusplus || defined _MSC_VER)
810 static void
811 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
812 #else
813 static void
814 yy_symbol_print (yyoutput, yytype, yyvaluep)
815     FILE *yyoutput;
816     int yytype;
817     YYSTYPE const * const yyvaluep;
818 #endif
819 {
820   if (yytype < YYNTOKENS)
821     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
822   else
823     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
824
825   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
826   YYFPRINTF (yyoutput, ")");
827 }
828
829 /*------------------------------------------------------------------.
830 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
831 | TOP (included).                                                   |
832 `------------------------------------------------------------------*/
833
834 #if (defined __STDC__ || defined __C99__FUNC__ \
835      || defined __cplusplus || defined _MSC_VER)
836 static void
837 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
838 #else
839 static void
840 yy_stack_print (yybottom, yytop)
841     yytype_int16 *yybottom;
842     yytype_int16 *yytop;
843 #endif
844 {
845   YYFPRINTF (stderr, "Stack now");
846   for (; yybottom <= yytop; yybottom++)
847     {
848       int yybot = *yybottom;
849       YYFPRINTF (stderr, " %d", yybot);
850     }
851   YYFPRINTF (stderr, "\n");
852 }
853
854 # define YY_STACK_PRINT(Bottom, Top)                            \
855 do {                                                            \
856   if (yydebug)                                                  \
857     yy_stack_print ((Bottom), (Top));                           \
858 } while (YYID (0))
859
860
861 /*------------------------------------------------.
862 | Report that the YYRULE is going to be reduced.  |
863 `------------------------------------------------*/
864
865 #if (defined __STDC__ || defined __C99__FUNC__ \
866      || defined __cplusplus || defined _MSC_VER)
867 static void
868 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
869 #else
870 static void
871 yy_reduce_print (yyvsp, yyrule)
872     YYSTYPE *yyvsp;
873     int yyrule;
874 #endif
875 {
876   int yynrhs = yyr2[yyrule];
877   int yyi;
878   unsigned long int yylno = yyrline[yyrule];
879   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
880              yyrule - 1, yylno);
881   /* The symbols being reduced.  */
882   for (yyi = 0; yyi < yynrhs; yyi++)
883     {
884       fprintf (stderr, "   $%d = ", yyi + 1);
885       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
886                        &(yyvsp[(yyi + 1) - (yynrhs)])
887                                        );
888       fprintf (stderr, "\n");
889     }
890 }
891
892 # define YY_REDUCE_PRINT(Rule)          \
893 do {                                    \
894   if (yydebug)                          \
895     yy_reduce_print (yyvsp, Rule); \
896 } while (YYID (0))
897
898 /* Nonzero means print parse trace.  It is left uninitialized so that
899    multiple parsers can coexist.  */
900 int yydebug;
901 #else /* !YYDEBUG */
902 # define YYDPRINTF(Args)
903 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
904 # define YY_STACK_PRINT(Bottom, Top)
905 # define YY_REDUCE_PRINT(Rule)
906 #endif /* !YYDEBUG */
907
908
909 /* YYINITDEPTH -- initial size of the parser's stacks.  */
910 #ifndef YYINITDEPTH
911 # define YYINITDEPTH 200
912 #endif
913
914 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
915    if the built-in stack extension method is used).
916
917    Do not make this value too large; the results are undefined if
918    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
919    evaluated with infinite-precision integer arithmetic.  */
920
921 #ifndef YYMAXDEPTH
922 # define YYMAXDEPTH 10000
923 #endif
924
925 \f
926
927 #if YYERROR_VERBOSE
928
929 # ifndef yystrlen
930 #  if defined __GLIBC__ && defined _STRING_H
931 #   define yystrlen strlen
932 #  else
933 /* Return the length of YYSTR.  */
934 #if (defined __STDC__ || defined __C99__FUNC__ \
935      || defined __cplusplus || defined _MSC_VER)
936 static YYSIZE_T
937 yystrlen (const char *yystr)
938 #else
939 static YYSIZE_T
940 yystrlen (yystr)
941     const char *yystr;
942 #endif
943 {
944   YYSIZE_T yylen;
945   for (yylen = 0; yystr[yylen]; yylen++)
946     continue;
947   return yylen;
948 }
949 #  endif
950 # endif
951
952 # ifndef yystpcpy
953 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
954 #   define yystpcpy stpcpy
955 #  else
956 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
957    YYDEST.  */
958 #if (defined __STDC__ || defined __C99__FUNC__ \
959      || defined __cplusplus || defined _MSC_VER)
960 static char *
961 yystpcpy (char *yydest, const char *yysrc)
962 #else
963 static char *
964 yystpcpy (yydest, yysrc)
965     char *yydest;
966     const char *yysrc;
967 #endif
968 {
969   char *yyd = yydest;
970   const char *yys = yysrc;
971
972   while ((*yyd++ = *yys++) != '\0')
973     continue;
974
975   return yyd - 1;
976 }
977 #  endif
978 # endif
979
980 # ifndef yytnamerr
981 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
982    quotes and backslashes, so that it's suitable for yyerror.  The
983    heuristic is that double-quoting is unnecessary unless the string
984    contains an apostrophe, a comma, or backslash (other than
985    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
986    null, do not copy; instead, return the length of what the result
987    would have been.  */
988 static YYSIZE_T
989 yytnamerr (char *yyres, const char *yystr)
990 {
991   if (*yystr == '"')
992     {
993       YYSIZE_T yyn = 0;
994       char const *yyp = yystr;
995
996       for (;;)
997         switch (*++yyp)
998           {
999           case '\'':
1000           case ',':
1001             goto do_not_strip_quotes;
1002
1003           case '\\':
1004             if (*++yyp != '\\')
1005               goto do_not_strip_quotes;
1006             /* Fall through.  */
1007           default:
1008             if (yyres)
1009               yyres[yyn] = *yyp;
1010             yyn++;
1011             break;
1012
1013           case '"':
1014             if (yyres)
1015               yyres[yyn] = '\0';
1016             return yyn;
1017           }
1018     do_not_strip_quotes: ;
1019     }
1020
1021   if (! yyres)
1022     return yystrlen (yystr);
1023
1024   return yystpcpy (yyres, yystr) - yyres;
1025 }
1026 # endif
1027
1028 /* Copy into YYRESULT an error message about the unexpected token
1029    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
1030    including the terminating null byte.  If YYRESULT is null, do not
1031    copy anything; just return the number of bytes that would be
1032    copied.  As a special case, return 0 if an ordinary "syntax error"
1033    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
1034    size calculation.  */
1035 static YYSIZE_T
1036 yysyntax_error (char *yyresult, int yystate, int yychar)
1037 {
1038   int yyn = yypact[yystate];
1039
1040   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
1041     return 0;
1042   else
1043     {
1044       int yytype = YYTRANSLATE (yychar);
1045       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1046       YYSIZE_T yysize = yysize0;
1047       YYSIZE_T yysize1;
1048       int yysize_overflow = 0;
1049       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1050       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1051       int yyx;
1052
1053 # if 0
1054       /* This is so xgettext sees the translatable formats that are
1055          constructed on the fly.  */
1056       YY_("syntax error, unexpected %s");
1057       YY_("syntax error, unexpected %s, expecting %s");
1058       YY_("syntax error, unexpected %s, expecting %s or %s");
1059       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1060       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1061 # endif
1062       char *yyfmt;
1063       char const *yyf;
1064       static char const yyunexpected[] = "syntax error, unexpected %s";
1065       static char const yyexpecting[] = ", expecting %s";
1066       static char const yyor[] = " or %s";
1067       char yyformat[sizeof yyunexpected
1068                     + sizeof yyexpecting - 1
1069                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1070                        * (sizeof yyor - 1))];
1071       char const *yyprefix = yyexpecting;
1072
1073       /* Start YYX at -YYN if negative to avoid negative indexes in
1074          YYCHECK.  */
1075       int yyxbegin = yyn < 0 ? -yyn : 0;
1076
1077       /* Stay within bounds of both yycheck and yytname.  */
1078       int yychecklim = YYLAST - yyn + 1;
1079       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1080       int yycount = 1;
1081
1082       yyarg[0] = yytname[yytype];
1083       yyfmt = yystpcpy (yyformat, yyunexpected);
1084
1085       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1086         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1087           {
1088             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1089               {
1090                 yycount = 1;
1091                 yysize = yysize0;
1092                 yyformat[sizeof yyunexpected - 1] = '\0';
1093                 break;
1094               }
1095             yyarg[yycount++] = yytname[yyx];
1096             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1097             yysize_overflow |= (yysize1 < yysize);
1098             yysize = yysize1;
1099             yyfmt = yystpcpy (yyfmt, yyprefix);
1100             yyprefix = yyor;
1101           }
1102
1103       yyf = YY_(yyformat);
1104       yysize1 = yysize + yystrlen (yyf);
1105       yysize_overflow |= (yysize1 < yysize);
1106       yysize = yysize1;
1107
1108       if (yysize_overflow)
1109         return YYSIZE_MAXIMUM;
1110
1111       if (yyresult)
1112         {
1113           /* Avoid sprintf, as that infringes on the user's name space.
1114              Don't have undefined behavior even if the translation
1115              produced a string with the wrong number of "%s"s.  */
1116           char *yyp = yyresult;
1117           int yyi = 0;
1118           while ((*yyp = *yyf) != '\0')
1119             {
1120               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1121                 {
1122                   yyp += yytnamerr (yyp, yyarg[yyi++]);
1123                   yyf += 2;
1124                 }
1125               else
1126                 {
1127                   yyp++;
1128                   yyf++;
1129                 }
1130             }
1131         }
1132       return yysize;
1133     }
1134 }
1135 #endif /* YYERROR_VERBOSE */
1136 \f
1137
1138 /*-----------------------------------------------.
1139 | Release the memory associated to this symbol.  |
1140 `-----------------------------------------------*/
1141
1142 /*ARGSUSED*/
1143 #if (defined __STDC__ || defined __C99__FUNC__ \
1144      || defined __cplusplus || defined _MSC_VER)
1145 static void
1146 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1147 #else
1148 static void
1149 yydestruct (yymsg, yytype, yyvaluep)
1150     const char *yymsg;
1151     int yytype;
1152     YYSTYPE *yyvaluep;
1153 #endif
1154 {
1155   YYUSE (yyvaluep);
1156
1157   if (!yymsg)
1158     yymsg = "Deleting";
1159   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1160
1161   switch (yytype)
1162     {
1163
1164       default:
1165         break;
1166     }
1167 }
1168 \f
1169
1170 /* Prevent warnings from -Wmissing-prototypes.  */
1171
1172 #ifdef YYPARSE_PARAM
1173 #if defined __STDC__ || defined __cplusplus
1174 int yyparse (void *YYPARSE_PARAM);
1175 #else
1176 int yyparse ();
1177 #endif
1178 #else /* ! YYPARSE_PARAM */
1179 #if defined __STDC__ || defined __cplusplus
1180 int yyparse (void);
1181 #else
1182 int yyparse ();
1183 #endif
1184 #endif /* ! YYPARSE_PARAM */
1185
1186
1187
1188
1189
1190
1191 /*----------.
1192 | yyparse.  |
1193 `----------*/
1194
1195 #ifdef YYPARSE_PARAM
1196 #if (defined __STDC__ || defined __C99__FUNC__ \
1197      || defined __cplusplus || defined _MSC_VER)
1198 int
1199 yyparse (void *YYPARSE_PARAM)
1200 #else
1201 int
1202 yyparse (YYPARSE_PARAM)
1203     void *YYPARSE_PARAM;
1204 #endif
1205 #else /* ! YYPARSE_PARAM */
1206 #if (defined __STDC__ || defined __C99__FUNC__ \
1207      || defined __cplusplus || defined _MSC_VER)
1208 int
1209 yyparse (void)
1210 #else
1211 int
1212 yyparse ()
1213
1214 #endif
1215 #endif
1216 {
1217   /* The lookahead symbol.  */
1218 int yychar;
1219
1220 /* The semantic value of the lookahead symbol.  */
1221 YYSTYPE yylval;
1222
1223 /* Number of syntax errors so far.  */
1224 int yynerrs;
1225
1226   int yystate;
1227   int yyn;
1228   int yyresult;
1229   /* Number of tokens to shift before error messages enabled.  */
1230   int yyerrstatus;
1231   /* Lookahead token as an internal (translated) token number.  */
1232   int yytoken = 0;
1233 #if YYERROR_VERBOSE
1234   /* Buffer for error messages, and its allocated size.  */
1235   char yymsgbuf[128];
1236   char *yymsg = yymsgbuf;
1237   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
1238 #endif
1239
1240   /* Three stacks and their tools:
1241      `yyss': related to states,
1242      `yyvs': related to semantic values,
1243      `yyls': related to locations.
1244
1245      Refer to the stacks thru separate pointers, to allow yyoverflow
1246      to reallocate them elsewhere.  */
1247
1248   /* The state stack.  */
1249   yytype_int16 yyssa[YYINITDEPTH];
1250   yytype_int16 *yyss = yyssa;
1251   yytype_int16 *yyssp;
1252
1253   /* The semantic value stack.  */
1254   YYSTYPE yyvsa[YYINITDEPTH];
1255   YYSTYPE *yyvs = yyvsa;
1256   YYSTYPE *yyvsp;
1257
1258
1259
1260 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1261
1262   YYSIZE_T yystacksize = YYINITDEPTH;
1263
1264   /* The variables used to return semantic value and location from the
1265      action routines.  */
1266   YYSTYPE yyval;
1267
1268
1269   /* The number of symbols on the RHS of the reduced rule.
1270      Keep to zero when no symbol should be popped.  */
1271   int yylen = 0;
1272
1273   YYDPRINTF ((stderr, "Starting parse\n"));
1274
1275   yystate = 0;
1276   yyerrstatus = 0;
1277   yynerrs = 0;
1278   yychar = YYEMPTY;             /* Cause a token to be read.  */
1279
1280   /* Initialize stack pointers.
1281      Waste one element of value and location stack
1282      so that they stay on the same level as the state stack.
1283      The wasted elements are never initialized.  */
1284
1285   yyssp = yyss;
1286   yyvsp = yyvs;
1287
1288   goto yysetstate;
1289
1290 /*------------------------------------------------------------.
1291 | yynewstate -- Push a new state, which is found in yystate.  |
1292 `------------------------------------------------------------*/
1293  yynewstate:
1294   /* In all cases, when you get here, the value and location stacks
1295      have just been pushed.  So pushing a state here evens the stacks.  */
1296   yyssp++;
1297
1298  yysetstate:
1299   *yyssp = yystate;
1300
1301   if (yyss + yystacksize - 1 <= yyssp)
1302     {
1303       /* Get the current used size of the three stacks, in elements.  */
1304       YYSIZE_T yysize = yyssp - yyss + 1;
1305
1306 #ifdef yyoverflow
1307       {
1308         /* Give user a chance to reallocate the stack.  Use copies of
1309            these so that the &'s don't force the real ones into
1310            memory.  */
1311         YYSTYPE *yyvs1 = yyvs;
1312         yytype_int16 *yyss1 = yyss;
1313
1314
1315         /* Each stack pointer address is followed by the size of the
1316            data in use in that stack, in bytes.  This used to be a
1317            conditional around just the two extra args, but that might
1318            be undefined if yyoverflow is a macro.  */
1319         yyoverflow (YY_("memory exhausted"),
1320                     &yyss1, yysize * sizeof (*yyssp),
1321                     &yyvs1, yysize * sizeof (*yyvsp),
1322
1323                     &yystacksize);
1324
1325         yyss = yyss1;
1326         yyvs = yyvs1;
1327       }
1328 #else /* no yyoverflow */
1329 # ifndef YYSTACK_RELOCATE
1330       goto yyexhaustedlab;
1331 # else
1332       /* Extend the stack our own way.  */
1333       if (YYMAXDEPTH <= yystacksize)
1334         goto yyexhaustedlab;
1335       yystacksize *= 2;
1336       if (YYMAXDEPTH < yystacksize)
1337         yystacksize = YYMAXDEPTH;
1338
1339       {
1340         yytype_int16 *yyss1 = yyss;
1341         union yyalloc *yyptr =
1342           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1343         if (! yyptr)
1344           goto yyexhaustedlab;
1345         YYSTACK_RELOCATE (yyss);
1346         YYSTACK_RELOCATE (yyvs);
1347
1348 #  undef YYSTACK_RELOCATE
1349         if (yyss1 != yyssa)
1350           YYSTACK_FREE (yyss1);
1351       }
1352 # endif
1353 #endif /* no yyoverflow */
1354
1355       yyssp = yyss + yysize - 1;
1356       yyvsp = yyvs + yysize - 1;
1357
1358
1359       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1360                   (unsigned long int) yystacksize));
1361
1362       if (yyss + yystacksize - 1 <= yyssp)
1363         YYABORT;
1364     }
1365
1366   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1367
1368   if (yystate == YYFINAL)
1369     YYACCEPT;
1370
1371   goto yybackup;
1372
1373 /*-----------.
1374 | yybackup.  |
1375 `-----------*/
1376 yybackup:
1377
1378   /* Do appropriate processing given the current state.  Read a
1379      lookahead token if we need one and don't already have one.  */
1380
1381   /* First try to decide what to do without reference to lookahead token.  */
1382   yyn = yypact[yystate];
1383   if (yyn == YYPACT_NINF)
1384     goto yydefault;
1385
1386   /* Not known => get a lookahead token if don't already have one.  */
1387
1388   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
1389   if (yychar == YYEMPTY)
1390     {
1391       YYDPRINTF ((stderr, "Reading a token: "));
1392       yychar = YYLEX;
1393     }
1394
1395   if (yychar <= YYEOF)
1396     {
1397       yychar = yytoken = YYEOF;
1398       YYDPRINTF ((stderr, "Now at end of input.\n"));
1399     }
1400   else
1401     {
1402       yytoken = YYTRANSLATE (yychar);
1403       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1404     }
1405
1406   /* If the proper action on seeing token YYTOKEN is to reduce or to
1407      detect an error, take that action.  */
1408   yyn += yytoken;
1409   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1410     goto yydefault;
1411   yyn = yytable[yyn];
1412   if (yyn <= 0)
1413     {
1414       if (yyn == 0 || yyn == YYTABLE_NINF)
1415         goto yyerrlab;
1416       yyn = -yyn;
1417       goto yyreduce;
1418     }
1419
1420   /* Count tokens shifted since error; after three, turn off error
1421      status.  */
1422   if (yyerrstatus)
1423     yyerrstatus--;
1424
1425   /* Shift the lookahead token.  */
1426   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1427
1428   /* Discard the shifted token.  */
1429   yychar = YYEMPTY;
1430
1431   yystate = yyn;
1432   *++yyvsp = yylval;
1433
1434   goto yynewstate;
1435
1436
1437 /*-----------------------------------------------------------.
1438 | yydefault -- do the default action for the current state.  |
1439 `-----------------------------------------------------------*/
1440 yydefault:
1441   yyn = yydefact[yystate];
1442   if (yyn == 0)
1443     goto yyerrlab;
1444   goto yyreduce;
1445
1446
1447 /*-----------------------------.
1448 | yyreduce -- Do a reduction.  |
1449 `-----------------------------*/
1450 yyreduce:
1451   /* yyn is the number of a rule to reduce with.  */
1452   yylen = yyr2[yyn];
1453
1454   /* If YYLEN is nonzero, implement the default value of the action:
1455      `$$ = $1'.
1456
1457      Otherwise, the following line sets YYVAL to garbage.
1458      This behavior is undocumented and Bison
1459      users should not rely upon it.  Assigning to YYVAL
1460      unconditionally makes the parser a bit smaller, and it avoids a
1461      GCC warning that YYVAL may be used uninitialized.  */
1462   yyval = yyvsp[1-yylen];
1463
1464
1465   YY_REDUCE_PRINT (yyn);
1466   switch (yyn)
1467     {
1468         case 2:
1469 /* Line 1269 of yacc.c.  */
1470 #line 155 "plural.y"
1471     {
1472             if ((yyvsp[(1) - (1)].exp) == NULL)
1473               YYABORT;
1474             ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp);
1475           }
1476     break;
1477
1478   case 3:
1479 /* Line 1269 of yacc.c.  */
1480 #line 163 "plural.y"
1481     {
1482             (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp));
1483           }
1484     break;
1485
1486   case 4:
1487 /* Line 1269 of yacc.c.  */
1488 #line 167 "plural.y"
1489     {
1490             (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1491           }
1492     break;
1493
1494   case 5:
1495 /* Line 1269 of yacc.c.  */
1496 #line 171 "plural.y"
1497     {
1498             (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1499           }
1500     break;
1501
1502   case 6:
1503 /* Line 1269 of yacc.c.  */
1504 #line 175 "plural.y"
1505     {
1506             (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1507           }
1508     break;
1509
1510   case 7:
1511 /* Line 1269 of yacc.c.  */
1512 #line 179 "plural.y"
1513     {
1514             (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1515           }
1516     break;
1517
1518   case 8:
1519 /* Line 1269 of yacc.c.  */
1520 #line 183 "plural.y"
1521     {
1522             (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1523           }
1524     break;
1525
1526   case 9:
1527 /* Line 1269 of yacc.c.  */
1528 #line 187 "plural.y"
1529     {
1530             (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
1531           }
1532     break;
1533
1534   case 10:
1535 /* Line 1269 of yacc.c.  */
1536 #line 191 "plural.y"
1537     {
1538             (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp));
1539           }
1540     break;
1541
1542   case 11:
1543 /* Line 1269 of yacc.c.  */
1544 #line 195 "plural.y"
1545     {
1546             (yyval.exp) = new_exp_0 (var);
1547           }
1548     break;
1549
1550   case 12:
1551 /* Line 1269 of yacc.c.  */
1552 #line 199 "plural.y"
1553     {
1554             if (((yyval.exp) = new_exp_0 (num)) != NULL)
1555               (yyval.exp)->val.num = (yyvsp[(1) - (1)].num);
1556           }
1557     break;
1558
1559   case 13:
1560 /* Line 1269 of yacc.c.  */
1561 #line 204 "plural.y"
1562     {
1563             (yyval.exp) = (yyvsp[(2) - (3)].exp);
1564           }
1565     break;
1566
1567
1568 /* Line 1269 of yacc.c.  */
1569 #line 1572 "plural.c"
1570       default: break;
1571     }
1572   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
1573
1574   YYPOPSTACK (yylen);
1575   yylen = 0;
1576   YY_STACK_PRINT (yyss, yyssp);
1577
1578   *++yyvsp = yyval;
1579
1580
1581   /* Now `shift' the result of the reduction.  Determine what state
1582      that goes to, based on the state we popped back to and the rule
1583      number reduced by.  */
1584
1585   yyn = yyr1[yyn];
1586
1587   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1588   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1589     yystate = yytable[yystate];
1590   else
1591     yystate = yydefgoto[yyn - YYNTOKENS];
1592
1593   goto yynewstate;
1594
1595
1596 /*------------------------------------.
1597 | yyerrlab -- here on detecting error |
1598 `------------------------------------*/
1599 yyerrlab:
1600   /* If not already recovering from an error, report this error.  */
1601   if (!yyerrstatus)
1602     {
1603       ++yynerrs;
1604 #if ! YYERROR_VERBOSE
1605       yyerror (YY_("syntax error"));
1606 #else
1607       {
1608         YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
1609         if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
1610           {
1611             YYSIZE_T yyalloc = 2 * yysize;
1612             if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
1613               yyalloc = YYSTACK_ALLOC_MAXIMUM;
1614             if (yymsg != yymsgbuf)
1615               YYSTACK_FREE (yymsg);
1616             yymsg = (char *) YYSTACK_ALLOC (yyalloc);
1617             if (yymsg)
1618               yymsg_alloc = yyalloc;
1619             else
1620               {
1621                 yymsg = yymsgbuf;
1622                 yymsg_alloc = sizeof yymsgbuf;
1623               }
1624           }
1625
1626         if (0 < yysize && yysize <= yymsg_alloc)
1627           {
1628             (void) yysyntax_error (yymsg, yystate, yychar);
1629             yyerror (yymsg);
1630           }
1631         else
1632           {
1633             yyerror (YY_("syntax error"));
1634             if (yysize != 0)
1635               goto yyexhaustedlab;
1636           }
1637       }
1638 #endif
1639     }
1640
1641
1642
1643   if (yyerrstatus == 3)
1644     {
1645       /* If just tried and failed to reuse lookahead token after an
1646          error, discard it.  */
1647
1648       if (yychar <= YYEOF)
1649         {
1650           /* Return failure if at end of input.  */
1651           if (yychar == YYEOF)
1652             YYABORT;
1653         }
1654       else
1655         {
1656           yydestruct ("Error: discarding",
1657                       yytoken, &yylval);
1658           yychar = YYEMPTY;
1659         }
1660     }
1661
1662   /* Else will try to reuse lookahead token after shifting the error
1663      token.  */
1664   goto yyerrlab1;
1665
1666
1667 /*---------------------------------------------------.
1668 | yyerrorlab -- error raised explicitly by YYERROR.  |
1669 `---------------------------------------------------*/
1670 yyerrorlab:
1671
1672   /* Pacify compilers like GCC when the user code never invokes
1673      YYERROR and the label yyerrorlab therefore never appears in user
1674      code.  */
1675   if (/*CONSTCOND*/ 0)
1676      goto yyerrorlab;
1677
1678   /* Do not reclaim the symbols of the rule which action triggered
1679      this YYERROR.  */
1680   YYPOPSTACK (yylen);
1681   yylen = 0;
1682   YY_STACK_PRINT (yyss, yyssp);
1683   yystate = *yyssp;
1684   goto yyerrlab1;
1685
1686
1687 /*-------------------------------------------------------------.
1688 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
1689 `-------------------------------------------------------------*/
1690 yyerrlab1:
1691   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
1692
1693   for (;;)
1694     {
1695       yyn = yypact[yystate];
1696       if (yyn != YYPACT_NINF)
1697         {
1698           yyn += YYTERROR;
1699           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
1700             {
1701               yyn = yytable[yyn];
1702               if (0 < yyn)
1703                 break;
1704             }
1705         }
1706
1707       /* Pop the current state because it cannot handle the error token.  */
1708       if (yyssp == yyss)
1709         YYABORT;
1710
1711
1712       yydestruct ("Error: popping",
1713                   yystos[yystate], yyvsp);
1714       YYPOPSTACK (1);
1715       yystate = *yyssp;
1716       YY_STACK_PRINT (yyss, yyssp);
1717     }
1718
1719   *++yyvsp = yylval;
1720
1721
1722   /* Shift the error token.  */
1723   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
1724
1725   yystate = yyn;
1726   goto yynewstate;
1727
1728
1729 /*-------------------------------------.
1730 | yyacceptlab -- YYACCEPT comes here.  |
1731 `-------------------------------------*/
1732 yyacceptlab:
1733   yyresult = 0;
1734   goto yyreturn;
1735
1736 /*-----------------------------------.
1737 | yyabortlab -- YYABORT comes here.  |
1738 `-----------------------------------*/
1739 yyabortlab:
1740   yyresult = 1;
1741   goto yyreturn;
1742
1743 #ifndef yyoverflow
1744 /*-------------------------------------------------.
1745 | yyexhaustedlab -- memory exhaustion comes here.  |
1746 `-------------------------------------------------*/
1747 yyexhaustedlab:
1748   yyerror (YY_("memory exhausted"));
1749   yyresult = 2;
1750   /* Fall through.  */
1751 #endif
1752
1753 yyreturn:
1754   if (yychar != YYEMPTY)
1755      yydestruct ("Cleanup: discarding lookahead",
1756                  yytoken, &yylval);
1757   /* Do not reclaim the symbols of the rule which action triggered
1758      this YYABORT or YYACCEPT.  */
1759   YYPOPSTACK (yylen);
1760   YY_STACK_PRINT (yyss, yyssp);
1761   while (yyssp != yyss)
1762     {
1763       yydestruct ("Cleanup: popping",
1764                   yystos[*yyssp], yyvsp);
1765       YYPOPSTACK (1);
1766     }
1767 #ifndef yyoverflow
1768   if (yyss != yyssa)
1769     YYSTACK_FREE (yyss);
1770 #endif
1771 #if YYERROR_VERBOSE
1772   if (yymsg != yymsgbuf)
1773     YYSTACK_FREE (yymsg);
1774 #endif
1775   /* Make sure YYID is used.  */
1776   return YYID (yyresult);
1777 }
1778
1779
1780 /* Line 1486 of yacc.c.  */
1781 #line 209 "plural.y"
1782
1783
1784 void
1785 internal_function
1786 FREE_EXPRESSION (struct expression *exp)
1787 {
1788   if (exp == NULL)
1789     return;
1790
1791   /* Handle the recursive case.  */
1792   switch (exp->nargs)
1793     {
1794     case 3:
1795       FREE_EXPRESSION (exp->val.args[2]);
1796       /* FALLTHROUGH */
1797     case 2:
1798       FREE_EXPRESSION (exp->val.args[1]);
1799       /* FALLTHROUGH */
1800     case 1:
1801       FREE_EXPRESSION (exp->val.args[0]);
1802       /* FALLTHROUGH */
1803     default:
1804       break;
1805     }
1806
1807   free (exp);
1808 }
1809
1810
1811 static int
1812 yylex (YYSTYPE *lval, const char **pexp)
1813 {
1814   const char *exp = *pexp;
1815   int result;
1816
1817   while (1)
1818     {
1819       if (exp[0] == '\0')
1820         {
1821           *pexp = exp;
1822           return YYEOF;
1823         }
1824
1825       if (exp[0] != ' ' && exp[0] != '\t')
1826         break;
1827
1828       ++exp;
1829     }
1830
1831   result = *exp++;
1832   switch (result)
1833     {
1834     case '0': case '1': case '2': case '3': case '4':
1835     case '5': case '6': case '7': case '8': case '9':
1836       {
1837         unsigned long int n = result - '0';
1838         while (exp[0] >= '0' && exp[0] <= '9')
1839           {
1840             n *= 10;
1841             n += exp[0] - '0';
1842             ++exp;
1843           }
1844         lval->num = n;
1845         result = NUMBER;
1846       }
1847       break;
1848
1849     case '=':
1850       if (exp[0] == '=')
1851         {
1852           ++exp;
1853           lval->op = equal;
1854           result = EQUOP2;
1855         }
1856       else
1857         result = YYERRCODE;
1858       break;
1859
1860     case '!':
1861       if (exp[0] == '=')
1862         {
1863           ++exp;
1864           lval->op = not_equal;
1865           result = EQUOP2;
1866         }
1867       break;
1868
1869     case '&':
1870     case '|':
1871       if (exp[0] == result)
1872         ++exp;
1873       else
1874         result = YYERRCODE;
1875       break;
1876
1877     case '<':
1878       if (exp[0] == '=')
1879         {
1880           ++exp;
1881           lval->op = less_or_equal;
1882         }
1883       else
1884         lval->op = less_than;
1885       result = CMPOP2;
1886       break;
1887
1888     case '>':
1889       if (exp[0] == '=')
1890         {
1891           ++exp;
1892           lval->op = greater_or_equal;
1893         }
1894       else
1895         lval->op = greater_than;
1896       result = CMPOP2;
1897       break;
1898
1899     case '*':
1900       lval->op = mult;
1901       result = MULOP2;
1902       break;
1903
1904     case '/':
1905       lval->op = divide;
1906       result = MULOP2;
1907       break;
1908
1909     case '%':
1910       lval->op = module;
1911       result = MULOP2;
1912       break;
1913
1914     case '+':
1915       lval->op = plus;
1916       result = ADDOP2;
1917       break;
1918
1919     case '-':
1920       lval->op = minus;
1921       result = ADDOP2;
1922       break;
1923
1924     case 'n':
1925     case '?':
1926     case ':':
1927     case '(':
1928     case ')':
1929       /* Nothing, just return the character.  */
1930       break;
1931
1932     case ';':
1933     case '\n':
1934     case '\0':
1935       /* Be safe and let the user call this function again.  */
1936       --exp;
1937       result = YYEOF;
1938       break;
1939
1940     default:
1941       result = YYERRCODE;
1942 #if YYDEBUG != 0
1943       --exp;
1944 #endif
1945       break;
1946     }
1947
1948   *pexp = exp;
1949
1950   return result;
1951 }
1952
1953
1954 static void
1955 yyerror (const char *str)
1956 {
1957   /* Do nothing.  We don't print error messages here.  */
1958 }
1959