c++ - 如何在解释器中实现数组?

标签 c++ interpreter

我已经成功编写了几个解释器,包括

  • 标记化
  • 解析,包括更复杂的表达式,例如 ((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/

相关文章:

c++ - 你能将整个网页嵌入到 C++ 源代码中吗?

c++ - C2059 : syntax e r r o r : ';'

c++ - 使用 C++ Python API 逐行执行 python 脚本

java - 如何直接从终端运行java

Chrome V8 中的 Javascript && 运算符行为

javascript - 有没有最近的 Lua 到 JavaScript 的转换器或解释器?

c++ - 如何从命令行参数 C++ 创建 std::string

c++ - 当if条件可以在编译时计算时如何避免if/else

java - 为什么(我的)Java 比 C++ 快 25 倍?

android - 如何在我的 Android 应用程序(如 SL4A)中集成 Python 脚本