0%

词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。对于一个词法单元,词法分析产生的记号是:
<记号名, 属性值>
二元组。记号名是同类词法单元共用的名称,而属性值是一个词法单元有别于同类中其他词法单元的特征值。

阅读全文 »

函数式程序设计语言起源于LISP,因此可以追溯到20世纪60年代初期。到了20世纪70年代末期,当新的概念和实现方法出现时,这类语言才摆脱了LISP语言的统治,成为一类比较成熟的语言,其代表有Miranda 和ML等。在函数式语言中,函数是构造程序的基本成分,并且语言还提供一些机制用于构造更为重要的函数。纯函数式语言禁止使用赋值语句,从而不会产生副作用,其优点是具有引用透明性。有助于程序的等式变换和推理。

阅读全文 »

软件系统的规模越来越大,并且日趋复杂,以更有效和更透明的方法来开发这样的系统的呼声与日俱增。最终的目标是从已做好的标准构件去构造软件系统,就像现在构造硬件系统那样。模块化、模块的可重用性.模块的可扩充性和抽象性是朝向这个目标的些会试,面 面向对象话言在这些方面提供了一种新的可能性。 现在,面向对象已被看成管理复杂教件系统的一种重要风范。

阅读全文 »

通常,除了编译器外,还需要些其他工具的帮助,才能得到可执行的目标程序 .这些工具包括预处理器、汇编器和连接器等。对于FORTRAN和C等语言来说,这些工具都较简单和明量。了解这些工具有助于掌握从源程序到可执行目标程序的实际处理过程,这些知识对于参与大型软件系统的开发是很有用的。本章介绍C语言编译系统。此外,目标代码运行时,还需要一些工具的支撑, 如动态连接程序、无用单元收集程序等,这些工具的集合称为运行时系统。本章还介绍Java语言的运行时系统及其无用单元收集程序。

阅读全文 »

现代高性能处理器能够在一个指令周期内执行多个指令,相序的运行能快到什么程度?答案依赖于下面几个因素:
(0)程序中潜在的并行:
(2)处理器上可用的并行:
(3)从申行程序提取并行的能力:
(4)在给定的调度约束下发现最住并行调度的能力。
如果一个程序中的所有运算高度地相互依赖,那么不管是硬件。中行电康东那不德使强序并行地快速运行。典型的非数值应用有许多国有的相关性,例部师的现市自市 多值楼于楼面的分支,它们使得预测将要被执行的指令都变得非常困难,更不要.电号a单行执行 防强作。因此在该领域的研究集中在放宽调度约束,包插引人新的体系培内地话,是不范调定强本身。

阅读全文 »

如果简单地把高级语言的每个构造独立地制评由在编译过程中,通过删除目标代码成机器代代码,那么这种用速度较快种方式会中引起较大的话换井完成同中同代营较慢的代码序列等变换来降低所生成代码的运行行开销,.势之为代母事情的代码

阅读全文 »

编译器的最后一个阶段的工作是代码生成,不管代码生成,它取源程序的中间表示作输人都是适用的。

阅读全文 »

编译器的前端把源程序翻译成中间表示,后端从中间表示产生目标代码,与目标语言有关的细节尽可能限制在后端。使用独立于机器的中间表示的好处有如下两点。
(1)再目标( retargeting指生成另一 种机器的目标代码)比较容易。把针对新机器的后端与现成的前端组合起来,就可以得到另一种机器的编译器。
(2)独立于机器的代码优化器可以作用于这种中间表示。第9章将介绍这种代码优化、因此,虽然可以把源程序直接翻译并生成目标代码,但编译器一般都采用中间表示形式。

阅读全文 »

过程和函数这样的程序单元统称为过程,程序运行时过程的一次执行称为过程的一次活动。过程的每次活动都需要可执行代码和存放所需数据的储存空间,所需的局部数据通常用一块连续的储存区来存放,称之为活动记录。过程p一次活动的生存期是从过程体开始执行到执行结束的时间,包括消耗在执行被p调用的过程所需的时间,以及再由这样的过程调用过程所花的时间等。

阅读全文 »

编译器必须检查源程序是否满足源语言在语法和语义两个方面的约定。这种检查这种检查称为静态检查(以区别在目标程序运行时的动态检查),它诊断和报告程序错误。静态检查的例子如:类型检查、控制流检查、唯一性检查、关联名字检查。

阅读全文 »