Annotation of qemu/roms/seabios/tools/kconfig/zconf.tab.c_shipped, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.