如何在基于野牛的翻译中实现分支?

时间:2016-09-01 15:23:53

标签: virtual-machine bison interpreter flex-lexer

现在我开发了一个虚拟机。 Bytecode解释器使用flex和bison。 以下是一些代码:

some:
add r0 4 4
jmp some

我的问题是:如何处理jmp指令? 我可以请求野牛回到标签,继续进行分析吗?

我开发字节码的解释器,而不是编译器......

1 个答案:

答案 0 :(得分:0)

不,你不能让野牛回去。你通常会用Bison来解析代码并生成某种中间表示。像AST或字节码一样。然后在单独的步骤中执行它。

因此,在您的情况下,由于您正在为字节码格式解析汇编语言,因此将其转换为实际字节码是有意义的。那时你的解析器看到“add r0 4 4”,它应该做的就是将相应的字节序列附加到包含你的字节码的数组中。然后在解析器创建此数组之后,您可以将其传递给实际执行字节码的函数。

将这两个步骤分成两个独立的程序可能也是有意义的:将源文件转换为二进制字节码文件的汇编程序,以及读取字节码文件并执行它的字节码解释器。后者根本不需要使用Bison,只需读取字节和switch就可以了。

相关问题