mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
variables: accept dashes.
* src/scan-gram.l ({id}): Also accept dashes after the initial
letter.
({directive}): Use {id}.
* src/parse-gram.y: Comment and formatting changes.
* doc/bison.texinfo (Symbols): Adjust the lexical definitions of
symbols.
* src/complain.h, src/complain.c (yacc_at): New.
* src/symtab.c (symbol_new): Use yacc_at to report inappropriate
symbol names.
* src/output.c (token_definitions_output): Do not #define token
names with dashes.
(cherry picked from commit 4f646c3794)
Conflicts:
data/bison.m4
src/parse-gram.y
This commit is contained in:
committed by
Joel E. Denny
parent
379261b3fd
commit
663ce7bb3e
15
ChangeLog
15
ChangeLog
@@ -1,3 +1,18 @@
|
||||
2009-04-20 Akim Demaille <demaille@gostai.com>
|
||||
|
||||
variables: accept dashes.
|
||||
* src/scan-gram.l ({id}): Also accept dashes after the initial
|
||||
letter.
|
||||
({directive}): Use {id}.
|
||||
* src/parse-gram.y: Comment and formatting changes.
|
||||
* doc/bison.texinfo (Symbols): Adjust the lexical definitions of
|
||||
symbols.
|
||||
* src/complain.h, src/complain.c (yacc_at): New.
|
||||
* src/symtab.c (symbol_new): Use yacc_at to report inappropriate
|
||||
symbol names.
|
||||
* src/output.c (token_definitions_output): Do not #define token
|
||||
names with dashes.
|
||||
|
||||
2009-04-24 Joel E. Denny <jdenny@ces.clemson.edu>
|
||||
|
||||
Clean up recent patches a little.
|
||||
|
||||
@@ -3051,8 +3051,12 @@ A @dfn{nonterminal symbol} stands for a class of syntactically
|
||||
equivalent groupings. The symbol name is used in writing grammar rules.
|
||||
By convention, it should be all lower case.
|
||||
|
||||
Symbol names can contain letters, digits (not at the beginning),
|
||||
underscores and periods. Periods make sense only in nonterminals.
|
||||
Symbol names can contain letters, underscores, period, and (not at the
|
||||
beginning) digits and dashes. Dashes in symbol names are a GNU
|
||||
extension, incompatible with @acronym{POSIX} Yacc. Terminal symbols
|
||||
that contain periods or dashes make little sense: since they are not
|
||||
valid symbols (in most programming languages) they are not exported as
|
||||
token names.
|
||||
|
||||
There are three ways of writing terminal symbols in the grammar:
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Declaration for error-reporting function for Bison.
|
||||
|
||||
Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006
|
||||
Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2009
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
@@ -120,6 +120,27 @@ complain (const char *message, ...)
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------.
|
||||
| An incompatibility with POSIX Yacc: mapped either to warn* or |
|
||||
| complain* depending on yacc_flag. |
|
||||
`--------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
yacc_at (location loc, const char *message, ...)
|
||||
{
|
||||
if (yacc_flag)
|
||||
{
|
||||
ERROR_MESSAGE (&loc, NULL, message);
|
||||
complaint_issued = true;
|
||||
}
|
||||
else if (warnings_flag & warnings_yacc)
|
||||
{
|
||||
set_warning_issued ();
|
||||
ERROR_MESSAGE (&loc, _("warning"), message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------.
|
||||
| A severe error has occurred, we cannot proceed. |
|
||||
`-------------------------------------------------*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Declaration for error-reporting function for Bison.
|
||||
Copyright (C) 2000, 2001, 2002, 2006 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2001, 2002, 2006, 2009 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -39,6 +39,13 @@ void complain (char const *format, ...)
|
||||
void complain_at (location loc, char const *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
|
||||
/** An incompatibility with POSIX Yacc: mapped either to warn* or
|
||||
complain* depending on yacc_flag. */
|
||||
|
||||
void yacc_at (location loc, char const *format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
||||
|
||||
|
||||
/** A fatal error, causing immediate exit. */
|
||||
|
||||
void fatal (char const *format, ...)
|
||||
|
||||
@@ -363,9 +363,11 @@ token_definitions_output (FILE *out)
|
||||
if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
|
||||
continue;
|
||||
|
||||
/* Don't #define nonliteral tokens whose names contain periods
|
||||
or '$' (as does the default value of the EOF token). */
|
||||
if (strchr (sym->tag, '.') || strchr (sym->tag, '$'))
|
||||
/* Don't #define nonliteral tokens whose names contain periods,
|
||||
dashes or '$' (as does the default value of the EOF token). */
|
||||
if (strchr (sym->tag, '.')
|
||||
|| strchr (sym->tag, '-')
|
||||
|| strchr (sym->tag, '$'))
|
||||
continue;
|
||||
|
||||
fprintf (out, "%s[[[%s]], %d]",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* A Bison parser, made by GNU Bison 2.4.1.49-783b. */
|
||||
/* A Bison parser, made by GNU Bison 2.4.1.52-77be. */
|
||||
|
||||
/* Skeleton implementation for Bison's Yacc-like parsers in C
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
#define YYBISON 1
|
||||
|
||||
/* Bison version. */
|
||||
#define YYBISON_VERSION "2.4.1.49-783b"
|
||||
#define YYBISON_VERSION "2.4.1.52-77be"
|
||||
|
||||
/* Skeleton name. */
|
||||
#define YYSKELETON_NAME "yacc.c"
|
||||
@@ -672,8 +672,8 @@ static const yytype_uint16 yyrline[] =
|
||||
434, 435, 440, 442, 447, 448, 452, 453, 454, 455,
|
||||
460, 465, 470, 476, 482, 493, 494, 503, 504, 510,
|
||||
511, 512, 519, 519, 523, 524, 525, 530, 531, 533,
|
||||
535, 537, 539, 549, 550, 556, 559, 568, 588, 590,
|
||||
599, 604, 605, 610, 617, 619
|
||||
535, 537, 539, 549, 550, 555, 556, 565, 585, 587,
|
||||
596, 601, 602, 607, 614, 616
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -2551,16 +2551,14 @@ yyreduce:
|
||||
case 95:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 556 "parse-gram.y"
|
||||
{
|
||||
(yyval.chars) = "";
|
||||
}
|
||||
#line 555 "parse-gram.y"
|
||||
{ (yyval.chars) = ""; }
|
||||
break;
|
||||
|
||||
case 97:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 569 "parse-gram.y"
|
||||
#line 566 "parse-gram.y"
|
||||
{
|
||||
code_props plain_code;
|
||||
(yyvsp[(1) - (1)].code)[strlen ((yyvsp[(1) - (1)].code)) - 1] = '\n';
|
||||
@@ -2574,14 +2572,14 @@ yyreduce:
|
||||
case 98:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 589 "parse-gram.y"
|
||||
#line 586 "parse-gram.y"
|
||||
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
|
||||
break;
|
||||
|
||||
case 99:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 591 "parse-gram.y"
|
||||
#line 588 "parse-gram.y"
|
||||
{
|
||||
(yyval.symbol) = symbol_get (char_name ((yyvsp[(1) - (1)].character)), (yylsp[(1) - (1)]));
|
||||
symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
|
||||
@@ -2592,14 +2590,14 @@ yyreduce:
|
||||
case 100:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 599 "parse-gram.y"
|
||||
#line 596 "parse-gram.y"
|
||||
{ (yyval.symbol) = symbol_from_uniqstr ((yyvsp[(1) - (1)].uniqstr), (yylsp[(1) - (1)])); }
|
||||
break;
|
||||
|
||||
case 103:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 611 "parse-gram.y"
|
||||
#line 608 "parse-gram.y"
|
||||
{
|
||||
(yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[(1) - (1)].chars)), (yylsp[(1) - (1)]));
|
||||
symbol_class_set ((yyval.symbol), token_sym, (yylsp[(1) - (1)]), false);
|
||||
@@ -2609,7 +2607,7 @@ yyreduce:
|
||||
case 105:
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 620 "parse-gram.y"
|
||||
#line 617 "parse-gram.y"
|
||||
{
|
||||
code_props plain_code;
|
||||
code_props_plain_init (&plain_code, (yyvsp[(2) - (2)].chars), (yylsp[(2) - (2)]));
|
||||
@@ -2623,7 +2621,7 @@ yyreduce:
|
||||
|
||||
|
||||
/* Line 1456 of yacc.c */
|
||||
#line 2627 "parse-gram.c"
|
||||
#line 2625 "parse-gram.c"
|
||||
default: break;
|
||||
}
|
||||
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
||||
@@ -2842,7 +2840,7 @@ yyreturn:
|
||||
|
||||
|
||||
/* Line 1676 of yacc.c */
|
||||
#line 630 "parse-gram.y"
|
||||
#line 627 "parse-gram.y"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* A Bison parser, made by GNU Bison 2.4.1.49-783b. */
|
||||
/* A Bison parser, made by GNU Bison 2.4.1.52-77be. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
|
||||
|
||||
@@ -547,15 +547,12 @@ rhs:
|
||||
|
||||
variable:
|
||||
ID
|
||||
| STRING { $$ = uniqstr_new ($1); } /* deprecated and not M4-friendly */
|
||||
;
|
||||
| STRING { $$ = uniqstr_new ($1); }
|
||||
;
|
||||
|
||||
/* Some content or empty by default. */
|
||||
content.opt:
|
||||
/* Nothing. */
|
||||
{
|
||||
$$ = "";
|
||||
}
|
||||
/* Nothing. */ { $$ = ""; }
|
||||
| STRING
|
||||
;
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ static void unexpected_newline (boundary, char const *);
|
||||
%x SC_STRING SC_CHARACTER
|
||||
|
||||
letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
|
||||
id {letter}({letter}|[0-9])*
|
||||
directive %{letter}({letter}|[0-9]|-)*
|
||||
id {letter}({letter}|[0-9]|-)*
|
||||
directive %{id}
|
||||
int [0-9]+
|
||||
|
||||
/* POSIX says that a tag must be both an id and a C union member, but
|
||||
@@ -382,7 +382,7 @@ splice (\\[ \f\t\v]*\n)*
|
||||
unexpected_eof (token_start, "'");
|
||||
STRING_FINISH;
|
||||
loc->start = token_start;
|
||||
if (strlen(last_string) > 1)
|
||||
if (strlen (last_string) > 1)
|
||||
val->character = last_string[1];
|
||||
else
|
||||
val->character = last_string[0];
|
||||
|
||||
10
src/symtab.c
10
src/symtab.c
@@ -1,6 +1,7 @@
|
||||
/* Symbol table manager for Bison.
|
||||
|
||||
Copyright (C) 1984, 1989, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
|
||||
Copyright (C) 1984, 1989, 2000, 2001, 2002, 2004, 2005, 2006, 2007,
|
||||
2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
@@ -58,6 +59,13 @@ symbol_new (uniqstr tag, location loc)
|
||||
symbol *res = xmalloc (sizeof *res);
|
||||
|
||||
uniqstr_assert (tag);
|
||||
|
||||
/* If the tag is not a string (starts with a double quote), check
|
||||
that it is valid for Yacc. */
|
||||
if (tag[0] != '\"' && tag[0] != '\'' && strchr (tag, '-'))
|
||||
yacc_at (loc, _("POSIX Yacc forbids dashes in symbol names: %s"),
|
||||
tag);
|
||||
|
||||
res->tag = tag;
|
||||
res->location = loc;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user