• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* A Bison parser, made by GNU Bison 2.3.  */
2
3/* Skeleton implementation for Bison's Yacc-like parsers in C
4
5   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6   Free Software Foundation, Inc.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
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.  */
22
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.
32
33   This special exception was added by the Free Software Foundation in
34   version 2.2 of Bison.  */
35
36/* C LALR(1) parser skeleton written by Richard Stallman, by
37   simplifying the original so-called "semantic" parser.  */
38
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.  */
45
46/* Identify Bison output.  */
47#define YYBISON 1
48
49/* Bison version.  */
50#define YYBISON_VERSION "2.3"
51
52/* Skeleton name.  */
53#define YYSKELETON_NAME "yacc.c"
54
55/* Pure parsers.  */
56#define YYPURE 0
57
58/* Using locations.  */
59#define YYLSP_NEEDED 0
60
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
69
70
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
144
145
146
147
148/* Copy the first part of user declarations.  */
149
150
151/*
152 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
153 * Released under the terms of the GNU GPL v2.0.
154 */
155
156#include <ctype.h>
157#include <stdarg.h>
158#include <stdio.h>
159#include <stdlib.h>
160#include <string.h>
161#include <stdbool.h>
162
163#define LKC_DIRECT_LINK
164#include "lkc.h"
165
166#include "zconf.hash.c"
167
168#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
169
170#define PRINTD		0x0001
171#define DEBUG_PARSE	0x0002
172
173int cdebug = PRINTD;
174
175extern int zconflex(void);
176static void zconfprint(const char *err, ...);
177static void zconf_error(const char *err, ...);
178static void zconferror(const char *err);
179static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
180
181struct symbol *symbol_hash[257];
182
183static struct menu *current_menu, *current_entry;
184
185#define YYDEBUG 0
186#if YYDEBUG
187#define YYERROR_VERBOSE
188#endif
189
190
191/* Enabling traces.  */
192#ifndef YYDEBUG
193# define YYDEBUG 0
194#endif
195
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
203
204/* Enabling the token table.  */
205#ifndef YYTOKEN_TABLE
206# define YYTOKEN_TABLE 0
207#endif
208
209#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
210typedef union YYSTYPE
211
212{
213	char *string;
214	struct file *file;
215	struct symbol *symbol;
216	struct expr *expr;
217	struct menu *menu;
218	struct kconf_id *id;
219}
220/* Line 187 of yacc.c.  */
221
222	YYSTYPE;
223# define yystype YYSTYPE /* obsolescent; will be withdrawn */
224# define YYSTYPE_IS_DECLARED 1
225# define YYSTYPE_IS_TRIVIAL 1
226#endif
227
228
229
230/* Copy the second part of user declarations.  */
231
232
233/* Line 216 of yacc.c.  */
234
235
236#ifdef short
237# undef short
238#endif
239
240#ifdef YYTYPE_UINT8
241typedef YYTYPE_UINT8 yytype_uint8;
242#else
243typedef unsigned char yytype_uint8;
244#endif
245
246#ifdef YYTYPE_INT8
247typedef YYTYPE_INT8 yytype_int8;
248#elif (defined __STDC__ || defined __C99__FUNC__ \
249     || defined __cplusplus || defined _MSC_VER)
250typedef signed char yytype_int8;
251#else
252typedef short int yytype_int8;
253#endif
254
255#ifdef YYTYPE_UINT16
256typedef YYTYPE_UINT16 yytype_uint16;
257#else
258typedef unsigned short int yytype_uint16;
259#endif
260
261#ifdef YYTYPE_INT16
262typedef YYTYPE_INT16 yytype_int16;
263#else
264typedef short int yytype_int16;
265#endif
266
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
280
281#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
282
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
294
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
301
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)
308static int
309YYID (int i)
310#else
311static int
312YYID (i)
313    int i;
314#endif
315{
316  return i;
317}
318#endif
319
320#if ! defined yyoverflow || YYERROR_VERBOSE
321
322/* The parser invokes alloca or malloc; define the necessary symbols.  */
323
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
347
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)
376void *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)
383void free (void *); /* INFRINGES ON USER NAME SPACE */
384#   endif
385#  endif
386# endif
387#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
388
389
390#if (! defined yyoverflow \
391     && (! defined __cplusplus \
392	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
393
394/* A type that is properly aligned for any stack member.  */
395union yyalloc
396{
397  yytype_int16 yyss;
398  YYSTYPE yyvs;
399  };
400
401/* The size of the maximum gap between one aligned stack and the next.  */
402# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
403
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)
409
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
427
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))
443
444#endif
445
446/* YYFINAL -- State number of the termination state.  */
447#define YYFINAL  3
448/* YYLAST -- Last index in YYTABLE.  */
449#define YYLAST   259
450
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
459
460/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
461#define YYUNDEFTOK  2
462#define YYMAXUTOK   289
463
464#define YYTRANSLATE(YYX)						\
465  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
466
467/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
468static const yytype_uint8 yytranslate[] =
469{
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
499};
500
501#if YYDEBUG
502/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
503   YYRHS.  */
504static const yytype_uint16 yyprhs[] =
505{
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
518};
519
520/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
521static const yytype_int8 yyrhs[] =
522{
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
556};
557
558/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
559static const yytype_uint16 yyrline[] =
560{
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
573};
574#endif
575
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.  */
579static const char *const yytname[] =
580{
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
598};
599#endif
600
601# ifdef YYPRINT
602/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
603   token YYLEX-NUM.  */
604static const yytype_uint16 yytoknum[] =
605{
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
610};
611# endif
612
613/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
614static const yytype_uint8 yyr1[] =
615{
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
628};
629
630/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
631static const yytype_uint8 yyr2[] =
632{
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
645};
646
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.  */
650static const yytype_uint8 yydefact[] =
651{
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
670};
671
672/* YYDEFGOTO[NTERM-NUM].  */
673static const yytype_int16 yydefgoto[] =
674{
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
680};
681
682/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
683   STATE-NUM.  */
684#define YYPACT_NINF -80
685static const yytype_int16 yypact[] =
686{
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
705};
706
707/* YYPGOTO[NTERM-NUM].  */
708static const yytype_int16 yypgoto[] =
709{
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
715};
716
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
722static const yytype_int16 yytable[] =
723{
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
750};
751
752static const yytype_int16 yycheck[] =
753{
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
780};
781
782/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
783   symbol of state STATE-NUM.  */
784static const yytype_uint8 yystos[] =
785{
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
804};
805
806#define yyerrok		(yyerrstatus = 0)
807#define yyclearin	(yychar = YYEMPTY)
808#define YYEMPTY		(-2)
809#define YYEOF		0
810
811#define YYACCEPT	goto yyacceptlab
812#define YYABORT		goto yyabortlab
813#define YYERROR		goto yyerrorlab
814
815
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.  */
819
820#define YYFAIL		goto yyerrlab
821
822#define YYRECOVERING()  (!!yyerrstatus)
823
824#define YYBACKUP(Token, Value)					\
825do								\
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    }								\
839while (YYID (0))
840
841
842#define YYTERROR	1
843#define YYERRCODE	256
844
845
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).  */
849
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
870
871
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.  */
875
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
886
887
888/* YYLEX -- calling `yylex' with the right arguments.  */
889
890#ifdef YYLEX_PARAM
891# define YYLEX yylex (YYLEX_PARAM)
892#else
893# define YYLEX yylex ()
894#endif
895
896/* Enable debugging if requested.  */
897#if YYDEBUG
898
899# ifndef YYFPRINTF
900#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
901#  define YYFPRINTF fprintf
902# endif
903
904# define YYDPRINTF(Args)			\
905do {						\
906  if (yydebug)					\
907    YYFPRINTF Args;				\
908} while (YYID (0))
909
910# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
911do {									  \
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))
920
921
922/*--------------------------------.
923| Print this symbol on YYOUTPUT.  |
924`--------------------------------*/
925
926/*ARGSUSED*/
927#if (defined __STDC__ || defined __C99__FUNC__ \
928     || defined __cplusplus || defined _MSC_VER)
929static void
930yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
931#else
932static void
933yy_symbol_value_print (yyoutput, yytype, yyvaluep)
934    FILE *yyoutput;
935    int yytype;
936    YYSTYPE const * const yyvaluep;
937#endif
938{
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    }
952}
953
954
955/*--------------------------------.
956| Print this symbol on YYOUTPUT.  |
957`--------------------------------*/
958
959#if (defined __STDC__ || defined __C99__FUNC__ \
960     || defined __cplusplus || defined _MSC_VER)
961static void
962yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
963#else
964static void
965yy_symbol_print (yyoutput, yytype, yyvaluep)
966    FILE *yyoutput;
967    int yytype;
968    YYSTYPE const * const yyvaluep;
969#endif
970{
971  if (yytype < YYNTOKENS)
972    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
973  else
974    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
975
976  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
977  YYFPRINTF (yyoutput, ")");
978}
979
980/*------------------------------------------------------------------.
981| yy_stack_print -- Print the state stack from its BOTTOM up to its |
982| TOP (included).                                                   |
983`------------------------------------------------------------------*/
984
985#if (defined __STDC__ || defined __C99__FUNC__ \
986     || defined __cplusplus || defined _MSC_VER)
987static void
988yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
989#else
990static void
991yy_stack_print (bottom, top)
992    yytype_int16 *bottom;
993    yytype_int16 *top;
994#endif
995{
996  YYFPRINTF (stderr, "Stack now");
997  for (; bottom <= top; ++bottom)
998    YYFPRINTF (stderr, " %d", *bottom);
999  YYFPRINTF (stderr, "\n");
1000}
1001
1002# define YY_STACK_PRINT(Bottom, Top)				\
1003do {								\
1004  if (yydebug)							\
1005    yy_stack_print ((Bottom), (Top));				\
1006} while (YYID (0))
1007
1008
1009/*------------------------------------------------.
1010| Report that the YYRULE is going to be reduced.  |
1011`------------------------------------------------*/
1012
1013#if (defined __STDC__ || defined __C99__FUNC__ \
1014     || defined __cplusplus || defined _MSC_VER)
1015static void
1016yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
1017#else
1018static void
1019yy_reduce_print (yyvsp, yyrule)
1020    YYSTYPE *yyvsp;
1021    int yyrule;
1022#endif
1023{
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    }
1038}
1039
1040# define YY_REDUCE_PRINT(Rule)		\
1041do {					\
1042  if (yydebug)				\
1043    yy_reduce_print (yyvsp, Rule); \
1044} while (YYID (0))
1045
1046/* Nonzero means print parse trace.  It is left uninitialized so that
1047   multiple parsers can coexist.  */
1048int 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 */
1055
1056
1057/* YYINITDEPTH -- initial size of the parser's stacks.  */
1058#ifndef	YYINITDEPTH
1059# define YYINITDEPTH 200
1060#endif
1061
1062/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1063   if the built-in stack extension method is used).
1064
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.  */
1068
1069#ifndef YYMAXDEPTH
1070# define YYMAXDEPTH 10000
1071#endif
1072
1073
1074
1075#if YYERROR_VERBOSE
1076
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)
1084static YYSIZE_T
1085yystrlen (const char *yystr)
1086#else
1087static YYSIZE_T
1088yystrlen (yystr)
1089    const char *yystr;
1090#endif
1091{
1092  YYSIZE_T yylen;
1093  for (yylen = 0; yystr[yylen]; yylen++)
1094    continue;
1095  return yylen;
1096}
1097#  endif
1098# endif
1099
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)
1108static char *
1109yystpcpy (char *yydest, const char *yysrc)
1110#else
1111static char *
1112yystpcpy (yydest, yysrc)
1113    char *yydest;
1114    const char *yysrc;
1115#endif
1116{
1117  char *yyd = yydest;
1118  const char *yys = yysrc;
1119
1120  while ((*yyd++ = *yys++) != '\0')
1121    continue;
1122
1123  return yyd - 1;
1124}
1125#  endif
1126# endif
1127
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.  */
1136static YYSIZE_T
1137yytnamerr (char *yyres, const char *yystr)
1138{
1139  if (*yystr == '"')
1140    {
1141      YYSIZE_T yyn = 0;
1142      char const *yyp = yystr;
1143
1144      for (;;)
1145	switch (*++yyp)
1146	  {
1147	  case '\'':
1148	  case ',':
1149	    goto do_not_strip_quotes;
1150
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;
1160
1161	  case '"':
1162	    if (yyres)
1163	      yyres[yyn] = '\0';
1164	    return yyn;
1165	  }
1166    do_not_strip_quotes: ;
1167    }
1168
1169  if (! yyres)
1170    return yystrlen (yystr);
1171
1172  return yystpcpy (yyres, yystr) - yyres;
1173}
1174# endif
1175
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.  */
1183static YYSIZE_T
1184yysyntax_error (char *yyresult, int yystate, int yychar)
1185{
1186  int yyn = yypact[yystate];
1187
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;
1200
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;
1220
1221      /* Start YYX at -YYN if negative to avoid negative indexes in
1222	 YYCHECK.  */
1223      int yyxbegin = yyn < 0 ? -yyn : 0;
1224
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;
1229
1230      yyarg[0] = yytname[yytype];
1231      yyfmt = yystpcpy (yyformat, yyunexpected);
1232
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	  }
1250
1251      yyf = YY_(yyformat);
1252      yysize1 = yysize + yystrlen (yyf);
1253      yysize_overflow |= (yysize1 < yysize);
1254      yysize = yysize1;
1255
1256      if (yysize_overflow)
1257	return YYSIZE_MAXIMUM;
1258
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    }
1282}
1283#endif /* YYERROR_VERBOSE */
1284
1285
1286/*-----------------------------------------------.
1287| Release the memory associated to this symbol.  |
1288`-----------------------------------------------*/
1289
1290/*ARGSUSED*/
1291#if (defined __STDC__ || defined __C99__FUNC__ \
1292     || defined __cplusplus || defined _MSC_VER)
1293static void
1294yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
1295#else
1296static void
1297yydestruct (yymsg, yytype, yyvaluep)
1298    const char *yymsg;
1299    int yytype;
1300    YYSTYPE *yyvaluep;
1301#endif
1302{
1303  YYUSE (yyvaluep);
1304
1305  if (!yymsg)
1306    yymsg = "Deleting";
1307  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1308
1309  switch (yytype)
1310    {
1311      case 51: /* "choice_entry" */
1312
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();
1318};
1319
1320	break;
1321      case 57: /* "if_entry" */
1322
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();
1328};
1329
1330	break;
1331      case 62: /* "menu_entry" */
1332
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();
1338};
1339
1340	break;
1341
1342      default:
1343	break;
1344    }
1345}
1346
1347
1348/* Prevent warnings from -Wmissing-prototypes.  */
1349
1350#ifdef YYPARSE_PARAM
1351#if defined __STDC__ || defined __cplusplus
1352int yyparse (void *YYPARSE_PARAM);
1353#else
1354int yyparse ();
1355#endif
1356#else /* ! YYPARSE_PARAM */
1357#if defined __STDC__ || defined __cplusplus
1358int yyparse (void);
1359#else
1360int yyparse ();
1361#endif
1362#endif /* ! YYPARSE_PARAM */
1363
1364
1365
1366/* The look-ahead symbol.  */
1367int yychar;
1368
1369/* The semantic value of the look-ahead symbol.  */
1370YYSTYPE yylval;
1371
1372/* Number of syntax errors so far.  */
1373int yynerrs;
1374
1375
1376
1377/*----------.
1378| yyparse.  |
1379`----------*/
1380
1381#ifdef YYPARSE_PARAM
1382#if (defined __STDC__ || defined __C99__FUNC__ \
1383     || defined __cplusplus || defined _MSC_VER)
1384int
1385yyparse (void *YYPARSE_PARAM)
1386#else
1387int
1388yyparse (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)
1394int
1395yyparse (void)
1396#else
1397int
1398yyparse ()
1399
1400#endif
1401#endif
1402{
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
1417
1418  /* Three stacks and their tools:
1419     `yyss': related to states,
1420     `yyvs': related to semantic values,
1421     `yyls': related to locations.
1422
1423     Refer to the stacks thru separate pointers, to allow yyoverflow
1424     to reallocate them elsewhere.  */
1425
1426  /* The state stack.  */
1427  yytype_int16 yyssa[YYINITDEPTH];
1428  yytype_int16 *yyss = yyssa;
1429  yytype_int16 *yyssp;
1430
1431  /* The semantic value stack.  */
1432  YYSTYPE yyvsa[YYINITDEPTH];
1433  YYSTYPE *yyvs = yyvsa;
1434  YYSTYPE *yyvsp;
1435
1436
1437
1438#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
1439
1440  YYSIZE_T yystacksize = YYINITDEPTH;
1441
1442  /* The variables used to return semantic value and location from the
1443     action routines.  */
1444  YYSTYPE yyval;
1445
1446
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;
1450
1451  YYDPRINTF ((stderr, "Starting parse\n"));
1452
1453  yystate = 0;
1454  yyerrstatus = 0;
1455  yynerrs = 0;
1456  yychar = YYEMPTY;		/* Cause a token to be read.  */
1457
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.  */
1462
1463  yyssp = yyss;
1464  yyvsp = yyvs;
1465
1466  goto yysetstate;
1467
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++;
1475
1476 yysetstate:
1477  *yyssp = yystate;
1478
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;
1483
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;
1491
1492
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),
1500
1501		    &yystacksize);
1502
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;
1516
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);
1525
1526#  undef YYSTACK_RELOCATE
1527	if (yyss1 != yyssa)
1528	  YYSTACK_FREE (yyss1);
1529      }
1530# endif
1531#endif /* no yyoverflow */
1532
1533      yyssp = yyss + yysize - 1;
1534      yyvsp = yyvs + yysize - 1;
1535
1536
1537      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
1538		  (unsigned long int) yystacksize));
1539
1540      if (yyss + yystacksize - 1 <= yyssp)
1541	YYABORT;
1542    }
1543
1544  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1545
1546  goto yybackup;
1547
1548/*-----------.
1549| yybackup.  |
1550`-----------*/
1551yybackup:
1552
1553  /* Do appropriate processing given the current state.  Read a
1554     look-ahead token if we need one and don't already have one.  */
1555
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;
1560
1561  /* Not known => get a look-ahead token if don't already have one.  */
1562
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    }
1569
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    }
1580
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    }
1594
1595  if (yyn == YYFINAL)
1596    YYACCEPT;
1597
1598  /* Count tokens shifted since error; after three, turn off error
1599     status.  */
1600  if (yyerrstatus)
1601    yyerrstatus--;
1602
1603  /* Shift the look-ahead token.  */
1604  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1605
1606  /* Discard the shifted token unless it is eof.  */
1607  if (yychar != YYEOF)
1608    yychar = YYEMPTY;
1609
1610  yystate = yyn;
1611  *++yyvsp = yylval;
1612
1613  goto yynewstate;
1614
1615
1616/*-----------------------------------------------------------.
1617| yydefault -- do the default action for the current state.  |
1618`-----------------------------------------------------------*/
1619yydefault:
1620  yyn = yydefact[yystate];
1621  if (yyn == 0)
1622    goto yyerrlab;
1623  goto yyreduce;
1624
1625
1626/*-----------------------------.
1627| yyreduce -- Do a reduction.  |
1628`-----------------------------*/
1629yyreduce:
1630  /* yyn is the number of a rule to reduce with.  */
1631  yylen = yyr2[yyn];
1632
1633  /* If YYLEN is nonzero, implement the default value of the action:
1634     `$$ = $1'.
1635
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];
1642
1643
1644  YY_REDUCE_PRINT (yyn);
1645  switch (yyn)
1646    {
1647        case 8:
1648
1649    { zconf_error("unexpected end statement"); ;}
1650    break;
1651
1652  case 9:
1653
1654    { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); ;}
1655    break;
1656
1657  case 10:
1658
1659    {
1660	zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
1661;}
1662    break;
1663
1664  case 11:
1665
1666    { zconf_error("invalid statement"); ;}
1667    break;
1668
1669  case 25:
1670
1671    { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); ;}
1672    break;
1673
1674  case 26:
1675
1676    { zconf_error("invalid option"); ;}
1677    break;
1678
1679  case 27:
1680
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));
1686;}
1687    break;
1688
1689  case 28:
1690
1691    {
1692	menu_end_entry();
1693	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
1694;}
1695    break;
1696
1697  case 29:
1698
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));
1704;}
1705    break;
1706
1707  case 30:
1708
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());
1716;}
1717    break;
1718
1719  case 38:
1720
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);
1726;}
1727    break;
1728
1729  case 39:
1730
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());
1734;}
1735    break;
1736
1737  case 40:
1738
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);
1746;}
1747    break;
1748
1749  case 41:
1750
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());
1754;}
1755    break;
1756
1757  case 42:
1758
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());
1762;}
1763    break;
1764
1765  case 45:
1766
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));
1774;}
1775    break;
1776
1777  case 46:
1778
1779    { (yyval.string) = NULL; ;}
1780    break;
1781
1782  case 47:
1783
1784    { (yyval.string) = (yyvsp[(2) - (2)].string); ;}
1785    break;
1786
1787  case 48:
1788
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());
1795;}
1796    break;
1797
1798  case 49:
1799
1800    {
1801	(yyval.menu) = menu_add_menu();
1802;}
1803    break;
1804
1805  case 50:
1806
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	}
1812;}
1813    break;
1814
1815  case 58:
1816
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());
1820;}
1821    break;
1822
1823  case 59:
1824
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;
1833;}
1834    break;
1835
1836  case 60:
1837
1838    {
1839	current_entry->sym->flags |= SYMBOL_OPTIONAL;
1840	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
1841;}
1842    break;
1843
1844  case 61:
1845
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;
1853;}
1854    break;
1855
1856  case 64:
1857
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();
1863;}
1864    break;
1865
1866  case 65:
1867
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	}
1873;}
1874    break;
1875
1876  case 71:
1877
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());
1882;}
1883    break;
1884
1885  case 72:
1886
1887    {
1888	(yyval.menu) = menu_add_menu();
1889;}
1890    break;
1891
1892  case 73:
1893
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	}
1899;}
1900    break;
1901
1902  case 79:
1903
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));
1907;}
1908    break;
1909
1910  case 80:
1911
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());
1916;}
1917    break;
1918
1919  case 81:
1920
1921    {
1922	menu_end_entry();
1923;}
1924    break;
1925
1926  case 82:
1927
1928    {
1929	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
1930	zconf_starthelp();
1931;}
1932    break;
1933
1934  case 83:
1935
1936    {
1937	current_entry->help = (yyvsp[(2) - (2)].string);
1938;}
1939    break;
1940
1941  case 88:
1942
1943    {
1944	menu_add_dep((yyvsp[(3) - (4)].expr));
1945	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
1946;}
1947    break;
1948
1949  case 90:
1950
1951    {
1952	menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
1953;}
1954    break;
1955
1956  case 93:
1957
1958    { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
1959    break;
1960
1961  case 94:
1962
1963    { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
1964    break;
1965
1966  case 95:
1967
1968    { (yyval.id) = (yyvsp[(1) - (2)].id); ;}
1969    break;
1970
1971  case 98:
1972
1973    { (yyval.expr) = NULL; ;}
1974    break;
1975
1976  case 99:
1977
1978    { (yyval.expr) = (yyvsp[(2) - (2)].expr); ;}
1979    break;
1980
1981  case 100:
1982
1983    { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); ;}
1984    break;
1985
1986  case 101:
1987
1988    { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
1989    break;
1990
1991  case 102:
1992
1993    { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); ;}
1994    break;
1995
1996  case 103:
1997
1998    { (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
1999    break;
2000
2001  case 104:
2002
2003    { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); ;}
2004    break;
2005
2006  case 105:
2007
2008    { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
2009    break;
2010
2011  case 106:
2012
2013    { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); ;}
2014    break;
2015
2016  case 107:
2017
2018    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); ;}
2019    break;
2020
2021  case 108:
2022
2023    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); ;}
2024    break;
2025
2026  case 109:
2027
2028    { (yyval.string) = NULL; ;}
2029    break;
2030
2031
2032/* Line 1267 of yacc.c.  */
2033
2034      default: break;
2035    }
2036  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
2037
2038  YYPOPSTACK (yylen);
2039  yylen = 0;
2040  YY_STACK_PRINT (yyss, yyssp);
2041
2042  *++yyvsp = yyval;
2043
2044
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.  */
2048
2049  yyn = yyr1[yyn];
2050
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];
2056
2057  goto yynewstate;
2058
2059
2060/*------------------------------------.
2061| yyerrlab -- here on detecting error |
2062`------------------------------------*/
2063yyerrlab:
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	  }
2089
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    }
2104
2105
2106
2107  if (yyerrstatus == 3)
2108    {
2109      /* If just tried and failed to reuse look-ahead token after an
2110	 error, discard it.  */
2111
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    }
2125
2126  /* Else will try to reuse look-ahead token after shifting the error
2127     token.  */
2128  goto yyerrlab1;
2129
2130
2131/*---------------------------------------------------.
2132| yyerrorlab -- error raised explicitly by YYERROR.  |
2133`---------------------------------------------------*/
2134yyerrorlab:
2135
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;
2141
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;
2149
2150
2151/*-------------------------------------------------------------.
2152| yyerrlab1 -- common code for both syntax error and YYERROR.  |
2153`-------------------------------------------------------------*/
2154yyerrlab1:
2155  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
2156
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	}
2170
2171      /* Pop the current state because it cannot handle the error token.  */
2172      if (yyssp == yyss)
2173	YYABORT;
2174
2175
2176      yydestruct ("Error: popping",
2177		  yystos[yystate], yyvsp);
2178      YYPOPSTACK (1);
2179      yystate = *yyssp;
2180      YY_STACK_PRINT (yyss, yyssp);
2181    }
2182
2183  if (yyn == YYFINAL)
2184    YYACCEPT;
2185
2186  *++yyvsp = yylval;
2187
2188
2189  /* Shift the error token.  */
2190  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
2191
2192  yystate = yyn;
2193  goto yynewstate;
2194
2195
2196/*-------------------------------------.
2197| yyacceptlab -- YYACCEPT comes here.  |
2198`-------------------------------------*/
2199yyacceptlab:
2200  yyresult = 0;
2201  goto yyreturn;
2202
2203/*-----------------------------------.
2204| yyabortlab -- YYABORT comes here.  |
2205`-----------------------------------*/
2206yyabortlab:
2207  yyresult = 1;
2208  goto yyreturn;
2209
2210#ifndef yyoverflow
2211/*-------------------------------------------------.
2212| yyexhaustedlab -- memory exhaustion comes here.  |
2213`-------------------------------------------------*/
2214yyexhaustedlab:
2215  yyerror (YY_("memory exhausted"));
2216  yyresult = 2;
2217  /* Fall through.  */
2218#endif
2219
2220yyreturn:
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);
2244}
2245
2246
2247
2248
2249
2250void conf_parse(const char *name)
2251{
2252	struct symbol *sym;
2253	int i;
2254
2255	zconf_initscan(name);
2256
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);
2263
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;
2273
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);
2285}
2286
2287const char *zconf_tokenname(int token)
2288{
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>";
2299}
2300
2301static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken)
2302{
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;
2319}
2320
2321static void zconfprint(const char *err, ...)
2322{
2323	va_list ap;
2324
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");
2330}
2331
2332static void zconf_error(const char *err, ...)
2333{
2334	va_list ap;
2335
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");
2342}
2343
2344static void zconferror(const char *err)
2345{
2346#if YYDEBUG
2347	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
2348#endif
2349}
2350
2351void print_quoted_string(FILE *out, const char *str)
2352{
2353	const char *p;
2354	int len;
2355
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);
2366}
2367
2368void print_symbol(FILE *out, struct menu *menu)
2369{
2370	struct symbol *sym = menu->sym;
2371	struct property *prop;
2372
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);
2434}
2435
2436void zconfdump(FILE *out)
2437{
2438	struct property *prop;
2439	struct symbol *sym;
2440	struct menu *menu;
2441
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		}
2468
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	}
2482}
2483
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"
2490
2491