我正在为不存在的语言编写编译器(它是大学项目的示例语言)。在为函数定义保留的部分中,编译器应该能够正确编译这样的定义:
function a() {
//some code...
b();
//other code...
}
//other function definitions
function b() {
printf("hello\n");
}
编译器应解析函数“挂起”函数a中函数b使用的存在性检查的定义。在所有函数定义结束时,编译器将检查所有使用的函数是否先前已定义。任何人都可以提出一个聪明的方法吗?
答案 0 :(得分:2)
除非您的语法存在严重的歧义问题,否则您不应该知道b
是一个函数才能正确解析b()
。所以在一般原则上,我说答案很简单:不做任何特别的事情,解析应该可以正常工作。
一旦你构建了AST,你就会想要进行一些语义分析,其中包括验证每个用作函数的名称是一个函数。您可能也会有其他语义限制。 AST的简单树步行应该能够告诉你需要知道什么。