mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
d: add support for %printer
Currently we display the addresses of the semantic values. Instead, print the values. Add support for YY_USE across languages. * data/skeletons/c.m4, data/skeletons/d.m4 (b4_use): New. * data/skeletons/bison.m4 (b4_symbol_actions): Use b4_use to be portable to D. Add support for %printer, and use it. * data/skeletons/d.m4: Instead of duplicating what's already in c-like.m4, include it. (b4_symbol_action): New. Differs from the one in bison.m4 in that it uses yyval/yyloc instead of *yyvaluep and *yylocationp. * data/skeletons/lalr1.d (yy_symbol_print): Avoid calls to formatting, just call write directly. Use the %printer. * examples/d/calc/calc.y: Specify a printer. Enable traces when $YYDEBUG is set. * tests/calc.at: Fix the use of %printer with D.
This commit is contained in:
@@ -399,20 +399,17 @@ b4_user_union_members
|
||||
`--------------------------------*/
|
||||
|
||||
private final void yy_symbol_print (string s, SymbolKind yykind,
|
||||
ref Value yyvaluep]dnl
|
||||
b4_locations_if([, ref Location yylocationp])[)
|
||||
ref Value yyval]b4_locations_if([, ref Location yyloc])[)
|
||||
{
|
||||
if (0 < yydebug)
|
||||
{
|
||||
string message = s ~ (yykind < yyntokens_ ? " token " : " nterm ")
|
||||
~ format("%s", yykind) ~ " ("]b4_locations_if([
|
||||
~ yylocationp.toString() ~ ": "])[;
|
||||
static if (__traits(compiles, message ~= yyvaluep.toString()))
|
||||
message ~= yyvaluep.toString();
|
||||
else
|
||||
message ~= format("%s", &yyvaluep);
|
||||
message ~= ")";
|
||||
yycdebugln (message);
|
||||
File yyo = yyDebugStream;
|
||||
yyo.write(s);
|
||||
yyo.write(yykind < yyntokens_ ? " token " : " nterm ");
|
||||
yyo.write(format("%s", yykind));
|
||||
yyo.write(" ("]b4_locations_if([ ~ yyloc.toString() ~ ": "])[);
|
||||
]b4_symbol_actions([printer])[
|
||||
yyo.write(")\n");
|
||||
}
|
||||
}
|
||||
]])[
|
||||
|
||||
Reference in New Issue
Block a user