c++的LLVM替代方案(字节码生成)

Alternative to LLVM for C++ (bytecode generation)

本文关键字:字节 方案 LLVM c++      更新时间:2023-10-16

我在flexbison中编写了我的词法分析器和解析器。我的项目是基于c++的,我想坚持下去。目前,我的解释器是用C++编写的,但我想通过转换为字节码(某种形式的vm级字节码)来实现更快的执行时间,当我的解释器工作时。我知道这可以通过LLVM来实现。我在x64操作系统上使用它并在Visual Studio 2012(32位)上进行开发时遇到了问题。其中一些可以在vs上找到@ LLVM链接器错误。我遇到的另一个工具是ANTLR,如果我理解正确的话,那么最新版本还不容易集成到C++中。许多参考资料都是相同的,但一个快速的可以@ ANTLR与c++集成的问题。另外,我不想丢弃用flex和bison编写的词法分析器和解析器。如果我想从AST生成字节码,我有哪些选项?

EDIT:我的目标是从AST(针对目标体系结构)生成字节码,以便代码可以在虚拟机级别执行。目前我有一个解释器,它解释(执行AST)基于c++库并生成字节码。我想直接从AST生成字节码,并在其字节码中执行AST。

直接从AST生成本地字节码是不可能的(实际上是可以的,但这将是极其困难)。您需要某种中间步骤,例如发出LLVM字节码或您选择的某种编程语言的代码。请注意,LLVM字节码与本机目标机字节码不同。LLVM字节码必须被编译为目标机器的本机二进制文件,这是由各自的前端完成的。因此,您也可以使用遍历语法树的手写代码发射器从AST生成c++代码。然后使用目标平台的c++编译器将其编译为所需的本机二进制文件。