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