~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/intl/plural.c

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

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