gpt4 book ai didi

C++:设计解释器的概念问题

转载 作者:行者123 更新时间:2023-11-30 00:41:55 25 4
gpt4 key购买 nike

我正在为实验性编程语言(教育、娱乐……)编写解释器到目前为止,一切顺利(Tokenizer 和 Parser),但我在实际运行标记化和解析代码的部分中遇到了一些数据结构的大问题。

我的编程语言基本上只有两种类型,int 和 string,它们分别表示为 C++ strings (std class) 和 int

这是我用来传递值的数据结构的简短版本:

enum DataType
{
Null,
Int,
String
}

class Symbol
{
public:
string identifier;

DataType type;
string stringValue;
int intValue;
}

我不能使用 union ,因为字符串不允许我这样做。

上面这个结构开始让我头疼了。

我必须把这样的代码分散到各处才能让它工作,它开始变得不可维护了:

if( mySymbol.type == Int )
{
mySymbol.intValue = 1234;
} else {
mySymbol.stringValue = "abcde";
}

我对变量使用 Symbol 数据结构,对函数使用返回值,并在编程语言中使用值的一般表示。

  • 有没有更好的方法来解决这个问题?我希望如此!

最佳答案

你现在所做的是对 discriminated union 的一种 SCSS 。 .问题是您没有使用 union ,并且被区分 union 的功能是 Symbol 类本身的一部分。

我建议两个备选方案,按顺序或偏好:

1) 使用变体类型。变体类型就像类固醇的有区别的结合。一种实现可以在 Boost 中找到.

2) 创建一个适当的可区分 union ,与 Symbol 类分开定义。

编辑:可区分 union 实际上不必是union类型。它也可以是一个 struct

关于C++:设计解释器的概念问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2554215/

25 4 0
文章推荐: c++ - 尝试编写 std::iterator:编译错误
文章推荐: java - 将 ArrayList 从一个 Intent 传递到另一个 Intent
文章推荐: php - mysql建表失败