有没有标准的方法来存储抽象语法树文件?

时间:2012-11-21 07:52:22

标签: compilation abstract-syntax-tree

我正在寻找一种方法将抽象语法树“转储”到文件中,以便可以使用编译器解析代码,然后以独立于语言和编译器的方式存储。然而,我无法找到任何被广泛认可的方式来做到这一点。这种方式存在吗?

1 个答案:

答案 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