gpt4 book ai didi

c - 用字节码表示数组和记录

转载 作者:行者123 更新时间:2023-11-30 18:07:21 25 4
gpt4 key购买 nike

我正在用 C 从头开始​​创建一种编程语言,并且我不希望使用第三方代码进行变量处理。

首先,以字节码形式表示数组赋值(例如 apples_in_crate[5] = 170)的最佳方式是什么?

显然,apples = 170 可以表示为:

PUSHSCALAR ("apples")
PUSHREAL (170)
ASSIGNSCALAR

但是当涉及到数组时,事情会变得更加复杂。有什么建议吗?

其次,如何用字节码表示 crate[5].apples = 170 (一条记录)?

如有任何帮助,我们将不胜感激。

澄清:我正在编写一个解释器,因此在“编译时”或解析时知道数组的大小。例如,以下(抽象)代码将非常有效:

// Note: NUMBER_OF_CRATES is not known at compile-/parse-time,
// it could even be a dynamic expression.
array apples_in_crate[NUMBER_OF_CRATES]

for crate = 1 to NUMBER_OF_CRATES
apples_in_crate[crate] = randint (101) + 100
end for

最佳答案

这完全取决于您的字节码。您的结构的静态程度如何?如果一切都在编译时完成(有点像 C 和 C++),您知道 apples_in_create 中每个元素的大小,因此您可以首先推送 apples_in_create,然后将 5 * sizeof(elements) 添加到该值,然后分配 170到该地址。

第二个示例也是如此:推送 crate,添加 5 * sizeof(Crate),添加 offset_of(apples),分配值。

现在,如果您希望事情变得更加灵活(例如,如果您希望允许反射之类的事情),则必须让系统在运行时更加了解您的数据类型。但是,如果没有有关字节码应该是什么样子的更多信息,就很难给您提供更多建议。

关于c - 用字节码表示数组和记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653672/

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