Tree Rascal:Repl中的树表示
我知道Rascal repl中的默认树表示已更改。按照我得到的食谱做 而文件上说Tree Rascal:Repl中的树表示,tree,rascal,Tree,Rascal,我知道Rascal repl中的默认树表示已更改。按照我得到的食谱做 而文件上说 rascal>import demo::lang::Exp::Combined::Manual::Parse; ok rascal>parseExp("2+3"); Tree: `2+3` Tree: appl(prod(sort("Exp"),[sort("Exp"),layouts("Whitespace"), ... 有没有办法回到这个“原始”树表示法(只有语言研究人员才会想看到;-),可能是布
rascal>import demo::lang::Exp::Combined::Manual::Parse;
ok
rascal>parseExp("2+3");
Tree: `2+3`
Tree: appl(prod(sort("Exp"),[sort("Exp"),layouts("Whitespace"), ...
有没有办法回到这个“原始”树表示法(只有语言研究人员才会想看到;-),可能是布局(缩进等)?您可以通过使用
IO
库中的iprintln
获得底层树表示法:
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
rascal>import-demo::lang::Exp::Combined::Manual::Parse;
好啊
流氓>输入IO;
好啊
rascal>iprintln(parseExp(“2+3*4”))
应用(
刺激(
排序(“Exp”),
[
排序(“Exp”),
布局(“空白”),
亮(“+”),
布局(“空白”),
排序(“Exp”)
],
{assoc(left())}),
[应用(
刺激(
排序(“Exp”),
[法律(“整体法”)],
{}),
[应用(
刺激(
法律(“整体法”),
[iter(\char类([range(48,57)])],
{}),
[应用(
常规(iter(\char类([范围(48,57)])),
[字符(50)])[
@loc=|未知://|(0,1,,)
]])[
@loc=|未知://|(0,1,,)
]])[
@loc=|未知://|(0,1,,)
],appl(
刺激(
布局(“空白”),
[\iter星形(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))],
{}),
[应用(
普通(\iter)星(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))),
[])[
@loc=|未知://|(1,0,,)
]])[
@loc=|未知://|(1,0,,)
],appl(
刺激(
亮(“+”),
[\char类([范围(43,43)])],
{}),
[字符(43)],适用于(
刺激(
布局(“空白”),
[\iter星形(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))],
{}),
[应用(
普通(\iter)星(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))),
[])[
@loc=|未知://|(2,0,,)
]])[
@loc=|未知://|(2,0,,)
],appl(
刺激(
排序(“Exp”),
[
排序(“Exp”),
布局(“空白”),
点亮(“*”),
布局(“空白”),
排序(“Exp”)
],
{assoc(left())}),
[应用(
刺激(
排序(“Exp”),
[法律(“整体法”)],
{}),
[应用(
刺激(
法律(“整体法”),
[iter(\char类([range(48,57)])],
{}),
[应用(
常规(iter(\char类([范围(48,57)])),
[char(51)])[
@loc=|未知://|(2,1,,)
]])[
@loc=|未知://|(2,1,,)
]])[
@loc=|未知://|(2,1,,)
],appl(
刺激(
布局(“空白”),
[\iter星形(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))],
{}),
[应用(
普通(\iter)星(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))),
[])[
@loc=|未知://|(3,0,,)
]])[
@loc=|未知://|(3,0,,)
],appl(
刺激(
点亮(“*”),
[\char类([范围(42,42)])],
{}),
[字符(42)],适用于(
刺激(
布局(“空白”),
[\iter星形(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))],
{}),
[应用(
普通(\iter)星(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))),
[])[
@loc=|未知://|(4,0,,)
]])[
@loc=|未知://|(4,0,,)
],appl(
刺激(
排序(“Exp”),
[法律(“整体法”)],
{}),
[应用(
刺激(
法律(“整体法”),
[iter(\char类([range(48,57)])],
{}),
[应用(
常规(iter(\char类([范围(48,57)])),
[字符(52)])[
@loc=|未知://|(4,1,,)
]])[
@loc=|未知://|(4,1,,)
]])[
@loc=|未知://|(4,1,,)
]])[
@loc=|未知://|(2,3,,)
]])[
@loc=|未知://|(0,5,,)
]
好啊
您可以使用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
rascal>import-demo::lang::Exp::Combined::Manual::Parse;
好啊
流氓>输入IO;
好啊
rascal>iprintln(parseExp(“2+3*4”))
应用(
刺激(
排序(“Exp”),
[
排序(“Exp”),
布局(“空白”),
亮(“+”),
布局(“空白”),
排序(“Exp”)
],
{assoc(left())}),
[应用(
刺激(
排序(“Exp”),
[法律(“整体法”)],
{}),
[应用(
刺激(
法律(“整体法”),
[iter(\char类([range(48,57)])],
{}),
[应用(
常规(iter(\char类([范围(48,57)])),
[字符(50)])[
@loc=|未知://|(0,1,,)
]])[
@loc=|未知://|(0,1,,)
]])[
@loc=|未知://|(0,1,,)
],appl(
刺激(
布局(“空白”),
[\iter星形(\char类([
范围(9,10),
范围(13,13),
范围(32,32)
]))],
{}),
[a]