bison-patches
[Top][All Lists]
Advanced

[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)

Attachment: diffs.patch
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]