Also attached, I don't trust this mailer. Index: ChangeLog from Akim Demaille <[EMAIL PROTECTED]>
* bootstrap (gnulib_modules): Add strverscmp.
* lib/.cvsignore: Add strverscmp.c, strverscmp.h.
* m4/.cvsignore: Add strverscmp.m4.
* src/parse-gram.y (%require): New token, new rule.
(version_check): New.
* src/scan-gram.l (%require): Adjust.
* tests/input.at (AT_REQUIRE): New.
Use it.
* doc/bison.texinfo (Require Decl): New.
(Calc++ Parser): Use %require.
Index: NEWS
===================================================================
RCS file: /cvsroot/bison/bison/NEWS,v
retrieving revision 1.126
diff -u -r1.126 NEWS
--- NEWS 2 Oct 2005 17:00:30 -0000 1.126
+++ NEWS 2 Oct 2005 18:46:26 -0000
@@ -5,6 +5,9 @@
* DJGPP support added.
+* %require "VERSION"
+ To specify the youngest version of Bison accepted by the grammar
file.
+
* lalr1.cc: The token and value types are now class members.
The tokens where defined as free form enums and cpp macros. YYSTYPE
was defined as a free form union. Both are now class members:
@@ -13,8 +16,11 @@
If you do not want or can update to this scheme, the directive
`%define "global_tokens_and_yystype" "1"' triggers the global
- definition of tokens and YYSTYPE.
+ definition of tokens and YYSTYPE. This change is suitable both
+ for previous releases of Bison, and this one.
+ If you wish to update, then make sure older version of Bison will
+ fail using `%require "2.1a"'.
Changes in version 2.1, 2005-09-16:
Index: bootstrap
===================================================================
RCS file: /cvsroot/bison/bison/bootstrap,v
retrieving revision 1.29
diff -u -r1.29 bootstrap
--- bootstrap 29 Sep 2005 19:02:53 -0000 1.29
+++ bootstrap 2 Oct 2005 18:46:26 -0000
@@ -110,6 +110,7 @@
stpcpy
strerror
strtoul
+strverscmp
unistd-safer
verify
xalloc
Index: doc/bison.texinfo
===================================================================
RCS file: /cvsroot/bison/bison/doc/bison.texinfo,v
retrieving revision 1.162
diff -u -r1.162 bison.texinfo
--- doc/bison.texinfo 30 Sep 2005 17:57:05 -0000 1.162
+++ doc/bison.texinfo 2 Oct 2005 18:46:29 -0000
@@ -145,9 +145,9 @@
Writing @acronym{GLR} Parsers
-* Simple GLR Parsers:: Using @acronym{GLR} parsers on
unambiguous grammars
-* Merging GLR Parses:: Using @acronym{GLR} parsers to
resolve ambiguities
-* Compiler Requirements:: @acronym{GLR} parsers require a
modern C compiler
+* Simple GLR Parsers:: Using @acronym{GLR} parsers on
unambiguous grammars
+* Merging GLR Parses:: Using @acronym{GLR} parsers to resolve
ambiguities
+* Compiler Requirements:: @acronym{GLR} parsers require a modern
C compiler
Examples @@ -225,6 +225,7 @@ Bison Declarations +* Require Decl:: Requiring a Bison version. * Token Decl:: Declaring terminal symbols.* Precedence Decl:: Declaring terminals with precedence and associativity.
* Union Decl:: Declaring the set of all semantic value types. @@ -732,9 +733,9 @@ merged result. @menu-* Simple GLR Parsers:: Using @acronym{GLR} parsers on unambiguous grammars -* Merging GLR Parses:: Using @acronym{GLR} parsers to resolve ambiguities -* Compiler Requirements:: @acronym{GLR} parsers require a modern C compiler +* Simple GLR Parsers:: Using @acronym{GLR} parsers on unambiguous grammars +* Merging GLR Parses:: Using @acronym{GLR} parsers to resolve ambiguities +* Compiler Requirements:: @acronym{GLR} parsers require a modern C compiler
@end menu @node Simple GLR Parsers @@ -3548,6 +3549,7 @@ Grammars}). @menu +* Require Decl:: Requiring a Bison version. * Token Decl:: Declaring terminal symbols.* Precedence Decl:: Declaring terminals with precedence and associativity.
* Union Decl:: Declaring the set of all semantic value types. @@ -3560,6 +3562,19 @@ * Decl Summary:: Table of all Bison declarations. @end menu [EMAIL PROTECTED] Require Decl [EMAIL PROTECTED] Require a Version of Bison [EMAIL PROTECTED] version requirement [EMAIL PROTECTED] requiring a version of Bison [EMAIL PROTECTED] %require ++You may require the minimum version of Bison to process the grammar. If
+the requirement is not met, @command{bison} exits with an error.
+
[EMAIL PROTECTED]
+%require "@var{version}"
[EMAIL PROTECTED] example
+
@node Token Decl
@subsection Token Type Names
@cindex declaring token type names
@@ -4157,6 +4172,12 @@
(Reentrant) Parser}).
@end deffn
[EMAIL PROTECTED] {Directive} %require "@var{version}"
+Specify that version @var{version} or higher of Bison required for the
+grammar.
[EMAIL PROTECTED] Decl, , Require a Version of Bison}.
[EMAIL PROTECTED] deffn
+
@deffn {Directive} %token-table
Generate an array of token names in the parser file. The name of the
array is @code{yytname}; @[EMAIL PROTECTED] is the name of the
@@ -7275,13 +7296,16 @@
@node Calc++ Parser
@subsection Calc++ Parser
-The parser definition file @file{calc++-parser.yy} starts by asking
-for the C++ LALR(1) skeleton, the creation of the parser header
file, and
-specifies the name of the parser class.
+The parser definition file @file{calc++-parser.yy} starts by asking for
+the C++ LALR(1) skeleton, the creation of the parser header file, and
+specifies the name of the parser class. Because the C++ skeleton
+changed several times, it is safer to require the version you designed
+the grammar for.
@comment file: calc++-parser.yy
@example
%skeleton "lalr1.cc" /* -*- C++ -*- */
+%require "2.1a"
%defines
%define "parser_class_name" "calcxx_parser"
@end example
@@ -7966,6 +7990,12 @@
@deffn {Directive} %pure-parser
Bison declaration to request a pure (reentrant) parser.
@xref{Pure Decl, ,A Pure (Reentrant) Parser}.
[EMAIL PROTECTED] deffn
+
[EMAIL PROTECTED] {Directive} %require "@var{version}"
+Specify that version @var{version} or higher of Bison required for the
+grammar.
[EMAIL PROTECTED] Decl, , Require a Version of Bison}.
@end deffn
@deffn {Directive} %right
Index: lib/.cvsignore
===================================================================
RCS file: /cvsroot/bison/bison/lib/.cvsignore,v
retrieving revision 1.17
diff -u -r1.17 .cvsignore
--- lib/.cvsignore 29 Sep 2005 19:02:53 -0000 1.17
+++ lib/.cvsignore 2 Oct 2005 18:46:29 -0000
@@ -54,6 +54,8 @@
strnlen.h
strtol.c
strtoul.c
+strverscmp.c
+strverscmp.h
unistd--.h
unistd-safer.h
unlocked-io.h
Index: m4/.cvsignore
===================================================================
RCS file: /cvsroot/bison/bison/m4/.cvsignore,v
retrieving revision 1.14
diff -u -r1.14 .cvsignore
--- m4/.cvsignore 29 Sep 2005 19:02:54 -0000 1.14
+++ m4/.cvsignore 2 Oct 2005 18:46:29 -0000
@@ -30,6 +30,7 @@
strnlen.m4
strtol.m4
strtoul.m4
+strverscmp.m4
unistd-safer.m4
unlocked-io.m4
xalloc.m4
Index: src/parse-gram.y
===================================================================
RCS file: /cvsroot/bison/bison/src/parse-gram.y,v
retrieving revision 1.58
diff -u -r1.58 parse-gram.y
--- src/parse-gram.y 30 Sep 2005 17:57:05 -0000 1.58
+++ src/parse-gram.y 2 Oct 2005 18:46:30 -0000
@@ -32,6 +32,7 @@
#include "quotearg.h"
#include "reader.h"
#include "symlist.h"
+#include "strverscmp.h"
#define YYLLOC_DEFAULT(Current, Rhs, N) (Current) = lloc_default
(Rhs, N)
static YYLTYPE lloc_default (YYLTYPE const *, int);
@@ -39,6 +40,8 @@
#define YY_LOCATION_PRINT(File, Loc) \
location_print (File, Loc)
+static void version_check (location const *loc, char const *version);
+
/* Request detailed syntax error messages, and pass them to GRAM_ERROR.
FIXME: depends on the undocumented availability of YYLLOC. */
#undef yyerror
@@ -133,6 +136,7 @@
PERCENT_OUTPUT "%output"
PERCENT_PARSE_PARAM "%parse-param {...}"
PERCENT_PURE_PARSER "%pure-parser"
+ PERCENT_REQUIRE "%require"
PERCENT_SKELETON "%skeleton"
PERCENT_START "%start"
PERCENT_TOKEN_TABLE "%token-table"
@@ -226,6 +230,7 @@
| "%output" "=" string_content { spec_outfile = $3; }
| "%parse-param {...}" { add_param ("parse_param", $1,
@1); }
| "%pure-parser" { pure_parser = true; }
+| "%require" string_content { version_check (&@2, $2); }
| "%skeleton" string_content { skeleton = $2; }
| "%token-table" { token_table_flag = true; }
| "%verbose" { report_flag =
report_states; }
@@ -528,6 +533,14 @@
}
scanner_last_string_free ();
+}
+
+static void
+version_check (location const *loc, char const *version)
+{
+ if (strverscmp (version, PACKAGE_VERSION) > 0)
+ complain_at (*loc, "require bison %s, but have %s",
+ version, PACKAGE_VERSION);
}
static void
Index: src/scan-gram.l
===================================================================
RCS file: /cvsroot/bison/bison/src/scan-gram.l,v
retrieving revision 1.75
diff -u -r1.75 scan-gram.l
--- src/scan-gram.l 22 Jul 2005 17:58:51 -0000 1.75
+++ src/scan-gram.l 2 Oct 2005 18:46:31 -0000
@@ -224,6 +224,7 @@
"%prec" rule_length--; return PERCENT_PREC;
"%printer" token_type = PERCENT_PRINTER; BEGIN
SC_PRE_CODE;
"%pure"[-_]"parser" return PERCENT_PURE_PARSER; + "%require" return PERCENT_REQUIRE; "%right" return PERCENT_RIGHT; "%skeleton" return PERCENT_SKELETON; "%start" return PERCENT_START; Index: tests/input.at =================================================================== RCS file: /cvsroot/bison/bison/tests/input.at,v retrieving revision 1.34 diff -u -r1.34 input.at --- tests/input.at 14 May 2005 06:49:48 -0000 1.34 +++ tests/input.at 2 Oct 2005 18:46:31 -0000 @@ -297,3 +297,24 @@ AT_CHECK([bison -o input.c input.y]) AT_CLEANUP + + +## --------- ## +## Require. ## +## --------- ## + +m4_define([AT_CHECK_REQUIRE], +[AT_SETUP([Require $1]) +AT_DATA_GRAMMAR([input.y], +[[%require "$1"; +%% +empty_file:; +]]) +AT_CHECK([bison -o input.c input.y], $2, [], ignore) +AT_CLEANUP +]) + +AT_CHECK_REQUIRE(1.0, 0) +AT_CHECK_REQUIRE(AT_PACKAGE_VERSION, 0) +## FIXME: Some day augment this version number. +AT_CHECK_REQUIRE(100.0, 1)
diffs.patch
Description: Binary data
