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

Compilation 有没有标准的方法来存储抽象语法树文件?,compilation,abstract-syntax-tree,Compilation,Abstract Syntax Tree,我正在寻找一种将抽象语法树“转储”到文件中的方法,这样代码就可以用编译器解析,然后以独立于语言和编译器的方式存储。然而,我找不到任何被广泛认可的方法来做这件事。是否存在这种方式?没有存储AST的标准,或者从您的角度来看,更重要的是,在工具之间共享AST。原因是AST依赖于语法(不同的语法;C根据特定的编译器和版本有“很多”)和解析技术 有很多人试图跨多种语言定义通用AST表单,但都没有真正起作用;运算符的语义变化太大。(只考虑“+”:它的真正含义是什么?在Fortran中,您可以添加数组,在Ja

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

没有存储AST的标准,或者从您的角度来看,更重要的是,在工具之间共享AST。原因是AST依赖于语法(不同的语法;C根据特定的编译器和版本有“很多”)和解析技术

有很多人试图跨多种语言定义通用AST表单,但都没有真正起作用;运算符的语义变化太大。(只考虑“+”:它的真正含义是什么?在Fortran中,您可以添加数组,在Java中,您可以“添加”字符串)

但是,可以相当容易地写出特定的AST。一种简单的方法是使用某种表示法,其中使用某种嵌套的“括号”来标识节点及其递归子节点

Lisp S表达式是实现这一点的常用方法。你可以


人们也为此使用了XML,但它相当庞大。您可以看到。

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