我正在寻找一种方法将抽象语法树“转储”到文件中,以便可以使用编译器解析代码,然后以独立于语言和编译器的方式存储。然而,我无法找到任何被广泛认可的方式来做到这一点。这种方式存在吗?
答案 0 :(得分:6)
没有存储AST的标准,或者更重要的是从您的角度来看,在工具之间共享。原因是AST依赖于语法(它有所不同; C有很多“取决于具体的编译器和版本)和解析技术。
已经有很多尝试在多种语言中定义通用AST表单,但它们都没有真正起作用;运营商的语义变化太大。 (仅考虑“+”:它到底意味着什么?在Fortran中,您可以添加数组,在Java中,您可以“添加”字符串)。
但是,人们可以很容易地写出特定的AST。一种简单的方法是使用某种表示法,其中使用某种嵌套的“括号”来识别节点及其递归子节点。
Lisp S表达式是执行此操作的常用方法。你可以see an example of the S-expression style generated by our tools。
人们也使用XML,但它非常笨重。您可以看到XML output example here。