符号表和类型检查

Symbol tables and type checking

我有两个与符号 tables 相关的正交问题:

  1. 我是否应该构建符号 table 并在解析代码时执行类型检查? 构建符号 table 对我来说看起来更干净。但是,我喜欢拥有 immutable AST(类似于 Clang)的想法,并且我不能在两步过程中拥有它(因为我需要在类型检查中插入额外的类型转换节点相).

  2. 符号table应该负责做类型检查吗?我阅读了 multiple articles,其中符号 table 用于此目的。这是推荐的做法吗?我觉得有点尴尬。

注意:我使用的是自上而下的递归下降解析器。

我相信这是你应该做的:

第一个: 你应该先构建你的 AST,然后,如你所说遍历它以填充符号 table 并进行类型检查。 immutable AST 看起来不错,但它不会像遍历 AST 那样干净。

第二个: 是的,符号 tables 应该参与类型检查(不进行类型检查)。它将需要存储诸如变量之类的东西的类型。没什么尴尬的:-)