第1章编译原理概述剖析
- 格式:ppt
- 大小:1.02 MB
- 文档页数:42
第一章 引论• 为什么要用编译器 • 与编译器相关的程序 • 翻译步骤• 编译器中的主要数据结构1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。
2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。
3、使用编译器是为了提高编程的速度和准确度。
4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。
5、解释器是另一种常见的语言处理器。
它并不通过翻译的方法生成目标程序。
从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。
6、一个源程序可能被分割成多个模块,并存放于独立的文件中。
把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。
预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。
7、连接器(linker )能够解决外部内存地址的问题。
8、加载器(loader )把所有的可执行目标文件放到内存中执行。
2、一个编译器的结构OutputSourceProgramFront endBack endObject1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。
2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。
3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。
4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。
词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。
第一章概述计算机由硬件和软件组成,软件又包括程序设计语言、系统软件和应用软件,而编译系统属系统软件。
最早人们只能使用计算机可直接接受的机器语言,到1956年,在IBM704计算机上构造了第一个FORTRAN编译程序,使人们从繁重的机器语言程序设计中解放出来。
计算机是一种逻辑电子装置,它只能接受二进制数,要使得计算机接受高级语言程序,就要借助于编译程序将高级语言程序翻译成机器可接受的机器语言。
§1编译程序和解释程序:要在计算机上实现除机器语言之外的任一程序设计语言,就首先应使此语言为计算机所“理解”。
解决这一问题的方法有两种:一种是对程序进行翻译;另一种是对程序进行解释。
翻译程序:①汇编程序②编译程序翻译程序:是把一种语言编写的程序翻译成等价的另一种语言的程序;前一种语言称为源语言,后一种语言称为目标语言;根据源语言和目标语言的不同,有各种不同的翻译程序:汇编程序:若源语言是汇编语言,目标语言是机器语言,这种翻译程序称为汇编程序。
编译程序:若源语言是高级语言,而目标语言是某计算机的汇编语言或机器语言,这种翻译程序称为编译程序。
解释程序:它以用该语言编写的源程序作为输入,但不产生目标程序,而是按照源语言的定义边解释边执行源程序本身。
通常的编译程序是先将源程序比较简单地翻译成某种中间形式的程序,然后再对这种中间形式进行解释;这种中间形式的语言有多种:波兰表示、三元组、四元组、树、伪代码等。
编译程序和解释程序相比,解释程序的执行效率比较低,但占用时间较少。
§2编译程序的组成部分:编译程序将首先根据源语言的定义来对源程序进行分析,之后进行综合,并从而得到与源程序等价的目标程序;分析:对源程序进行结构分析和语义分析;综合:创建出与源程序等价的目标程序;结构分析:①词法分析②语法分析综合:①中间代码生成②代码生成每一个编译程序一般都要做以下几个方面的工作:①词法分析②语法分析③语义分析④中间代码生成⑤代码生成⑥代码优化目标程序图1。
编译原理第1章第一章编译概述2.典型的编译程序可划分为几部分?各部分的主要功能是什么?每部分都是必不可少的吗?答:编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
各部分的主要功能如下:词法分析程序又称扫描器。
进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单元,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数;语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类;语义分析的功能是确定源程序的语义是否正确;中间代码生成程序的功能是将源程序生成一种更易于产生、易于翻译成目标程序的中间代码;代码优化程序的功能是将中间代码中重复和冗余部分进行优化,提高目标程序的执行效率;目标代码生成程序的功能是将中间代码生成特定机器上的机器语言代码;符号表管理程序的功能是记录源程序中出现的标识符,并收集每个标识符的各种属性信息;错误处理程序的功能是应对在编译各个阶段中出现的错误做适当的处理,从而使编译能够继续进行。
编译程序的每部分都是必不可少的。
3.解释方式和编译方式的区别是什么?答:解释方式最终并不生成目标程序,这是编译方式与解释方式的根本区别。
解释方式很适合于程序调试,易于查错,在程序执行中可以修改程序,但与编译方式相比,执行效率太低。
4.论述多遍扫描编译程序的优缺点?答:优点:(1)可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个子程序,各遍程序可以相互覆盖;(2)可使各遍的编译程序相互独立,结构清晰;(3)能够进行充分的优化,产生高质量的目标程序;(4)可将编译程序分为“前端”和“后端”,有利于编译程序的移植。
缺点是每遍都要读符号、送符号,增加了许多重复性工作,降低了编译效率。
第一章概述1.1 编译程序的概念计算机硬件的最核心部件是CPU(Computer Processor Unit)即中央处理器,CPU能够执行的指令是二进制形式的指令即机器指令,机器指令的集合称机器语言。
用机器指令书写的程序可以说无法阅读,程序设计的效率极低甚至可以说无法进行程序设计。
机器指令的助记符形式称汇编指令,比如MOV是数据传送指令,助记符形式的汇编指令的集合称汇编语言。
汇编语言的出现使得程序设计的效率有所提高,即使现在,汇编语言仍是编制设备驱动程序的重要工具。
但是,汇编语言书写的程序不能直接在CPU中运行,需要汇编程序(Assembler)把汇编语言书写的源程序(Source Program)汇编成机器语言程序才能在CPU中运行。
汇编的过程可以用下图表示:(源程序)(目标程序)汇编语言与机器语言类似,仍然依赖于计算机,使用起来繁琐、易出错、可读必差、缺乏通用性,因此面向过程的高级语言、面向对象的高级语言相继出现了。
例如面向过程的高级语言:Basic、Pascal、Fortran、C语言等等;面向对象的高级语言Visual Basic、Visual C++、Delphi、PowerBuilder等等。
把高级语言翻译(Translator)成汇编语言程序或机器语言程序的程序称为编译程序(Compiler)。
汇编语言与机器语言亦称低级语言。
对高级语言书写的源程序进行编译的过程可以用下图表示:编译程序翻译目标程序(Object Program)一般指低级语言程序。
综上所述,可以看出编译程序在计算机系统中的重要地位。
不同的高级程序设计语言需要不同的编译程序,同一种高级程序设计语言在不同的计算机上需要不同的编译程序。
有了编译程序,程序设计人员就不需要考虑与计算机硬件有关的绝大部分甚至全部细节,使程序设计独立与计算机,即同一个高级语言源程序可以在不同的计算机上运行。
在计算机上运行一个高级语言源程序一般分为两步:第一步是通过编译程序把源程序翻译成目标程序;第二步是运行或称执行目标程序。