1
0
Fork 0

kconfig: remove grammatically ambiguous option_error

This commit decreases 6 shift/reduce conflicts, and finally achieves
conflict-free parser.

Since Kconfig has no terminator for a config block, detecting the end
of config_stmt is not easy.

For example, there are two ways for handling the error in the following
code:

  1 config FOO
  2         =

 [A] Print "unknown option" error, assuming the line 2 is a part of
     config_option_list

 [B] Print "invalid statement", assuming the line 1 is reduced into
     a config_stmt by itself

Bison actually chooses [A] because it performs the shift rather than
the reduction where both are possible.

However, there is no reason to choose one over the other.

Let's remove the option_error, and let it fall back to [B].

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
hifive-unleashed-5.1
Masahiro Yamada 2018-12-11 20:00:53 +09:00
parent 6900ae9eee
commit 2f60e46e60
1 changed files with 0 additions and 10 deletions

View File

@ -31,7 +31,6 @@ struct symbol *symbol_hash[SYMBOL_HASHSIZE];
static struct menu *current_menu, *current_entry;
%}
%expect 6
%union
{
@ -138,12 +137,6 @@ common_stmt:
| assignment_stmt
;
option_error:
T_WORD error T_EOL { zconf_error("unknown option \"%s\"", $1); }
| error T_EOL { zconf_error("invalid option"); }
;
/* config/menuconfig entry */
config_entry_start: T_CONFIG nonconst_symbol T_EOL
@ -180,7 +173,6 @@ config_option_list:
| config_option_list symbol_option
| config_option_list depends
| config_option_list help
| config_option_list option_error
;
config_option: T_TYPE prompt_stmt_opt T_EOL
@ -280,7 +272,6 @@ choice_option_list:
| choice_option_list choice_option
| choice_option_list depends
| choice_option_list help
| choice_option_list option_error
;
choice_option: T_PROMPT prompt if_expr T_EOL
@ -429,7 +420,6 @@ help: help_start T_HELPTEXT
depends_list:
/* empty */
| depends_list depends
| depends_list option_error
;
depends: T_DEPENDS T_ON expr T_EOL