我正在寻找一种将抽象语法树“转储”到文件中的方法,以便可以使用编译器解析代码,然后以独立于语言和编译器的方式存储代码。然而,我找不到任何被广泛认可的方法来做到这一点。这种方式存在吗?
问问题
1647 次
1 回答
7
没有存储 AST 的标准,或者更重要的是,从您的角度来看,在工具之间共享它们。原因是 AST 依赖于语法(不同;C 有“很多”,取决于具体的编译器和版本)和解析技术。
已经有很多尝试跨多种语言定义通用 AST 形式,但没有一个真正奏效;运算符的语义变化太大。(仅考虑“+”:它的真正含义是什么?在 Fortran 中,您可以添加数组,在 Java 中,您可以“添加”字符串)。
但是,可以很容易地写出特定的 AST。一种简单的方法是使用某种符号,其中使用某种嵌套的“括号”标识节点及其递归子节点。
Lisp S 表达式是执行此操作的常用方法。您可以看到我们的工具生成的 S 表达式样式示例。
人们也为此使用了 XML,但它相当庞大。您可以在此处查看 XML 输出示例。
于 2012-11-21T10:17:56.697 回答