【问题标题】:Is there any standard way to store abstract syntax trees files?是否有任何标准方法来存储抽象语法树文件?
【发布时间】:2012-11-21 07:52:21
【问题描述】:

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

【问题讨论】:

  • 通常 AST 是暂时的,仅用于将解析后的信息从解析器传递给编译器。此时,您通常会保存字节码。
  • @xbonez:我知道这个事实。我正在寻找的是一种存储解析器输出并将其与其他编译器一起使用的方法。
  • 是的,确实如此。它叫做 LISP。

标签: compilation abstract-syntax-tree


【解决方案1】:

没有存储 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多