kconfig/zconf.tab.c
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Jan 15 22:21:12 2010 +0100 (2010-01-15)
changeset 1738 4baa6a9f6415
parent 878 aa3be56634c1
child 2448 a103abae1560
permissions -rw-r--r--
libc/uClibc: rename patches for 0.9.30.2
     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 
   173 int cdebug = PRINTD;
   174 
   175 extern int zconflex(void);
   176 static void zconfprint(const char *err, ...);
   177 static void zconf_error(const char *err, ...);
   178 static void zconferror(const char *err);
   179 static bool zconf_endtoken(struct kconf_id *id, int starttoken, int endtoken);
   180 
   181 struct symbol *symbol_hash[257];
   182 
   183 static 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
   210 typedef 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
   241 typedef YYTYPE_UINT8 yytype_uint8;
   242 #else
   243 typedef unsigned char yytype_uint8;
   244 #endif
   245 
   246 #ifdef YYTYPE_INT8
   247 typedef YYTYPE_INT8 yytype_int8;
   248 #elif (defined __STDC__ || defined __C99__FUNC__ \
   249      || defined __cplusplus || defined _MSC_VER)
   250 typedef signed char yytype_int8;
   251 #else
   252 typedef short int yytype_int8;
   253 #endif
   254 
   255 #ifdef YYTYPE_UINT16
   256 typedef YYTYPE_UINT16 yytype_uint16;
   257 #else
   258 typedef unsigned short int yytype_uint16;
   259 #endif
   260 
   261 #ifdef YYTYPE_INT16
   262 typedef YYTYPE_INT16 yytype_int16;
   263 #else
   264 typedef 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)
   308 static int
   309 YYID (int i)
   310 #else
   311 static int
   312 YYID (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)
   376 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
   377 #   endif
   378 #  endif
   379 #  ifndef YYFREE
   380 #   define YYFREE free
   381 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
   382      || defined __cplusplus || defined _MSC_VER)
   383 void free (void *); /* INFRINGES ON USER NAME SPACE */
   384 #   endif
   385 #  endif
   386 # endif
   387 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
   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.  */
   395 union 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.  */
   468 static 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.  */
   504 static 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.  */
   521 static 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.  */
   559 static 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.  */
   579 static 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.  */
   604 static 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.  */
   614 static 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.  */
   631 static 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.  */
   650 static 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].  */
   673 static 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
   685 static 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].  */
   708 static 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
   722 static 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 
   752 static 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.  */
   784 static 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)					\
   825 do								\
   826   if (yychar == YYEMPTY && yylen == 1)				\
   827     {								\
   828       yychar = (Token);						\
   829       yylval = (Value);						\
   830       yytoken = YYTRANSLATE (yychar);				\
   831       YYPOPSTACK (1);						\
   832       goto yybackup;						\
   833     }								\
   834   else								\
   835     {								\
   836       yyerror (YY_("syntax error: cannot back up")); \
   837       YYERROR;							\
   838     }								\
   839 while (YYID (0))
   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)			\
   905 do {						\
   906   if (yydebug)					\
   907     YYFPRINTF Args;				\
   908 } while (YYID (0))
   909 
   910 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
   911 do {									  \
   912   if (yydebug)								  \
   913     {									  \
   914       YYFPRINTF (stderr, "%s ", Title);					  \
   915       yy_symbol_print (stderr,						  \
   916 		  Type, Value); \
   917       YYFPRINTF (stderr, "\n");						  \
   918     }									  \
   919 } while (YYID (0))
   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)
   929 static void
   930 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
   931 #else
   932 static void
   933 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
   934     FILE *yyoutput;
   935     int yytype;
   936     YYSTYPE const * const yyvaluep;
   937 #endif
   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)
   961 static void
   962 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
   963 #else
   964 static void
   965 yy_symbol_print (yyoutput, yytype, yyvaluep)
   966     FILE *yyoutput;
   967     int yytype;
   968     YYSTYPE const * const yyvaluep;
   969 #endif
   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)
   987 static void
   988 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
   989 #else
   990 static void
   991 yy_stack_print (bottom, top)
   992     yytype_int16 *bottom;
   993     yytype_int16 *top;
   994 #endif
   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)				\
  1003 do {								\
  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)
  1015 static void
  1016 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
  1017 #else
  1018 static void
  1019 yy_reduce_print (yyvsp, yyrule)
  1020     YYSTYPE *yyvsp;
  1021     int yyrule;
  1022 #endif
  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)		\
  1041 do {					\
  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.  */
  1048 int yydebug;
  1049 #else /* !YYDEBUG */
  1050 # define YYDPRINTF(Args)
  1051 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
  1052 # define YY_STACK_PRINT(Bottom, Top)
  1053 # define YY_REDUCE_PRINT(Rule)
  1054 #endif /* !YYDEBUG */
  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)
  1084 static YYSIZE_T
  1085 yystrlen (const char *yystr)
  1086 #else
  1087 static YYSIZE_T
  1088 yystrlen (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)
  1108 static char *
  1109 yystpcpy (char *yydest, const char *yysrc)
  1110 #else
  1111 static char *
  1112 yystpcpy (yydest, yysrc)
  1113     char *yydest;
  1114     const char *yysrc;
  1115 #endif
  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.  */
  1136 static YYSIZE_T
  1137 yytnamerr (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.  */
  1183 static YYSIZE_T
  1184 yysyntax_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)
  1293 static void
  1294 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
  1295 #else
  1296 static void
  1297 yydestruct (yymsg, yytype, yyvaluep)
  1298     const char *yymsg;
  1299     int yytype;
  1300     YYSTYPE *yyvaluep;
  1301 #endif
  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
  1352 int yyparse (void *YYPARSE_PARAM);
  1353 #else
  1354 int yyparse ();
  1355 #endif
  1356 #else /* ! YYPARSE_PARAM */
  1357 #if defined __STDC__ || defined __cplusplus
  1358 int yyparse (void);
  1359 #else
  1360 int yyparse ();
  1361 #endif
  1362 #endif /* ! YYPARSE_PARAM */
  1363 
  1364 
  1365 
  1366 /* The look-ahead symbol.  */
  1367 int yychar;
  1368 
  1369 /* The semantic value of the look-ahead symbol.  */
  1370 YYSTYPE yylval;
  1371 
  1372 /* Number of syntax errors so far.  */
  1373 int 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)
  1384 int
  1385 yyparse (void *YYPARSE_PARAM)
  1386 #else
  1387 int
  1388 yyparse (YYPARSE_PARAM)
  1389     void *YYPARSE_PARAM;
  1390 #endif
  1391 #else /* ! YYPARSE_PARAM */
  1392 #if (defined __STDC__ || defined __C99__FUNC__ \
  1393      || defined __cplusplus || defined _MSC_VER)
  1394 int
  1395 yyparse (void)
  1396 #else
  1397 int
  1398 yyparse ()
  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 `-----------*/
  1551 yybackup:
  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 `-----------------------------------------------------------*/
  1619 yydefault:
  1620   yyn = yydefact[yystate];
  1621   if (yyn == 0)
  1622     goto yyerrlab;
  1623   goto yyreduce;
  1624 
  1625 
  1626 /*-----------------------------.
  1627 | yyreduce -- Do a reduction.  |
  1628 `-----------------------------*/
  1629 yyreduce:
  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 `------------------------------------*/
  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 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 `---------------------------------------------------*/
  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   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 `-------------------------------------*/
  2199 yyacceptlab:
  2200   yyresult = 0;
  2201   goto yyreturn;
  2202 
  2203 /*-----------------------------------.
  2204 | yyabortlab -- YYABORT comes here.  |
  2205 `-----------------------------------*/
  2206 yyabortlab:
  2207   yyresult = 1;
  2208   goto yyreturn;
  2209 
  2210 #ifndef yyoverflow
  2211 /*-------------------------------------------------.
  2212 | yyexhaustedlab -- memory exhaustion comes here.  |
  2213 `-------------------------------------------------*/
  2214 yyexhaustedlab:
  2215   yyerror (YY_("memory exhausted"));
  2216   yyresult = 2;
  2217   /* Fall through.  */
  2218 #endif
  2219 
  2220 yyreturn:
  2221   if (yychar != YYEOF && yychar != YYEMPTY)
  2222      yydestruct ("Cleanup: discarding lookahead",
  2223 		 yytoken, &yylval);
  2224   /* Do not reclaim the symbols of the rule which action triggered
  2225      this YYABORT or YYACCEPT.  */
  2226   YYPOPSTACK (yylen);
  2227   YY_STACK_PRINT (yyss, yyssp);
  2228   while (yyssp != yyss)
  2229     {
  2230       yydestruct ("Cleanup: popping",
  2231 		  yystos[*yyssp], yyvsp);
  2232       YYPOPSTACK (1);
  2233     }
  2234 #ifndef yyoverflow
  2235   if (yyss != yyssa)
  2236     YYSTACK_FREE (yyss);
  2237 #endif
  2238 #if YYERROR_VERBOSE
  2239   if (yymsg != yymsgbuf)
  2240     YYSTACK_FREE (yymsg);
  2241 #endif
  2242   /* Make sure YYID is used.  */
  2243   return YYID (yyresult);
  2244 }
  2245 
  2246 
  2247 
  2248 
  2249 
  2250 void 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, PACKAGE, 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 
  2287 const 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 
  2301 static 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 
  2321 static 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 
  2332 static 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 
  2344 static 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 
  2351 void 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 
  2368 void 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 
  2436 void 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