3

我正在开发一个口译员,我有一些问题。

我最近看到一个小型 C 解释器,它使用了一个非常简单的结构,如下所示,用于语言中的所有对象/值:

struct Object
{
    ubyte type;
    ubyte value;
};

这个结构可以保存解释器正在使用的语言中使用的字符串、整数、布尔值和列表(我认为)。

  • 你怎样才能让这个 Object 结构容纳所有这些类型?
4

2 回答 2

2

你怎样才能让这个 Object 结构容纳所有这些类型?

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

于 2010-05-29T10:10:17.020 回答
1

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

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

实际值将分配在堆上的某个位置,当对象被构造时,解释器会记下ubyte type. 稍后,函数会使用该类型记录类型object.type并将值别名为该类型,或者只是假设它是正确的类型,如下所示:

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

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

于 2012-03-06T01:04:58.480 回答