编译原理讲义 (1)
- 格式:ppt
- 大小:590.00 KB
- 文档页数:63
编译原理讲义1)把⽤汇编语⾔或⾼级语⾔写成的程序转换成机器语⾔的程序,被称为翻译程序。
汇编语⾔的翻译程序称为汇编程序把⾼级语⾔的翻译程序称为编译程序。
可以采⽤边翻译边执⾏的解释执⾏⽅式,这种处理程序称为解释程序。
解释程序的结果是源程序的执⾏结果。
2)编译有哪些部分组成?每个部分的作⽤?词法分析:输⼊源程序,对构成源程序的字符串进⾏扫描和分析,识别出⼀个个的单词(符号)如关键字,标识符,常数,算符,界符。
语法分析:在词法分析的基础上,根据语⾔的语法规则,把单词符号分解成各类语法单位(如短语、句⼦等),并构造⼀棵能够正确反映该结构的语法树。
作⽤:通过语法分析确定整个输⼊是否构成语法上正确的“程序”。
注意:词法分析是种线性分析,⽽语法分析是⼀种层次分析。
中间代码⽣成:任务:语义分析的基础上按语⾔的语义规则进⾏初步的翻译(产⽣中间代码)中间代码:是⼀种含义明确、便于处理的记号系统,它通常独⽴具体的硬件;表⽰形式:四元式、三元式、间接三元式等中间代码优化:任务:对前阶段产⽣的中间代码进⾏加⼯变换,以期在最后阶段能产⽣出更为⾼效的⽬标代码。
⽬标代码⽣成:任务:把中间代码变换成特定机器上的低级语⾔代码(⽬标代码)⽬标代码形式:绝对指令代码、可重定位指令代码、汇编指令代码表格管理:错误处理:3)编译前后端的划分?前端:此法分析、语法分析、中间代码⽣成、中间代码优化。
后端:⽬标代码⽣成及和硬件有关的⼯作。
4)符号和符号串的概念1、字母表:它是⾮空有穷集。
例如:∑={a,b,c}或∑={1,2,3}2、符号:字母表中的元素称为符号。
3、符号串:符号的有穷序列,符号串也称为字。
⽤ε来表⽰空符号串。
例如:a,ab,abc,dsfsd4、长度:符号串的长度是指该串所包含的符号个数。
⽤|x|表⽰符号串x的长度。
例如:|a|=1,|abn|=35、连结:设x和y为符号串,则称xy 为他们的连结。
例如:x=aa,y=bb,则XY=aabb6、空集:不含任何元素的集合,记为Φ。
第一章 引 论第一章 引论1.1 1.1 什么叫编译程序什么叫编译程序编译程序编译程序::是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的。
如果源语言是诸如源语言是诸如FORTRAN FORTRAN FORTRAN、、Pascal Pascal、、C 、Ada Ada、、Smalltalk Smalltalk或或Java Java这样的这样的“高级语言”,而目标语言如汇编语言之类的“低级语言”这样的翻译程序则称之为编译程序。
本课程主要介绍设计和构造编译程序本课程主要介绍设计和构造编译程序的基本原理和方法。
编译程序又简称为“编译器”•第一个编译器是20世界50年代的后期出现的FORTRAN语言编译器。
•同样,解释程序又简称为“解释器”,但是在概念上与编译器有明显区别:编译程序是源转换系统,而解释程序是源程序的一个执行系统。
编译程序的结果是得到等价源程序的某种目标机程序,而解释程序的结果是得到源程序的执行结果,即它相当于执行源程序的抽象机。
第一章引论注意编译程序与解释程序的区别,一个语言的解释程序是这样的程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
术语“编译”的内涵是实现从源语言表示的 术语算法向目标语言表示的算法的等价变换。
第一章引论高级语言分类及其编译:过程式语言:FORTRAN Pascal Ada C (特点:面向驱动,面向语句,由系列的语句组成)函数式语言:LISP ML ASL(注重程序表示的功能,而不是一个语句接一个语句的执行)从已有的函数出发构造更复杂的函数。
逻辑式语言:PROLOG(检查一定的条件,当满足时,则执行适当的动作。
)对象式语言:SMALLTALK C++(封装性、继承性、多态性)第一章引论这里主要研究过程式语言的编译高级语言分类及其编译:过程式语言:FORTRAN Pascal ADA C函数式语言:LISP ML ASL逻辑式语言:PROLOG对象式语言:SMALLTALK C++函数式语言与逻辑式语言,特别是逻辑式语言,其编译技术与过程式语言的差别比较大;因对象式语言的载体基本上是过程式的,所以其编译程序也不难理解。