kconfig/zconf.tab.c
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Aug 21 23:11:26 2011 +0200 (2011-08-21)
changeset 2623 e8e30025fcc5
parent 943 1cca90ce0481
permissions -rw-r--r--
configure: recognise and handle --program-transform-name

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