我正在开发一个口译员,我有一些问题。
我最近看到一个小型 C 解释器,它使用了一个非常简单的结构,如下所示,用于语言中的所有对象/值:
struct Object
{
ubyte type;
ubyte value;
};
这个结构可以保存解释器正在使用的语言中使用的字符串、整数、布尔值和列表(我认为)。
- 你怎样才能让这个 Object 结构容纳所有这些类型?
我正在开发一个口译员,我有一些问题。
我最近看到一个小型 C 解释器,它使用了一个非常简单的结构,如下所示,用于语言中的所有对象/值:
struct Object
{
ubyte type;
ubyte value;
};
这个结构可以保存解释器正在使用的语言中使用的字符串、整数、布尔值和列表(我认为)。
你怎样才能让这个 Object 结构容纳所有这些类型?
它不保存值,它只保存对存储在其他地方的值的 ID/引用。
很可能,它像 sbi 建议的那样完成,所以解释器的结构看起来更像:
struct Object
{
ubyte type;
void* value;
};
实际值将分配在堆上的某个位置,当对象被构造时,解释器会记下ubyte type
. 稍后,函数会使用该类型记录类型object.type
并将值别名为该类型,或者只是假设它是正确的类型,如下所示:
useObjectAsString(Object toUse)
{
char* data = (char*)toUse.value;
}
如果您只想实现几种类型,也可以尝试使用联合。