如何使用可变长度指令编译if语句

时间:2019-02-21 22:18:28

标签: parsing if-statement compilation

我正在编写一个具有任意整数(编码,而不是字面意义)参数的小语言VM,并且即将实现if语句。 if语句要编译的久经考验的公式

if (EXPRESSION) {
    BODY
}

进入

EXPRESSION
JUMP-IF-FALSE body-length
BODY

但是,我正在努力查看单遍编译器在生成JUMP-IF-FALSE命令时如何确定主体长度。

使用恒定大小的指令,您可以只添加两个额外的字节或其他内容,然后返回并对其进行修补,但是对于需要插入或串联的可变大小的指令,则需要两个O(N)进程。

因此,我唯一的选择似乎是切换到恒定大小的跳转指令,并且每个MAXJUMP-1字节插入一条命令以跳过下一条指令,然后再跳过另一条JUMP指令。

即使这种情况(65k +固定字节并跳转2字节)真的不太可能,但我真的很想不必这样做。

0 个答案:

没有答案