00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #define YYBISON 1
00038
00039
00040 #define YYSKELETON_NAME "yacc.c"
00041
00042
00043 #define YYPURE 0
00044
00045
00046 #define YYLSP_NEEDED 0
00047
00048
00049
00050 #define yyparse zconfparse
00051 #define yylex zconflex
00052 #define yyerror zconferror
00053 #define yylval zconflval
00054 #define yychar zconfchar
00055 #define yydebug zconfdebug
00056 #define yynerrs zconfnerrs
00057
00058
00059
00060
#ifndef YYTOKENTYPE
00061
# define YYTOKENTYPE
00062
00063
00064 enum yytokentype {
00065
T_MAINMENU = 258,
00066
T_MENU = 259,
00067
T_ENDMENU = 260,
00068
T_SOURCE = 261,
00069
T_CHOICE = 262,
00070
T_ENDCHOICE = 263,
00071
T_COMMENT = 264,
00072
T_CONFIG = 265,
00073
T_MENUCONFIG = 266,
00074
T_HELP = 267,
00075
T_HELPTEXT = 268,
00076
T_IF = 269,
00077
T_ENDIF = 270,
00078
T_DEPENDS = 271,
00079
T_REQUIRES = 272,
00080
T_OPTIONAL = 273,
00081
T_PROMPT = 274,
00082
T_DEFAULT = 275,
00083
T_TRISTATE = 276,
00084
T_DEF_TRISTATE = 277,
00085
T_BOOLEAN = 278,
00086
T_DEF_BOOLEAN = 279,
00087
T_STRING = 280,
00088
T_INT = 281,
00089
T_HEX = 282,
00090
T_WORD = 283,
00091
T_WORD_QUOTE = 284,
00092
T_UNEQUAL = 285,
00093
T_EOF = 286,
00094
T_EOL = 287,
00095
T_CLOSE_PAREN = 288,
00096
T_OPEN_PAREN = 289,
00097
T_ON = 290,
00098
T_SELECT = 291,
00099
T_RANGE = 292,
00100
T_OR = 293,
00101
T_AND = 294,
00102
T_EQUAL = 295,
00103
T_NOT = 296
00104 };
00105
#endif
00106 #define T_MAINMENU 258
00107 #define T_MENU 259
00108 #define T_ENDMENU 260
00109 #define T_SOURCE 261
00110 #define T_CHOICE 262
00111 #define T_ENDCHOICE 263
00112 #define T_COMMENT 264
00113 #define T_CONFIG 265
00114 #define T_MENUCONFIG 266
00115 #define T_HELP 267
00116 #define T_HELPTEXT 268
00117 #define T_IF 269
00118 #define T_ENDIF 270
00119 #define T_DEPENDS 271
00120 #define T_REQUIRES 272
00121 #define T_OPTIONAL 273
00122 #define T_PROMPT 274
00123 #define T_DEFAULT 275
00124 #define T_TRISTATE 276
00125 #define T_DEF_TRISTATE 277
00126 #define T_BOOLEAN 278
00127 #define T_DEF_BOOLEAN 279
00128 #define T_STRING 280
00129 #define T_INT 281
00130 #define T_HEX 282
00131 #define T_WORD 283
00132 #define T_WORD_QUOTE 284
00133 #define T_UNEQUAL 285
00134 #define T_EOF 286
00135 #define T_EOL 287
00136 #define T_CLOSE_PAREN 288
00137 #define T_OPEN_PAREN 289
00138 #define T_ON 290
00139 #define T_SELECT 291
00140 #define T_RANGE 292
00141 #define T_OR 293
00142 #define T_AND 294
00143 #define T_EQUAL 295
00144 #define T_NOT 296
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
#include <ctype.h>
00158
#include <stdarg.h>
00159
#include <stdio.h>
00160
#include <stdlib.h>
00161
#include <string.h>
00162
#include <stdbool.h>
00163
00164 #define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
00165
00166 #define PRINTD 0x0001
00167 #define DEBUG_PARSE 0x0002
00168
00169 int cdebug =
PRINTD;
00170
00171
extern int zconflex(
void);
00172
static void zconfprint(
const char *err, ...);
00173
static void zconferror(
const char *err);
00174
static bool zconf_endtoken(
int token,
int starttoken,
int endtoken);
00175
00176 struct symbol *
symbol_hash[257];
00177
00178
#define YYERROR_VERBOSE
00179
00180
00181
00182
#ifndef YYDEBUG
00183 # define YYDEBUG 0
00184
#endif
00185
00186
00187
#ifdef YYERROR_VERBOSE
00188
# undef YYERROR_VERBOSE
00189 # define YYERROR_VERBOSE 1
00190
#else
00191
# define YYERROR_VERBOSE 0
00192
#endif
00193
00194
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
00195
00196 typedef union YYSTYPE {
00197 int token;
00198 char *
string;
00199 struct symbol *
symbol;
00200 struct expr *
expr;
00201 struct menu *
menu;
00202 }
YYSTYPE;
00203
00204
00205 # define yystype YYSTYPE
00206 # define YYSTYPE_IS_DECLARED 1
00207 # define YYSTYPE_IS_TRIVIAL 1
00208
#endif
00209
00210
00211
00212
00213
00214
00215 #define LKC_DIRECT_LINK
00216
#include "lkc.h"
00217
00218
00219
00220
00221
00222
#if ! defined (yyoverflow) || YYERROR_VERBOSE
00223
00224
00225
00226
# if YYSTACK_USE_ALLOCA
00227
# define YYSTACK_ALLOC alloca
00228
# else
00229
# ifndef YYSTACK_USE_ALLOCA
00230
# if defined (alloca) || defined (_ALLOCA_H)
00231
# define YYSTACK_ALLOC alloca
00232
# else
00233
# ifdef __GNUC__
00234
# define YYSTACK_ALLOC __builtin_alloca
00235
# endif
00236
# endif
00237
# endif
00238
# endif
00239
00240
# ifdef YYSTACK_ALLOC
00241
00242
# define YYSTACK_FREE(Ptr) do { ; } while (0)
00243
# else
00244
# if defined (__STDC__) || defined (__cplusplus)
00245
# include <stdlib.h>
00246
# define YYSIZE_T size_t
00247
# endif
00248 # define YYSTACK_ALLOC malloc
00249 # define YYSTACK_FREE free
00250
# endif
00251
#endif
00252
00253
00254
#if (! defined (yyoverflow) \
00255
&& (! defined (__cplusplus) \
00256
|| (YYSTYPE_IS_TRIVIAL)))
00257
00258
00259 union yyalloc
00260 {
00261 short yyss;
00262 YYSTYPE yyvs;
00263 };
00264
00265
00266 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00267
00268
00269
00270 # define YYSTACK_BYTES(N) \
00271
((N) * (sizeof (short) + sizeof (YYSTYPE)) \
00272
+ YYSTACK_GAP_MAXIMUM)
00273
00274
00275
00276
# ifndef YYCOPY
00277
# if 1 < __GNUC__
00278
# define YYCOPY(To, From, Count) \
00279
__builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00280
# else
00281 # define YYCOPY(To, From, Count) \
00282
do \
00283
{ \
00284
register YYSIZE_T yyi; \
00285
for (yyi = 0; yyi < (Count); yyi++) \
00286
(To)[yyi] = (From)[yyi]; \
00287
} \
00288
while (0)
00289
# endif
00290
# endif
00291
00292
00293
00294
00295
00296
00297 # define YYSTACK_RELOCATE(Stack) \
00298
do \
00299
{ \
00300
YYSIZE_T yynewbytes; \
00301
YYCOPY (&yyptr->Stack, Stack, yysize); \
00302
Stack = &yyptr->Stack; \
00303
yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00304
yyptr += yynewbytes / sizeof (*yyptr); \
00305
} \
00306
while (0)
00307
00308
#endif
00309
00310
#if defined (__STDC__) || defined (__cplusplus)
00311
typedef signed char yysigned_char;
00312
#else
00313 typedef short yysigned_char;
00314
#endif
00315
00316
00317 #define YYFINAL 2
00318
00319 #define YYLAST 201
00320
00321
00322 #define YYNTOKENS 42
00323
00324 #define YYNNTS 41
00325
00326 #define YYNRULES 104
00327
00328 #define YYNSTATES 182
00329
00330
00331 #define YYUNDEFTOK 2
00332 #define YYMAXUTOK 296
00333
00334 #define YYTRANSLATE(YYX) \
00335
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00336
00337
00338 static const unsigned char yytranslate[] =
00339 {
00340 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00341 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00342 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00343 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00344 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00345 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00346 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00347 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00348 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00349 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00350 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00351 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00352 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00353 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00354 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00355 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00356 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00357 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00358 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00359 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00360 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00361 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00362 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00363 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00364 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00365 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
00366 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
00367 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
00368 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
00369 35, 36, 37, 38, 39, 40, 41
00370 };
00371
00372
#if YYDEBUG
00373
00374
00375
static const unsigned short yyprhs[] =
00376 {
00377 0, 0, 3, 4, 7, 9, 11, 13, 17, 19,
00378 21, 23, 26, 28, 30, 32, 34, 36, 38, 42,
00379 45, 49, 52, 53, 56, 59, 62, 65, 69, 74,
00380 78, 83, 87, 91, 95, 100, 105, 110, 116, 119,
00381 122, 124, 128, 131, 132, 135, 138, 141, 144, 149,
00382 153, 157, 160, 165, 166, 169, 173, 175, 179, 182,
00383 183, 186, 189, 192, 196, 199, 201, 205, 208, 209,
00384 212, 215, 218, 222, 226, 228, 232, 235, 238, 241,
00385 242, 245, 248, 253, 257, 261, 262, 265, 267, 269,
00386 272, 275, 278, 280, 282, 283, 286, 288, 292, 296,
00387 300, 303, 307, 311, 313
00388 };
00389
00390
00391
static const yysigned_char yyrhs[] =
00392 {
00393 43, 0, -1, -1, 43, 44, -1, 45, -1, 55,
00394 -1, 66, -1, 3, 77, 79, -1, 5, -1, 15,
00395 -1, 8, -1, 1, 79, -1, 61, -1, 71, -1,
00396 47, -1, 49, -1, 69, -1, 79, -1, 10, 28,
00397 32, -1, 46, 50, -1, 11, 28, 32, -1, 48,
00398 50, -1, -1, 50, 51, -1, 50, 75, -1, 50,
00399 73, -1, 50, 32, -1, 21, 76, 32, -1, 22,
00400 81, 80, 32, -1, 23, 76, 32, -1, 24, 81,
00401 80, 32, -1, 26, 76, 32, -1, 27, 76, 32,
00402 -1, 25, 76, 32, -1, 19, 77, 80, 32, -1,
00403 20, 81, 80, 32, -1, 36, 28, 80, 32, -1,
00404 37, 82, 82, 80, 32, -1, 7, 32, -1, 52,
00405 56, -1, 78, -1, 53, 58, 54, -1, 53, 58,
00406 -1, -1, 56, 57, -1, 56, 75, -1, 56, 73,
00407 -1, 56, 32, -1, 19, 77, 80, 32, -1, 21,
00408 76, 32, -1, 23, 76, 32, -1, 18, 32, -1,
00409 20, 28, 80, 32, -1, -1, 58, 45, -1, 14,
00410 81, 32, -1, 78, -1, 59, 62, 60, -1, 59,
00411 62, -1, -1, 62, 45, -1, 62, 66, -1, 62,
00412 55, -1, 4, 77, 32, -1, 63, 74, -1, 78,
00413 -1, 64, 67, 65, -1, 64, 67, -1, -1, 67,
00414 45, -1, 67, 66, -1, 67, 55, -1, 67, 1,
00415 32, -1, 6, 77, 32, -1, 68, -1, 9, 77,
00416 32, -1, 70, 74, -1, 12, 32, -1, 72, 13,
00417 -1, -1, 74, 75, -1, 74, 32, -1, 16, 35,
00418 81, 32, -1, 16, 81, 32, -1, 17, 81, 32,
00419 -1, -1, 77, 80, -1, 28, -1, 29, -1, 5,
00420 79, -1, 8, 79, -1, 15, 79, -1, 32, -1,
00421 31, -1, -1, 14, 81, -1, 82, -1, 82, 40,
00422 82, -1, 82, 30, 82, -1, 34, 81, 33, -1,
00423 41, 81, -1, 81, 38, 81, -1, 81, 39, 81,
00424 -1, 28, -1, 29, -1
00425 };
00426
00427
00428
static const unsigned short yyrline[] =
00429 {
00430 0, 94, 94, 95, 98, 99, 100, 101, 102, 103,
00431 104, 105, 109, 110, 111, 112, 113, 114, 120, 128,
00432 134, 142, 152, 154, 155, 156, 157, 160, 166, 173,
00433 179, 186, 192, 198, 204, 210, 216, 222, 230, 239,
00434 245, 254, 255, 261, 263, 264, 265, 266, 269, 275,
00435 281, 287, 293, 299, 301, 306, 315, 324, 325, 331,
00436 333, 334, 335, 340, 347, 353, 362, 363, 369, 371,
00437 372, 373, 374, 377, 383, 390, 397, 404, 410, 417,
00438 418, 419, 422, 427, 432, 440, 442, 447, 448, 451,
00439 452, 453, 457, 457, 459, 460, 463, 464, 465, 466,
00440 467, 468, 469, 472, 473
00441 };
00442
#endif
00443
00444
#if YYDEBUG || YYERROR_VERBOSE
00445
00446
00447 static const char *
const yytname[] =
00448 {
00449
"$end",
"error",
"$undefined",
"T_MAINMENU",
"T_MENU",
"T_ENDMENU",
00450
"T_SOURCE",
"T_CHOICE",
"T_ENDCHOICE",
"T_COMMENT",
"T_CONFIG",
00451
"T_MENUCONFIG",
"T_HELP",
"T_HELPTEXT",
"T_IF",
"T_ENDIF",
"T_DEPENDS",
00452
"T_REQUIRES",
"T_OPTIONAL",
"T_PROMPT",
"T_DEFAULT",
"T_TRISTATE",
00453
"T_DEF_TRISTATE",
"T_BOOLEAN",
"T_DEF_BOOLEAN",
"T_STRING",
"T_INT",
00454
"T_HEX",
"T_WORD",
"T_WORD_QUOTE",
"T_UNEQUAL",
"T_EOF",
"T_EOL",
00455
"T_CLOSE_PAREN",
"T_OPEN_PAREN",
"T_ON",
"T_SELECT",
"T_RANGE",
"T_OR",
00456
"T_AND",
"T_EQUAL",
"T_NOT",
"$accept",
"input",
"block",
00457
"common_block",
"config_entry_start",
"config_stmt",
00458
"menuconfig_entry_start",
"menuconfig_stmt",
"config_option_list",
00459
"config_option",
"choice",
"choice_entry",
"choice_end",
"choice_stmt",
00460
"choice_option_list",
"choice_option",
"choice_block",
"if",
"if_end",
00461
"if_stmt",
"if_block",
"menu",
"menu_entry",
"menu_end",
"menu_stmt",
00462
"menu_block",
"source",
"source_stmt",
"comment",
"comment_stmt",
00463
"help_start",
"help",
"depends_list",
"depends",
"prompt_stmt_opt",
00464
"prompt",
"end",
"nl_or_eof",
"if_expr",
"expr",
"symbol", 0
00465 };
00466
#endif
00467
00468
# ifdef YYPRINT
00469
00470
00471
static const unsigned short yytoknum[] =
00472 {
00473 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
00474 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
00475 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
00476 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
00477 295, 296
00478 };
00479
# endif
00480
00481
00482 static const unsigned char yyr1[] =
00483 {
00484 0, 42, 43, 43, 44, 44, 44, 44, 44, 44,
00485 44, 44, 45, 45, 45, 45, 45, 45, 46, 47,
00486 48, 49, 50, 50, 50, 50, 50, 51, 51, 51,
00487 51, 51, 51, 51, 51, 51, 51, 51, 52, 53,
00488 54, 55, 55, 56, 56, 56, 56, 56, 57, 57,
00489 57, 57, 57, 58, 58, 59, 60, 61, 61, 62,
00490 62, 62, 62, 63, 64, 65, 66, 66, 67, 67,
00491 67, 67, 67, 68, 69, 70, 71, 72, 73, 74,
00492 74, 74, 75, 75, 75, 76, 76, 77, 77, 78,
00493 78, 78, 79, 79, 80, 80, 81, 81, 81, 81,
00494 81, 81, 81, 82, 82
00495 };
00496
00497
00498 static const unsigned char yyr2[] =
00499 {
00500 0, 2, 0, 2, 1, 1, 1, 3, 1, 1,
00501 1, 2, 1, 1, 1, 1, 1, 1, 3, 2,
00502 3, 2, 0, 2, 2, 2, 2, 3, 4, 3,
00503 4, 3, 3, 3, 4, 4, 4, 5, 2, 2,
00504 1, 3, 2, 0, 2, 2, 2, 2, 4, 3,
00505 3, 2, 4, 0, 2, 3, 1, 3, 2, 0,
00506 2, 2, 2, 3, 2, 1, 3, 2, 0, 2,
00507 2, 2, 3, 3, 1, 3, 2, 2, 2, 0,
00508 2, 2, 4, 3, 3, 0, 2, 1, 1, 2,
00509 2, 2, 1, 1, 0, 2, 1, 3, 3, 3,
00510 2, 3, 3, 1, 1
00511 };
00512
00513
00514
00515
00516 static const unsigned char yydefact[] =
00517 {
00518 2, 0, 1, 0, 0, 0, 8, 0, 0, 10,
00519 0, 0, 0, 0, 9, 93, 92, 3, 4, 22,
00520 14, 22, 15, 43, 53, 5, 59, 12, 79, 68,
00521 6, 74, 16, 79, 13, 17, 11, 87, 88, 0,
00522 0, 0, 38, 0, 0, 0, 103, 104, 0, 0,
00523 0, 96, 19, 21, 39, 42, 58, 64, 0, 76,
00524 7, 63, 73, 75, 18, 20, 0, 100, 55, 0,
00525 0, 0, 0, 0, 0, 0, 0, 0, 85, 0,
00526 85, 0, 85, 85, 85, 26, 0, 0, 23, 0,
00527 25, 24, 0, 0, 0, 85, 85, 47, 44, 46,
00528 45, 0, 0, 0, 54, 41, 40, 60, 62, 57,
00529 61, 56, 81, 80, 0, 69, 71, 66, 70, 65,
00530 99, 101, 102, 98, 97, 77, 0, 0, 0, 94,
00531 94, 0, 94, 94, 0, 94, 0, 0, 0, 94,
00532 0, 78, 51, 94, 94, 0, 0, 89, 90, 91,
00533 72, 0, 83, 84, 0, 0, 0, 27, 86, 0,
00534 29, 0, 33, 31, 32, 0, 94, 0, 0, 49,
00535 50, 82, 95, 34, 35, 28, 30, 36, 0, 48,
00536 52, 37
00537 };
00538
00539
00540 static const short yydefgoto[] =
00541 {
00542 -1, 1, 17, 18, 19, 20, 21, 22, 52, 88,
00543 23, 24, 105, 25, 54, 98, 55, 26, 109, 27,
00544 56, 28, 29, 117, 30, 58, 31, 32, 33, 34,
00545 89, 90, 57, 91, 131, 132, 106, 35, 155, 50,
00546 51
00547 };
00548
00549
00550
00551 #define YYPACT_NINF -99
00552 static const short yypact[] =
00553 {
00554 -99, 48, -99, 38, 46, 46, -99, 46, -29, -99,
00555 46, -17, -3, -11, -99, -99, -99, -99, -99, -99,
00556 -99, -99, -99, -99, -99, -99, -99, -99, -99, -99,
00557 -99, -99, -99, -99, -99, -99, -99, -99, -99, 38,
00558 12, 15, -99, 18, 51, 62, -99, -99, -11, -11,
00559 4, -24, 138, 138, 160, 121, 110, -4, 81, -4,
00560 -99, -99, -99, -99, -99, -99, -19, -99, -99, -11,
00561 -11, 70, 70, 73, 32, -11, 46, -11, 46, -11,
00562 46, -11, 46, 46, 46, -99, 36, 70, -99, 95,
00563 -99, -99, 96, 46, 106, 46, 46, -99, -99, -99,
00564 -99, 38, 38, 38, -99, -99, -99, -99, -99, -99,
00565 -99, -99, -99, -99, 112, -99, -99, -99, -99, -99,
00566 -99, 117, -99, -99, -99, -99, -11, 33, 65, 131,
00567 1, 119, 131, 1, 136, 1, 153, 154, 155, 131,
00568 70, -99, -99, 131, 131, 156, 157, -99, -99, -99,
00569 -99, 101, -99, -99, -11, 158, 159, -99, -99, 161,
00570 -99, 162, -99, -99, -99, 163, 131, 164, 165, -99,
00571 -99, -99, 99, -99, -99, -99, -99, -99, 166, -99,
00572 -99, -99
00573 };
00574
00575
00576 static const short yypgoto[] =
00577 {
00578 -99, -99, -99, 111, -99, -99, -99, -99, 178, -99,
00579 -99, -99, -99, 91, -99, -99, -99, -99, -99, -99,
00580 -99, -99, -99, -99, 115, -99, -99, -99, -99, -99,
00581 -99, 146, 168, 89, 27, 0, 126, -1, -98, -48,
00582 -63
00583 };
00584
00585
00586
00587
00588
00589 #define YYTABLE_NINF -68
00590 static const short yytable[] =
00591 {
00592 66, 67, 36, 42, 39, 40, 71, 41, 123, 124,
00593 43, 44, 74, 75, 120, 154, 72, 46, 47, 69,
00594 70, 121, 122, 48, 140, 45, 127, 128, 112, 130,
00595 49, 133, 156, 135, 158, 159, 68, 161, 60, 69,
00596 70, 165, 69, 70, 61, 167, 168, 62, 2, 3,
00597 63, 4, 5, 6, 7, 8, 9, 10, 11, 12,
00598 46, 47, 13, 14, 139, 152, 48, 126, 178, 15,
00599 16, 69, 70, 49, 37, 38, 129, 166, 151, 15,
00600 16, -67, 114, 64, -67, 5, 101, 7, 8, 102,
00601 10, 11, 12, 143, 65, 13, 103, 153, 46, 47,
00602 147, 148, 149, 69, 70, 125, 172, 134, 141, 136,
00603 137, 138, 15, 16, 5, 101, 7, 8, 102, 10,
00604 11, 12, 145, 146, 13, 103, 101, 7, 142, 102,
00605 10, 11, 12, 171, 144, 13, 103, 69, 70, 69,
00606 70, 15, 16, 100, 150, 154, 113, 108, 113, 116,
00607 73, 157, 15, 16, 74, 75, 70, 76, 77, 78,
00608 79, 80, 81, 82, 83, 84, 104, 107, 160, 115,
00609 85, 110, 73, 118, 86, 87, 74, 75, 92, 93,
00610 94, 95, 111, 96, 119, 162, 163, 164, 169, 170,
00611 173, 174, 97, 175, 176, 177, 179, 180, 181, 53,
00612 99, 59
00613 };
00614
00615 static const unsigned char yycheck[] =
00616 {
00617 48, 49, 3, 32, 4, 5, 30, 7, 71, 72,
00618 10, 28, 16, 17, 33, 14, 40, 28, 29, 38,
00619 39, 69, 70, 34, 87, 28, 74, 75, 32, 77,
00620 41, 79, 130, 81, 132, 133, 32, 135, 39, 38,
00621 39, 139, 38, 39, 32, 143, 144, 32, 0, 1,
00622 32, 3, 4, 5, 6, 7, 8, 9, 10, 11,
00623 28, 29, 14, 15, 28, 32, 34, 35, 166, 31,
00624 32, 38, 39, 41, 28, 29, 76, 140, 126, 31,
00625 32, 0, 1, 32, 3, 4, 5, 6, 7, 8,
00626 9, 10, 11, 93, 32, 14, 15, 32, 28, 29,
00627 101, 102, 103, 38, 39, 32, 154, 80, 13, 82,
00628 83, 84, 31, 32, 4, 5, 6, 7, 8, 9,
00629 10, 11, 95, 96, 14, 15, 5, 6, 32, 8,
00630 9, 10, 11, 32, 28, 14, 15, 38, 39, 38,
00631 39, 31, 32, 54, 32, 14, 57, 56, 59, 58,
00632 12, 32, 31, 32, 16, 17, 39, 19, 20, 21,
00633 22, 23, 24, 25, 26, 27, 55, 56, 32, 58,
00634 32, 56, 12, 58, 36, 37, 16, 17, 18, 19,
00635 20, 21, 56, 23, 58, 32, 32, 32, 32, 32,
00636 32, 32, 32, 32, 32, 32, 32, 32, 32, 21,
00637 54, 33
00638 };
00639
00640
00641
00642 static const unsigned char yystos[] =
00643 {
00644 0, 43, 0, 1, 3, 4, 5, 6, 7, 8,
00645 9, 10, 11, 14, 15, 31, 32, 44, 45, 46,
00646 47, 48, 49, 52, 53, 55, 59, 61, 63, 64,
00647 66, 68, 69, 70, 71, 79, 79, 28, 29, 77,
00648 77, 77, 32, 77, 28, 28, 28, 29, 34, 41,
00649 81, 82, 50, 50, 56, 58, 62, 74, 67, 74,
00650 79, 32, 32, 32, 32, 32, 81, 81, 32, 38,
00651 39, 30, 40, 12, 16, 17, 19, 20, 21, 22,
00652 23, 24, 25, 26, 27, 32, 36, 37, 51, 72,
00653 73, 75, 18, 19, 20, 21, 23, 32, 57, 73,
00654 75, 5, 8, 15, 45, 54, 78, 45, 55, 60,
00655 66, 78, 32, 75, 1, 45, 55, 65, 66, 78,
00656 33, 81, 81, 82, 82, 32, 35, 81, 81, 77,
00657 81, 76, 77, 81, 76, 81, 76, 76, 76, 28,
00658 82, 13, 32, 77, 28, 76, 76, 79, 79, 79,
00659 32, 81, 32, 32, 14, 80, 80, 32, 80, 80,
00660 32, 80, 32, 32, 32, 80, 82, 80, 80, 32,
00661 32, 32, 81, 32, 32, 32, 32, 32, 80, 32,
00662 32, 32
00663 };
00664
00665
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
00666
# define YYSIZE_T __SIZE_TYPE__
00667
#endif
00668
#if ! defined (YYSIZE_T) && defined (size_t)
00669
# define YYSIZE_T size_t
00670
#endif
00671
#if ! defined (YYSIZE_T)
00672
# if defined (__STDC__) || defined (__cplusplus)
00673
# include <stddef.h>
00674
# define YYSIZE_T size_t
00675
# endif
00676
#endif
00677
#if ! defined (YYSIZE_T)
00678 # define YYSIZE_T unsigned int
00679
#endif
00680
00681 #define yyerrok (yyerrstatus = 0)
00682 #define yyclearin (yychar = YYEMPTY)
00683 #define YYEMPTY (-2)
00684 #define YYEOF 0
00685
00686 #define YYACCEPT goto yyacceptlab
00687 #define YYABORT goto yyabortlab
00688 #define YYERROR goto yyerrlab1
00689
00690
00691
00692
00693
00694
00695 #define YYFAIL goto yyerrlab
00696
00697 #define YYRECOVERING() (!!yyerrstatus)
00698
00699 #define YYBACKUP(Token, Value) \
00700
do \
00701
if (yychar == YYEMPTY && yylen == 1) \
00702
{ \
00703
yychar = (Token); \
00704
yylval = (Value); \
00705
yytoken = YYTRANSLATE (yychar); \
00706
YYPOPSTACK; \
00707
goto yybackup; \
00708
} \
00709
else \
00710
{ \
00711
yyerror ("syntax error: cannot back up");\
00712
YYERROR; \
00713
} \
00714
while (0)
00715
00716 #define YYTERROR 1
00717 #define YYERRCODE 256
00718
00719
00720
00721
00722
#ifndef YYLLOC_DEFAULT
00723 # define YYLLOC_DEFAULT(Current, Rhs, N) \
00724
Current.first_line = Rhs[1].first_line; \
00725
Current.first_column = Rhs[1].first_column; \
00726
Current.last_line = Rhs[N].last_line; \
00727
Current.last_column = Rhs[N].last_column;
00728
#endif
00729
00730
00731
00732
#ifdef YYLEX_PARAM
00733
# define YYLEX yylex (YYLEX_PARAM)
00734
#else
00735 # define YYLEX yylex ()
00736
#endif
00737
00738
00739
#if YYDEBUG
00740
00741
# ifndef YYFPRINTF
00742
# include <stdio.h>
00743
# define YYFPRINTF fprintf
00744
# endif
00745
00746
# define YYDPRINTF(Args) \
00747
do { \
00748
if (yydebug) \
00749
YYFPRINTF Args; \
00750
} while (0)
00751
00752
# define YYDSYMPRINT(Args) \
00753
do { \
00754
if (yydebug) \
00755
yysymprint Args; \
00756
} while (0)
00757
00758
# define YYDSYMPRINTF(Title, Token, Value, Location) \
00759
do { \
00760
if (yydebug) \
00761
{ \
00762
YYFPRINTF (stderr, "%s ", Title); \
00763
yysymprint (stderr, \
00764
Token, Value); \
00765
YYFPRINTF (stderr, "\n"); \
00766
} \
00767
} while (0)
00768
00769
00770
00771
00772
00773
00774
#if defined (__STDC__) || defined (__cplusplus)
00775
static void
00776 yy_stack_print (
short *bottom,
short *top)
00777 #
else
00778
static void
00779 yy_stack_print (bottom, top)
00780 short *bottom;
00781
short *top;
00782 #endif
00783 {
00784 YYFPRINTF (stderr,
"Stack now");
00785
for (; bottom <= top; ++bottom)
00786 YYFPRINTF (stderr,
" %d", *bottom);
00787 YYFPRINTF (stderr,
"\n");
00788 }
00789
00790
# define YY_STACK_PRINT(Bottom, Top) \
00791
do { \
00792
if (yydebug) \
00793
yy_stack_print ((Bottom), (Top)); \
00794
} while (0)
00795
00796
00797
00798
00799
00800
00801
#if defined (__STDC__) || defined (__cplusplus)
00802
static void
00803 yy_reduce_print (
int yyrule)
00804 #
else
00805
static void
00806 yy_reduce_print (yyrule)
00807 int yyrule;
00808 #endif
00809 {
00810
int yyi;
00811
unsigned int yylineno = yyrline[yyrule];
00812 YYFPRINTF (stderr,
"Reducing stack by rule %d (line %u), ",
00813 yyrule - 1, yylineno);
00814
00815
for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
00816 YYFPRINTF (stderr,
"%s ", yytname [yyrhs[yyi]]);
00817 YYFPRINTF (stderr,
"-> %s\n", yytname [yyr1[yyrule]]);
00818 }
00819
00820
# define YY_REDUCE_PRINT(Rule) \
00821
do { \
00822
if (yydebug) \
00823
yy_reduce_print (Rule); \
00824
} while (0)
00825
00826
00827
00828
int yydebug;
00829
#else
00830 # define YYDPRINTF(Args)
00831 # define YYDSYMPRINT(Args)
00832 # define YYDSYMPRINTF(Title, Token, Value, Location)
00833 # define YY_STACK_PRINT(Bottom, Top)
00834 # define YY_REDUCE_PRINT(Rule)
00835
#endif
00836
00837
00838
00839
#ifndef YYINITDEPTH
00840 # define YYINITDEPTH 200
00841
#endif
00842
00843
00844
00845
00846
00847
00848
00849
00850
#if YYMAXDEPTH == 0
00851
# undef YYMAXDEPTH
00852
#endif
00853
00854
#ifndef YYMAXDEPTH
00855 # define YYMAXDEPTH 10000
00856
#endif
00857
00858
00859
00860
#if YYERROR_VERBOSE
00861
00862
# ifndef yystrlen
00863
# if defined (__GLIBC__) && defined (_STRING_H)
00864
# define yystrlen strlen
00865
# else
00866
00867
static YYSIZE_T
00868
# if defined (__STDC__) || defined (__cplusplus)
00869
yystrlen (
const char *yystr)
00870 #
else
00871 yystrlen (yystr)
00872 const
char *yystr;
00873 # endif
00874 {
00875
register const char *yys = yystr;
00876
00877
while (*yys++ !=
'\0')
00878
continue;
00879
00880
return yys - yystr - 1;
00881 }
00882
# endif
00883
# endif
00884
00885
# ifndef yystpcpy
00886
# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
00887
# define yystpcpy stpcpy
00888
# else
00889
00890
00891
static char *
00892
# if defined (__STDC__) || defined (__cplusplus)
00893
yystpcpy (
char *yydest,
const char *yysrc)
00894 #
else
00895 yystpcpy (yydest, yysrc)
00896 char *yydest;
00897 const
char *yysrc;
00898 # endif
00899 {
00900
register char *yyd = yydest;
00901
register const char *yys = yysrc;
00902
00903
while ((*yyd++ = *yys++) !=
'\0')
00904
continue;
00905
00906
return yyd - 1;
00907 }
00908
# endif
00909
# endif
00910
00911
#endif
00912
00913
00914
00915
#if YYDEBUG
00916
00917
00918
00919
00920
#if defined (__STDC__) || defined (__cplusplus)
00921
static void
00922 yysymprint (FILE *yyoutput,
int yytype,
YYSTYPE *yyvaluep)
00923 #
else
00924
static void
00925 yysymprint (yyoutput, yytype, yyvaluep)
00926 FILE *yyoutput;
00927
int yytype;
00928
YYSTYPE *yyvaluep;
00929 #endif
00930 {
00931
00932 (
void) yyvaluep;
00933
00934
if (yytype <
YYNTOKENS)
00935 {
00936 YYFPRINTF (yyoutput,
"token %s (", yytname[yytype]);
00937
# ifdef YYPRINT
00938
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
00939
# endif
00940
}
00941
else
00942 YYFPRINTF (yyoutput,
"nterm %s (", yytname[yytype]);
00943
00944
switch (yytype)
00945 {
00946
default:
00947
break;
00948 }
00949 YYFPRINTF (yyoutput,
")");
00950 }
00951
00952
#endif
00953
00954
00955
00956
00957
#if defined (__STDC__) || defined (__cplusplus)
00958
static void
00959
yydestruct (
int yytype,
YYSTYPE *yyvaluep)
00960 #
else
00961
static void
00962 yydestruct (yytype, yyvaluep)
00963 int yytype;
00964
YYSTYPE *yyvaluep;
00965 #endif
00966 {
00967
00968 (
void) yyvaluep;
00969
00970
switch (yytype)
00971 {
00972
00973
default:
00974
break;
00975 }
00976 }
00977
00978
00979
00980
00981
#ifdef YYPARSE_PARAM
00982
# if defined (__STDC__) || defined (__cplusplus)
00983
int yyparse (
void *YYPARSE_PARAM);
00984
# else
00985
int yyparse ();
00986
# endif
00987
#else
00988
#if defined (__STDC__) || defined (__cplusplus)
00989
int yyparse (
void);
00990
#else
00991
int yyparse ();
00992
#endif
00993
#endif
00994
00995
00996
00997
00998 int yychar;
00999
01000
01001 YYSTYPE yylval;
01002
01003
01004 int yynerrs;
01005
01006
01007
01008
01009
01010
01011
01012
#ifdef YYPARSE_PARAM
01013
# if defined (__STDC__) || defined (__cplusplus)
01014
int yyparse (
void *YYPARSE_PARAM)
01015 #
else
01016
int yyparse (YYPARSE_PARAM)
01017 void *YYPARSE_PARAM;
01018 # endif
01019 #else
01020 #if defined (__STDC__) || defined (__cplusplus)
01021
int
01022 yyparse (
void)
01023 #else
01024
int
01025 yyparse ()
01026
01027 #endif
01028 #endif
01029 {
01030
01031
register int yystate;
01032
register int yyn;
01033
int yyresult;
01034
01035
int yyerrstatus;
01036
01037
int yytoken = 0;
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
short yyssa[
YYINITDEPTH];
01049
short *yyss = yyssa;
01050
register short *yyssp;
01051
01052
01053
YYSTYPE yyvsa[
YYINITDEPTH];
01054
YYSTYPE *yyvs = yyvsa;
01055
register YYSTYPE *yyvsp;
01056
01057
01058
01059
#define YYPOPSTACK (yyvsp--, yyssp--)
01060
01061
YYSIZE_T yystacksize =
YYINITDEPTH;
01062
01063
01064
01065
YYSTYPE yyval;
01066
01067
01068
01069
01070
int yylen;
01071
01072
YYDPRINTF ((stderr,
"Starting parse\n"));
01073
01074 yystate = 0;
01075 yyerrstatus = 0;
01076
yynerrs = 0;
01077
yychar =
YYEMPTY;
01078
01079
01080
01081
01082
01083
01084 yyssp = yyss;
01085 yyvsp = yyvs;
01086
01087
goto yysetstate;
01088
01089
01090
01091
01092 yynewstate:
01093
01094
01095
01096 yyssp++;
01097
01098 yysetstate:
01099 *yyssp = yystate;
01100
01101
if (yyss + yystacksize - 1 <= yyssp)
01102 {
01103
01104
YYSIZE_T yysize = yyssp - yyss + 1;
01105
01106
#ifdef yyoverflow
01107
{
01108
01109
01110
01111
YYSTYPE *yyvs1 = yyvs;
01112
short *yyss1 = yyss;
01113
01114
01115
01116
01117
01118
01119 yyoverflow (
"parser stack overflow",
01120 &yyss1, yysize *
sizeof (*yyssp),
01121 &yyvs1, yysize *
sizeof (*yyvsp),
01122
01123 &yystacksize);
01124
01125 yyss = yyss1;
01126 yyvs = yyvs1;
01127 }
01128
#else
01129
# ifndef YYSTACK_RELOCATE
01130
goto yyoverflowlab;
01131
# else
01132
01133
if (
YYMAXDEPTH <= yystacksize)
01134
goto yyoverflowlab;
01135 yystacksize *= 2;
01136
if (
YYMAXDEPTH < yystacksize)
01137 yystacksize =
YYMAXDEPTH;
01138
01139 {
01140
short *yyss1 = yyss;
01141
union yyalloc *yyptr =
01142 (
union yyalloc *)
YYSTACK_ALLOC (
YYSTACK_BYTES (yystacksize));
01143
if (! yyptr)
01144
goto yyoverflowlab;
01145
YYSTACK_RELOCATE (yyss);
01146
YYSTACK_RELOCATE (yyvs);
01147
01148
# undef YYSTACK_RELOCATE
01149
if (yyss1 != yyssa)
01150
YYSTACK_FREE (yyss1);
01151 }
01152
# endif
01153
#endif
01154
01155 yyssp = yyss + yysize - 1;
01156 yyvsp = yyvs + yysize - 1;
01157
01158
01159
YYDPRINTF ((stderr,
"Stack size increased to %lu\n",
01160 (
unsigned long int) yystacksize));
01161
01162
if (yyss + yystacksize - 1 <= yyssp)
01163
YYABORT;
01164 }
01165
01166
YYDPRINTF ((stderr,
"Entering state %d\n", yystate));
01167
01168
goto yybackup;
01169
01170
01171
01172
01173 yybackup:
01174
01175
01176
01177
01178
01179
01180
01181 yyn =
yypact[yystate];
01182
if (yyn ==
YYPACT_NINF)
01183
goto yydefault;
01184
01185
01186
01187
01188
if (
yychar ==
YYEMPTY)
01189 {
01190
YYDPRINTF ((stderr,
"Reading a token: "));
01191
yychar =
YYLEX;
01192 }
01193
01194
if (
yychar <=
YYEOF)
01195 {
01196
yychar = yytoken =
YYEOF;
01197
YYDPRINTF ((stderr,
"Now at end of input.\n"));
01198 }
01199
else
01200 {
01201 yytoken =
YYTRANSLATE (
yychar);
01202
YYDSYMPRINTF (
"Next token is", yytoken, &
yylval, &yylloc);
01203 }
01204
01205
01206
01207 yyn += yytoken;
01208
if (yyn < 0 ||
YYLAST < yyn ||
yycheck[yyn] != yytoken)
01209
goto yydefault;
01210 yyn =
yytable[yyn];
01211
if (yyn <= 0)
01212 {
01213
if (yyn == 0 || yyn ==
YYTABLE_NINF)
01214
goto yyerrlab;
01215 yyn = -yyn;
01216
goto yyreduce;
01217 }
01218
01219
if (yyn ==
YYFINAL)
01220
YYACCEPT;
01221
01222
01223
YYDPRINTF ((stderr,
"Shifting token %s, ",
yytname[yytoken]));
01224
01225
01226
if (
yychar !=
YYEOF)
01227
yychar =
YYEMPTY;
01228
01229 *++yyvsp =
yylval;
01230
01231
01232
01233
01234
if (yyerrstatus)
01235 yyerrstatus--;
01236
01237 yystate = yyn;
01238
goto yynewstate;
01239
01240
01241
01242
01243
01244 yydefault:
01245 yyn =
yydefact[yystate];
01246
if (yyn == 0)
01247
goto yyerrlab;
01248
goto yyreduce;
01249
01250
01251
01252
01253
01254 yyreduce:
01255
01256 yylen =
yyr2[yyn];
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266 yyval = yyvsp[1-yylen];
01267
01268
01269
YY_REDUCE_PRINT (yyn);
01270
switch (yyn)
01271 {
01272
case 8:
01273
01274 {
zconfprint(
"unexpected 'endmenu' statement"); ;}
01275
break;
01276
01277
case 9:
01278
01279 {
zconfprint(
"unexpected 'endif' statement"); ;}
01280
break;
01281
01282
case 10:
01283
01284 {
zconfprint(
"unexpected 'endchoice' statement"); ;}
01285
break;
01286
01287
case 11:
01288
01289 {
zconfprint(
"syntax error");
yyerrok; ;}
01290
break;
01291
01292
case 18:
01293
01294 {
01295
struct symbol *sym =
sym_lookup(yyvsp[-1].string, 0);
01296 sym->flags |=
SYMBOL_OPTIONAL;
01297
menu_add_entry(sym);
01298
printd(
DEBUG_PARSE,
"%s:%d:config %s\n",
zconf_curname(),
zconf_lineno(), yyvsp[-1].string);
01299 ;}
01300
break;
01301
01302
case 19:
01303
01304 {
01305
menu_end_entry();
01306
printd(
DEBUG_PARSE,
"%s:%d:endconfig\n",
zconf_curname(),
zconf_lineno());
01307 ;}
01308
break;
01309
01310
case 20:
01311
01312 {
01313
struct symbol *sym =
sym_lookup(yyvsp[-1].string, 0);
01314 sym->flags |=
SYMBOL_OPTIONAL;
01315
menu_add_entry(sym);
01316
printd(
DEBUG_PARSE,
"%s:%d:menuconfig %s\n",
zconf_curname(),
zconf_lineno(), yyvsp[-1].string);
01317 ;}
01318
break;
01319
01320
case 21:
01321
01322 {
01323
if (
current_entry->
prompt)
01324
current_entry->
prompt->
type =
P_MENU;
01325
else
01326
zconfprint(
"warning: menuconfig statement without prompt");
01327
menu_end_entry();
01328
printd(
DEBUG_PARSE,
"%s:%d:endconfig\n",
zconf_curname(),
zconf_lineno());
01329 ;}
01330
break;
01331
01332
case 27:
01333
01334 {
01335
menu_set_type(
S_TRISTATE);
01336
printd(
DEBUG_PARSE,
"%s:%d:tristate\n",
zconf_curname(),
zconf_lineno());
01337 ;}
01338
break;
01339
01340
case 28:
01341
01342 {
01343
menu_add_expr(
P_DEFAULT, yyvsp[-2].
expr, yyvsp[-1].expr);
01344
menu_set_type(
S_TRISTATE);
01345
printd(
DEBUG_PARSE,
"%s:%d:def_boolean\n",
zconf_curname(),
zconf_lineno());
01346 ;}
01347
break;
01348
01349
case 29:
01350
01351 {
01352
menu_set_type(
S_BOOLEAN);
01353
printd(
DEBUG_PARSE,
"%s:%d:boolean\n",
zconf_curname(),
zconf_lineno());
01354 ;}
01355
break;
01356
01357
case 30:
01358
01359 {
01360
menu_add_expr(
P_DEFAULT, yyvsp[-2].
expr, yyvsp[-1].expr);
01361
menu_set_type(
S_BOOLEAN);
01362
printd(
DEBUG_PARSE,
"%s:%d:def_boolean\n",
zconf_curname(),
zconf_lineno());
01363 ;}
01364
break;
01365
01366
case 31:
01367
01368 {
01369
menu_set_type(
S_INT);
01370
printd(
DEBUG_PARSE,
"%s:%d:int\n",
zconf_curname(),
zconf_lineno());
01371 ;}
01372
break;
01373
01374
case 32:
01375
01376 {
01377
menu_set_type(
S_HEX);
01378
printd(
DEBUG_PARSE,
"%s:%d:hex\n",
zconf_curname(),
zconf_lineno());
01379 ;}
01380
break;
01381
01382
case 33:
01383
01384 {
01385
menu_set_type(
S_STRING);
01386
printd(
DEBUG_PARSE,
"%s:%d:string\n",
zconf_curname(),
zconf_lineno());
01387 ;}
01388
break;
01389
01390
case 34:
01391
01392 {
01393
menu_add_prompt(
P_PROMPT, yyvsp[-2].string, yyvsp[-1].
expr);
01394
printd(
DEBUG_PARSE,
"%s:%d:prompt\n",
zconf_curname(),
zconf_lineno());
01395 ;}
01396
break;
01397
01398
case 35:
01399
01400 {
01401
menu_add_expr(
P_DEFAULT, yyvsp[-2].
expr, yyvsp[-1].expr);
01402
printd(
DEBUG_PARSE,
"%s:%d:default\n",
zconf_curname(),
zconf_lineno());
01403 ;}
01404
break;
01405
01406
case 36:
01407
01408 {
01409
menu_add_symbol(
P_SELECT,
sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].
expr);
01410
printd(
DEBUG_PARSE,
"%s:%d:select\n",
zconf_curname(),
zconf_lineno());
01411 ;}
01412
break;
01413
01414
case 37:
01415
01416 {
01417
menu_add_expr(
P_RANGE,
expr_alloc_comp(
E_RANGE,yyvsp[-3].
symbol, yyvsp[-2].symbol), yyvsp[-1].
expr);
01418
printd(
DEBUG_PARSE,
"%s:%d:range\n",
zconf_curname(),
zconf_lineno());
01419 ;}
01420
break;
01421
01422
case 38:
01423
01424 {
01425
struct symbol *sym =
sym_lookup(NULL, 0);
01426 sym->flags |=
SYMBOL_CHOICE;
01427
menu_add_entry(sym);
01428
menu_add_expr(
P_CHOICE, NULL, NULL);
01429
printd(
DEBUG_PARSE,
"%s:%d:choice\n",
zconf_curname(),
zconf_lineno());
01430 ;}
01431
break;
01432
01433
case 39:
01434
01435 {
01436
menu_end_entry();
01437
menu_add_menu();
01438 ;}
01439
break;
01440
01441
case 40:
01442
01443 {
01444
if (
zconf_endtoken(yyvsp[0].token,
T_CHOICE,
T_ENDCHOICE)) {
01445
menu_end_menu();
01446
printd(
DEBUG_PARSE,
"%s:%d:endchoice\n",
zconf_curname(),
zconf_lineno());
01447 }
01448 ;}
01449
break;
01450
01451
case 42:
01452
01453 {
01454 printf(
"%s:%d: missing 'endchoice' for this 'choice' statement\n",
current_menu->
file->
name,
current_menu->
lineno);
01455 zconfnerrs++;
01456 ;}
01457
break;
01458
01459
case 48:
01460
01461 {
01462
menu_add_prompt(
P_PROMPT, yyvsp[-2].string, yyvsp[-1].
expr);
01463
printd(
DEBUG_PARSE,
"%s:%d:prompt\n",
zconf_curname(),
zconf_lineno());
01464 ;}
01465
break;
01466
01467
case 49:
01468
01469 {
01470
menu_set_type(
S_TRISTATE);
01471
printd(
DEBUG_PARSE,
"%s:%d:tristate\n",
zconf_curname(),
zconf_lineno());
01472 ;}
01473
break;
01474
01475
case 50:
01476
01477 {
01478
menu_set_type(
S_BOOLEAN);
01479
printd(
DEBUG_PARSE,
"%s:%d:boolean\n",
zconf_curname(),
zconf_lineno());
01480 ;}
01481
break;
01482
01483
case 51:
01484
01485 {
01486
current_entry->
sym->
flags |=
SYMBOL_OPTIONAL;
01487
printd(
DEBUG_PARSE,
"%s:%d:optional\n",
zconf_curname(),
zconf_lineno());
01488 ;}
01489
break;
01490
01491
case 52:
01492
01493 {
01494
menu_add_symbol(
P_DEFAULT,
sym_lookup(yyvsp[-2].string, 0), yyvsp[-1].
expr);
01495
printd(
DEBUG_PARSE,
"%s:%d:default\n",
zconf_curname(),
zconf_lineno());
01496 ;}
01497
break;
01498
01499
case 55:
01500
01501 {
01502
printd(
DEBUG_PARSE,
"%s:%d:if\n",
zconf_curname(),
zconf_lineno());
01503
menu_add_entry(NULL);
01504
menu_add_dep(yyvsp[-1].
expr);
01505
menu_end_entry();
01506
menu_add_menu();
01507 ;}
01508
break;
01509
01510
case 56:
01511
01512 {
01513
if (
zconf_endtoken(yyvsp[0].token,
T_IF,
T_ENDIF)) {
01514
menu_end_menu();
01515
printd(
DEBUG_PARSE,
"%s:%d:endif\n",
zconf_curname(),
zconf_lineno());
01516 }
01517 ;}
01518
break;
01519
01520
case 58:
01521
01522 {
01523 printf(
"%s:%d: missing 'endif' for this 'if' statement\n",
current_menu->
file->
name,
current_menu->
lineno);
01524 zconfnerrs++;
01525 ;}
01526
break;
01527
01528
case 63:
01529
01530 {
01531
menu_add_entry(NULL);
01532
menu_add_prop(
P_MENU, yyvsp[-1].string, NULL, NULL);
01533
printd(
DEBUG_PARSE,
"%s:%d:menu\n",
zconf_curname(),
zconf_lineno());
01534 ;}
01535
break;
01536
01537
case 64:
01538
01539 {
01540
menu_end_entry();
01541
menu_add_menu();
01542 ;}
01543
break;
01544
01545
case 65:
01546
01547 {
01548
if (
zconf_endtoken(yyvsp[0].token,
T_MENU,
T_ENDMENU)) {
01549
menu_end_menu();
01550
printd(
DEBUG_PARSE,
"%s:%d:endmenu\n",
zconf_curname(),
zconf_lineno());
01551 }
01552 ;}
01553
break;
01554
01555
case 67:
01556
01557 {
01558 printf(
"%s:%d: missing 'endmenu' for this 'menu' statement\n",
current_menu->
file->
name,
current_menu->
lineno);
01559 zconfnerrs++;
01560 ;}
01561
break;
01562
01563
case 72:
01564
01565 {
zconfprint(
"invalid menu option");
yyerrok; ;}
01566
break;
01567
01568
case 73:
01569
01570 {
01571 yyval.
string = yyvsp[-1].string;
01572
printd(
DEBUG_PARSE,
"%s:%d:source %s\n",
zconf_curname(),
zconf_lineno(), yyvsp[-1].string);
01573 ;}
01574
break;
01575
01576
case 74:
01577
01578 {
01579
zconf_nextfile(yyvsp[0].string);
01580 ;}
01581
break;
01582
01583
case 75:
01584
01585 {
01586
menu_add_entry(NULL);
01587
menu_add_prop(
P_COMMENT, yyvsp[-1].string, NULL, NULL);
01588
printd(
DEBUG_PARSE,
"%s:%d:comment\n",
zconf_curname(),
zconf_lineno());
01589 ;}
01590
break;
01591
01592
case 76:
01593
01594 {
01595
menu_end_entry();
01596 ;}
01597
break;
01598
01599
case 77:
01600
01601 {
01602
printd(
DEBUG_PARSE,
"%s:%d:help\n",
zconf_curname(),
zconf_lineno());
01603
zconf_starthelp();
01604 ;}
01605
break;
01606
01607
case 78:
01608
01609 {
01610
current_entry->
sym->
help = yyvsp[0].string;
01611 ;}
01612
break;
01613
01614
case 82:
01615
01616 {
01617
menu_add_dep(yyvsp[-1].
expr);
01618
printd(
DEBUG_PARSE,
"%s:%d:depends on\n",
zconf_curname(),
zconf_lineno());
01619 ;}
01620
break;
01621
01622
case 83:
01623
01624 {
01625
menu_add_dep(yyvsp[-1].
expr);
01626
printd(
DEBUG_PARSE,
"%s:%d:depends\n",
zconf_curname(),
zconf_lineno());
01627 ;}
01628
break;
01629
01630
case 84:
01631
01632 {
01633
menu_add_dep(yyvsp[-1].
expr);
01634
printd(
DEBUG_PARSE,
"%s:%d:requires\n",
zconf_curname(),
zconf_lineno());
01635 ;}
01636
break;
01637
01638
case 86:
01639
01640 {
01641
menu_add_prop(
P_PROMPT, yyvsp[-1].string, NULL, yyvsp[0].
expr);
01642 ;}
01643
break;
01644
01645
case 89:
01646
01647 { yyval.
token =
T_ENDMENU; ;}
01648
break;
01649
01650
case 90:
01651
01652 { yyval.
token =
T_ENDCHOICE; ;}
01653
break;
01654
01655
case 91:
01656
01657 { yyval.
token =
T_ENDIF; ;}
01658
break;
01659
01660
case 94:
01661
01662 { yyval.
expr = NULL; ;}
01663
break;
01664
01665
case 95:
01666
01667 { yyval.
expr = yyvsp[0].expr; ;}
01668
break;
01669
01670
case 96:
01671
01672 { yyval.
expr =
expr_alloc_symbol(yyvsp[0].
symbol); ;}
01673
break;
01674
01675
case 97:
01676
01677 { yyval.
expr =
expr_alloc_comp(
E_EQUAL, yyvsp[-2].
symbol, yyvsp[0].symbol); ;}
01678
break;
01679
01680
case 98:
01681
01682 { yyval.
expr =
expr_alloc_comp(
E_UNEQUAL, yyvsp[-2].
symbol, yyvsp[0].symbol); ;}
01683
break;
01684
01685
case 99:
01686
01687 { yyval.
expr = yyvsp[-1].expr; ;}
01688
break;
01689
01690
case 100:
01691
01692 { yyval.
expr =
expr_alloc_one(
E_NOT, yyvsp[0].
expr); ;}
01693
break;
01694
01695
case 101:
01696
01697 { yyval.
expr =
expr_alloc_two(
E_OR, yyvsp[-2].
expr, yyvsp[0].expr); ;}
01698
break;
01699
01700
case 102:
01701
01702 { yyval.
expr =
expr_alloc_two(
E_AND, yyvsp[-2].
expr, yyvsp[0].expr); ;}
01703
break;
01704
01705
case 103:
01706
01707 { yyval.
symbol =
sym_lookup(yyvsp[0].string, 0); free(yyvsp[0].string); ;}
01708
break;
01709
01710
case 104:
01711
01712 { yyval.
symbol =
sym_lookup(yyvsp[0].string, 1); free(yyvsp[0].string); ;}
01713
break;
01714
01715
01716 }
01717
01718
01719
01720
01721 yyvsp -= yylen;
01722 yyssp -= yylen;
01723
01724
01725
YY_STACK_PRINT (yyss, yyssp);
01726
01727 *++yyvsp = yyval;
01728
01729
01730
01731
01732
01733
01734 yyn =
yyr1[yyn];
01735
01736 yystate =
yypgoto[yyn -
YYNTOKENS] + *yyssp;
01737
if (0 <= yystate && yystate <=
YYLAST &&
yycheck[yystate] == *yyssp)
01738 yystate =
yytable[yystate];
01739
else
01740 yystate =
yydefgoto[yyn -
YYNTOKENS];
01741
01742
goto yynewstate;
01743
01744
01745
01746
01747
01748 yyerrlab:
01749
01750
if (!yyerrstatus)
01751 {
01752 ++
yynerrs;
01753
#if YYERROR_VERBOSE
01754
yyn =
yypact[yystate];
01755
01756
if (
YYPACT_NINF < yyn && yyn <
YYLAST)
01757 {
01758
YYSIZE_T yysize = 0;
01759
int yytype =
YYTRANSLATE (
yychar);
01760
char *yymsg;
01761
int yyx, yycount;
01762
01763 yycount = 0;
01764
01765
01766
for (yyx = yyn < 0 ? -yyn : 0;
01767 yyx < (
int) (
sizeof (
yytname) /
sizeof (
char *)); yyx++)
01768
if (
yycheck[yyx + yyn] == yyx && yyx !=
YYTERROR)
01769 yysize +=
yystrlen (
yytname[yyx]) + 15, yycount++;
01770 yysize +=
yystrlen (
"syntax error, unexpected ") + 1;
01771 yysize +=
yystrlen (
yytname[yytype]);
01772 yymsg = (
char *)
YYSTACK_ALLOC (yysize);
01773
if (yymsg != 0)
01774 {
01775
char *yyp =
yystpcpy (yymsg,
"syntax error, unexpected ");
01776 yyp =
yystpcpy (yyp,
yytname[yytype]);
01777
01778
if (yycount < 5)
01779 {
01780 yycount = 0;
01781
for (yyx = yyn < 0 ? -yyn : 0;
01782 yyx < (
int) (
sizeof (
yytname) /
sizeof (
char *));
01783 yyx++)
01784
if (
yycheck[yyx + yyn] == yyx && yyx !=
YYTERROR)
01785 {
01786
const char *yyq = ! yycount ?
", expecting " :
" or ";
01787 yyp =
yystpcpy (yyp, yyq);
01788 yyp =
yystpcpy (yyp,
yytname[yyx]);
01789 yycount++;
01790 }
01791 }
01792
yyerror (yymsg);
01793
YYSTACK_FREE (yymsg);
01794 }
01795
else
01796
yyerror (
"syntax error; also virtual memory exhausted");
01797 }
01798
else
01799
#endif
01800
yyerror (
"syntax error");
01801 }
01802
01803
01804
01805
if (yyerrstatus == 3)
01806 {
01807
01808
01809
01810
01811
if (
yychar ==
YYEOF)
01812 {
01813
01814
YYPOPSTACK;
01815
01816
while (yyss < yyssp)
01817 {
01818
YYDSYMPRINTF (
"Error: popping",
yystos[*yyssp], yyvsp, yylsp);
01819
yydestruct (
yystos[*yyssp], yyvsp);
01820
YYPOPSTACK;
01821 }
01822
YYABORT;
01823 }
01824
01825
YYDSYMPRINTF (
"Error: discarding", yytoken, &
yylval, &yylloc);
01826
yydestruct (yytoken, &
yylval);
01827
yychar =
YYEMPTY;
01828
01829 }
01830
01831
01832
01833
goto yyerrlab1;
01834
01835
01836
01837
01838
01839 yyerrlab1:
01840 yyerrstatus = 3;
01841
01842
for (;;)
01843 {
01844 yyn =
yypact[yystate];
01845
if (yyn !=
YYPACT_NINF)
01846 {
01847 yyn +=
YYTERROR;
01848
if (0 <= yyn && yyn <=
YYLAST &&
yycheck[yyn] ==
YYTERROR)
01849 {
01850 yyn =
yytable[yyn];
01851
if (0 < yyn)
01852
break;
01853 }
01854 }
01855
01856
01857
if (yyssp == yyss)
01858
YYABORT;
01859
01860
YYDSYMPRINTF (
"Error: popping",
yystos[*yyssp], yyvsp, yylsp);
01861
yydestruct (
yystos[yystate], yyvsp);
01862 yyvsp--;
01863 yystate = *--yyssp;
01864
01865
YY_STACK_PRINT (yyss, yyssp);
01866 }
01867
01868
if (yyn ==
YYFINAL)
01869
YYACCEPT;
01870
01871
YYDPRINTF ((stderr,
"Shifting error token, "));
01872
01873 *++yyvsp =
yylval;
01874
01875
01876 yystate = yyn;
01877
goto yynewstate;
01878
01879
01880
01881
01882
01883 yyacceptlab:
01884 yyresult = 0;
01885
goto yyreturn;
01886
01887
01888
01889
01890 yyabortlab:
01891 yyresult = 1;
01892
goto yyreturn;
01893
01894
#ifndef yyoverflow
01895
01896
01897
01898 yyoverflowlab:
01899
yyerror (
"parser stack overflow");
01900 yyresult = 2;
01901
01902
#endif
01903
01904 yyreturn:
01905
#ifndef yyoverflow
01906
if (yyss != yyssa)
01907
YYSTACK_FREE (yyss);
01908
#endif
01909
return yyresult;
01910 }
01911
01912
01913
01914
01915
01916 void conf_parse(
const char *name)
01917 {
01918
struct symbol *sym;
01919
int i;
01920
01921
zconf_initscan(name);
01922
01923
sym_init();
01924
menu_init();
01925
modules_sym =
sym_lookup(
"MODULES", 0);
01926
rootmenu.
prompt =
menu_add_prop(
P_MENU,
"Linux Kernel Configuration", NULL, NULL);
01927
01928
01929
zconfparse();
01930
if (zconfnerrs)
01931 exit(1);
01932
menu_finalize(&
rootmenu);
01933
for_all_symbols(i, sym) {
01934
if (!(sym->flags &
SYMBOL_CHECKED) &&
sym_check_deps(sym))
01935 printf(
"\n");
01936
else
01937 sym->flags |=
SYMBOL_CHECK_DONE;
01938 }
01939
01940
sym_change_count = 1;
01941 }
01942
01943 const char *
zconf_tokenname(
int token)
01944 {
01945
switch (token) {
01946
case T_MENU:
return "menu";
01947
case T_ENDMENU:
return "endmenu";
01948
case T_CHOICE:
return "choice";
01949
case T_ENDCHOICE:
return "endchoice";
01950
case T_IF:
return "if";
01951
case T_ENDIF:
return "endif";
01952 }
01953
return "<token>";
01954 }
01955
01956 static bool zconf_endtoken(
int token,
int starttoken,
int endtoken)
01957 {
01958
if (token != endtoken) {
01959
zconfprint(
"unexpected '%s' within %s block",
zconf_tokenname(token),
zconf_tokenname(starttoken));
01960 zconfnerrs++;
01961
return false;
01962 }
01963
if (
current_menu->
file !=
current_file) {
01964
zconfprint(
"'%s' in different file than '%s'",
zconf_tokenname(token),
zconf_tokenname(starttoken));
01965
zconfprint(
"location of the '%s'",
zconf_tokenname(starttoken));
01966 zconfnerrs++;
01967
return false;
01968 }
01969
return true;
01970 }
01971
01972 static void zconfprint(
const char *err, ...)
01973 {
01974 va_list ap;
01975
01976 fprintf(stderr,
"%s:%d: ",
zconf_curname(),
zconf_lineno() + 1);
01977 va_start(ap, err);
01978 vfprintf(stderr, err, ap);
01979 va_end(ap);
01980 fprintf(stderr,
"\n");
01981 }
01982
01983 static void zconferror(
const char *err)
01984 {
01985 fprintf(stderr,
"%s:%d: %s\n",
zconf_curname(),
zconf_lineno() + 1, err);
01986 }
01987
01988 void print_quoted_string(FILE *out,
const char *str)
01989 {
01990
const char *p;
01991
int len;
01992
01993 putc(
'"',
out);
01994
while ((p = strchr(str,
'"'))) {
01995 len = p - str;
01996
if (len)
01997 fprintf(
out,
"%.*s", len, str);
01998 fputs(
"\\\"",
out);
01999 str = p + 1;
02000 }
02001 fputs(str,
out);
02002 putc(
'"',
out);
02003 }
02004
02005 void print_symbol(FILE *out,
struct menu *
menu)
02006 {
02007
struct symbol *sym = menu->
sym;
02008
struct property *prop;
02009
02010
if (
sym_is_choice(sym))
02011 fprintf(
out,
"choice\n");
02012
else
02013 fprintf(
out,
"config %s\n", sym->name);
02014
switch (sym->type) {
02015
case S_BOOLEAN:
02016 fputs(
" boolean\n",
out);
02017
break;
02018
case S_TRISTATE:
02019 fputs(
" tristate\n",
out);
02020
break;
02021
case S_STRING:
02022 fputs(
" string\n",
out);
02023
break;
02024
case S_INT:
02025 fputs(
" integer\n",
out);
02026
break;
02027
case S_HEX:
02028 fputs(
" hex\n",
out);
02029
break;
02030
default:
02031 fputs(
" ???\n",
out);
02032
break;
02033 }
02034
for (prop = sym->prop; prop; prop = prop->next) {
02035
if (prop->menu != menu)
02036
continue;
02037
switch (prop->type) {
02038
case P_PROMPT:
02039 fputs(
" prompt ",
out);
02040
print_quoted_string(
out, prop->text);
02041
if (!
expr_is_yes(prop->visible.expr)) {
02042 fputs(
" if ",
out);
02043
expr_fprint(prop->visible.expr,
out);
02044 }
02045 fputc(
'\n',
out);
02046
break;
02047
case P_DEFAULT:
02048 fputs(
" default ",
out);
02049
expr_fprint(prop->expr,
out);
02050
if (!
expr_is_yes(prop->visible.expr)) {
02051 fputs(
" if ",
out);
02052
expr_fprint(prop->visible.expr,
out);
02053 }
02054 fputc(
'\n',
out);
02055
break;
02056
case P_CHOICE:
02057 fputs(
" #choice value\n",
out);
02058
break;
02059
default:
02060 fprintf(
out,
" unknown prop %d!\n", prop->type);
02061
break;
02062 }
02063 }
02064
if (sym->help) {
02065
int len = strlen(sym->help);
02066
while (sym->help[--len] ==
'\n')
02067 sym->help[len] = 0;
02068 fprintf(
out,
" help\n%s\n", sym->help);
02069 }
02070 fputc(
'\n',
out);
02071 }
02072
02073 void zconfdump(FILE *out)
02074 {
02075
struct property *prop;
02076
struct symbol *sym;
02077
struct menu *
menu;
02078
02079
menu =
rootmenu.
list;
02080
while (
menu) {
02081
if ((sym =
menu->sym))
02082
print_symbol(
out,
menu);
02083
else if ((prop =
menu->prompt)) {
02084
switch (prop->type) {
02085
case P_COMMENT:
02086 fputs(
"\ncomment ",
out);
02087
print_quoted_string(
out, prop->text);
02088 fputs(
"\n",
out);
02089
break;
02090
case P_MENU:
02091 fputs(
"\nmenu ",
out);
02092
print_quoted_string(
out, prop->text);
02093 fputs(
"\n",
out);
02094
break;
02095
default:
02096 ;
02097 }
02098
if (!
expr_is_yes(prop->visible.expr)) {
02099 fputs(
" depends ",
out);
02100
expr_fprint(prop->visible.expr,
out);
02101 fputc(
'\n',
out);
02102 }
02103 fputs(
"\n",
out);
02104 }
02105
02106
if (
menu->list)
02107
menu =
menu->list;
02108
else if (
menu->next)
02109
menu =
menu->next;
02110
else while ((
menu =
menu->parent)) {
02111
if (
menu->prompt &&
menu->prompt->type ==
P_MENU)
02112 fputs(
"\nendmenu\n",
out);
02113
if (
menu->next) {
02114
menu =
menu->next;
02115
break;
02116 }
02117 }
02118 }
02119 }
02120
02121
#include "lex.zconf.c"
02122
#include "confdata.c"
02123
#include "expr.c"
02124
#include "symbol.c"
02125
#include "menu.c"
02126
02127