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