Вы можете получить базовое представление дерева, используя iprintln
из библиотеки IO
:
rascal>import demo::lang::Exp::Combined::Manual::Parse;
ok
rascal>import IO;
ok
rascal>iprintln(parseExp("2+3*4"))
appl(
prod(
sort("Exp"),
[
sort("Exp"),
layouts("Whitespace"),
lit("+"),
layouts("Whitespace"),
sort("Exp")
],
{assoc(left())}),
[appl(
prod(
sort("Exp"),
[lex("IntegerLiteral")],
{}),
[appl(
prod(
lex("IntegerLiteral"),
[iter(\char-class([range(48,57)]))],
{}),
[appl(
regular(iter(\char-class([range(48,57)]))),
[char(50)])[
@loc=|unknown:///|(0,1,<1,0>,<1,1>)
]])[
@loc=|unknown:///|(0,1,<1,0>,<1,1>)
]])[
@loc=|unknown:///|(0,1,<1,0>,<1,1>)
],appl(
prod(
layouts("Whitespace"),
[\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))],
{}),
[appl(
regular(\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))),
[])[
@loc=|unknown:///|(1,0,<1,1>,<1,1>)
]])[
@loc=|unknown:///|(1,0,<1,1>,<1,1>)
],appl(
prod(
lit("+"),
[\char-class([range(43,43)])],
{}),
[char(43)]),appl(
prod(
layouts("Whitespace"),
[\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))],
{}),
[appl(
regular(\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))),
[])[
@loc=|unknown:///|(2,0,<1,2>,<1,2>)
]])[
@loc=|unknown:///|(2,0,<1,2>,<1,2>)
],appl(
prod(
sort("Exp"),
[
sort("Exp"),
layouts("Whitespace"),
lit("*"),
layouts("Whitespace"),
sort("Exp")
],
{assoc(left())}),
[appl(
prod(
sort("Exp"),
[lex("IntegerLiteral")],
{}),
[appl(
prod(
lex("IntegerLiteral"),
[iter(\char-class([range(48,57)]))],
{}),
[appl(
regular(iter(\char-class([range(48,57)]))),
[char(51)])[
@loc=|unknown:///|(2,1,<1,2>,<1,3>)
]])[
@loc=|unknown:///|(2,1,<1,2>,<1,3>)
]])[
@loc=|unknown:///|(2,1,<1,2>,<1,3>)
],appl(
prod(
layouts("Whitespace"),
[\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))],
{}),
[appl(
regular(\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))),
[])[
@loc=|unknown:///|(3,0,<1,3>,<1,3>)
]])[
@loc=|unknown:///|(3,0,<1,3>,<1,3>)
],appl(
prod(
lit("*"),
[\char-class([range(42,42)])],
{}),
[char(42)]),appl(
prod(
layouts("Whitespace"),
[\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))],
{}),
[appl(
regular(\iter-star(\char-class([
range(9,10),
range(13,13),
range(32,32)
]))),
[])[
@loc=|unknown:///|(4,0,<1,4>,<1,4>)
]])[
@loc=|unknown:///|(4,0,<1,4>,<1,4>)
],appl(
prod(
sort("Exp"),
[lex("IntegerLiteral")],
{}),
[appl(
prod(
lex("IntegerLiteral"),
[iter(\char-class([range(48,57)]))],
{}),
[appl(
regular(iter(\char-class([range(48,57)]))),
[char(52)])[
@loc=|unknown:///|(4,1,<1,4>,<1,5>)
]])[
@loc=|unknown:///|(4,1,<1,4>,<1,5>)
]])[
@loc=|unknown:///|(4,1,<1,4>,<1,5>)
]])[
@loc=|unknown:///|(2,3,<1,2>,<1,5>)
]])[
@loc=|unknown:///|(0,5,<1,0>,<1,5>)
]
ok