C#的编译器设计 - 前向引用

时间:2009-10-31 03:13:45

标签: c# compiler-construction forward-reference

在前向引用语言(如c#)中,编译器如何处理?编译器的操作步骤是什么?

3 个答案:

答案 0 :(得分:3)

允许前向引用与否之间的主要区别在于使用一次传递编译器或多次传递。当然,要处理前向引用,您必须检查符号定义并执行类型检查 AFTER 生成您正在编译的源的完整抽象语法树。

所以没有问题,当你第一次找到一个前向引用时,你只需要稍后定义它(你可以在符号表中将其标记为待定)然后当你找到实际的定义时,你可以在符号中细化符号对象表

在你可以对它进行类型检查或检查某些符号是否仍然未决(因此没有真正的定义,并且你可以引发语义错误)..

答案 1 :(得分:1)

通过两次编译通过它。第一遍解析代码并收集所有使用的标识符。第二遍解析所有标识符。

在具有单通道编译器的语言中,如Pascal,只能使用向后引用,因为必须先知道标识符的类型才能解析它。

答案 2 :(得分:0)

与C ++处理它的方式完全相同,我认为,唯一的区别是:语法很简单,编译器可以构造解析树,而不需要告诉你尚未声明的符号所引用的语法对象类型。