mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Allow specification of semantic predicates.
These changes allow users to prefix an action with %? to indicate that it
is a semantic predicate---an expression that is evaluated immediately (not
deferred, even in GLR nondeterministic mode) and causes a syntax error if
false. In GLR parsers, this has the effect of killing one of a set of
split-off parses, just as would an ordinary syntax error.
Changelog:
* NEWS: Describe new semantic-predicate feature.
* data/c.m4 (b4_predicate_case): New definition.
* data/java.m4 (b4_predicate_case): New definition.
* data/glr.c (yyimmediate): Add definition.
(yydoAction): Remove comment, now obsolete.
Do YY_REDUCE_PRINT here.
(yyglrReduce): Alter comment to indicate that semantic values
need not be deferred.
Remove YY_REDUCE_PRINT from here; done in yydoAction.
(yyprocessOneStack): Pass immediate flag.
Delete stacks rejected by predicates in newly split-off parsers.
Change handling of yyerr so that only current stack gets deleted
when semantic predicate fails.
(yyfillin): Don't crash if a semantic value is unresolved (as may
happen in predicate rules).
Copy lr state as well in debugging mode.
Update comment on setting of yysval to include yyloc as well.
(yy_reduce_print): Add yynormal argument. Perform fillin properly.
Report unresolved RHS values.
(yyimmediate): New table.
* src/gram.h (struct rule): Add is_predicate field.
* src/output.c (user_actions_output): Use b4_predicate_case for
predicates.
(prepare_symbols): Output yyimmediate.
* src/scan-gram.l: Add %? token, SC_PREDICATE state.
* src/scan-code.l (code_props_rule_action_init): Add is_predicate
argument.
* src/scan-code.h (struct code_props): Add is_predicate field.
(code_props_rule_action_init): New interface.
* src/parse-gram.y (%?{...}): New token.
(rhs): Add %?{...} rule.
* src/parse-gram.c: Regenerate.
* src/parse-gram.h: Regenerate.
* src/reader.c (grammar_current_rule_action_append): Add
immediate argument.
(grammar_midrule_action): Use new interface for
code_props_rule_action_init.
(grammar_current_rule_action_append): Ditto.
(packgram): Transfer is_predicate value.
* src/reader.h (grammar_current_rule_action_append): New interface.
* doc/bison.texinfo: Document semantic predicates (%?).
* data/glr.c (yylhsNonterm, yyisDefaultedState,yyDefaultAction)
(yygetLRActions,yynewGLRStackItem,yyaddDeferredAction,yyinitStateSet)
(yyinitGLRStack,yyexpandGLRStack,yyupdateSplit,yymarkStackDeleted)
(yyundeleteLastStack,yyglrShift,yyglrShiftDefer,yydoAction,yyglrReduce)
(yyidenticalOptions,yymergeOptionSets,yyresolveStates,yyresolveAction)
(yyresolveLocations,yyresolveValue,yyreducePrint): Update parameter
names in comments and mention all parameters.
(struct yyGLRState): Fix description of yyposn field.
(yyresolveLocations): Correct comment so as not to imply action when
yyn1==0.
This commit is contained in:
55
ChangeLog
55
ChangeLog
@@ -1,3 +1,58 @@
|
||||
2010-07-23 Paul Hilfinger <hilfingr@EECS.Berkeley.EDU>
|
||||
|
||||
* NEWS: Describe new semantic-predicate feature.
|
||||
* data/c.m4 (b4_predicate_case): New definition.
|
||||
* data/java.m4 (b4_predicate_case): New definition.
|
||||
* data/glr.c (yyimmediate): Add definition.
|
||||
(yydoAction): Remove comment, now obsolete.
|
||||
Do YY_REDUCE_PRINT here.
|
||||
(yyglrReduce): Alter comment to indicate that semantic values
|
||||
need not be deferred.
|
||||
Remove YY_REDUCE_PRINT from here; done in yydoAction.
|
||||
(yyprocessOneStack): Pass immediate flag.
|
||||
Delete stacks rejected by predicates in newly split-off parsers.
|
||||
Change handling of yyerr so that only current stack gets deleted
|
||||
when semantic predicate fails.
|
||||
(yyfillin): Don't crash if a semantic value is unresolved (as may
|
||||
happen in predicate rules).
|
||||
Copy lr state as well in debugging mode.
|
||||
Update comment on setting of yysval to include yyloc as well.
|
||||
(yy_reduce_print): Add yynormal argument. Perform fillin properly.
|
||||
Report unresolved RHS values.
|
||||
(yyimmediate): New table.
|
||||
* src/gram.h (struct rule): Add is_predicate field.
|
||||
* src/output.c (user_actions_output): Use b4_predicate_case for
|
||||
predicates.
|
||||
(prepare_symbols): Output yyimmediate.
|
||||
* src/scan-gram.l: Add %? token, SC_PREDICATE state.
|
||||
* src/scan-code.l (code_props_rule_action_init): Add is_predicate
|
||||
argument.
|
||||
* src/scan-code.h (struct code_props): Add is_predicate field.
|
||||
(code_props_rule_action_init): New interface.
|
||||
* src/parse-gram.y (%?{...}): New token.
|
||||
(rhs): Add %?{...} rule.
|
||||
* src/parse-gram.c: Regenerate.
|
||||
* src/parse-gram.h: Regenerate.
|
||||
* src/reader.c (grammar_current_rule_action_append): Add
|
||||
immediate argument.
|
||||
(grammar_midrule_action): Use new interface for
|
||||
code_props_rule_action_init.
|
||||
(grammar_current_rule_action_append): Ditto.
|
||||
(packgram): Transfer is_predicate value.
|
||||
* src/reader.h (grammar_current_rule_action_append): New interface.
|
||||
* doc/bison.texinfo: Document semantic predicates (%?).
|
||||
|
||||
* data/glr.c (yylhsNonterm, yyisDefaultedState,yyDefaultAction)
|
||||
(yygetLRActions,yynewGLRStackItem,yyaddDeferredAction,yyinitStateSet)
|
||||
(yyinitGLRStack,yyexpandGLRStack,yyupdateSplit,yymarkStackDeleted)
|
||||
(yyundeleteLastStack,yyglrShift,yyglrShiftDefer,yydoAction,yyglrReduce)
|
||||
(yyidenticalOptions,yymergeOptionSets,yyresolveStates,yyresolveAction)
|
||||
(yyresolveLocations,yyresolveValue,yyreducePrint): Update parameter
|
||||
names in comments and mention all parameters.
|
||||
(struct yyGLRState): Fix description of yyposn field.
|
||||
(yyresolveLocations): Correct comment so as not to imply action when
|
||||
yyn1==0.
|
||||
|
||||
2010-06-17 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Update from GFDL GFDL 1.2 to 1.3.
|
||||
|
||||
Reference in New Issue
Block a user