gpt4 book ai didi

将 AST 转换为字节码

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:56 24 4
gpt4 key购买 nike

所以我目前正在为我创建的一种语言(与 Python 非常相似)用 C 编写一个小解释器。我已经编写了词法分析器和解析器,目前我的程序输出一个 AST,现在我正试图将这个 AST 转换为字节码。目前我的算法遍历 AST(深度优先)并且可以为简单的算术生成字节码,现在我正在尝试实现 if 语句。

我不能在这里复制我所有的代码,因为它的代码量相当大,但目前程序采用了一个 AST,它可能看起来像

ADD
|-- 1
|-- MUL
|-- 2
|-- 3

然后把它变成

LOAD 1 //the real code doesn't put the value here, but a number representing the position of this value in an array
LOAD 2
LOAD 3
MUL
ADD

这对于简单的表达式来说很容易,但我真的不知道如何为 if 语句生成字节码。我知道如果比较为假,我将不得不跳转到 else 子句,并且还从每个 if/else if block 的末尾跳转,但是如果跳转超过 256 字节的字节码,我该如何处理呢?

最佳答案

你应该阅读 SICP , Dragon Book , 然后 Lisp In Small Pieces .

我希望你能重新设计你的字节码。然后你可以有一些FARJUMP字节码,后面跟着四个字节a , b , c , d (被视为 uint8_t 每个 8 位的无符号整数),您将跳转到 (a<<24) + (b<<16) + (c<<8) +d偏移量。

您可能希望能够前后跳跃。要么有一个BACKFARJUMP向后跳转,或使用一些有符号偏移...

有了这样的操作码,您将能够跳转到超过 40 亿字节码(正好是 232)。那可能更容易。

如果 40 亿字节码偏移量还不够,您可以进行泛化。

不要忘记,您的计算机不太可能拥有超过 1 TB 的 RAM(而且这样的计算机比汽车更贵)。

关于将 AST 转换为字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48569578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com