summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorPaul Hilfinger <Hilfinger@cs.berkeley.edu>2010-07-29 01:43:37 -0700
committerPaul Hilfinger <Hilfinger@cs.berkeley.edu>2010-08-03 19:52:23 -0700
commit20be2f9227151063a9e201bc3aad93362a0cebbc (patch)
treedcf73de09bd36f4dbf7ce2dbc9c575cf5e00e970 /doc
parentc61d4fa1d0307fdfd88dcd74ce19e6bb14b0a813 (diff)
downloadbison-20be2f9227151063a9e201bc3aad93362a0cebbc.tar.gz
Remove restrictions on expanding GLR stacks in C++.
* 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.
Diffstat (limited to 'doc')
-rw-r--r--doc/bison.texinfo39
1 files changed, 26 insertions, 13 deletions
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index 6d9d1be2..d6e56a93 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.
+
+@subsubsection 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}.
+@subsubsection 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.
-@c 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.
+
+@subsubsection Restrictions on semantic values and locations
+@acronym{GLR} 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}.
-@c 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