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