Rascal: Представление дерева в Repl - PullRequest
0 голосов
/ 08 февраля 2020

Я понимаю, что представление дерева по умолчанию в Rascal repl изменилось. Следуя рецепту для EXP Комбинированного примера , я получаю

rascal>import demo::lang::Exp::Combined::Manual::Parse;
ok
rascal>parseExp("2+3*4");
Exp: (Exp) `2+3*4`

, тогда как в документации говорится

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

Есть ли способ вернуться к этому «сырому» древовидное представление (которое захотят увидеть только языковые исследователи ;-), возможно, с макетом (indentation et c.)?

1 Ответ

2 голосов
/ 08 февраля 2020

Вы можете получить базовое представление дерева, используя 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
...