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