我正在开发一名翻译,我有一些问题。
我最近看到一个小型的C解释器,它使用了一个非常简单的结构,如下所示,用于语言中的所有对象/值:
struct Object
{
ubyte type;
ubyte value;
};
这个结构可以包含解释器正在使用的语言中使用的字符串,整数,布尔和列表(我认为)。
答案 0 :(得分:2)
如何让这个Object结构保存所有这些类型?
它不保存它只保存对其他地方存储的值的ID /引用的值。
答案 1 :(得分:1)
最有可能的是,它像sbi建议的那样完成,因此解释器的结构看起来更像:
struct Object
{
ubyte type;
void* value;
};
实际值将在堆上的某处分配,并且在构造对象时,解释器会在ubyte type
中记录类型。稍后,函数会使用object.type
注意类型,并将值替换为该类型的值,或者只是假设它是正确的类型,如下所示:
useObjectAsString(Object toUse)
{
char* data = (char*)toUse.value;
}
如果您想要实现几种类型,也可以尝试使用union.