多少ast';什么是llvm程序生成的?
我正在阅读llvm的编译器编写指南:多少ast';什么是llvm程序生成的?,llvm,Llvm,我正在阅读llvm的编译器编写指南: 在该指南中,他们使用了一种叫做“万花筒”的简单语言作为例子。在阅读该指南之前,我的印象是每个程序都会生成一个AST(我假设该程序写在一个文件上,因此不需要链接)。但llvm似乎为每一行(或者更准确地说,为每一个构造)创建了一个单独的AST。因此,对于单个程序,llvm可以创建数百个单独的ast。这个解释正确吗 首先,请注意,本章实际上与LLVM没有太多关系。它只是解释如何为该语言编写解析器和AST。它不使用LLVM库中的任何代码,在一个根本不使用LLVM的
在该指南中,他们使用了一种叫做“万花筒”的简单语言作为例子。在阅读该指南之前,我的印象是每个程序都会生成一个AST(我假设该程序写在一个文件上,因此不需要链接)。但llvm似乎为每一行(或者更准确地说,为每一个构造)创建了一个单独的AST。因此,对于单个程序,llvm可以创建数百个单独的ast。这个解释正确吗 首先,请注意,本章实际上与LLVM没有太多关系。它只是解释如何为该语言编写解析器和AST。它不使用LLVM库中的任何代码,在一个根本不使用LLVM的项目中也不会有任何不同。只有在将AST转换为LLVM IR时,LLVM特定部分才会出现。因此,如果有什么区别的话,那不是LLVM生成“多个AST”,而是教程中的代码生成了“多个AST” 那么说代码生成多个AST准确吗?这完全取决于你的确切意思 与任何树一样,AST由多个子树组成。每个子树本身就是一个有效的树。所以你可以说每一棵非平凡的树实际上都是多棵树的集合,这也适用于本教程中的AST 但是,需要注意的是,所有子树都是较大树的一部分。如果您是这样想的,那么代码创建的多个树彼此不连接,这是不正确的
不是
llvm::make_unique
,但如果您的编译器支持C++14,也可以用std::make_unique
替换,如果您自己的实现不支持,也可以用std::make_unique
替换
²类似地,通过直接在解析器中生成LLVM IR而不创建任何AST,也完全可以编写基于LLVM的编译器。您是否以及如何生成AST完全独立于LLVM。请继续阅读。AST是一个抽象语法树,因此每个节点本身就是一个(子)树。