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