C#的编译器的设计 - 前参考
-
11-09-2019 - |
题
在正向引用语言,例如C#,编译器如何处理?什么是其中编译器操作的步骤是什么?
解决方案
允许前向参考或不之间的主要区别是使用的一个通道编译或多通一个。当然,处理向前引用,你必须检查符号的定义并做类型检查在已经生成您编译源的全部抽象语法树。
所以是没有问题的,当你第一次发现你仅仅依靠这将在后面定义向前引用(你可以将其标记为符号表待定),那么当你发现实际的定义细化的符号对象符号表
之后,可以进行类型检查它或检查,如果某些符号仍然未决(所以没有真正的定义,并且可以提高语义错误)..
其他提示
有通过执行编译的两次通过执行此操作。第一遍解析代码,并收集使用的所有标识符。第二遍解析所有标识符
在具有单个通道编译器语言,例如Pascal,只向后引用可以用作一个标识符都被称为前就可以解决的类型。
完全相同的方式C ++处理它,我想,唯一的区别:语法是很简单的编译器可以构建解析树,而不需要你来告诉你还没有未申报的符号代表什么样的语法对象
不隶属于 StackOverflow