C语言解释器的类型划分

3

我是一名开发人员,正在开发一个解释器,有一些问题需要解决。

最近我看到了一个非常简单的C语言解释器,它使用了以下这种非常简单的结构体来表示语言中的所有对象/值:

struct Object
{
    ubyte type;
    ubyte value;
};

这个结构体可以容纳在解释器中使用的字符串、整数、布尔类型和列表(我想)。

  • 你如何使这个Object结构体容纳所有这些类型?

3
你确定那个值是 ubyte 类型吗? - Nick Dandoulakis
2个回答

2

你如何让这个对象结构来容纳所有这些类型?

它并不保存值,只保存指向存储在其他地方的值的ID/引用。


1

很可能像sbi建议的那样完成,因此解释器的结构看起来更像:

struct Object
{
    ubyte type;
    void* value;
};

实际值将分配在堆上的某个位置,当对象被构造时,解释器会在ubyte type中记录类型。稍后,函数将使用object.type记录类型并将该值别名为该类型,或者仅假定它是正确的类型,就像这样:

useObjectAsString(Object toUse) 
{
    char* data = (char*)toUse.value;
}

如果您只想实现几种类型,您也可以尝试使用union


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接