[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FYI: %require
From: |
Akim Demaille |
Subject: |
FYI: %require |
Date: |
Sun, 2 Oct 2005 20:50:54 +0200 |
Also attached, I don't trust this mailer.
Index: ChangeLog
from Akim Demaille <address@hidden>
* 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
address@hidden Require Decl
address@hidden Require a Version of Bison
address@hidden version requirement
address@hidden requiring a version of Bison
address@hidden %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.
+
address@hidden
+%require "@var{version}"
address@hidden example
+
@node Token Decl
@subsection Token Type Names
@cindex declaring token type names
@@ -4157,6 +4172,12 @@
(Reentrant) Parser}).
@end deffn
address@hidden {Directive} %require "@var{version}"
+Specify that version @var{version} or higher of Bison required for the
+grammar.
address@hidden Decl, , Require a Version of Bison}.
address@hidden deffn
+
@deffn {Directive} %token-table
Generate an array of token names in the parser file. The name of the
array is @code{yytname}; @address@hidden 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}.
address@hidden deffn
+
address@hidden {Directive} %require "@var{version}"
+Specify that version @var{version} or higher of Bison required for the
+grammar.
address@hidden 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
- FYI: %require,
Akim Demaille <=