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