OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / config / kconfig / zconf.tab.c
1 /* A Bison parser, made by GNU Bison 2.1.  */
2
3 /* Skeleton parser for Yacc-like parsing with Bison,
4    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 51 Franklin Street, Fifth Floor,
19    Boston, MA 02110-1301, USA.  */
20
21 /* As a special exception, when this file is copied by Bison into a
22    Bison output file, you may use that output file without restriction.
23    This special exception was added by the Free Software Foundation
24    in version 1.24 of Bison.  */
25
26 /* Written by Richard Stallman by simplifying the original so called
27    ``semantic'' parser.  */
28
29 /* All symbols defined below should begin with yy or YY, to avoid
30    infringing on user name space.  This should be done even for local
31    variables, as they might otherwise be expanded by user macros.
32    There are some unavoidable exceptions within include files to
33    define necessary library symbols; they are noted "INFRINGES ON
34    USER NAME SPACE" below.  */
35
36 /* Identify Bison output.  */
37 #define YYBISON 1
38
39 /* Bison version.  */
40 #define YYBISON_VERSION "2.1"
41
42 /* Skeleton name.  */
43 #define YYSKELETON_NAME "yacc.c"
44
45 /* Pure parsers.  */
46 #define YYPURE 0
47
48 /* Using locations.  */
49 #define YYLSP_NEEDED 0
50
51 /* Substitute the variable and function names.  */
52 #define yyparse zconfparse
53 #define yylex   zconflex
54 #define yyerror zconferror
55 #define yylval  zconflval
56 #define yychar  zconfchar
57 #define yydebug zconfdebug
58 #define yynerrs zconfnerrs
59
60
61 /* Tokens.  */
62 #ifndef YYTOKENTYPE
63 # define YYTOKENTYPE
64    /* Put the tokens into the symbol table, so that GDB and other debuggers
65       know about them.  */
66    enum yytokentype {
67      T_MAINMENU = 258,
68      T_MENU = 259,
69      T_ENDMENU = 260,
70      T_SOURCE = 261,
71      T_CHOICE = 262,
72      T_ENDCHOICE = 263,
73      T_COMMENT = 264,
74      T_CONFIG = 265,
75      T_MENUCONFIG = 266,
76      T_HELP = 267,
77      T_HELPTEXT = 268,
78      T_IF = 269,
79      T_ENDIF = 270,
80      T_DEPENDS = 271,
81      T_REQUIRES = 272,
82      T_OPTIONAL = 273,
83      T_PROMPT = 274,
84      T_TYPE = 275,
85      T_DEFAULT = 276,
86      T_SELECT = 277,
87      T_RANGE = 278,
88      T_OPTION = 279,
89      T_ON = 280,
90      T_WORD = 281,
91      T_WORD_QUOTE = 282,
92      T_UNEQUAL = 283,
93      T_CLOSE_PAREN = 284,
94      T_OPEN_PAREN = 285,
95      T_EOL = 286,
96      T_OR = 287,
97      T_AND = 288,
98      T_EQUAL = 289,
99      T_NOT = 290
100    };
101 #endif
102 /* Tokens.  */
103 #define T_MAINMENU 258
104 #define T_MENU 259
105 #define T_ENDMENU 260
106 #define T_SOURCE 261
107 #define T_CHOICE 262
108 #define T_ENDCHOICE 263
109 #define T_COMMENT 264
110 #define T_CONFIG 265
111 #define T_MENUCONFIG 266
112 #define T_HELP 267
113 #define T_HELPTEXT 268
114 #define T_IF 269
115 #define T_ENDIF 270
116 #define T_DEPENDS 271
117 #define T_REQUIRES 272
118 #define T_OPTIONAL 273
119 #define T_PROMPT 274
120 #define T_TYPE 275
121 #define T_DEFAULT 276
122 #define T_SELECT 277
123 #define T_RANGE 278
124 #define T_OPTION 279
125 #define T_ON 280
126 #define T_WORD 281
127 #define T_WORD_QUOTE 282
128 #define T_UNEQUAL 283
129 #define T_CLOSE_PAREN 284
130 #define T_OPEN_PAREN 285
131 #define T_EOL 286
132 #define T_OR 287
133 #define T_AND 288
134 #define T_EQUAL 289
135 #define T_NOT 290
136
137
138
139
140 /* Copy the first part of user declarations.  */
141
142
143 /*
144  * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
145  * Released under the terms of the GNU GPL v2.0.
146  */
147
148 #include <ctype.h>
149 #include <stdarg.h>
150 #include <stdio.h>
151 #include <stdlib.h>
152 #include <string.h>
153 #include <stdbool.h>
154
155 #define LKC_DIRECT_LINK
156 #include "lkc.h"
157
158 #include "zconf.hash.c"
159
160 #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
161
162 #define PRINTD          0x0001
163 #define DEBUG_PARSE     0x0002
164
165 int cdebug = PRINTD;
166
167 extern int zconflex(void);
168 static void zconfprint(const char *err, ...);
169 static void zconf_error(const char *err, ...);
170 static void zconferror(const char *err);
171 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
172
173 struct symbol *symbol_hash[257];
174
175 static struct menu *current_menu, *current_entry;
176
177 #define YYDEBUG 0
178 #if YYDEBUG
179 #define YYERROR_VERBOSE
180 #endif
181
182
183 /* Enabling traces.  */
184 #ifndef YYDEBUG
185 # define YYDEBUG 0
186 #endif
187
188 /* Enabling verbose error messages.  */
189 #ifdef YYERROR_VERBOSE
190 # undef YYERROR_VERBOSE
191 # define YYERROR_VERBOSE 1
192 #else
193 # define YYERROR_VERBOSE 0
194 #endif
195
196 /* Enabling the token table.  */
197 #ifndef YYTOKEN_TABLE
198 # define YYTOKEN_TABLE 0
199 #endif
200
201 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
202
203 typedef union YYSTYPE {
204         char *string;
205         struct file *file;
206         struct symbol *symbol;
207         struct expr *expr;
208         struct menu *menu;
209         struct kconf_id *id;
210 } YYSTYPE;
211 /* Line 196 of yacc.c.  */
212
213 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
214 # define YYSTYPE_IS_DECLARED 1
215 # define YYSTYPE_IS_TRIVIAL 1
216 #endif
217
218
219
220 /* Copy the second part of user declarations.  */
221
222
223 /* Line 219 of yacc.c.  */
224
225
226 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
227 # define YYSIZE_T __SIZE_TYPE__
228 #endif
229 #if ! defined (YYSIZE_T) && defined (size_t)
230 # define YYSIZE_T size_t
231 #endif
232 #if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
233 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
234 # define YYSIZE_T size_t
235 #endif
236 #if ! defined (YYSIZE_T)
237 # define YYSIZE_T unsigned int
238 #endif
239
240 #ifndef YY_
241 # if YYENABLE_NLS
242 #  if ENABLE_NLS
243 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
244 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
245 #  endif
246 # endif
247 # ifndef YY_
248 #  define YY_(msgid) msgid
249 # endif
250 #endif
251
252 #if ! defined (yyoverflow) || YYERROR_VERBOSE
253
254 /* The parser invokes alloca or malloc; define the necessary symbols.  */
255
256 # ifdef YYSTACK_USE_ALLOCA
257 #  if YYSTACK_USE_ALLOCA
258 #   ifdef __GNUC__
259 #    define YYSTACK_ALLOC __builtin_alloca
260 #   else
261 #    define YYSTACK_ALLOC alloca
262 #    if defined (__STDC__) || defined (__cplusplus)
263 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
264 #     define YYINCLUDED_STDLIB_H
265 #    endif
266 #   endif
267 #  endif
268 # endif
269
270 # ifdef YYSTACK_ALLOC
271    /* Pacify GCC's `empty if-body' warning. */
272 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
273 #  ifndef YYSTACK_ALLOC_MAXIMUM
274     /* The OS might guarantee only one guard page at the bottom of the stack,
275        and a page size can be as small as 4096 bytes.  So we cannot safely
276        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
277        to allow for a few compiler-allocated temporary stack slots.  */
278 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
279 #  endif
280 # else
281 #  define YYSTACK_ALLOC YYMALLOC
282 #  define YYSTACK_FREE YYFREE
283 #  ifndef YYSTACK_ALLOC_MAXIMUM
284 #   define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
285 #  endif
286 #  ifdef __cplusplus
287 extern "C" {
288 #  endif
289 #  ifndef YYMALLOC
290 #   define YYMALLOC malloc
291 #   if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
292         && (defined (__STDC__) || defined (__cplusplus)))
293 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
294 #   endif
295 #  endif
296 #  ifndef YYFREE
297 #   define YYFREE free
298 #   if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
299         && (defined (__STDC__) || defined (__cplusplus)))
300 void free (void *); /* INFRINGES ON USER NAME SPACE */
301 #   endif
302 #  endif
303 #  ifdef __cplusplus
304 }
305 #  endif
306 # endif
307 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
308
309
310 #if (! defined (yyoverflow) \
311      && (! defined (__cplusplus) \
312          || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
313
314 /* A type that is properly aligned for any stack member.  */
315 union yyalloc
316 {
317   short int yyss;
318   YYSTYPE yyvs;
319   };
320
321 /* The size of the maximum gap between one aligned stack and the next.  */
322 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
323
324 /* The size of an array large to enough to hold all stacks, each with
325    N elements.  */
326 # define YYSTACK_BYTES(N) \
327      ((N) * (sizeof (short int) + sizeof (YYSTYPE))                     \
328       + YYSTACK_GAP_MAXIMUM)
329
330 /* Copy COUNT objects from FROM to TO.  The source and destination do
331    not overlap.  */
332 # ifndef YYCOPY
333 #  if defined (__GNUC__) && 1 < __GNUC__
334 #   define YYCOPY(To, From, Count) \
335       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
336 #  else
337 #   define YYCOPY(To, From, Count)              \
338       do                                        \
339         {                                       \
340           YYSIZE_T yyi;                         \
341           for (yyi = 0; yyi < (Count); yyi++)   \
342             (To)[yyi] = (From)[yyi];            \
343         }                                       \
344       while (0)
345 #  endif
346 # endif
347
348 /* Relocate STACK from its old location to the new one.  The
349    local variables YYSIZE and YYSTACKSIZE give the old and new number of
350    elements in the stack, and YYPTR gives the new location of the
351    stack.  Advance YYPTR to a properly aligned location for the next
352    stack.  */
353 # define YYSTACK_RELOCATE(Stack)                                        \
354     do                                                                  \
355       {                                                                 \
356         YYSIZE_T yynewbytes;                                            \
357         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
358         Stack = &yyptr->Stack;                                          \
359         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
360         yyptr += yynewbytes / sizeof (*yyptr);                          \
361       }                                                                 \
362     while (0)
363
364 #endif
365
366 #if defined (__STDC__) || defined (__cplusplus)
367    typedef signed char yysigned_char;
368 #else
369    typedef short int yysigned_char;
370 #endif
371
372 /* YYFINAL -- State number of the termination state. */
373 #define YYFINAL  3
374 /* YYLAST -- Last index in YYTABLE.  */
375 #define YYLAST   275
376
377 /* YYNTOKENS -- Number of terminals. */
378 #define YYNTOKENS  36
379 /* YYNNTS -- Number of nonterminals. */
380 #define YYNNTS  45
381 /* YYNRULES -- Number of rules. */
382 #define YYNRULES  110
383 /* YYNRULES -- Number of states. */
384 #define YYNSTATES  183
385
386 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
387 #define YYUNDEFTOK  2
388 #define YYMAXUTOK   290
389
390 #define YYTRANSLATE(YYX)                                                \
391   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
392
393 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
394 static const unsigned char yytranslate[] =
395 {
396        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
397        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
398        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
399        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
400        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
401        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
402        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
403        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
404        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
405        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
406        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
407        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
408        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
409        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
410        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
411        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
412        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
413        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
414        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
415        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
416        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
417        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
418        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
419        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
420        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
421        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
422        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
423       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
424       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
425       35
426 };
427
428 #if YYDEBUG
429 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
430    YYRHS.  */
431 static const unsigned short int yyprhs[] =
432 {
433        0,     0,     3,     5,     6,     9,    12,    15,    20,    23,
434       28,    33,    37,    39,    41,    43,    45,    47,    49,    51,
435       53,    55,    57,    59,    61,    63,    67,    70,    74,    77,
436       81,    84,    85,    88,    91,    94,    97,   100,   103,   107,
437      112,   117,   122,   128,   132,   133,   137,   138,   141,   144,
438      147,   149,   153,   154,   157,   160,   163,   166,   169,   174,
439      178,   181,   186,   187,   190,   194,   196,   200,   201,   204,
440      207,   210,   214,   217,   219,   223,   224,   227,   230,   233,
441      237,   241,   244,   247,   250,   251,   254,   257,   260,   265,
442      269,   273,   274,   277,   279,   281,   284,   287,   290,   292,
443      295,   296,   299,   301,   305,   309,   313,   316,   320,   324,
444      326
445 };
446
447 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
448 static const yysigned_char yyrhs[] =
449 {
450       37,     0,    -1,    38,    -1,    -1,    38,    40,    -1,    38,
451       54,    -1,    38,    65,    -1,    38,     3,    75,    77,    -1,
452       38,    76,    -1,    38,    26,     1,    31,    -1,    38,    39,
453        1,    31,    -1,    38,     1,    31,    -1,    16,    -1,    19,
454       -1,    20,    -1,    22,    -1,    18,    -1,    23,    -1,    21,
455       -1,    31,    -1,    60,    -1,    69,    -1,    43,    -1,    45,
456       -1,    67,    -1,    26,     1,    31,    -1,     1,    31,    -1,
457       10,    26,    31,    -1,    42,    46,    -1,    11,    26,    31,
458       -1,    44,    46,    -1,    -1,    46,    47,    -1,    46,    48,
459       -1,    46,    73,    -1,    46,    71,    -1,    46,    41,    -1,
460       46,    31,    -1,    20,    74,    31,    -1,    19,    75,    78,
461       31,    -1,    21,    79,    78,    31,    -1,    22,    26,    78,
462       31,    -1,    23,    80,    80,    78,    31,    -1,    24,    49,
463       31,    -1,    -1,    49,    26,    50,    -1,    -1,    34,    75,
464       -1,     7,    31,    -1,    51,    55,    -1,    76,    -1,    52,
465       57,    53,    -1,    -1,    55,    56,    -1,    55,    73,    -1,
466       55,    71,    -1,    55,    31,    -1,    55,    41,    -1,    19,
467       75,    78,    31,    -1,    20,    74,    31,    -1,    18,    31,
468       -1,    21,    26,    78,    31,    -1,    -1,    57,    40,    -1,
469       14,    79,    77,    -1,    76,    -1,    58,    61,    59,    -1,
470       -1,    61,    40,    -1,    61,    65,    -1,    61,    54,    -1,
471        4,    75,    31,    -1,    62,    72,    -1,    76,    -1,    63,
472       66,    64,    -1,    -1,    66,    40,    -1,    66,    65,    -1,
473       66,    54,    -1,     6,    75,    31,    -1,     9,    75,    31,
474       -1,    68,    72,    -1,    12,    31,    -1,    70,    13,    -1,
475       -1,    72,    73,    -1,    72,    31,    -1,    72,    41,    -1,
476       16,    25,    79,    31,    -1,    16,    79,    31,    -1,    17,
477       79,    31,    -1,    -1,    75,    78,    -1,    26,    -1,    27,
478       -1,     5,    31,    -1,     8,    31,    -1,    15,    31,    -1,
479       31,    -1,    77,    31,    -1,    -1,    14,    79,    -1,    80,
480       -1,    80,    34,    80,    -1,    80,    28,    80,    -1,    30,
481       79,    29,    -1,    35,    79,    -1,    79,    32,    79,    -1,
482       79,    33,    79,    -1,    26,    -1,    27,    -1
483 };
484
485 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
486 static const unsigned short int yyrline[] =
487 {
488        0,   105,   105,   107,   109,   110,   111,   112,   113,   114,
489      115,   119,   123,   123,   123,   123,   123,   123,   123,   127,
490      128,   129,   130,   131,   132,   136,   137,   143,   151,   157,
491      165,   175,   177,   178,   179,   180,   181,   182,   185,   193,
492      199,   209,   215,   221,   224,   226,   237,   238,   243,   252,
493      257,   265,   268,   270,   271,   272,   273,   274,   277,   283,
494      294,   300,   310,   312,   317,   325,   333,   336,   338,   339,
495      340,   345,   352,   357,   365,   368,   370,   371,   372,   375,
496      383,   390,   397,   403,   410,   412,   413,   414,   417,   422,
497      427,   435,   437,   442,   443,   446,   447,   448,   452,   453,
498      456,   457,   460,   461,   462,   463,   464,   465,   466,   469,
499      470
500 };
501 #endif
502
503 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
504 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
505    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
506 static const char *const yytname[] =
507 {
508   "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
509   "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
510   "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
511   "T_REQUIRES", "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT",
512   "T_SELECT", "T_RANGE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE",
513   "T_UNEQUAL", "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND",
514   "T_EQUAL", "T_NOT", "$accept", "input", "stmt_list", "option_name",
515   "common_stmt", "option_error", "config_entry_start", "config_stmt",
516   "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
517   "config_option", "symbol_option", "symbol_option_list",
518   "symbol_option_arg", "choice", "choice_entry", "choice_end",
519   "choice_stmt", "choice_option_list", "choice_option", "choice_block",
520   "if_entry", "if_end", "if_stmt", "if_block", "menu", "menu_entry",
521   "menu_end", "menu_stmt", "menu_block", "source_stmt", "comment",
522   "comment_stmt", "help_start", "help", "depends_list", "depends",
523   "prompt_stmt_opt", "prompt", "end", "nl", "if_expr", "expr", "symbol", 0
524 };
525 #endif
526
527 # ifdef YYPRINT
528 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
529    token YYLEX-NUM.  */
530 static const unsigned short int yytoknum[] =
531 {
532        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
533      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
534      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
535      285,   286,   287,   288,   289,   290
536 };
537 # endif
538
539 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
540 static const unsigned char yyr1[] =
541 {
542        0,    36,    37,    38,    38,    38,    38,    38,    38,    38,
543       38,    38,    39,    39,    39,    39,    39,    39,    39,    40,
544       40,    40,    40,    40,    40,    41,    41,    42,    43,    44,
545       45,    46,    46,    46,    46,    46,    46,    46,    47,    47,
546       47,    47,    47,    48,    49,    49,    50,    50,    51,    52,
547       53,    54,    55,    55,    55,    55,    55,    55,    56,    56,
548       56,    56,    57,    57,    58,    59,    60,    61,    61,    61,
549       61,    62,    63,    64,    65,    66,    66,    66,    66,    67,
550       68,    69,    70,    71,    72,    72,    72,    72,    73,    73,
551       73,    74,    74,    75,    75,    76,    76,    76,    77,    77,
552       78,    78,    79,    79,    79,    79,    79,    79,    79,    80,
553       80
554 };
555
556 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
557 static const unsigned char yyr2[] =
558 {
559        0,     2,     1,     0,     2,     2,     2,     4,     2,     4,
560        4,     3,     1,     1,     1,     1,     1,     1,     1,     1,
561        1,     1,     1,     1,     1,     3,     2,     3,     2,     3,
562        2,     0,     2,     2,     2,     2,     2,     2,     3,     4,
563        4,     4,     5,     3,     0,     3,     0,     2,     2,     2,
564        1,     3,     0,     2,     2,     2,     2,     2,     4,     3,
565        2,     4,     0,     2,     3,     1,     3,     0,     2,     2,
566        2,     3,     2,     1,     3,     0,     2,     2,     2,     3,
567        3,     2,     2,     2,     0,     2,     2,     2,     4,     3,
568        3,     0,     2,     1,     1,     2,     2,     2,     1,     2,
569        0,     2,     1,     3,     3,     3,     2,     3,     3,     1,
570        1
571 };
572
573 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
574    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
575    means the default is an error.  */
576 static const unsigned char yydefact[] =
577 {
578        3,     0,     0,     1,     0,     0,     0,     0,     0,     0,
579        0,     0,     0,     0,     0,     0,    12,    16,    13,    14,
580       18,    15,    17,     0,    19,     0,     4,    31,    22,    31,
581       23,    52,    62,     5,    67,    20,    84,    75,     6,    24,
582       84,    21,     8,    11,    93,    94,     0,     0,    95,     0,
583       48,    96,     0,     0,     0,   109,   110,     0,     0,     0,
584      102,    97,     0,     0,     0,     0,     0,     0,     0,     0,
585        0,     0,    98,     7,    71,    79,    80,    27,    29,     0,
586      106,     0,     0,    64,     0,     0,     9,    10,     0,     0,
587        0,     0,     0,    91,     0,     0,     0,    44,     0,    37,
588       36,    32,    33,     0,    35,    34,     0,     0,    91,     0,
589       56,    57,    53,    55,    54,    63,    51,    50,    68,    70,
590       66,    69,    65,    86,    87,    85,    76,    78,    74,    77,
591       73,    99,   105,   107,   108,   104,   103,    26,    82,     0,
592        0,     0,   100,     0,   100,   100,   100,     0,     0,     0,
593       83,    60,   100,     0,   100,     0,    89,    90,     0,     0,
594       38,    92,     0,     0,   100,    46,    43,    25,     0,    59,
595        0,    88,   101,    39,    40,    41,     0,     0,    45,    58,
596       61,    42,    47
597 };
598
599 /* YYDEFGOTO[NTERM-NUM]. */
600 static const short int yydefgoto[] =
601 {
602       -1,     1,     2,    25,    26,   100,    27,    28,    29,    30,
603       64,   101,   102,   148,   178,    31,    32,   116,    33,    66,
604      112,    67,    34,   120,    35,    68,    36,    37,   128,    38,
605       70,    39,    40,    41,   103,   104,    69,   105,   143,   144,
606       42,    73,   159,    59,    60
607 };
608
609 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
610    STATE-NUM.  */
611 #define YYPACT_NINF -135
612 static const short int yypact[] =
613 {
614     -135,     2,   170,  -135,   -14,    56,    56,    -8,    56,    24,
615       67,    56,     7,    14,    62,    97,  -135,  -135,  -135,  -135,
616     -135,  -135,  -135,   156,  -135,   166,  -135,  -135,  -135,  -135,
617     -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,
618     -135,  -135,  -135,  -135,  -135,  -135,   138,   151,  -135,   152,
619     -135,  -135,   163,   167,   176,  -135,  -135,    62,    62,   185,
620      -19,  -135,   188,   190,    42,   103,   194,    85,    70,   222,
621       70,   132,  -135,   191,  -135,  -135,  -135,  -135,  -135,   127,
622     -135,    62,    62,   191,   104,   104,  -135,  -135,   193,   203,
623        9,    62,    56,    56,    62,   161,   104,  -135,   196,  -135,
624     -135,  -135,  -135,   233,  -135,  -135,   204,    56,    56,   221,
625     -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,
626     -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,
627     -135,  -135,  -135,   219,  -135,  -135,  -135,  -135,  -135,    62,
628      209,   212,   240,   224,   240,    -1,   240,   104,    41,   225,
629     -135,  -135,   240,   226,   240,   218,  -135,  -135,    62,   227,
630     -135,  -135,   228,   229,   240,   230,  -135,  -135,   231,  -135,
631      232,  -135,   112,  -135,  -135,  -135,   234,    56,  -135,  -135,
632     -135,  -135,  -135
633 };
634
635 /* YYPGOTO[NTERM-NUM].  */
636 static const short int yypgoto[] =
637 {
638     -135,  -135,  -135,  -135,    94,   -45,  -135,  -135,  -135,  -135,
639      237,  -135,  -135,  -135,  -135,  -135,  -135,  -135,   -54,  -135,
640     -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,  -135,     1,
641     -135,  -135,  -135,  -135,  -135,   195,   235,   -44,   159,    -5,
642       98,   210,  -134,   -53,   -77
643 };
644
645 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
646    positive, shift that token.  If negative, reduce the rule which
647    number is the opposite.  If zero, do what YYDEFACT says.
648    If YYTABLE_NINF, syntax error.  */
649 #define YYTABLE_NINF -82
650 static const short int yytable[] =
651 {
652       46,    47,     3,    49,    79,    80,    52,   135,   136,    84,
653      161,   162,   163,   158,   119,    85,   127,    43,   168,   147,
654      170,   111,   114,    48,   124,   125,   124,   125,   133,   134,
655      176,    81,    82,    53,   139,    55,    56,   140,   141,    57,
656       54,   145,   -28,    88,    58,   -28,   -28,   -28,   -28,   -28,
657      -28,   -28,   -28,   -28,    89,    50,   -28,   -28,    90,    91,
658      -28,    92,    93,    94,    95,    96,    97,   165,    98,   121,
659      164,   129,   166,    99,     6,     7,     8,     9,    10,    11,
660       12,    13,    44,    45,    14,    15,   155,   142,    55,    56,
661        7,     8,    57,    10,    11,    12,    13,    58,    51,    14,
662       15,    24,   152,   -30,    88,   172,   -30,   -30,   -30,   -30,
663      -30,   -30,   -30,   -30,   -30,    89,    24,   -30,   -30,    90,
664       91,   -30,    92,    93,    94,    95,    96,    97,    61,    98,
665       55,    56,   -81,    88,    99,   -81,   -81,   -81,   -81,   -81,
666      -81,   -81,   -81,   -81,    81,    82,   -81,   -81,    90,    91,
667      -81,   -81,   -81,   -81,   -81,   -81,   132,    62,    98,    81,
668       82,   115,   118,   123,   126,   117,   122,    63,   130,    72,
669       -2,     4,   182,     5,     6,     7,     8,     9,    10,    11,
670       12,    13,    74,    75,    14,    15,    16,   146,    17,    18,
671       19,    20,    21,    22,    76,    88,    23,   149,    77,   -49,
672      -49,    24,   -49,   -49,   -49,   -49,    89,    78,   -49,   -49,
673       90,    91,   106,   107,   108,   109,    72,    81,    82,    86,
674       98,    87,   131,    88,   137,   110,   -72,   -72,   -72,   -72,
675      -72,   -72,   -72,   -72,   138,   151,   -72,   -72,    90,    91,
676      156,    81,    82,   157,    81,    82,   150,   154,    98,   171,
677       81,    82,    82,   123,   158,   160,   167,   169,   173,   174,
678      175,   113,   179,   180,   177,   181,    65,   153,     0,    83,
679        0,     0,     0,     0,     0,    71
680 };
681
682 static const short int yycheck[] =
683 {
684        5,     6,     0,     8,    57,    58,    11,    84,    85,    28,
685      144,   145,   146,    14,    68,    34,    70,    31,   152,    96,
686      154,    66,    66,    31,    69,    69,    71,    71,    81,    82,
687      164,    32,    33,    26,    25,    26,    27,    90,    91,    30,
688       26,    94,     0,     1,    35,     3,     4,     5,     6,     7,
689        8,     9,    10,    11,    12,    31,    14,    15,    16,    17,
690       18,    19,    20,    21,    22,    23,    24,    26,    26,    68,
691      147,    70,    31,    31,     4,     5,     6,     7,     8,     9,
692       10,    11,    26,    27,    14,    15,   139,    92,    26,    27,
693        5,     6,    30,     8,     9,    10,    11,    35,    31,    14,
694       15,    31,   107,     0,     1,   158,     3,     4,     5,     6,
695        7,     8,     9,    10,    11,    12,    31,    14,    15,    16,
696       17,    18,    19,    20,    21,    22,    23,    24,    31,    26,
697       26,    27,     0,     1,    31,     3,     4,     5,     6,     7,
698        8,     9,    10,    11,    32,    33,    14,    15,    16,    17,
699       18,    19,    20,    21,    22,    23,    29,     1,    26,    32,
700       33,    67,    68,    31,    70,    67,    68,     1,    70,    31,
701        0,     1,   177,     3,     4,     5,     6,     7,     8,     9,
702       10,    11,    31,    31,    14,    15,    16,    26,    18,    19,
703       20,    21,    22,    23,    31,     1,    26,     1,    31,     5,
704        6,    31,     8,     9,    10,    11,    12,    31,    14,    15,
705       16,    17,    18,    19,    20,    21,    31,    32,    33,    31,
706       26,    31,    31,     1,    31,    31,     4,     5,     6,     7,
707        8,     9,    10,    11,    31,    31,    14,    15,    16,    17,
708       31,    32,    33,    31,    32,    33,    13,    26,    26,    31,
709       32,    33,    33,    31,    14,    31,    31,    31,    31,    31,
710       31,    66,    31,    31,    34,    31,    29,   108,    -1,    59,
711       -1,    -1,    -1,    -1,    -1,    40
712 };
713
714 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
715    symbol of state STATE-NUM.  */
716 static const unsigned char yystos[] =
717 {
718        0,    37,    38,     0,     1,     3,     4,     5,     6,     7,
719        8,     9,    10,    11,    14,    15,    16,    18,    19,    20,
720       21,    22,    23,    26,    31,    39,    40,    42,    43,    44,
721       45,    51,    52,    54,    58,    60,    62,    63,    65,    67,
722       68,    69,    76,    31,    26,    27,    75,    75,    31,    75,
723       31,    31,    75,    26,    26,    26,    27,    30,    35,    79,
724       80,    31,     1,     1,    46,    46,    55,    57,    61,    72,
725       66,    72,    31,    77,    31,    31,    31,    31,    31,    79,
726       79,    32,    33,    77,    28,    34,    31,    31,     1,    12,
727       16,    17,    19,    20,    21,    22,    23,    24,    26,    31,
728       41,    47,    48,    70,    71,    73,    18,    19,    20,    21,
729       31,    41,    56,    71,    73,    40,    53,    76,    40,    54,
730       59,    65,    76,    31,    41,    73,    40,    54,    64,    65,
731       76,    31,    29,    79,    79,    80,    80,    31,    31,    25,
732       79,    79,    75,    74,    75,    79,    26,    80,    49,     1,
733       13,    31,    75,    74,    26,    79,    31,    31,    14,    78,
734       31,    78,    78,    78,    80,    26,    31,    31,    78,    31,
735       78,    31,    79,    31,    31,    31,    78,    34,    50,    31,
736       31,    31,    75
737 };
738
739 #define yyerrok         (yyerrstatus = 0)
740 #define yyclearin       (yychar = YYEMPTY)
741 #define YYEMPTY         (-2)
742 #define YYEOF           0
743
744 #define YYACCEPT        goto yyacceptlab
745 #define YYABORT         goto yyabortlab
746 #define YYERROR         goto yyerrorlab
747
748
749 /* Like YYERROR except do call yyerror.  This remains here temporarily
750    to ease the transition to the new meaning of YYERROR, for GCC.
751    Once GCC version 2 has supplanted version 1, this can go.  */
752
753 #define YYFAIL          goto yyerrlab
754
755 #define YYRECOVERING()  (!!yyerrstatus)
756
757 #define YYBACKUP(Token, Value)                                  \
758 do                                                              \
759   if (yychar == YYEMPTY && yylen == 1)                          \
760     {                                                           \
761       yychar = (Token);                                         \
762       yylval = (Value);                                         \
763       yytoken = YYTRANSLATE (yychar);                           \
764       YYPOPSTACK;                                               \
765       goto yybackup;                                            \
766     }                                                           \
767   else                                                          \
768     {                                                           \
769       yyerror (YY_("syntax error: cannot back up")); \
770       YYERROR;                                                  \
771     }                                                           \
772 while (0)
773
774
775 #define YYTERROR        1
776 #define YYERRCODE       256
777
778
779 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
780    If N is 0, then set CURRENT to the empty location which ends
781    the previous symbol: RHS[0] (always defined).  */
782
783 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
784 #ifndef YYLLOC_DEFAULT
785 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
786     do                                                                  \
787       if (N)                                                            \
788         {                                                               \
789           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
790           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
791           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
792           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
793         }                                                               \
794       else                                                              \
795         {                                                               \
796           (Current).first_line   = (Current).last_line   =              \
797             YYRHSLOC (Rhs, 0).last_line;                                \
798           (Current).first_column = (Current).last_column =              \
799             YYRHSLOC (Rhs, 0).last_column;                              \
800         }                                                               \
801     while (0)
802 #endif
803
804
805 /* YY_LOCATION_PRINT -- Print the location on the stream.
806    This macro was not mandated originally: define only if we know
807    we won't break user code: when these are the locations we know.  */
808
809 #ifndef YY_LOCATION_PRINT
810 # if YYLTYPE_IS_TRIVIAL
811 #  define YY_LOCATION_PRINT(File, Loc)                  \
812      fprintf (File, "%d.%d-%d.%d",                      \
813               (Loc).first_line, (Loc).first_column,     \
814               (Loc).last_line,  (Loc).last_column)
815 # else
816 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
817 # endif
818 #endif
819
820
821 /* YYLEX -- calling `yylex' with the right arguments.  */
822
823 #ifdef YYLEX_PARAM
824 # define YYLEX yylex (YYLEX_PARAM)
825 #else
826 # define YYLEX yylex ()
827 #endif
828
829 /* Enable debugging if requested.  */
830 #if YYDEBUG
831
832 # ifndef YYFPRINTF
833 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
834 #  define YYFPRINTF fprintf
835 # endif
836
837 # define YYDPRINTF(Args)                        \
838 do {                                            \
839   if (yydebug)                                  \
840     YYFPRINTF Args;                             \
841 } while (0)
842
843 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)          \
844 do {                                                            \
845   if (yydebug)                                                  \
846     {                                                           \
847       YYFPRINTF (stderr, "%s ", Title);                         \
848       yysymprint (stderr,                                       \
849                   Type, Value); \
850       YYFPRINTF (stderr, "\n");                                 \
851     }                                                           \
852 } while (0)
853
854 /*------------------------------------------------------------------.
855 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
856 | TOP (included).                                                   |
857 `------------------------------------------------------------------*/
858
859 #if defined (__STDC__) || defined (__cplusplus)
860 static void
861 yy_stack_print (short int *bottom, short int *top)
862 #else
863 static void
864 yy_stack_print (bottom, top)
865     short int *bottom;
866     short int *top;
867 #endif
868 {
869   YYFPRINTF (stderr, "Stack now");
870   for (/* Nothing. */; bottom <= top; ++bottom)
871     YYFPRINTF (stderr, " %d", *bottom);
872   YYFPRINTF (stderr, "\n");
873 }
874
875 # define YY_STACK_PRINT(Bottom, Top)                            \
876 do {                                                            \
877   if (yydebug)                                                  \
878     yy_stack_print ((Bottom), (Top));                           \
879 } while (0)
880
881
882 /*------------------------------------------------.
883 | Report that the YYRULE is going to be reduced.  |
884 `------------------------------------------------*/
885
886 #if defined (__STDC__) || defined (__cplusplus)
887 static void
888 yy_reduce_print (int yyrule)
889 #else
890 static void
891 yy_reduce_print (yyrule)
892     int yyrule;
893 #endif
894 {
895   int yyi;
896   unsigned long int yylno = yyrline[yyrule];
897   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
898              yyrule - 1, yylno);
899   /* Print the symbols being reduced, and their result.  */
900   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
901     YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
902   YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
903 }
904
905 # define YY_REDUCE_PRINT(Rule)          \
906 do {                                    \
907   if (yydebug)                          \
908     yy_reduce_print (Rule);             \
909 } while (0)
910
911 /* Nonzero means print parse trace.  It is left uninitialized so that
912    multiple parsers can coexist.  */
913 int yydebug;
914 #else /* !YYDEBUG */
915 # define YYDPRINTF(Args)
916 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
917 # define YY_STACK_PRINT(Bottom, Top)
918 # define YY_REDUCE_PRINT(Rule)
919 #endif /* !YYDEBUG */
920
921
922 /* YYINITDEPTH -- initial size of the parser's stacks.  */
923 #ifndef YYINITDEPTH
924 # define YYINITDEPTH 200
925 #endif
926
927 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
928    if the built-in stack extension method is used).
929
930    Do not make this value too large; the results are undefined if
931    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
932    evaluated with infinite-precision integer arithmetic.  */
933
934 #ifndef YYMAXDEPTH
935 # define YYMAXDEPTH 10000
936 #endif
937
938 \f
939
940 #if YYERROR_VERBOSE
941
942 # ifndef yystrlen
943 #  if defined (__GLIBC__) && defined (_STRING_H)
944 #   define yystrlen strlen
945 #  else
946 /* Return the length of YYSTR.  */
947 static YYSIZE_T
948 #   if defined (__STDC__) || defined (__cplusplus)
949 yystrlen (const char *yystr)
950 #   else
951 yystrlen (yystr)
952      const char *yystr;
953 #   endif
954 {
955   const char *yys = yystr;
956
957   while (*yys++ != '\0')
958     continue;
959
960   return yys - yystr - 1;
961 }
962 #  endif
963 # endif
964
965 # ifndef yystpcpy
966 #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
967 #   define yystpcpy stpcpy
968 #  else
969 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
970    YYDEST.  */
971 static char *
972 #   if defined (__STDC__) || defined (__cplusplus)
973 yystpcpy (char *yydest, const char *yysrc)
974 #   else
975 yystpcpy (yydest, yysrc)
976      char *yydest;
977      const char *yysrc;
978 #   endif
979 {
980   char *yyd = yydest;
981   const char *yys = yysrc;
982
983   while ((*yyd++ = *yys++) != '\0')
984     continue;
985
986   return yyd - 1;
987 }
988 #  endif
989 # endif
990
991 # ifndef yytnamerr
992 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
993    quotes and backslashes, so that it's suitable for yyerror.  The
994    heuristic is that double-quoting is unnecessary unless the string
995    contains an apostrophe, a comma, or backslash (other than
996    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
997    null, do not copy; instead, return the length of what the result
998    would have been.  */
999 static YYSIZE_T
1000 yytnamerr (char *yyres, const char *yystr)
1001 {
1002   if (*yystr == '"')
1003     {
1004       size_t yyn = 0;
1005       char const *yyp = yystr;
1006
1007       for (;;)
1008         switch (*++yyp)
1009           {
1010           case '\'':
1011           case ',':
1012             goto do_not_strip_quotes;
1013
1014           case '\\':
1015             if (*++yyp != '\\')
1016               goto do_not_strip_quotes;
1017             /* Fall through.  */
1018           default:
1019             if (yyres)
1020               yyres[yyn] = *yyp;
1021             yyn++;
1022             break;
1023
1024           case '"':
1025             if (yyres)
1026               yyres[yyn] = '\0';
1027             return yyn;
1028           }
1029     do_not_strip_quotes: ;
1030     }
1031
1032   if (! yyres)
1033     return yystrlen (yystr);
1034
1035   return yystpcpy (yyres, yystr) - yyres;
1036 }
1037 # endif
1038
1039 #endif /* YYERROR_VERBOSE */
1040
1041 \f
1042
1043 #if YYDEBUG
1044 /*--------------------------------.
1045 | Print this symbol on YYOUTPUT.  |
1046 `--------------------------------*/
1047
1048 #if defined (__STDC__) || defined (__cplusplus)
1049 static void
1050 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
1051 #else
1052 static void
1053 yysymprint (yyoutput, yytype, yyvaluep)
1054     FILE *yyoutput;
1055     int yytype;
1056     YYSTYPE *yyvaluep;
1057 #endif
1058 {
1059   /* Pacify ``unused variable'' warnings.  */
1060   (void) yyvaluep;
1061
1062   if (yytype < YYNTOKENS)
1063     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
1064   else
1065     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
1066
1067
1068 # ifdef YYPRINT
1069   if (yytype < YYNTOKENS)
1070     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1071 # endif
1072   switch (yytype)
1073     {
1074       default:
1075         break;
1076     }
1077   YYFPRINTF (yyoutput, ")");
1078 }
1079
1080 #endif /* ! YYDEBUG */
1081 /*-----------------------------------------------.
1082 | Release the memory associated to this symbol.  |
1083 `-----------------------------------------------*/
1084
1085 #if defined (__STDC__) || defined (__cplusplus)
1086 static void
1087 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1088 #else
1089 static void
1090 yydestruct (yymsg, yytype, yyvaluep)
1091     const char *yymsg;
1092     int yytype;
1093     YYSTYPE *yyvaluep;
1094 #endif
1095 {
1096   /* Pacify ``unused variable'' warnings.  */
1097   (void) yyvaluep;
1098
1099   if (!yymsg)
1100     yymsg = "Deleting";
1101   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1102
1103   switch (yytype)
1104     {
1105       case 52: /* "choice_entry" */
1106
1107         {
1108         fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1109                 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1110         if (current_menu == (yyvaluep->menu))
1111                 menu_end_menu();
1112 };
1113
1114         break;
1115       case 58: /* "if_entry" */
1116
1117         {
1118         fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1119                 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1120         if (current_menu == (yyvaluep->menu))
1121                 menu_end_menu();
1122 };
1123
1124         break;
1125       case 63: /* "menu_entry" */
1126
1127         {
1128         fprintf(stderr, "%s:%d: missing end statement for this entry\n",
1129                 (yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
1130         if (current_menu == (yyvaluep->menu))
1131                 menu_end_menu();
1132 };
1133
1134         break;
1135
1136       default:
1137         break;
1138     }
1139 }
1140 \f
1141
1142 /* Prevent warnings from -Wmissing-prototypes.  */
1143
1144 #ifdef YYPARSE_PARAM
1145 # if defined (__STDC__) || defined (__cplusplus)
1146 int yyparse (void *YYPARSE_PARAM);
1147 # else
1148 int yyparse ();
1149 # endif
1150 #else /* ! YYPARSE_PARAM */
1151 #if defined (__STDC__) || defined (__cplusplus)
1152 int yyparse (void);
1153 #else
1154 int yyparse ();
1155 #endif
1156 #endif /* ! YYPARSE_PARAM */
1157
1158
1159
1160 /* The look-ahead symbol.  */
1161 int yychar;
1162
1163 /* The semantic value of the look-ahead symbol.  */
1164 YYSTYPE yylval;
1165
1166 /* Number of syntax errors so far.  */
1167 int yynerrs;
1168
1169
1170
1171 /*----------.
1172 | yyparse.  |
1173 `----------*/
1174
1175 #ifdef YYPARSE_PARAM
1176 # if defined (__STDC__) || defined (__cplusplus)
1177 int yyparse (void *YYPARSE_PARAM)
1178 # else
1179 int yyparse (YYPARSE_PARAM)
1180   void *YYPARSE_PARAM;
1181 # endif
1182 #else /* ! YYPARSE_PARAM */
1183 #if defined (__STDC__) || defined (__cplusplus)
1184 int
1185 yyparse (void)
1186 #else
1187 int
1188 yyparse ()
1189     ;
1190 #endif
1191 #endif
1192 {
1193   
1194   int yystate;
1195   int yyn;
1196   int yyresult;
1197   /* Number of tokens to shift before error messages enabled.  */
1198   int yyerrstatus;
1199   /* Look-ahead token as an internal (translated) token number.  */
1200   int yytoken = 0;
1201
1202   /* Three stacks and their tools:
1203      `yyss': related to states,
1204      `yyvs': related to semantic values,
1205      `yyls': related to locations.
1206
1207      Refer to the stacks thru separate pointers, to allow yyoverflow
1208      to reallocate them elsewhere.  */
1209
1210   /* The state stack.  */
1211   short int yyssa[YYINITDEPTH];
1212   short int *yyss = yyssa;
1213   short int *yyssp;
1214
1215   /* The semantic value stack.  */
1216   YYSTYPE yyvsa[YYINITDEPTH];
1217   YYSTYPE *yyvs = yyvsa;
1218   YYSTYPE *yyvsp;
1219
1220
1221
1222 #define YYPOPSTACK   (yyvsp--, yyssp--)
1223
1224   YYSIZE_T yystacksize = YYINITDEPTH;
1225
1226   /* The variables used to return semantic value and location from the
1227      action routines.  */
1228   YYSTYPE yyval;
1229
1230
1231   /* When reducing, the number of symbols on the RHS of the reduced
1232      rule.  */
1233   int yylen;
1234
1235   YYDPRINTF ((stderr, "Starting parse\n"));
1236
1237   yystate = 0;
1238   yyerrstatus = 0;
1239   yynerrs = 0;
1240   yychar = YYEMPTY;             /* Cause a token to be read.  */
1241
1242   /* Initialize stack pointers.
1243      Waste one element of value and location stack
1244      so that they stay on the same level as the state stack.
1245      The wasted elements are never initialized.  */
1246
1247   yyssp = yyss;
1248   yyvsp = yyvs;
1249
1250   goto yysetstate;
1251
1252 /*------------------------------------------------------------.
1253 | yynewstate -- Push a new state, which is found in yystate.  |
1254 `------------------------------------------------------------*/
1255  yynewstate:
1256   /* In all cases, when you get here, the value and location stacks
1257      have just been pushed. so pushing a state here evens the stacks.
1258      */
1259   yyssp++;
1260
1261  yysetstate:
1262   *yyssp = yystate;
1263
1264   if (yyss + yystacksize - 1 <= yyssp)
1265     {
1266       /* Get the current used size of the three stacks, in elements.  */
1267       YYSIZE_T yysize = yyssp - yyss + 1;
1268
1269 #ifdef yyoverflow
1270       {
1271         /* Give user a chance to reallocate the stack. Use copies of
1272            these so that the &'s don't force the real ones into
1273            memory.  */
1274         YYSTYPE *yyvs1 = yyvs;
1275         short int *yyss1 = yyss;
1276
1277
1278         /* Each stack pointer address is followed by the size of the
1279            data in use in that stack, in bytes.  This used to be a
1280            conditional around just the two extra args, but that might
1281            be undefined if yyoverflow is a macro.  */
1282         yyoverflow (YY_("memory exhausted"),
1283                     &yyss1, yysize * sizeof (*yyssp),
1284                     &yyvs1, yysize * sizeof (*yyvsp),
1285
1286                     &yystacksize);
1287
1288         yyss = yyss1;
1289         yyvs = yyvs1;
1290       }
1291 #else /* no yyoverflow */
1292 # ifndef YYSTACK_RELOCATE
1293       goto yyexhaustedlab;
1294 # else
1295       /* Extend the stack our own way.  */
1296       if (YYMAXDEPTH <= yystacksize)
1297         goto yyexhaustedlab;
1298       yystacksize *= 2;
1299       if (YYMAXDEPTH < yystacksize)
1300         yystacksize = YYMAXDEPTH;
1301
1302       {
1303         short int *yyss1 = yyss;
1304         union yyalloc *yyptr =
1305           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
1306         if (! yyptr)
1307           goto yyexhaustedlab;
1308         YYSTACK_RELOCATE (yyss);
1309         YYSTACK_RELOCATE (yyvs);
1310
1311 #  undef YYSTACK_RELOCATE
1312         if (yyss1 != yyssa)
1313           YYSTACK_FREE (yyss1);
1314       }
1315 # endif
1316 #endif /* no yyoverflow */
1317
1318       yyssp = yyss + yysize - 1;
1319       yyvsp = yyvs + yysize - 1;
1320
1321
1322       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1323                   (unsigned long int) yystacksize));
1324
1325       if (yyss + yystacksize - 1 <= yyssp)
1326         YYABORT;
1327     }
1328
1329   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1330
1331   goto yybackup;
1332
1333 /*-----------.
1334 | yybackup.  |
1335 `-----------*/
1336 yybackup:
1337
1338 /* Do appropriate processing given the current state.  */
1339 /* Read a look-ahead token if we need one and don't already have one.  */
1340 /* yyresume: */
1341
1342   /* First try to decide what to do without reference to look-ahead token.  */
1343
1344   yyn = yypact[yystate];
1345   if (yyn == YYPACT_NINF)
1346     goto yydefault;
1347
1348   /* Not known => get a look-ahead token if don't already have one.  */
1349
1350   /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
1351   if (yychar == YYEMPTY)
1352     {
1353       YYDPRINTF ((stderr, "Reading a token: "));
1354       yychar = YYLEX;
1355     }
1356
1357   if (yychar <= YYEOF)
1358     {
1359       yychar = yytoken = YYEOF;
1360       YYDPRINTF ((stderr, "Now at end of input.\n"));
1361     }
1362   else
1363     {
1364       yytoken = YYTRANSLATE (yychar);
1365       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1366     }
1367
1368   /* If the proper action on seeing token YYTOKEN is to reduce or to
1369      detect an error, take that action.  */
1370   yyn += yytoken;
1371   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1372     goto yydefault;
1373   yyn = yytable[yyn];
1374   if (yyn <= 0)
1375     {
1376       if (yyn == 0 || yyn == YYTABLE_NINF)
1377         goto yyerrlab;
1378       yyn = -yyn;
1379       goto yyreduce;
1380     }
1381
1382   if (yyn == YYFINAL)
1383     YYACCEPT;
1384
1385   /* Shift the look-ahead token.  */
1386   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1387
1388   /* Discard the token being shifted unless it is eof.  */
1389   if (yychar != YYEOF)
1390     yychar = YYEMPTY;
1391
1392   *++yyvsp = yylval;
1393
1394
1395   /* Count tokens shifted since error; after three, turn off error
1396      status.  */
1397   if (yyerrstatus)
1398     yyerrstatus--;
1399
1400   yystate = yyn;
1401   goto yynewstate;
1402
1403
1404 /*-----------------------------------------------------------.
1405 | yydefault -- do the default action for the current state.  |
1406 `-----------------------------------------------------------*/
1407 yydefault:
1408   yyn = yydefact[yystate];
1409   if (yyn == 0)
1410     goto yyerrlab;
1411   goto yyreduce;
1412
1413
1414 /*-----------------------------.
1415 | yyreduce -- Do a reduction.  |
1416 `-----------------------------*/
1417 yyreduce:
1418   /* yyn is the number of a rule to reduce with.  */
1419   yylen = yyr2[yyn];
1420
1421   /* If YYLEN is nonzero, implement the default value of the action:
1422      `$$ = $1'.
1423
1424      Otherwise, the following line sets YYVAL to garbage.
1425      This behavior is undocumented and Bison
1426      users should not rely upon it.  Assigning to YYVAL
1427      unconditionally makes the parser a bit smaller, and it avoids a
1428      GCC warning that YYVAL may be used uninitialized.  */
1429   yyval = yyvsp[1-yylen];
1430
1431
1432   YY_REDUCE_PRINT (yyn);
1433   switch (yyn)
1434     {
1435         case 8:
1436
1437     { zconf_error("unexpected end statement"); ;}
1438     break;
1439
1440   case 9:
1441
1442     { zconf_error("unknown statement \"%s\"", (yyvsp[-2].string)); ;}
1443     break;
1444
1445   case 10:
1446
1447     {
1448         zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[-2].id)->name);
1449 ;}
1450     break;
1451
1452   case 11:
1453
1454     { zconf_error("invalid statement"); ;}
1455     break;
1456
1457   case 25:
1458
1459     { zconf_error("unknown option \"%s\"", (yyvsp[-2].string)); ;}
1460     break;
1461
1462   case 26:
1463
1464     { zconf_error("invalid option"); ;}
1465     break;
1466
1467   case 27:
1468
1469     {
1470         struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1471         sym->flags |= SYMBOL_OPTIONAL;
1472         menu_add_entry(sym);
1473         printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1474 ;}
1475     break;
1476
1477   case 28:
1478
1479     {
1480         menu_end_entry();
1481         printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1482 ;}
1483     break;
1484
1485   case 29:
1486
1487     {
1488         struct symbol *sym = sym_lookup((yyvsp[-1].string), 0);
1489         sym->flags |= SYMBOL_OPTIONAL;
1490         menu_add_entry(sym);
1491         printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1492 ;}
1493     break;
1494
1495   case 30:
1496
1497     {
1498         if (current_entry->prompt)
1499                 current_entry->prompt->type = P_MENU;
1500         else
1501                 zconfprint("warning: menuconfig statement without prompt");
1502         menu_end_entry();
1503         printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1504 ;}
1505     break;
1506
1507   case 38:
1508
1509     {
1510         menu_set_type((yyvsp[-2].id)->stype);
1511         printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1512                 zconf_curname(), zconf_lineno(),
1513                 (yyvsp[-2].id)->stype);
1514 ;}
1515     break;
1516
1517   case 39:
1518
1519     {
1520         menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1521         printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1522 ;}
1523     break;
1524
1525   case 40:
1526
1527     {
1528         menu_add_expr(P_DEFAULT, (yyvsp[-2].expr), (yyvsp[-1].expr));
1529         if ((yyvsp[-3].id)->stype != S_UNKNOWN)
1530                 menu_set_type((yyvsp[-3].id)->stype);
1531         printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
1532                 zconf_curname(), zconf_lineno(),
1533                 (yyvsp[-3].id)->stype);
1534 ;}
1535     break;
1536
1537   case 41:
1538
1539     {
1540         menu_add_symbol(P_SELECT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1541         printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
1542 ;}
1543     break;
1544
1545   case 42:
1546
1547     {
1548         menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[-3].symbol), (yyvsp[-2].symbol)), (yyvsp[-1].expr));
1549         printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
1550 ;}
1551     break;
1552
1553   case 45:
1554
1555     {
1556         struct kconf_id *id = kconf_id_lookup((yyvsp[-1].string), strlen((yyvsp[-1].string)));
1557         if (id && id->flags & TF_OPTION)
1558                 menu_add_option(id->token, (yyvsp[0].string));
1559         else
1560                 zconfprint("warning: ignoring unknown option %s", (yyvsp[-1].string));
1561         free((yyvsp[-1].string));
1562 ;}
1563     break;
1564
1565   case 46:
1566
1567     { (yyval.string) = NULL; ;}
1568     break;
1569
1570   case 47:
1571
1572     { (yyval.string) = (yyvsp[0].string); ;}
1573     break;
1574
1575   case 48:
1576
1577     {
1578         struct symbol *sym = sym_lookup(NULL, 0);
1579         sym->flags |= SYMBOL_CHOICE;
1580         menu_add_entry(sym);
1581         menu_add_expr(P_CHOICE, NULL, NULL);
1582         printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
1583 ;}
1584     break;
1585
1586   case 49:
1587
1588     {
1589         (yyval.menu) = menu_add_menu();
1590 ;}
1591     break;
1592
1593   case 50:
1594
1595     {
1596         if (zconf_endtoken((yyvsp[0].id), T_CHOICE, T_ENDCHOICE)) {
1597                 menu_end_menu();
1598                 printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
1599         }
1600 ;}
1601     break;
1602
1603   case 58:
1604
1605     {
1606         menu_add_prompt(P_PROMPT, (yyvsp[-2].string), (yyvsp[-1].expr));
1607         printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
1608 ;}
1609     break;
1610
1611   case 59:
1612
1613     {
1614         if ((yyvsp[-2].id)->stype == S_BOOLEAN || (yyvsp[-2].id)->stype == S_TRISTATE) {
1615                 menu_set_type((yyvsp[-2].id)->stype);
1616                 printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
1617                         zconf_curname(), zconf_lineno(),
1618                         (yyvsp[-2].id)->stype);
1619         } else
1620                 YYERROR;
1621 ;}
1622     break;
1623
1624   case 60:
1625
1626     {
1627         current_entry->sym->flags |= SYMBOL_OPTIONAL;
1628         printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
1629 ;}
1630     break;
1631
1632   case 61:
1633
1634     {
1635         if ((yyvsp[-3].id)->stype == S_UNKNOWN) {
1636                 menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[-2].string), 0), (yyvsp[-1].expr));
1637                 printd(DEBUG_PARSE, "%s:%d:default\n",
1638                         zconf_curname(), zconf_lineno());
1639         } else
1640                 YYERROR;
1641 ;}
1642     break;
1643
1644   case 64:
1645
1646     {
1647         printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
1648         menu_add_entry(NULL);
1649         menu_add_dep((yyvsp[-1].expr));
1650         (yyval.menu) = menu_add_menu();
1651 ;}
1652     break;
1653
1654   case 65:
1655
1656     {
1657         if (zconf_endtoken((yyvsp[0].id), T_IF, T_ENDIF)) {
1658                 menu_end_menu();
1659                 printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
1660         }
1661 ;}
1662     break;
1663
1664   case 71:
1665
1666     {
1667         menu_add_entry(NULL);
1668         menu_add_prompt(P_MENU, (yyvsp[-1].string), NULL);
1669         printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
1670 ;}
1671     break;
1672
1673   case 72:
1674
1675     {
1676         (yyval.menu) = menu_add_menu();
1677 ;}
1678     break;
1679
1680   case 73:
1681
1682     {
1683         if (zconf_endtoken((yyvsp[0].id), T_MENU, T_ENDMENU)) {
1684                 menu_end_menu();
1685                 printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
1686         }
1687 ;}
1688     break;
1689
1690   case 79:
1691
1692     {
1693         printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[-1].string));
1694         zconf_nextfile((yyvsp[-1].string));
1695 ;}
1696     break;
1697
1698   case 80:
1699
1700     {
1701         menu_add_entry(NULL);
1702         menu_add_prompt(P_COMMENT, (yyvsp[-1].string), NULL);
1703         printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
1704 ;}
1705     break;
1706
1707   case 81:
1708
1709     {
1710         menu_end_entry();
1711 ;}
1712     break;
1713
1714   case 82:
1715
1716     {
1717         printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1718         zconf_starthelp();
1719 ;}
1720     break;
1721
1722   case 83:
1723
1724     {
1725         current_entry->sym->help = (yyvsp[0].string);
1726 ;}
1727     break;
1728
1729   case 88:
1730
1731     {
1732         menu_add_dep((yyvsp[-1].expr));
1733         printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1734 ;}
1735     break;
1736
1737   case 89:
1738
1739     {
1740         menu_add_dep((yyvsp[-1].expr));
1741         printd(DEBUG_PARSE, "%s:%d:depends\n", zconf_curname(), zconf_lineno());
1742 ;}
1743     break;
1744
1745   case 90:
1746
1747     {
1748         menu_add_dep((yyvsp[-1].expr));
1749         printd(DEBUG_PARSE, "%s:%d:requires\n", zconf_curname(), zconf_lineno());
1750 ;}
1751     break;
1752
1753   case 92:
1754
1755     {
1756         menu_add_prompt(P_PROMPT, (yyvsp[-1].string), (yyvsp[0].expr));
1757 ;}
1758     break;
1759
1760   case 95:
1761
1762     { (yyval.id) = (yyvsp[-1].id); ;}
1763     break;
1764
1765   case 96:
1766
1767     { (yyval.id) = (yyvsp[-1].id); ;}
1768     break;
1769
1770   case 97:
1771
1772     { (yyval.id) = (yyvsp[-1].id); ;}
1773     break;
1774
1775   case 100:
1776
1777     { (yyval.expr) = NULL; ;}
1778     break;
1779
1780   case 101:
1781
1782     { (yyval.expr) = (yyvsp[0].expr); ;}
1783     break;
1784
1785   case 102:
1786
1787     { (yyval.expr) = expr_alloc_symbol((yyvsp[0].symbol)); ;}
1788     break;
1789
1790   case 103:
1791
1792     { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;}
1793     break;
1794
1795   case 104:
1796
1797     { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[-2].symbol), (yyvsp[0].symbol)); ;}
1798     break;
1799
1800   case 105:
1801
1802     { (yyval.expr) = (yyvsp[-1].expr); ;}
1803     break;
1804
1805   case 106:
1806
1807     { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[0].expr)); ;}
1808     break;
1809
1810   case 107:
1811
1812     { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
1813     break;
1814
1815   case 108:
1816
1817     { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); ;}
1818     break;
1819
1820   case 109:
1821
1822     { (yyval.symbol) = sym_lookup((yyvsp[0].string), 0); free((yyvsp[0].string)); ;}
1823     break;
1824
1825   case 110:
1826
1827     { (yyval.symbol) = sym_lookup((yyvsp[0].string), 1); free((yyvsp[0].string)); ;}
1828     break;
1829
1830
1831       default: break;
1832     }
1833
1834 /* Line 1126 of yacc.c.  */
1835
1836 \f
1837   yyvsp -= yylen;
1838   yyssp -= yylen;
1839
1840
1841   YY_STACK_PRINT (yyss, yyssp);
1842
1843   *++yyvsp = yyval;
1844
1845
1846   /* Now `shift' the result of the reduction.  Determine what state
1847      that goes to, based on the state we popped back to and the rule
1848      number reduced by.  */
1849
1850   yyn = yyr1[yyn];
1851
1852   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
1853   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1854     yystate = yytable[yystate];
1855   else
1856     yystate = yydefgoto[yyn - YYNTOKENS];
1857
1858   goto yynewstate;
1859
1860
1861 /*------------------------------------.
1862 | yyerrlab -- here on detecting error |
1863 `------------------------------------*/
1864 yyerrlab:
1865   /* If not already recovering from an error, report this error.  */
1866   if (!yyerrstatus)
1867     {
1868       ++yynerrs;
1869 #if YYERROR_VERBOSE
1870       yyn = yypact[yystate];
1871
1872       if (YYPACT_NINF < yyn && yyn < YYLAST)
1873         {
1874           int yytype = YYTRANSLATE (yychar);
1875           YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
1876           YYSIZE_T yysize = yysize0;
1877           YYSIZE_T yysize1;
1878           int yysize_overflow = 0;
1879           char *yymsg = 0;
1880 #         define YYERROR_VERBOSE_ARGS_MAXIMUM 5
1881           char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1882           int yyx;
1883
1884 #if 0
1885           /* This is so xgettext sees the translatable formats that are
1886              constructed on the fly.  */
1887           YY_("syntax error, unexpected %s");
1888           YY_("syntax error, unexpected %s, expecting %s");
1889           YY_("syntax error, unexpected %s, expecting %s or %s");
1890           YY_("syntax error, unexpected %s, expecting %s or %s or %s");
1891           YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
1892 #endif
1893           char *yyfmt;
1894           char const *yyf;
1895           static char const yyunexpected[] = "syntax error, unexpected %s";
1896           static char const yyexpecting[] = ", expecting %s";
1897           static char const yyor[] = " or %s";
1898           char yyformat[sizeof yyunexpected
1899                         + sizeof yyexpecting - 1
1900                         + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
1901                            * (sizeof yyor - 1))];
1902           char const *yyprefix = yyexpecting;
1903
1904           /* Start YYX at -YYN if negative to avoid negative indexes in
1905              YYCHECK.  */
1906           int yyxbegin = yyn < 0 ? -yyn : 0;
1907
1908           /* Stay within bounds of both yycheck and yytname.  */
1909           int yychecklim = YYLAST - yyn;
1910           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1911           int yycount = 1;
1912
1913           yyarg[0] = yytname[yytype];
1914           yyfmt = yystpcpy (yyformat, yyunexpected);
1915
1916           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1917             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
1918               {
1919                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1920                   {
1921                     yycount = 1;
1922                     yysize = yysize0;
1923                     yyformat[sizeof yyunexpected - 1] = '\0';
1924                     break;
1925                   }
1926                 yyarg[yycount++] = yytname[yyx];
1927                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
1928                 yysize_overflow |= yysize1 < yysize;
1929                 yysize = yysize1;
1930                 yyfmt = yystpcpy (yyfmt, yyprefix);
1931                 yyprefix = yyor;
1932               }
1933
1934           yyf = YY_(yyformat);
1935           yysize1 = yysize + yystrlen (yyf);
1936           yysize_overflow |= yysize1 < yysize;
1937           yysize = yysize1;
1938
1939           if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
1940             yymsg = (char *) YYSTACK_ALLOC (yysize);
1941           if (yymsg)
1942             {
1943               /* Avoid sprintf, as that infringes on the user's name space.
1944                  Don't have undefined behavior even if the translation
1945                  produced a string with the wrong number of "%s"s.  */
1946               char *yyp = yymsg;
1947               int yyi = 0;
1948               while ((*yyp = *yyf))
1949                 {
1950                   if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
1951                     {
1952                       yyp += yytnamerr (yyp, yyarg[yyi++]);
1953                       yyf += 2;
1954                     }
1955                   else
1956                     {
1957                       yyp++;
1958                       yyf++;
1959                     }
1960                 }
1961               yyerror (yymsg);
1962               YYSTACK_FREE (yymsg);
1963             }
1964           else
1965             {
1966               yyerror (YY_("syntax error"));
1967               goto yyexhaustedlab;
1968             }
1969         }
1970       else
1971 #endif /* YYERROR_VERBOSE */
1972         yyerror (YY_("syntax error"));
1973     }
1974
1975
1976
1977   if (yyerrstatus == 3)
1978     {
1979       /* If just tried and failed to reuse look-ahead token after an
1980          error, discard it.  */
1981
1982       if (yychar <= YYEOF)
1983         {
1984           /* Return failure if at end of input.  */
1985           if (yychar == YYEOF)
1986             YYABORT;
1987         }
1988       else
1989         {
1990           yydestruct ("Error: discarding", yytoken, &yylval);
1991           yychar = YYEMPTY;
1992         }
1993     }
1994
1995   /* Else will try to reuse look-ahead token after shifting the error
1996      token.  */
1997   goto yyerrlab1;
1998
1999
2000 /*---------------------------------------------------.
2001 | yyerrorlab -- error raised explicitly by YYERROR.  |
2002 `---------------------------------------------------*/
2003 yyerrorlab:
2004
2005   /* Pacify compilers like GCC when the user code never invokes
2006      YYERROR and the label yyerrorlab therefore never appears in user
2007      code.  */
2008   if (0)
2009      goto yyerrorlab;
2010
2011 yyvsp -= yylen;
2012   yyssp -= yylen;
2013   yystate = *yyssp;
2014   goto yyerrlab1;
2015
2016
2017 /*-------------------------------------------------------------.
2018 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
2019 `-------------------------------------------------------------*/
2020 yyerrlab1:
2021   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
2022
2023   for (;;)
2024     {
2025       yyn = yypact[yystate];
2026       if (yyn != YYPACT_NINF)
2027         {
2028           yyn += YYTERROR;
2029           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
2030             {
2031               yyn = yytable[yyn];
2032               if (0 < yyn)
2033                 break;
2034             }
2035         }
2036
2037       /* Pop the current state because it cannot handle the error token.  */
2038       if (yyssp == yyss)
2039         YYABORT;
2040
2041
2042       yydestruct ("Error: popping", yystos[yystate], yyvsp);
2043       YYPOPSTACK;
2044       yystate = *yyssp;
2045       YY_STACK_PRINT (yyss, yyssp);
2046     }
2047
2048   if (yyn == YYFINAL)
2049     YYACCEPT;
2050
2051   *++yyvsp = yylval;
2052
2053
2054   /* Shift the error token. */
2055   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2056
2057   yystate = yyn;
2058   goto yynewstate;
2059
2060
2061 /*-------------------------------------.
2062 | yyacceptlab -- YYACCEPT comes here.  |
2063 `-------------------------------------*/
2064 yyacceptlab:
2065   yyresult = 0;
2066   goto yyreturn;
2067
2068 /*-----------------------------------.
2069 | yyabortlab -- YYABORT comes here.  |
2070 `-----------------------------------*/
2071 yyabortlab:
2072   yyresult = 1;
2073   goto yyreturn;
2074
2075 #ifndef yyoverflow
2076 /*-------------------------------------------------.
2077 | yyexhaustedlab -- memory exhaustion comes here.  |
2078 `-------------------------------------------------*/
2079 yyexhaustedlab:
2080   yyerror (YY_("memory exhausted"));
2081   yyresult = 2;
2082   /* Fall through.  */
2083 #endif
2084
2085 yyreturn:
2086   if (yychar != YYEOF && yychar != YYEMPTY)
2087      yydestruct ("Cleanup: discarding lookahead",
2088                  yytoken, &yylval);
2089   while (yyssp != yyss)
2090     {
2091       yydestruct ("Cleanup: popping",
2092                   yystos[*yyssp], yyvsp);
2093       YYPOPSTACK;
2094     }
2095 #ifndef yyoverflow
2096   if (yyss != yyssa)
2097     YYSTACK_FREE (yyss);
2098 #endif
2099   return yyresult;
2100 }
2101
2102
2103
2104
2105
2106 void conf_parse(const char *name)
2107 {
2108         struct symbol *sym;
2109         int i;
2110
2111         zconf_initscan(name);
2112
2113         sym_init();
2114         menu_init();
2115         modules_sym = sym_lookup(NULL, 0);
2116         modules_sym->type = S_BOOLEAN;
2117         modules_sym->flags |= SYMBOL_AUTO;
2118         rootmenu.prompt = menu_add_prompt(P_MENU, "uClinux Distribution Configuration", NULL);
2119
2120 #if YYDEBUG
2121         if (getenv("ZCONF_DEBUG"))
2122                 zconfdebug = 1;
2123 #endif
2124         zconfparse();
2125         if (zconfnerrs)
2126                 exit(1);
2127         if (!modules_sym->prop) {
2128                 struct property *prop;
2129
2130                 prop = prop_alloc(P_DEFAULT, modules_sym);
2131                 prop->expr = expr_alloc_symbol(sym_lookup("MODULES", 0));
2132         }
2133         menu_finalize(&rootmenu);
2134         for_all_symbols(i, sym) {
2135                 sym_check_deps(sym);
2136         }
2137
2138         sym_set_change_count(1);
2139 }
2140
2141 const char *zconf_tokenname(int token)
2142 {
2143         switch (token) {
2144         case T_MENU:            return "menu";
2145         case T_ENDMENU:         return "endmenu";
2146         case T_CHOICE:          return "choice";
2147         case T_ENDCHOICE:       return "endchoice";
2148         case T_IF:              return "if";
2149         case T_ENDIF:           return "endif";
2150         case T_DEPENDS:         return "depends";
2151         }
2152         return "<token>";
2153 }
2154
2155 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
2156 {
2157         if (id->token != endtoken) {
2158                 zconf_error("unexpected '%s' within %s block",
2159                         kconf_id_strings + id->name, zconf_tokenname(starttoken));
2160                 zconfnerrs++;
2161                 return false;
2162         }
2163         if (current_menu->file != current_file) {
2164                 zconf_error("'%s' in different file than '%s'",
2165                         kconf_id_strings + id->name, zconf_tokenname(starttoken));
2166                 fprintf(stderr, "%s:%d: location of the '%s'\n",
2167                         current_menu->file->name, current_menu->lineno,
2168                         zconf_tokenname(starttoken));
2169                 zconfnerrs++;
2170                 return false;
2171         }
2172         return true;
2173 }
2174
2175 static void zconfprint(const char *err, ...)
2176 {
2177         va_list ap;
2178
2179         fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2180         va_start(ap, err);
2181         vfprintf(stderr, err, ap);
2182         va_end(ap);
2183         fprintf(stderr, "\n");
2184 }
2185
2186 static void zconf_error(const char *err, ...)
2187 {
2188         va_list ap;
2189
2190         zconfnerrs++;
2191         fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
2192         va_start(ap, err);
2193         vfprintf(stderr, err, ap);
2194         va_end(ap);
2195         fprintf(stderr, "\n");
2196 }
2197
2198 static void zconferror(const char *err)
2199 {
2200 #if YYDEBUG
2201         fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2202 #endif
2203 }
2204
2205 void print_quoted_string(FILE *out, const char *str)
2206 {
2207         const char *p;
2208         int len;
2209
2210         putc('"', out);
2211         while ((p = strchr(str, '"'))) {
2212                 len = p - str;
2213                 if (len)
2214                         fprintf(out, "%.*s", len, str);
2215                 fputs("\\\"", out);
2216                 str = p + 1;
2217         }
2218         fputs(str, out);
2219         putc('"', out);
2220 }
2221
2222 void print_symbol(FILE *out, struct menu *menu)
2223 {
2224         struct symbol *sym = menu->sym;
2225         struct property *prop;
2226
2227         if (sym_is_choice(sym))
2228                 fprintf(out, "choice\n");
2229         else
2230                 fprintf(out, "config %s\n", sym->name);
2231         switch (sym->type) {
2232         case S_BOOLEAN:
2233                 fputs("  boolean\n", out);
2234                 break;
2235         case S_TRISTATE:
2236                 fputs("  tristate\n", out);
2237                 break;
2238         case S_STRING:
2239                 fputs("  string\n", out);
2240                 break;
2241         case S_INT:
2242                 fputs("  integer\n", out);
2243                 break;
2244         case S_HEX:
2245                 fputs("  hex\n", out);
2246                 break;
2247         default:
2248                 fputs("  ???\n", out);
2249                 break;
2250         }
2251         for (prop = sym->prop; prop; prop = prop->next) {
2252                 if (prop->menu != menu)
2253                         continue;
2254                 switch (prop->type) {
2255                 case P_PROMPT:
2256                         fputs("  prompt ", out);
2257                         print_quoted_string(out, prop->text);
2258                         if (!expr_is_yes(prop->visible.expr)) {
2259                                 fputs(" if ", out);
2260                                 expr_fprint(prop->visible.expr, out);
2261                         }
2262                         fputc('\n', out);
2263                         break;
2264                 case P_DEFAULT:
2265                         fputs( "  default ", out);
2266                         expr_fprint(prop->expr, out);
2267                         if (!expr_is_yes(prop->visible.expr)) {
2268                                 fputs(" if ", out);
2269                                 expr_fprint(prop->visible.expr, out);
2270                         }
2271                         fputc('\n', out);
2272                         break;
2273                 case P_CHOICE:
2274                         fputs("  #choice value\n", out);
2275                         break;
2276                 default:
2277                         fprintf(out, "  unknown prop %d!\n", prop->type);
2278                         break;
2279                 }
2280         }
2281         if (sym->help) {
2282                 int len = strlen(sym->help);
2283                 while (sym->help[--len] == '\n')
2284                         sym->help[len] = 0;
2285                 fprintf(out, "  help\n%s\n", sym->help);
2286         }
2287         fputc('\n', out);
2288 }
2289
2290 void zconfdump(FILE *out)
2291 {
2292         struct property *prop;
2293         struct symbol *sym;
2294         struct menu *menu;
2295
2296         menu = rootmenu.list;
2297         while (menu) {
2298                 if ((sym = menu->sym))
2299                         print_symbol(out, menu);
2300                 else if ((prop = menu->prompt)) {
2301                         switch (prop->type) {
2302                         case P_COMMENT:
2303                                 fputs("\ncomment ", out);
2304                                 print_quoted_string(out, prop->text);
2305                                 fputs("\n", out);
2306                                 break;
2307                         case P_MENU:
2308                                 fputs("\nmenu ", out);
2309                                 print_quoted_string(out, prop->text);
2310                                 fputs("\n", out);
2311                                 break;
2312                         default:
2313                                 ;
2314                         }
2315                         if (!expr_is_yes(prop->visible.expr)) {
2316                                 fputs("  depends ", out);
2317                                 expr_fprint(prop->visible.expr, out);
2318                                 fputc('\n', out);
2319                         }
2320                         fputs("\n", out);
2321                 }
2322
2323                 if (menu->list)
2324                         menu = menu->list;
2325                 else if (menu->next)
2326                         menu = menu->next;
2327                 else while ((menu = menu->parent)) {
2328                         if (menu->prompt && menu->prompt->type == P_MENU)
2329                                 fputs("\nendmenu\n", out);
2330                         if (menu->next) {
2331                                 menu = menu->next;
2332                                 break;
2333                         }
2334                 }
2335         }
2336 }
2337
2338 #include "lex.zconf.c"
2339 #include "util.c"
2340 #include "confdata.c"
2341 #include "expr.c"
2342 #include "symbol.c"
2343 #include "menu.c"
2344
2345