在 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。
我正在尝试从
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。