我有龙书,但它似乎没有处理那个话题......
在最现代的语言中,即使它们在代码中的出现是无序的,也可以使用某些变量。
例子
class Foo {
void bar() {
plonk = 42;
}
int plonk;
}
plonk
在函数之后声明变量并不重要。
问题
是否有任何最佳实践/有用的模式来实现这一点?我想到了两种方法:
解析时为看不见的符号添加虚拟符号。解析声明时,这些虚拟对象将被它们的真实符号替换。解析后,我们可以检查是否有假人,如果有则输出错误。
解析时不要做任何符号的事情,而只创建 AST。在通过 AST 解析步骤并根据节点添加符号之后。例如,类节点添加子节点的符号并在之后处理它们。例如,语句块逐步遍历子级并在处理子级之前立即添加符号。
我希望方法 1. 对于“导入其他编译单元”之类的东西更容易,也更有用。
编辑:
我在方法 1 中看到的一个问题是需要对有序符号进行某种处理。例如,对于一个函数,在使用本地符号之前是不可能使用它的。