summaryrefslogtreecommitdiff
path: root/doc/bison.x
diff options
context:
space:
mode:
authorPaul Hilfinger <Hilfinger@cs.berkeley.edu>2010-07-22 19:08:10 -0700
committerPaul Hilfinger <Hilfinger@cs.berkeley.edu>2010-07-23 19:06:09 -0700
commitca2a6d1587f421a6c58b9f80cc8d6b983c9a62dc (patch)
tree9641c856c4c703c77996cc3e0ec1ef5bd832c699 /doc/bison.x
parent804e83b26daa5c1c2cd84195faf114cc531b876b (diff)
downloadbison-ca2a6d1587f421a6c58b9f80cc8d6b983c9a62dc.tar.gz
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.
Diffstat (limited to 'doc/bison.x')
0 files changed, 0 insertions, 0 deletions