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> 2009-05-01 Joel E. Denny <jdenny@ces.clemson.edu>
Declare %code to be a permanent feature. 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 The old names are now deprecated but will be maintained indefinitely
for backward compatibility. 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. ** Temporary hack for adding a semicolon to the user action.
Previously, Bison appended a semicolon to every user action for 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. 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, underscores, period, and (not at the Symbol names can contain letters, underscores, periods, dashes, and (not
beginning) digits and dashes. Dashes in symbol names are a GNU at the beginning) digits. Dashes in symbol names are a GNU
extension, incompatible with @acronym{POSIX} Yacc. Terminal symbols extension, incompatible with @acronym{POSIX} Yacc. Terminal symbols
that contain periods or dashes make little sense: since they are not that contain periods or dashes make little sense: since they are not
valid symbols (in most programming languages) they are not exported as 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. */ /* Strings and characters in code. */
%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 %{id} directive %{id}
int [0-9]+ int [0-9]+

View File

@@ -616,9 +616,6 @@ AT_CLEANUP
AT_SETUP([Symbols]) 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], AT_DATA_GRAMMAR([input.y],
[[%token WITH-DASH [[%token WITH-DASH
%token WITHOUT_DASH "WITHOUT-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]) AT_COMPILE([input.o], [-c input.c])
# Period are genuine letters, they can start identifiers. Dashes # Periods and dashes are genuine letters, they can start identifiers.
# and digits can't. # Digits cannot.
AT_DATA_GRAMMAR([input.y], AT_DATA_GRAMMAR([input.y],
[[%token .good [[%token .GOOD
%token -wrong %token -GOOD
%token 1nv4l1d %token 1NV4L1D
%% %%
start: .good start: .GOOD -GOOD
]]) ]])
AT_BISON_CHECK([-o input.c input.y], [1], [], 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 AT_CLEANUP

View File

@@ -1,6 +1,6 @@
# Bison Regressions. -*- Autotest -*- # 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. # 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
@@ -393,8 +393,7 @@ input.y:3.14: invalid character: `}'
input.y:4.1: invalid character: `%' input.y:4.1: invalid character: `%'
input.y:4.2: invalid character: `&' input.y:4.2: invalid character: `&'
input.y:5.1-17: invalid directive: `%a-does-not-exist' input.y:5.1-17: invalid directive: `%a-does-not-exist'
input.y:6.1: invalid character: `%' input.y:6.1-2: invalid directive: `%-'
input.y:6.2: invalid character: `-'
input.y:7.1-8.0: missing `%}' at end of file input.y:7.1-8.0: missing `%}' at end of file
input.y:7.1-8.0: syntax error, unexpected %{...%} input.y:7.1-8.0: syntax error, unexpected %{...%}
]]) ]])