我想知道为支持多种值类型(字符串,布尔值,数字)的解析器(我正在使用Bison)创建符号表的正确方法是什么。例如,如果我有类似var a = [1, 2, 3]
或var b = 2
的东西,我希望能够存储这些值,以便以后可以访问它们,例如,如果我有类似var c = 2 + b
的东西。
到目前为止,我一直在使用map<string, string>
并将所有内容都转换为字符串。因此,如果我有var a = 2
,则将其存储为“ a”:“ 2”。这是超级hacky,并且无疑是错误的方法,所以我想知道应该采取什么正确的方法。
还要预先考虑,您如何处理范围?例如,如果您有一个定义变量的函数,则只能在该函数内部而不是外部对其进行访问。我不知道如何实现这一部分。我在想,也许当我进入一个块时,将变量添加到堆栈中,然后在退出时将其删除,但这又听起来很hacky。
答案 0 :(得分:0)
所以我做了更多的挖掘工作,看来我应该保留类型检查,变量声明检查以进行语义分析。如果我没记错的话,解析器的目的只是验证代码的结构,而不做诸如检查代码是否“有感觉”之类的事情。