目前,我正在做一个简单的编译器项目。
假设有以下语法:
file_input : file_item*
;
file_item : class_def
| variable_decl
;
class_def : 'class' NAME scope
;
variable_decl : 'dim' NAME 'as' NAME
;
现在,在构建我们的 symbol table
时如果我们在类定义之前声明一个变量,我们将得到语义错误,因为它不会在 symbol table
中找到所需的类。
简单地说,我们需要让编译器等到类名被定义,所以声明一个类型为foo
的变量。并定义类 foo
以后不会打扰编译器。
关于如何实现这一点有什么建议吗?
感谢您的宝贵时间。
最佳答案
你需要一个多遍方法:
首先遍历 AST 一次,以构建将类名映射到类定义的表,而无需执行任何其他需要在表上执行查找的操作。然后再走一遍,在表已经建好的情况下,当遇到变量定义时,你将能够循环你想要的任何类。
关于c++ - 解析时即时收集类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27672505/