mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 01:33:03 +00:00
variables: accept dashes.
* data/bison.m4 (b4_percent_define_if_define_): Also map dashes to
underscores.
* 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.
This commit is contained in:
17
ChangeLog
17
ChangeLog
@@ -1,3 +1,20 @@
|
|||||||
|
2009-04-20 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
|
variables: accept dashes.
|
||||||
|
* data/bison.m4 (b4_percent_define_if_define_): Also map dashes to
|
||||||
|
underscores.
|
||||||
|
* 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-20 Akim Demaille <demaille@gostai.com>
|
2009-04-20 Akim Demaille <demaille@gostai.com>
|
||||||
|
|
||||||
Consistently refer to Yacc, not YACC.
|
Consistently refer to Yacc, not YACC.
|
||||||
|
|||||||
@@ -668,9 +668,10 @@ m4_define([b4_percent_define_default],
|
|||||||
# b4_percent_define_if_define(VARIABLE)
|
# b4_percent_define_if_define(VARIABLE)
|
||||||
# -------------------------------------
|
# -------------------------------------
|
||||||
# Define b4_VARIABLE_if that executes its $1 or $2 depending whether
|
# Define b4_VARIABLE_if that executes its $1 or $2 depending whether
|
||||||
# VARIABLE was %defined. The character `.' in VARIABLE is mapped to `_'.
|
# VARIABLE was %defined. The characters `.' and `-' in VARIABLE are mapped
|
||||||
|
# to `_'.
|
||||||
m4_define([b4_percent_define_if_define_],
|
m4_define([b4_percent_define_if_define_],
|
||||||
[m4_define(m4_bpatsubst([b4_$1_if], [[.]], [_]),
|
[m4_define(m4_bpatsubst([b4_$1_if], [[-.]], [_]),
|
||||||
[b4_percent_define_flag_if([$1], [$2], [$3])])])
|
[b4_percent_define_flag_if([$1], [$2], [$3])])])
|
||||||
m4_define([b4_percent_define_if_define],
|
m4_define([b4_percent_define_if_define],
|
||||||
[b4_percent_define_default([[$1]], [[false]])
|
[b4_percent_define_default([[$1]], [[false]])
|
||||||
|
|||||||
@@ -3053,8 +3053,12 @@ A @dfn{nonterminal symbol} stands for a class of syntactically
|
|||||||
equivalent groupings. The symbol name is used in writing grammar rules.
|
equivalent groupings. The symbol name is used in writing grammar rules.
|
||||||
By convention, it should be all lower case.
|
By convention, it should be all lower case.
|
||||||
|
|
||||||
Symbol names can contain letters, digits (not at the beginning),
|
Symbol names can contain letters, underscores, period, and (not at the
|
||||||
underscores and periods. Periods make sense only in nonterminals.
|
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:
|
There are three ways of writing terminal symbols in the grammar:
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* Declaration for error-reporting function for Bison.
|
/* 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.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
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. |
|
| A severe error has occurred, we cannot proceed. |
|
||||||
`-------------------------------------------------*/
|
`-------------------------------------------------*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/* Declaration for error-reporting function for Bison.
|
/* 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
|
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
|
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, ...)
|
void complain_at (location loc, char const *format, ...)
|
||||||
__attribute__ ((__format__ (__printf__, 2, 3)));
|
__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. */
|
/** A fatal error, causing immediate exit. */
|
||||||
|
|
||||||
void fatal (char const *format, ...)
|
void fatal (char const *format, ...)
|
||||||
|
|||||||
@@ -490,9 +490,11 @@ token_definitions_output (FILE *out)
|
|||||||
if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
|
if (sym->tag[0] == '\'' || sym->tag[0] == '\"')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Don't #define nonliteral tokens whose names contain periods
|
/* Don't #define nonliteral tokens whose names contain periods,
|
||||||
or '$' (as does the default value of the EOF token). */
|
dashes or '$' (as does the default value of the EOF token). */
|
||||||
if (strchr (sym->tag, '.') || strchr (sym->tag, '$'))
|
if (strchr (sym->tag, '.')
|
||||||
|
|| strchr (sym->tag, '-')
|
||||||
|
|| strchr (sym->tag, '$'))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fprintf (out, "%s[[[%s]], %d]",
|
fprintf (out, "%s[[[%s]], %d]",
|
||||||
|
|||||||
@@ -535,15 +535,12 @@ rhs:
|
|||||||
|
|
||||||
variable:
|
variable:
|
||||||
ID
|
ID
|
||||||
| STRING { $$ = uniqstr_new ($1); } /* deprecated and not M4-friendly */
|
| STRING { $$ = uniqstr_new ($1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
/* Some content or empty by default. */
|
/* Some content or empty by default. */
|
||||||
content.opt:
|
content.opt:
|
||||||
/* Nothing. */
|
/* Nothing. */ { $$ = ""; }
|
||||||
{
|
|
||||||
$$ = "";
|
|
||||||
}
|
|
||||||
| STRING
|
| STRING
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -99,8 +99,8 @@ static void unexpected_newline (boundary, char const *);
|
|||||||
%x SC_STRING SC_CHARACTER
|
%x SC_STRING SC_CHARACTER
|
||||||
|
|
||||||
letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
|
letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
|
||||||
id {letter}({letter}|[0-9])*
|
id {letter}({letter}|[0-9]|-)*
|
||||||
directive %{letter}({letter}|[0-9]|-)*
|
directive %{id}
|
||||||
int [0-9]+
|
int [0-9]+
|
||||||
|
|
||||||
/* POSIX says that a tag must be both an id and a C union member, but
|
/* POSIX says that a tag must be both an id and a C union member, but
|
||||||
@@ -411,7 +411,7 @@ splice (\\[ \f\t\v]*\n)*
|
|||||||
unexpected_eof (token_start, "'");
|
unexpected_eof (token_start, "'");
|
||||||
STRING_FINISH;
|
STRING_FINISH;
|
||||||
loc->start = token_start;
|
loc->start = token_start;
|
||||||
if (strlen(last_string) > 1)
|
if (strlen (last_string) > 1)
|
||||||
val->character = last_string[1];
|
val->character = last_string[1];
|
||||||
else
|
else
|
||||||
val->character = last_string[0];
|
val->character = last_string[0];
|
||||||
|
|||||||
10
src/symtab.c
10
src/symtab.c
@@ -1,6 +1,7 @@
|
|||||||
/* Symbol table manager for Bison.
|
/* 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.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of Bison, the GNU Compiler Compiler.
|
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);
|
symbol *res = xmalloc (sizeof *res);
|
||||||
|
|
||||||
uniqstr_assert (tag);
|
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->tag = tag;
|
||||||
res->location = loc;
|
res->location = loc;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user