欧卡2中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

需要三步,才能开始

只需两步,慢速开始

欧卡2入门方向盘选莱仕达V9莱仕达折叠便携游戏方向盘支架欢迎地图Mod入驻
查看: 7683|回复: 0
收起左侧

[计算机科学] 编译原理第一章

[复制链接]
知行 发表于 2013-5-4 12:25 | 显示全部楼层 |阅读模式
第一章首先介绍了什么是程序设计语言——向人以及计算机描述计算过程的记号,就是说程序设计语言就像是架设在我们与计算机之间的语言桥梁,通过这我们就能和计算机进行交流,但是这不是完完全全计算机能够读懂的,我们还不许加以翻译才能使得计算机按照我们的意思去进行计算。那么我们就需要完成这项工作的一个助手——它就是编译器(compiler)。
    其实编译器设计的原理和技术还可以用于编译器设计之外的许多领域。编译器的编写也是涉及多个方面,如程序设计语言、计算机体系结构、形式语言理论、算法和软件工程。
    简单的说,编译器就是一个程序,它可以实现以某一种语言(源语言)编写的程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。类似于我们的翻译,但是除了翻译,编译器还有一项重要的任务就是发现源程序中的错误。这个同样重要,因为就算是最优秀的程序员也会犯错,甚至是极其微小的错误。所以我们需要一个工具来发现这样的错误,而编译器就可以在进行翻译的同时进行纠错。
    其实,除了编译器,还有一种重要的语言处理器,就是解释器(interpreter)。从用户角度看,解释器直接利用用户提供的输入执行源程序中指定的操作。也就是说,没有输入,源程序有的部分也许就不会执行,那些部分的错误不进行测试就没法发现错误。
    在这里,书中举了个为大家所知的Java语言。Java的语言处理结合了编译和解释过程,可以说是可取所长,它采用一种叫做字节码(bytecode)的中间表示形式。再利用一个虚拟机对得到的字节码加以解释执行。就是说Java的前一段使用编译的方法,后一段采用了解释的办法。这样做有一个显而易见的好处,就是不论是用什么机器写成的Java程序,都可以利用虚拟机在其他机器上执行,因为字节码是一定,而机器语言是有可能不同的啊。通过网络既可以实现机器之间的快速迁移,这也就是为什么Java这么风靡的原因。
    如果要得到的是可执行文件,光有这些还不够。一个源程序也许被分割成了多个模块,存放在独立的文件中。要将源程序聚合在一起,就还需要一个被称为预处理器(preprocessor)的程序独立完成。它还有一个作用就是将那些称作宏的缩写形式转化成源语言的语句。预处理器的输出其实就成了编译器的输入。
    现在不少编译器为了输出和调试方便,将汇编语言作为自身的输出,再将这个输出交与汇编器(assembler)去生成可重定位的机器代码。
   事实上,大型程序经常分成几部分进行翻译,那么就需要一个叫做连接器(linker)的程序来解决多个必要的可重定位的目标文件和库文件的连接和外部内存地质问题。最后,我们要利用一个加载器(loader)将所有的可执行文件加载到内存中执行。

练习的可能答案
练习1.1.1 编译器和解释器之间的区别是什么?
编译器和解释器同为语言处理器,但仅从字面上就能发现较大的区别。编译器主要就是将一种语言翻译成另一种语言的工具,而解释器更主要的在于解释用户的行为。
练习1.1.2 编译器相对于解释器的优点是什么?解释器相对于编译器的有点是什么?
编译器生成的目标程序通常比解释器快很多,但是解释器的错误诊断效果比编译器更好,因为它逐个语句地执行源程序。
练习1.1.3 在一个语言处理系统中,编译器产生汇编语言而不是机器语言的好处是什么?
就如书中写到的“汇编语言比较容易调试和输出”,这样就减轻了编译器设计的工作量,将部分工作转到汇编器上,是的设计更专注与编译器本身,尽量减少超出其本身所容纳的内容的范围。
练习1.1.4 把一种高级语言翻译成为另一种高级语言的编译器称为(source-to-source)的翻译器。编译器使用C语言作为目标语言有什么好处?
就好比为什么编译器要产生汇编语言而是不是机器语言一样,C语言更简单更常用更加容易理解,同样方便调试和输出。
练习1.1.5 描述一下汇编器所要完成的一些任务。
汇编器就类似与编译器,只是它的源语言不是高级语言而是汇编语言。同样,它需要一个预处理器进行预处理,如聚合文件,展开宏等。写成的机器语言也要类似与连接器和加载器的程序,完成类似的工作。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们|手机版|欧卡2中国 ( 湘ICP备11020288号-1 )

GMT+8, 2024-12-29 01:06 , Processed in 0.029807 second(s), 7 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表