From c046698e6e98aefa7f234b8035fe4cf20ce5d05d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 4 May 2009 21:15:17 +0200 Subject: [PATCH] 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. --- ChangeLog | 12 ++++++++++++ NEWS | 8 ++++++++ doc/bison.texinfo | 10 +++++----- src/scan-gram.l | 4 ++-- tests/input.at | 18 +++++++----------- tests/regression.at | 5 ++--- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 90c44b64..bdf9789f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2009-05-04 Akim Demaille + + 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 Declare %code to be a permanent feature. diff --git a/NEWS b/NEWS index b3ba74fa..65781606 100644 --- a/NEWS +++ b/NEWS @@ -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 diff --git a/doc/bison.texinfo b/doc/bison.texinfo index a02d0760..9b600785 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -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 diff --git a/src/scan-gram.l b/src/scan-gram.l index c29e167d..b37b29b0 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -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]+ diff --git a/tests/input.at b/tests/input.at index 73bf7345..7eaafaae 100644 --- a/tests/input.at +++ b/tests/input.at @@ -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 diff --git a/tests/regression.at b/tests/regression.at index 32e676c6..cb9cd9a4 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -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 %{...%} ]]) -- 2.45.2