%nterm: do not accept character literals

Reported by Rici Lake.
http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html

* src/complain.h: Formatting change.
* src/parse-gram.y (id): Reject character literals used in a context
for non-terminals.
* tests/input.at (Invalid %nterm uses): Check that.
This commit is contained in:
Akim Demaille
2018-11-25 18:07:46 +01:00
parent 4bddd33439
commit 9686b585e7
3 changed files with 25 additions and 3 deletions

View File

@@ -78,8 +78,7 @@ void complain_init (void);
typedef enum
{
/**< Issue no warnings. */
Wnone = 0,
Wnone = 0, /**< Issue no warnings. */
Wmidrule_values = 1 << warning_midrule_values,
Wyacc = 1 << warning_yacc,

View File

@@ -553,6 +553,9 @@ symbol_def:
symbol_defs.1:
symbol_def
| symbol_defs.1 symbol_def
/* FIXME: cannot do that, results in infinite loop in LAC.
| error { yyerrok; }
*/
;
@@ -669,6 +672,12 @@ id:
{ $$ = symbol_from_uniqstr ($1, @1); }
| CHAR
{
if (current_class == nterm_sym)
{
gram_error (&@1,
_("character literals cannot be non-terminals"));
YYERROR;
}
$$ = symbol_get (char_name ($1), @1);
symbol_class_set ($$, token_sym, @1, false);
symbol_user_token_number_set ($$, $1, @1);