我有两个与符号表有关的正交问题。
我是否应该先建立符号表,然后在解析代码时进行类型检查?先解析,然后遍历AST。 来建立符号表,我觉得这样更简洁。然而,我喜欢拥有一个不可改变的AST的想法(类似于Clang),我不能在一个两步过程中拥有这个想法(因为我需要在类型检查阶段插入额外的类型转换节点)。
符号表应该负责做类型检查吗?我读到 多重 物品 其中的符号表被用于这一目的。这是一种值得推荐的做法吗?在我看来,这相当笨拙。
注意:我使用的是一个自上而下的递归下降解析器。
我认为应该这样做。
首先: 你应该先建立你的AST, 然后,就像你说的那样 遍历它来填满符号表并进行类型检查. 不可变的AST似乎不错,但是遍历AST就不会那么干净了。
第二种。 是的,符号表应该有一部分参与类型检查(而不是做类型检查)。会需要它来存储变量等东西的类型。这没什么好尴尬的:-)