In GLR grammars, $N and @N now yield non-modifiable lvalues.

This commit is contained in:
Paul Eggert
2003-10-05 06:46:53 +00:00
parent 66ef8b9d65
commit 0cc3da3a4e
3 changed files with 14 additions and 5 deletions

View File

@@ -1,3 +1,11 @@
2003-10-04 Paul Eggert <eggert@twinsun.com>
* data/glr.c (b4_rhs_value, b4_rhs_location): Yield a
non-modifiable lvalue, instead of a modifiable one.
* doc/bison.texinfo (Actions): Document that $$ can
be assigned to. Do not claim that $$ and $N are
array element references: user code should not rely on this.
2003-10-01 Paul Eggert <eggert@twinsun.com> 2003-10-01 Paul Eggert <eggert@twinsun.com>
* src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token. * src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token.

View File

@@ -111,7 +111,7 @@ m4_define([b4_lhs_value],
# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
# symbols on RHS. # symbols on RHS.
m4_define([b4_rhs_value], m4_define([b4_rhs_value],
[yyvsp@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) [((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])])
@@ -131,7 +131,7 @@ m4_define([b4_lhs_location],
# Expansion of @NUM, where the current rule has RULE-LENGTH symbols # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
# on RHS. # on RHS.
m4_define([b4_rhs_location], m4_define([b4_rhs_location],
[yyvsp@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) [((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc])
# We do want M4 expansion after # for CPP macros. # We do want M4 expansion after # for CPP macros.
m4_changecom() m4_changecom()

View File

@@ -2797,9 +2797,10 @@ Actions, ,Actions in Mid-Rule}).
The C code in an action can refer to the semantic values of the components The C code in an action can refer to the semantic values of the components
matched by the rule with the construct @code{$@var{n}}, which stands for matched by the rule with the construct @code{$@var{n}}, which stands for
the value of the @var{n}th component. The semantic value for the grouping the value of the @var{n}th component. The semantic value for the grouping
being constructed is @code{$$}. (Bison translates both of these constructs being constructed is @code{$$}. Bison translates both of these
into array element references when it copies the actions into the parser constructs into expressions of the appropriate type when it copies the
file.) actions into the parser file. @code{$$} is translated to a modifiable
lvalue, so it can be assigned to.
Here is a typical example: Here is a typical example: