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