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 98a345a219
commit cdf3f11338
6 changed files with 33 additions and 18 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

@@ -70,6 +70,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

@@ -3050,8 +3050,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

View File

@@ -98,8 +98,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

@@ -616,9 +616,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"
@@ -656,18 +653,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 <tag>
[[input.y:11.8: syntax error, unexpected integer, expecting char or identifier or <tag>
]])
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 %{...%}
]])