]> git.saurik.com Git - bison.git/commitdiff
identifiers: dashes are letters.
authorAkim Demaille <demaille@gostai.com>
Mon, 4 May 2009 19:15:17 +0000 (21:15 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 4 May 2009 19:30:52 +0000 (21:30 +0200)
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
NEWS
doc/bison.texinfo
src/scan-gram.l
tests/input.at
tests/regression.at

index 90c44b646ff7e90c5ccf222465ce57ef2e15eb34..bdf9789fa85c85fb950d42887b8f1d44261c8c8e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
 2009-05-01  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        Declare %code to be a permanent feature.
diff --git a/NEWS b/NEWS
index b3ba74fa814f6b5093e6961256544596c8e5abfc..6578160623c81ed1424b77c0f900099c2004e6fd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -62,6 +62,14 @@ Bison News
   The old names are now deprecated but will be maintained indefinitely
   for backward compatibility.
 
   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
 ** Temporary hack for adding a semicolon to the user action.
 
   Previously, Bison appended a semicolon to every user action for
index a02d07607b655bd85da5d75820fd457804cccc01..9b600785bccff927d2d8229049003aa7a7e2d952 100644 (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.
 
 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
 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})
 @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})
 @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;}
 @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;}
 @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
 
 @xref{Error Recovery}.
 @end deffn
 
index c29e167df59f34bc2a80ce7ec805de2c4f185d2e..b37b29b02078963bbbe4cab8ee8f5fa5336ecd02 100644 (file)
@@ -89,8 +89,8 @@ static void unexpected_newline (boundary, char const *);
  /* Strings and characters in code. */
 %x SC_STRING SC_CHARACTER
 
  /* 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]+
 
 directive %{id}
 int      [0-9]+
 
index 73bf7345a25c0d77184bbbffcd6aa0a4152ae68e..7eaafaae7089ae3df79c11b3d125ee4b3104b9fe 100644 (file)
@@ -621,9 +621,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],
 [[%token WITH-DASH
 %token WITHOUT_DASH "WITHOUT-DASH"
 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])
 
 
 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],
 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], [],
 ]])
 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
 ]])
 
 AT_CLEANUP
index 32e676c6025f475c3084ef6496cebcdeb34e2049..cb9cd9a461ea70116f5de157ebf6fe589fb178c9 100644 (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.
 
 # This program is free software: you can redistribute it and/or modify
 # 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: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 %{...%}
 ]])
 input.y:7.1-8.0: missing `%}' at end of file
 input.y:7.1-8.0: syntax error, unexpected %{...%}
 ]])