1、编译原理 教材: 编译原理,蒋立源等编,西北工业大学出版社 参考教材: 编译程序设计原理北京大学出版社 编译原理清华大学出版社 程序设计语言与编译电子工业出版社,内 容 第一章 绪论 第二章 前后文无关文法和语言 第三章 词法分析与词法分析程序 第四章 语法分析与语法分析程序 第五章 语法制导翻译及中间代码生成第六章 符号表 第七章 运行时的存贮组织与分配 第八章 代码优化 第九章 目标代码生成 第十章 查错与改错,程序设计语言: 低级语言:机器语言和汇编语言接近机器信号 高级语言:如Basic,Pascal,C.接近自然语言,高级语言程序,翻译程序,低级语言程序,第一章 绪论,什么是编译程序
2、(compiler),翻译程序:把源程序翻译成与之等价的目标程序的程序。根据翻译的源语言与目标语言的不同,翻译程序可以分成很多种。 编译程序:源程序是高级语言,目标程序是某种低级语言的翻译程序。 汇编程序:源程序是汇编语言,目标程序是机器语言的翻译程序。,什么是编译程序(compiler),翻译程序:把源程序翻译成与之等价的目标程序的程序。根据翻译过程的组织不同,翻译程序主要分成编译程序和解释程序。 编译程序:将某种高级语言程序作为输入并进行翻译,产生优化的目标代码并投入执行。 解释程序:将某种高级语言语句作为输入并解释执行,不产生能被执行的结果目标代码。以解释方式执行高级语言程序结构简单、占
3、用内存少、工作效率低、诊错慢,什么是编译程序(compiler),预处理器,编译器,汇编器,装配连接器,工程文件,源程序,目标汇编程序,可重定位机器代码,绝对机器码,可重定位目标文件库,编译执行的高级语言程序的编制过程,1.1 编译过程概述 编译过程可以划分成以下六个阶段: 词法分析:又称扫描器,任务是输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词符号。 语法分析:以词法分析输出的单词序列为输入,根据语言的语法规则,把单词符号串分解成各类语法单位,如短语、句子、序列段等。 语义分析:判定各语法成分的含义和功能,确定它们的属性或执行时应运行的运算或操作。 中间代码生成:中间代
4、码是一种结构简单、含义明确的记号系统,是介于源语言和目标语言之间的语言代码,一般独立于具体硬件。常用逆波兰式、三元式、四元式及树型结构等。 代码优化:对中间代码进行等价变换,以期最终产生更高效(省时间、省空间)的目标代码,优化策略主要有公共子表达式提取,循环优化等等。 目标代码生成:接受中间代码(或经优化处理之后),变换为机器语言或汇编语言形式的目标程序。(目标代码主要有三种形式:绝对地址码、汇编语言、浮动地址码链接),1.2 编译程序的逻辑结构上节编译的六个阶段是编译程序工作的动态特征,每个阶段的工作都和“出错处理”与“表格管理”功能摸块相关。诊断程序:在编译系统各部分插入的用于进行有关程序
5、错误诊断和报告的程序段。信息表格:编译程序在工作过程中需保持的一系列用以登记源程序各类信息和编译各阶段进展情况的表格。如符号名表、常数表、过程引用表。,信 息 表 格 管 理 程 序,词法分析器,语法分析器,语义处理,中间代码生成器,代码优化,目标代码生成器,源程序,目标程序,单词符号,语法单位,中间代码,优化的中间代码,语义信息,错 误 检 查 处 理 程 序,1.3编译程序的组织编译程序往往把不同阶段的工作组合成遍。 1)遍:指对源程序或其内部表示从头到尾扫视一遍,并进行有关的加工处理。 2)一遍扫描:以语法分析程序为中心。 3)多遍扫描:每遍扫描产生与源程序等价的内部表示或中间代码。多遍
6、扫描的优点: 功能独立;结构清晰;利于优化;节省空间。,编译原理的学习意义,有助于提高编写程序的能力 有助于语法理解和掌握; 有助于程序调试和排错; 有助于形成良好的程序书写风格; ,编译原理的学习意义,有助于相关课程学习 有助于形成专业知识整体结构; 有助于操作系统、系统结构等课程的理解; ,编译原理的学习意义,可以应用于相关研究领域 如:嵌入式系统、语音识别等,交叉编译:源程序的编译(或汇编)与目标程序的执行不在同一机器上完成时,称这种编译(汇编)为交叉编译(汇编)。,编译原理的学习意义,为设计开发新型高级语言编译器打基础每种高级语言针对不同的编程需要,如:C编制操作系统,功能强大,代码效率高Fortran主要用于科学计算编程,函数丰富Java支持程序可移植性,小结,1 什么是编译程序 2 编译程序的工作过程和逻辑结构,