我已经成功编写了几个解释器,包括
- 标记化
- 解析,包括更复杂的表达式,例如
((x+y)*z)/2
- 从语法树构建字节码
- 实际字节码执行
我没有管理的内容:字典/列表/数组
的实现。
我总是被困在将多个值放入一个变量中。
我的值结构(用于传递的所有值,包括变量)如下所示:
class Value
{
public:
ValueType type;
int integerValue;
string stringValue;
}
可以很好地处理整数和字符串,但是我如何实现数组?
(从现在开始,array
是指我的实验语言中的数组,而不是 C++ 中的数组)
如何将数组概念融入到上面的 Value 类中?可能吗?
如何使用上面的类使数组能够像在我的语言中传递整数和字符串一样传递?
访问数组元素或内存分配不会有问题,我只是不知道如何存储它们。
最佳答案
我认为你在这里需要一个额外的抽象层。
您的“变量”应该模拟某些内部对象与您正在构建的语言中的“名称”的绑定(bind)。 “对象”应该对表示进行建模。
这样,变量就可以保存任何内容,它是“变体”。某种类型的对象可能包含其他对象的数组。
提示:
class Object {
public:
enum etype { cInt, cString, cArray, cDictionary };
virtual etype type() const = 0;
virtual ~Object(){} // don't forget virtual destructor
// maybe some reference counter functions?...
};
class Variable {
public:
string name;
Object* value;
};
class Array : public Object {
std::map<size_t, Object*> objects_; //or smart pointers...
public:
virtual etype type() const { return cArray; }
Object* get( size_t i ) const { return objects_[i]; }
void put( size_t i, Object* o ) { objects_[i] = o; }
};
class Int : public Object {
public:
virtual etype type() const { return cInt; }
int value_;
};
关于c++ - 如何在解释器中实现数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812963/