为解析器为多种值类型创建简单的符号表

时间:2019-06-18 22:57:36

标签: c++ bison yacc

我想知道为支持多种值类型(字符串,布尔值,数字)的解析器(我正在使用Bison)创建符号表的正确方法是什么。例如,如果我有类似var a = [1, 2, 3]var b = 2的东西,我希望能够存储这些值,以便以后可以访问它们,例如,如果我有类似var c = 2 + b的东西。

到目前为止,我一直在使用map<string, string>并将所有内容都转换为字符串。因此,如果我有var a = 2,则将其存储为“ a”:“ 2”。这是超级hacky,并且无疑是错误的方法,所以我想知道应该采取什么正确的方法。

还要预先考虑,您如何处理范围?例如,如果您有一个定义变量的函数,则只能在该函数内部而不是外部对其进行访问。我不知道如何实现这一部分。我在想,也许当我进入一个块时,将变量添加到堆栈中,然后在退出时将其删除,但这又听起来很hacky。

1 个答案:

答案 0 :(得分:0)

所以我做了更多的挖掘工作,看来我应该保留类型检查,变量声明检查以进行语义分析。如果我没记错的话,解析器的目的只是验证代码的结构,而不做诸如检查代码是否“有感觉”之类的事情。