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:
Akim Demaille
2021-01-06 19:22:18 +01:00
parent dc8b16424a
commit f859462658
6 changed files with 50 additions and 32 deletions

View File

@@ -21,6 +21,7 @@
%define api.parser.class {Calc}
%define parse.error verbose
%define parse.trace
%locations
@@ -38,6 +39,7 @@
EOL "end of line"
%token <ival> NUM "number"
%type <ival> exp
%printer { yyo.write($$); } <ival>
%left "-" "+"
%left "*" "/"
@@ -168,6 +170,9 @@ int main()
{
auto l = calcLexer(stdin);
auto p = new Calc(l);
import core.stdc.stdlib : getenv;
if (getenv("YYDEBUG"))
p.setDebugLevel(1);
p.parse();
return l.exit_status;
}