Commit Graph
15 Commits
Author SHA1 Message Date
Joel E. Denny 1e137b710b * doc/bison.texinfo (Introduction): Mention GLR and C++ as on the web
page.  Say "you can use it" not "you may use it" as on the web page;
we're describing capabilities not granting permission.
2006-03-08 19:34:56 +00:00
Joel E. Denny 8710fc41aa * tests/glr-regression.at (Uninitialized location when reporting
ambiguity): New test case.
* data/glr.c (yyresolveLocations): New function, which uses
YYLLOC_DEFAULT.
(yyresolveValue): Invoke yyresolveLocations before reporting an
ambiguity.
* doc/bison.texinfo (Default Action for Locations): Note
YYLLOC_DEFAULT's usage for ambiguity locations.
(GLR Semantic Actions): Cross-reference those notes.
2006-03-06 07:39:11 +00:00
Joel E. Denny ae952af227 * tests/glr-regression.at (Leaked semantic values when reporting
ambiguity): Remove unnecessary union and type declarations.
(Leaked lookahead after nondeterministic parse syntax error): New test
case.
* data/glr.c (yyparse): Check for zero stacks remaining before
attempting to shift the lookahead so that you don't lose it.
2006-03-04 03:29:03 +00:00
Joel E. Denny 35ee866a32 Avoid memory leaks by not invoking longjmp in yyreportAmbiguity.
* tests/glr-regression.at (Leaked semantic values when reporting
ambiguity): New test case.
* data/glr.c (yyreportAmbiguity): Invoke yyyerror directly and return
yyabort rather than invoking yyFail, which invokes longjmp.  Remove the
now unnecessary yystackp parameter.
(yyresolveValue): Return yyreportAmbiguity's result.  Now the necessary
destructors can be called.

* tests/glr-regression.at: Don't invoke bison with `-t' unnecessarily
in existing testcases.
2006-03-02 06:18:09 +00:00
Joel E. Denny 520181ab91 Don't leak semantic values for parent RHS when a user action cuts the
parser, and clean up related code a bit.
* tests/glr-regression.at (Leaked merged semantic value if user action
cuts parse) Rename to...
(Leaked semantic values if user action cuts parse) ... this.  Add check
for leaked parent RHS values.
* data/glr.c (yydestroyGLRState): In debugging output, distinguish
between an unresolved state (non-empty chain of semantic options) and
an incomplete one (signaled by an empty chain).
(yyresolveStates): Document the interface.  Move all manipulation of an
successfully or unsuccessfully resolved yyGLRState to...
(yyresolveValue): ... here so that yyresolveValue always leaves a
yyGLRState with consistent data and thus is easier to understand.
Remove the yyvalp and yylocp parameters since they are always just
taken from the yys parameter.  When reporting a discarded merged value
in debugging output, note that it is incompletely merged.  Document the
interface.
(yyresolveAction): If resolving any of the RHS states fails, destroy
them all rather than leaking them.  Thus, as long as user actions are
written to clean up the RHS correctly, yyresolveAction always cleans up
the RHS of a semantic option.  Document the interface.
2006-03-02 01:35:15 +00:00
Joel E. Denny 841a773708 * doc/bison.texinfo (Mid-Rule Actions): Explain how to bury a
mid-rule action inside a nonterminal symbol in order to declare a
destructor for its semantic value.
2006-02-21 21:01:57 +00:00
Joel E. Denny 3f0014152b During deterministic GLR operation, user actions should be able to
influence the parse by changing yychar.  To make this easier to fix and
to make glr.c easier to evolve in general, don't maintain yytoken in
parallel with yychar; just compute yytoken when needed.
* tests/glr-regression.at (Incorrect lookahead during deterministic
GLR): Check that setting yychar in a user action has the intended
effect.
* data/glr.c (yyGLRStack): Remove yytokenp member.
(yyclearin): Don't set *yytokenp.
(yyprocessOneStack, yyreportSyntaxError, yyrecoverSyntaxError): Examine
yychar rather than *yytokenp to determine the current lookahead.
Compute yytoken locally when needed.
(yyparse): Likewise.  Remove the local yytoken that yytokenp used to
point to.

* doc/bison.texinfo (Bison Options): Remove stray sentence fragment
after `--report' documentation.
2006-01-30 11:15:15 +00:00
Joel E. Denny b7691f15bd * data/glr.c (yyGLRStateSet): Rename yylookaheadStatuses to
yylookaheadNeeds.  All uses updated.
(yysplitStack): Rename local yynewLookaheadStatuses to
yynewLookaheadNeeds.
* data/glr-regression.at (Incorrect lookahead during nondeterministic
GLR): In comments, change `lookahead status' to `lookahead need'.
2006-01-12 01:43:03 +00:00
Joel E. Denny 32c292920e * doc/bison.texinfo: Fix some typos.
(GLR Semantic Actions): New subsection discussing special
considerations because GLR semantic actions might be deferred.
(Actions): Mention look-ahead usage of yylval.
(Actions and Locations): Mention look-ahead usage of yylloc.
(Special Features for Use in Actions): Add YYEOF entry and mention it
in the yychar entry.
In the yychar entry, remove mention of the local yychar case (pure
parser) since this is irrelevant information when writing semantic
actions and since it's already discussed in `Bison Symbols' where
yychar is otherwise described as an external variable.
In the yychar entry, don't call it the `current' look-ahead since it
isn't when semantic actions are deferred.
In the yychar and yyclearin entries, add note about deferred semantic
actions.
Add yylloc and yylval entries discussing look-ahead usage.
(Look-Ahead Tokens): When discussing yychar, don't call it the
`current' look-ahead, and do mention yylval and yylloc.
(Error Recovery): Cross-reference `Action Features' when mentioning
yyclearin.
(Bison Symbols): In the yychar entry, don't call it the `current'
look-ahead.
In the yylloc and yylval entries, mention look-ahead usage.
2006-01-11 22:39:27 +00:00
Joel E. Denny 2781dbd121 * tests/glr-regression.at: Update copyright year to 2006. 2006-01-08 23:16:51 +00:00
Joel E. Denny bf70fa8729 * data/glr.c (yyGLRStateSet): Add yybool* yylookaheadStatuses member to
use during nondeterministic operation to track which stacks have
actually needed the current lookahead.
(yyinitStateSet, yyfreeStateSet, yyremoveDeletes, yysplitStack):
Allocate, deallocate, resize, and otherwise shuffle space for
yylookaheadStatuses in parallel with yystates member of yyGLRStateSet.
(yysplitStack, yyprocessOneStack, yyparse): Set lookahead status
appropriately during nondeterministic operation.
(yySemanticOption): Add int yyrawchar, YYSTYPE yyval, and YYLTYPE yyloc
members to store the current lookahead to be used by the deferred
user action.
(yyaddDeferredAction): Add size_t yyk parameter specifying the stack
from which the RHS is taken.  Set the lookahead members of the new
yySemanticOption according to the lookahead status for stack yyk.
(yyglrShiftDefer, yyglrReduce): Pass yyk parameter on to
yyaddDeferredAction.
(yyresolveAction): Set yychar, yylval, and yylloc to the lookahead
members of yySemanticOption before invoking yyuserAction, and then set
them back to their current values afterward.
(yyparse): Set yychar = YYEMPTY where yytoken = YYEMPTY.
(yyreportAmbiguity): Add /*ARGSUSED*/ to pacify lint.
* tests/glr-regression.at: Remove `.' from the ends of recent test case
titles for consistency.
(Leaked merged semantic value if user action cuts parse): In order to
suppress lint warnings, use arguments in merge function, and assign
char value < 128 in main.
(Incorrect lookahead during deterministic GLR): New test case.
(Incorrect lookahead during nondeterministic GLR): New test case.
2006-01-06 20:48:33 +00:00
Joel E. Denny 05449a2c1b * data/c.m4 (b4_yy_symbol_print_generate): In yy_symbol_print, accept
!yyvaluep as signal that no semantic value is available to print.
* data/glr.c (yydestroyGLRState): If state is not resolved, don't try
to print a semantic value.
2006-01-06 20:09:31 +00:00
Joel E. Denny fd2493f7c4 * ChangeLog: Correct formatting. 2006-01-06 01:14:49 +00:00
Joel E. Denny 4158e0a143 * tests/glr-regression.at: For consistency with my newer test cases,
don't thank myself.
2006-01-06 01:07:37 +00:00
Joel E. Denny d659304d0a * data/glr.c (yyresolveValue): When merging semantic options, if at
least one user action succeeds but a later one cuts the parse, then
destroy the semantic value before returning rather than leaking it.
(yyresolveStates): If a user action cuts the parse and thus
yyresolveValue fails, ignore the (unset) semantic value rather than
corrupting the yyGLRState, and empty the semantic options list since
the user actions should have called all necessary destructors.
Simplify code with YYCHK.
* tests/glr-regression.at (Corrupted semantic options if user action
cuts parse): New test case.
(Undesirable destructors if user action cuts parse): New test case.
Before applying any of this patch, this test case never actually failed
for me... but only because the corrupted semantic options usually
masked this bug.
(Leaked merged semantic value if user action cuts parse): New test
case.
2006-01-05 21:07:54 +00:00