在正向引用语言(如c#)中,编译器如何处理这个问题?编译器的操作步骤是什么?C#的编译器设计 - 正向引用
4
A
回答
3
允许正向引用与否之间的主要区别是使用单通编译器或多通道编译器。当然,要处理前向引用,您必须检查符号定义并进行类型检查AFTER已生成要编译的源的完整抽象语法树。
因此,没有任何问题,当您第一次找到一个前向引用时,您只是依赖它将在稍后定义它(您可以将它标记为符号表中的待定),然后当您找到实际定义时,符号表。
后,您可以进行类型检查,或检查,如果一些符号仍然悬而未决(所以没有真正的定义,你可以提出一个语义错误)..
0
完全相同的方式C++处理它,我认为只有区别:语法足够简单,编译器可以构造分析树,而无需告诉您未声明的符号引用了什么样的语法对象。
1
它通过两次编译完成此操作。第一遍解析代码并收集所有使用的标识符。第二遍解析所有标识符。
在使用单通道编译器的语言(如Pascal)中,只能使用向后引用,因为在解析标识符之前必须知道标识符的类型。
相关问题
- 1. 编译器设计
- 2. 编译器设计
- 3. 设计一个编译器像C
- 4. 编译器设计资源
- 5. 编译器设计 - 计算常量值
- 6. 使用自行设计的C编译器构建代码
- 7. Apple LLVM编译器3.1 - 警告Objective-C++自动引用计数
- 8. 用C++编译器编译c代码
- 9. 编译器设计中的文法
- 10. 在Objective-C编译器上编译不正确的C程序
- 11. 柯里和编译器设计
- 12. 使用C++编译器设置MATLAB
- 13. VS2008/C#编译项目时关闭所有设计器?
- 14. 编译器设计和施工课
- 15. 用C++编译器编译Apache
- 16. 用C++编译器编译C99文件
- 17. 使用scons编译器编译C++
- 18. C++设置不正确编译
- 19. 编译器错误CS1002;预计C#
- 20. 编译器循环引用
- 21. C++编译器错误:传递指针但编译器看到引用
- 22. C编译器如何计算如何编译f(枚举)?
- 23. C#编译器如何决定发出可重定向的程序集引用?
- 24. 以编程方式调用C#编译器编译C#代码
- 25. 编译C:未定义的引用'memcpy'
- 26. C#编译器相关的对象引用不设置到对象的实例
- 27. Xamarin的故事板设计器使用保留的C#词语,防止编译。
- 28. 汇编中的C#编译器
- 29. 编译mysql连接器用mingw编译C++,编译错误
- 30. 如何在c中设计编译器时集成汇编代码?
C还采用前向参考:HTTP:// WWW。 nacs.uci.edu/dcslib/digital_unix/digital-v40d/AQTLTBTE/DOCU_024.HTM – 2009-10-31 03:18:45
您可能想要更改您的问题,因为前向引用和前向声明可以在C++中找到,所以您的问题可能需要比您更一般预期。 – 2009-10-31 03:20:26