c++ - 基于 Flex/Bison 的编译器——二进制生成

标签 c++ bison flex-lexer

<分区>

我有一个使用 Flex/Bison 和 C++ 编写的 Pascal 子集编译器。作为输入,我使用自己的 .pas 文件。我注意到,当我使用这些输入运行我的编译器时,它更像一个解释器,因为我得到了即时结果。我想获取二进制文件以避免每次都使用编译器。我的问题是:

生成二进制文件的最佳方法是什么?

最佳答案

例如,您可以通过这种方式来做到这一点(很多年前我就是这样做的):

  1. 使用 Flex/Bison,您必须生成伪 asm 代码。
  2. 在下一步中,您必须将其转换为给定 CPU 架构的宏汇编 (x86/ARM/MC68k/PPC/...)
  3. 将输出的asm文件编译成目标文件(.o)
  4. 将 .o 文件与所需的库 (.lib) 链接到可执行文件中。

除此之外,如上所说,试着找一些关于编译器的书。最好的是龙书,一种编译器圣经:https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools

关于c++ - 基于 Flex/Bison 的编译器——二进制生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47082015/

相关文章:

c++ - 为什么 ostringstream 在多线程环境下不能正常工作

c - 如何从 lex/yacc 生成不同的 yyparse 函数以用于同一程序?

c++ - 重载 '++'运算符C++

c++ - QTableView如何找到拖动开始的行

c++ - 我怎样才能用另一个数组切换一个数组的元素?

Bison 转移减少冲突 - 无法解决

package - Bison 最新版本已安装但未使用

c++ - Flex++ 的常见问题

indentation - 如何使用 flex/bison 进行类似 python 的缩进

parsing - 开发一个简单的解析器