有人可以给我一些关于如何处理需要查看进一步声明以便能够在当前时刻做出正确语义动作的情况的建议/想法吗?例如,当有人编写某种不支持“前向声明”的编程语言的解释器/编译器时,这是一个众所周知的事件。让我们举个例子:
foo(123);//<-- our parser targets here. we estimate we have a function
// invocation, but we have no idea about foo declaration/prototype,
// so we can't be sure that "foo" takes one integer argument.
void foo(int i){
//...
}
很明显,我们必须至少有两次通过。首先,我们解析所有函数声明并获取所有需要的信息,例如:函数接受的参数数量,它们的类型,然后我们能够处理函数调用并解决上述困难。如果我们这样做,我们将必须使用一些AST遍历机制/访问者来完成所有这些传递。在这种情况下,我们必须处理 AST 遍历/应用访问者,我们必须对直接集成在解析器中的所有美丽的凤凰结构说“再见”。
你会如何处理这个问题?