bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commit] Remove restrictions on expanding GLR stacks in C++.


From: Paul Hilfinger
Subject: [commit] Remove restrictions on expanding GLR stacks in C++.
Date: Tue, 03 Aug 2010 19:56:15 -0700

I have committed the following patch, after making improvements suggested
by Paul Eggert.

Paul Hilfinger

Changelog:

    * data/glr.c:  Remove tests for __cplusplus related to definition of
    YYSTACKEXPANDABLE.
    * doc/bison.texinfo: Rewrite paragraph saying C++ stacks are not
    expandable to instead indicate conditions that prevent their expansion
    in C++.  Reorganize section on GLR semantic values a bit. Remove
    discussion of YYLLOC_DEFAULT. Mention restrictions to POD data.
---
 data/glr.c        |    6 ------
 doc/bison.texinfo |   39 ++++++++++++++++++++++++++-------------
 2 files changed, 26 insertions(+), 19 deletions(-)

diff --git a/data/glr.c b/data/glr.c
index b72aef7..e1c8a45 100644
--- a/data/glr.c
+++ b/data/glr.c
@@ -576,13 +576,7 @@ int yydebug;
 #define YYHEADROOM 2
 
 #ifndef YYSTACKEXPANDABLE
-# if (! defined __cplusplus \
-      || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-         && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
 #  define YYSTACKEXPANDABLE 1
-# else
-#  define YYSTACKEXPANDABLE 0
-# endif
 #endif
 
 #if YYSTACKEXPANDABLE
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index 6d9d1be..d6e56a9 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -135,7 +135,7 @@ Writing @acronym{GLR} Parsers
 
 * Simple GLR Parsers::     Using @acronym{GLR} parsers on unambiguous grammars.
 * Merging GLR Parses::     Using @acronym{GLR} parsers to resolve ambiguities.
-* GLR Semantic Actions::   Deferred semantic actions have special concerns.
+* GLR Semantic Actions::   Considerations for semantic values and deferred 
actions.
 * Semantic Predicates::    Controlling a parse with arbitrary computations.
 * Compiler Requirements::  @acronym{GLR} parsers require a modern C compiler.
 
@@ -758,7 +758,7 @@ merged result.
 @menu
 * Simple GLR Parsers::     Using @acronym{GLR} parsers on unambiguous grammars.
 * Merging GLR Parses::     Using @acronym{GLR} parsers to resolve ambiguities.
-* GLR Semantic Actions::   Deferred semantic actions have special concerns.
+* GLR Semantic Actions::   Considerations for semantic values and deferred 
actions.
 * Semantic Predicates::    Controlling a parse with arbitrary computations.
 * Compiler Requirements::  @acronym{GLR} parsers require a modern C compiler.
 @end menu
@@ -1119,6 +1119,10 @@ the offending merge.
 @node GLR Semantic Actions
 @subsection GLR Semantic Actions
 
+The nature of @acronym{GLR} parsing and the structure of the generated
+parsers give rise to certain restrictions on semantic values and actions.
+
address@hidden Deferred semantic actions
 @cindex deferred semantic actions
 By definition, a deferred semantic action is not performed at the same time as
 the associated reduction.
@@ -1152,6 +1156,7 @@ For example, if a semantic action might be deferred, you 
should never write it
 to invoke @code{yyclearin} (@pxref{Action Features}) or to attempt to free
 memory referenced by @code{yylval}.
 
address@hidden YYERROR
 @findex YYERROR
 @cindex @acronym{GLR} parsers and @code{YYERROR}
 Another Bison feature requiring special consideration is @code{YYERROR}
@@ -1159,11 +1164,17 @@ Another Bison feature requiring special consideration 
is @code{YYERROR}
 initiate error recovery.
 During deterministic @acronym{GLR} operation, the effect of @code{YYERROR} is
 the same as its effect in a deterministic parser.
-In a deferred semantic action, its effect is undefined.
address@hidden The effect is probably a syntax error at the split point.
-
-Also, see @ref{Location Default Action, ,Default Action for Locations}, which
-describes a special usage of @code{YYLLOC_DEFAULT} in @acronym{GLR} parsers.
+The effect in a deferred action is similar, but the precise point of the 
+error is undefined;  instead, the parser reverts to deterministic operation, 
+selecting an unspecified stack on which to continue with a syntax error.
+In a semantic predicate (see @ref{Semantic Predicates}) during nondeterministic
+parsing, @code{YYERROR} silently prunes
+the parse that invoked the test.
+
address@hidden Restrictions on semantic values and locations
address@hidden parsers require that you use POD (Plain Old Data) types for
+semantic values and location types when using the generated parsers as
+C++ code.
 
 @node Semantic Predicates
 @subsection Controlling a Parse with Arbitrary Predicates
@@ -7388,12 +7399,14 @@ that allows variable-length arrays.  The default is 200.
 
 Do not allow @code{YYINITDEPTH} to be greater than @code{YYMAXDEPTH}.
 
address@hidden FIXME: C++ output.
-Because of semantic differences between C and C++, the deterministic
-parsers in C produced by Bison cannot grow when compiled
-by C++ compilers.  In this precise case (compiling a C parser as C++) you are
-suggested to grow @code{YYINITDEPTH}.  The Bison maintainers hope to fix
-this deficiency in a future release.
+You can generate a deterministic parser containing C++ user code from
+the default (C) skeleton, as well as from the C++ skeleton 
+(@pxref{C++ Parsers}).  However, if you do use the default skeleton
+and want to allow the parsing stack to grow,
+be careful not to use semantic types or location types that require
+non-trivial copy constructors.
+The C skeleton bypasses these constructors when copying data to
+new, larger stacks.
 
 @node Error Recovery
 @chapter Error Recovery
-- 
1.7.0.6




reply via email to

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