kconfig/zconf.tab.c
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Wed Sep 21 22:42:35 2011 +0200 (2011-09-21)
changeset 2677 7df89370f805
parent 943 1cca90ce0481
permissions -rw-r--r--
kernel/linux: add alternate download locations

Since kernel.org is dead, and there is no announced or known estimated
time or return to normality, it is impossible to download any kernel at
this time.

Add a known-working mirror.

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