identifiers: dashes are letters.

Dashes can now start identifiers (symbols and directives).

	* src/scan-gram.l ({letter}): Add dash.
	({id}): Remove it.
	* tests/input.at (Symbols): Adjust.
	Remove stray comment.
	* tests/regression.at (Invalid inputs): Adjust error message.
	* doc/bison.texinfo (Symbols): Update.
This commit is contained in:
Akim Demaille
2009-05-04 21:15:17 +02:00
parent 966aba6583
commit c046698e6e
6 changed files with 36 additions and 21 deletions

View File

@@ -1,3 +1,15 @@
2009-05-04 Akim Demaille <demaille@gostai.com>
identifiers: dashes are letters.
Dashes can now start identifiers (symbols and directives).
* src/scan-gram.l ({letter}): Add dash.
({id}): Remove it.
* tests/input.at (Symbols): Adjust.
Remove stray comment.
* tests/regression.at (Invalid inputs): Adjust error message.
* doc/bison.texinfo (Symbols): Update.
2009-05-01 Joel E. Denny <jdenny@ces.clemson.edu>
Declare %code to be a permanent feature.

8
NEWS
View File

@@ -62,6 +62,14 @@ Bison News
The old names are now deprecated but will be maintained indefinitely
for backward compatibility.
** Symbols names
Consistently with directives (such as %error-verbose) and variables
(e.g. push-pull), symbol names may include dashes in any position,
similarly to periods and underscores. This is GNU extension over
POSIX Yacc whose use is reported by -Wyacc, and rejected in Yacc
mode (--yacc).
** Temporary hack for adding a semicolon to the user action.
Previously, Bison appended a semicolon to every user action for

View File

@@ -3048,8 +3048,8 @@ 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, underscores, period, and (not at the
beginning) digits and dashes. Dashes in symbol names are a GNU
Symbol names can contain letters, underscores, periods, dashes, and (not
at the beginning) digits. 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
@@ -9008,7 +9008,7 @@ The first, inclusive, position of the range, and the first beyond.
@end deftypeivar
@deftypeop {Constructor} {Location} {} Location (Position @var{loc})
Create a @code{Location} denoting an empty range located at a given point.
Create a @code{Location} denoting an empty range located at a given point.
@end deftypeop
@deftypeop {Constructor} {Location} {} Location (Position @var{begin}, Position @var{end})
@@ -9222,12 +9222,12 @@ Return immediately from the parser, indicating success.
@end deffn
@deffn {Statement} {return YYERROR;}
Start error recovery without printing an error message.
Start error recovery without printing an error message.
@xref{Error Recovery}.
@end deffn
@deffn {Statement} {return YYFAIL;}
Print an error message and start error recovery.
Print an error message and start error recovery.
@xref{Error Recovery}.
@end deffn

View File

@@ -89,8 +89,8 @@ static void unexpected_newline (boundary, char const *);
/* Strings and characters in code. */
%x SC_STRING SC_CHARACTER
letter [.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
id {letter}({letter}|[0-9]|-)*
letter [-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]
id {letter}({letter}|[0-9])*
directive %{id}
int [0-9]+

View File

@@ -621,9 +621,6 @@ AT_CLEANUP
AT_SETUP([Symbols])
# Bison once thought a character token and its alias were different
# symbols with the same user token number.
AT_DATA_GRAMMAR([input.y],
[[%token WITH-DASH
%token WITHOUT_DASH "WITHOUT-DASH"
@@ -661,18 +658,17 @@ AT_BISON_CHECK([-o input.c input.y])
AT_COMPILE([input.o], [-c input.c])
# Period are genuine letters, they can start identifiers. Dashes
# and digits can't.
# Periods and dashes are genuine letters, they can start identifiers.
# Digits cannot.
AT_DATA_GRAMMAR([input.y],
[[%token .good
%token -wrong
%token 1nv4l1d
[[%token .GOOD
%token -GOOD
%token 1NV4L1D
%%
start: .good
start: .GOOD -GOOD
]])
AT_BISON_CHECK([-o input.c input.y], [1], [],
[[input.y:10.8: invalid character: `-'
input.y:11.8: syntax error, unexpected integer, expecting char or identifier or type
[[input.y:11.8: syntax error, unexpected integer, expecting char or identifier or type
]])
AT_CLEANUP

View File

@@ -1,6 +1,6 @@
# Bison Regressions. -*- Autotest -*-
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
# Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
@@ -393,8 +393,7 @@ input.y:3.14: invalid character: `}'
input.y:4.1: invalid character: `%'
input.y:4.2: invalid character: `&'
input.y:5.1-17: invalid directive: `%a-does-not-exist'
input.y:6.1: invalid character: `%'
input.y:6.2: invalid character: `-'
input.y:6.1-2: invalid directive: `%-'
input.y:7.1-8.0: missing `%}' at end of file
input.y:7.1-8.0: syntax error, unexpected %{...%}
]])