首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rascal: Repl中的树表示

Rascal: Repl中的树表示
EN

Stack Overflow用户
提问于 2020-02-08 23:01:25
回答 1查看 50关注 0票数 0

我知道Rascal repl中的默认树表示已经改变了。遵循我得到的EXP Combined example的秘诀

代码语言:javascript
复制
rascal>import demo::lang::Exp::Combined::Manual::Parse;
ok
rascal>parseExp("2+3*4");
Exp: (Exp) `2+3*4`

而文档上说

代码语言:javascript
复制
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"), ...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-08 23:23:09

您可以通过使用IO库中的iprintln来获取底层树表示:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60128008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档