Fix bug that mistakes braced code in a declaration in the rules section

to be a rule action.  Mentioned at
<http://lists.gnu.org/archive/html/bison-patches/2006-06/msg00105.html>.
* src/scan-gram.l: Move midrule action detection from the start of the
scanning of any braced code to...
* src/parse-gram.y (rhs): ... the parsing of braced code as a rule
action.  For readability, use $2 and @2 rather than the equivalent
global variables.
* tests/regression.at (Braced code in declaration in rules section):
New test to catch the error fixed by the above patch.

Work on code readability some.
* src/scan-code.l (current_rule): Get rid of this misleading and
redundant declaration: it's actually extern'ed in reader.h.
(YY_DECL, code_lex, handle_action_dollar, handle_action_at,
translate_action): Add a rule argument and use it instead of the global
current_rule.
(translate_rule_action): This already receives current_rule through an
argument, so pass it on to translate_action instead of assigning
current_rule to current_rule.
(translate_symbol_action, translate_code): Pass rule = NULL to
translate_action.
This commit is contained in:
Joel E. Denny
2006-06-24 06:51:27 +00:00
parent 34f98f46ee
commit 4210cd0bfc
6 changed files with 146 additions and 44 deletions

View File

@@ -473,8 +473,11 @@ rhs:
| rhs symbol
{ grammar_current_rule_symbol_append ($2, @2); }
| rhs "{...}"
{ grammar_current_rule_action_append (gram_last_string,
gram_last_braced_code_loc); }
{
if (current_rule && current_rule->action)
grammar_midrule_action ();
grammar_current_rule_action_append ($2, @2);
}
| rhs "%prec" symbol
{ grammar_current_rule_prec_set ($3, @3); }
| rhs "%dprec" INT