我想知道为解析器创建符号表的正确方法是什么(我使用的是Bison),它支持多种值类型(字符串,布尔值,数字)。例如,如果我有这样的事情var a = [1, 2, 3]
还是var b = 2
,我希望能够来存储这些值,以便他们可以稍后访问,例如,如果我有这样的事情var c = 2 + b
。
到目前为止,我一直在使用a map<string, string>
并将所有内容转换为字符串。所以如果我有var a = 2
,我会把它存储为“a”:“2”。这是超级hacky,毫无疑问是错误的方法,所以我想知道这应该做的正确方法是什么。
还在思考,你如何处理范围?例如,如果您有一个定义变量的函数,那么它们只能在该函数内访问,而不能在外部访问。我不知道如何实现这部分。当我进入一个区块然后在我退出时将它们删除时,我想也许可以在堆栈中添加变量,但同样,这听起来真的很糟糕。
发布于 2019-06-19 10:11:04
所以我做了更多挖掘,似乎我应该保留类型检查,语义分析的变量声明检查。如果我没有弄错的话,解析器的目的只是验证代码的结构,而不是检查代码是否“有意义”。
https://stackoverflow.com/questions/-100007024
复制相似问题