在 Rascal 中漂亮地打印 AST

Pretty printing AST in Rascal

我正在尝试从

pretty print an AST generated
createAstFromFile(|cwd:///Java/Hello.java|,true);

我是不是错过了文档中的操作方法?

如果你的意思是解析 AST(取回 Java 代码),你将不得不自己写一些东西。

如果您的意思是打印 AST 结构时缩进得很好,我们有 iprintln 正是为了这个目的。

此外,对于大型 AST,REPL 可能不太喜欢它,请在 util::FastPrint 中查看我们(目前尚未)未记录的快速打印功能。 fiprintln 打印到 rascal 输出 window,速度要快得多。

不,我认为当前版本不包含此功能。如果不重写AST,当然可以通过读取位置获取源码,如:

rascal>import IO;
ok
rascal>readFile(ast@\loc)
str: ...

这只有在天气合适的时候才有效。其他解决方案是:

  • 使用字符串模板将 AST 映射回源代码(最简单)
  • 将 AST 映射到 Box 语言并调用格式函数(最强大和可配置)
  • 以上的混合体

我好像记得Java里面有个函数把M3 AST映射回JDT AST,然后调用JDT的pretty print函数,不过好像停产了。换句话说,这里有一些 TODO。