为何在编译程序中要采用中间语言
1. 编译过程中,源程序为什么要通过中间代码生成目标程序
源程序是指程序员编写的代码,可以被编译程序编译为目标程序。
如果是c++,那么后缀为.cpp
目标程序是编译程序将源程序编译后的结果,如果是c++,那么后缀是.o
编译程序一般是编译器公司(比如微软
intel他们都生产编译器)做的,它将源代码转化为机器可识别的文件,经过链接,生成可执行程序。
解释程序即解释器,它不需要经过编译阶段即可根据用户源程序执行。
程序语言分编译类和解释类语言。
2. 一个典型的编译程序通常由哪些部分组成
1、词法分析
词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
2、语法分析
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。
3、中间代码生成
中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。
4、代码优化
代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。这种变换称为优化。
5、目标代码生成
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。

(2)为何在编译程序中要采用中间语言扩展阅读:
编译程序把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。
编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。
编译程序的实现算法较为复杂。这是因为它所翻译的语句与目标语言的指令不是一一对应关系,而是一多对应关系;同时也因为它要处理递归调用、动态存储分配、多种数据类型,以及语句间的紧密依赖关系。
但是,由于高级程序设计语言书写的程序具有易读、易移植和表达能力强等特点,编译程序广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。
3. 编译程序是不是一定要产生中间代码
是的,中间代码的意义就是微软推出.NET平台的意义
NET是Microsoft面向XMLWeb服务的平台,这种下一代的软件将使用一种统一、个性化的方式将我们的信息、设备和人员紧密联系在一起。

4. 使用中间代码表示有哪些优点
1、中间代码是源程序的一种内部表示,或称中间语言。
2、中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现中间代码,即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。
3、中间语言有多种形式,常见的有逆波兰记号、四元式、三元式和树。
5. 中间语言的名词解释
中间语言 ,在计算机科学中,是指一种应用于抽象机器 的编程语言,它设计的目的,是用来帮助我们分析计算机程序。这个术语源自于编译器,在编译器将源代码编译为目的码的过程中,会先将源代码转换为一个或多个的中间表述,以方便编译器进行最佳化,并产生出目的机器的机器语言。通常,中间语言的设计与一般的机器语言有三个不同之处:
1、每个指令代表仅有一个基本的操作。举例来说,在微处理器中出现的shift-add寻址模式在中间语言不会出现。
2、指令集内可能不会包含控制流程的资讯。
3、暂存器可用的数量可能会很大,甚至没有限制。
6. C# 为什么要弄成中间代码
1、因为c语言也不能说真正的跨平台,只是这种语言比较低级,各个平台的实现相对一致。
c语言的东西下载时还是会分平台的,比如for linux, for windows, for Mac等,不同平台的编译器对c的解释都有差异,所以只能说跨平台容易一些。
2、按微软的规划,以后的应用程序要从网上付费下载来使用,这样就带来下载软件的安全与否的问题,而C#经编译后形成的是中间代码,不可以在本地机器上直接执行,必须经过CLR转换成本地代码后才能执行。
这样,中间码可以顺利通过防火墙,而且安全性又有CLR来保证。
7. 编译程序中安排中间代码生成的目的是哪3个
1.中间代码生成是为优化和移植而进行的
2.中间代码表示包含的符号的属性信息
3..
8. .NET程序首先被编译成中间语言IL,IL经过再次编译后才生成机器码。这样做有什么好处
方便独立开发语言和虚拟机吧。
还有这样就可以兼容各种语言,生成相同的il。
