我设法写了几个口译员,包括
((x+y)*z)/2
我没有管理的内容:dictionaries/lists/arrays
的实施。
我总是把多个值放到一个变量中。
我的值结构(用于传递的所有值,包括变量)如下所示,例如:
class Value
{
public:
ValueType type;
int integerValue;
string stringValue;
}
使用整数和字符串工作正常,但我怎样才能实现数组?
(从现在开始array
我的意思是我的实验语言中的数组,而不是C ++中的数组)
如何将数组概念融入上面的Value类?有可能吗?
我应该如何使用上面的类来传递数组,就像使用我的语言传递整数和字符串一样?
访问数组元素或内存分配不是问题,我只是不知道如何存储它们。
答案 0 :(得分:3)
我认为你需要额外的抽象层。
您的'变量'应该使用您正在构建的语言为某个内部对象与“名称”的绑定建模。 “对象”应该对表示进行建模。
这样,变量可以容纳任何东西,它是一个“变体”。某种Object可能包含其他对象的数组。
提示:
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_;
};
答案 1 :(得分:2)
如果我这样做,剩下的就足够了吗?
class Value
{
public:
ValueType type;
int integerValue;
string stringValue;
vector<Value> arrayValue;
}
答案 2 :(得分:0)
你的Value类型可以是一个指向基类的(智能)指针,你可以从中导出整数,字符串,字典,...的类。