Tree 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 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"), ...

有没有办法回到这个“原始”树表示法(只有语言研究人员才会想看到;-),可能是布局(缩进等)?

您可以通过使用
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]