我已经用flex
和bison
编写了词法分析器和解析器。我的项目基于C++,我很愿意坚持下去。目前,我的解释器使用C++
编写,但是我希望在解释器工作时通过转换为字节码(某种形式的VM级别字节码)来缩短执行时间。我知道这可以通过LLVM
实现。我在x64操作系统上使用它并在Visual Studio 2012(32位)上进行开发时遇到问题。其中一些可以在@LLVM linker errors on VS中找到。我遇到的另一个工具是ANTLR
,如果我理解正确,那么最新版本还不能轻松集成到C++
中。可以找到许多相同的参考,但快速参考可以是@ ANTLR integration with C++ issue。另外,我也不想处理用flex和bison编写的词法分析器和解析器。如果我想从AST生成字节码,该怎么办?
编辑:我的目标是从AST生成字节码(用于目标体系结构),以便可以在虚拟机级别执行代码。目前,我有一个解释器,该解释器基于C++库解释(执行AST)并生成字节码。我想直接从我的AST生成字节码,并以其字节码执行AST。
将不胜感激。
最佳答案
无法通过AST直接生成本机字节码 (实际上是这样,但这非常困难)。您需要某种中间步骤,例如发出LLVM
字节码或您选择的某种编程语言的代码。请注意,LLVM
字节码为与本机目标计算机字节码不同。 LLVM
字节码必须编译为目标机器的本机二进制文件,这由相应的前端完成。因此,您也可以使用遍历语法树的手写代码发射器从AST生成C++代码。然后,将C++编译器用于目标平台,以将其编译为所需的本机二进制文件。
关于c++ - LLVM的C++替代方案(字节码生成),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24057129/