1编译程序概述
北京航空航天大学《编译原理》第1章 概论
(1) * T1 (2) := X1
北京航空航天大学计算机学院
五、生成目标程序
由中间代码很容易生成目标程序(地址指令序列)。这 部分工作与机器关系密切 ,所以要根据机器进行。在做这 部分工作时(要注意充分利用累加器),也可以进行优化 处理。 X1:= ( 2.0 + 0.8 ) * C1
北京航空航天大学计算机学院
教学要求
• 掌握编译程序总体结构 • 在系统级上认识算法、系统的设计
– 具有把握系统的能力
• 学习有关的原理、实现方法和技术,了解计算学 科的基本方法、思想
– 掌握典型方法。 “在每一个计算机科技工作者的职业 生涯中,这些原理和技术都被反复用到。”
• 兼顾语言的描述方法、设计、应用——形式化
北京航空航天大学计算机学院
X1:= ( 2.0 + 0.8 ) * C1;
赋值语句 X1
:= 表达式 ;
表达式
* )
C1
(
2.0
表达式
也称为层次分析。 + 0.8
北京航空航天大学计算机学院
三、语义分析、生成中间代码
任务:对识别出的各种语法成分进行语义分析, 并产生相应的中间代码。 • 中间代码:一种介于源语言和目标语言之间的中间语言形式 • 生成中间代码的目的: <1> 便于做优化处理; <2> 便于编译程序的移植。 • 中间代码的形式:编译程序设计者可以自己设计,常用的有 四元式、三元式、逆波兰表示等。
北京航空航天大学计算机学院
源程序、翻译程序、目标程序 三者关系: 源程序
SOURCE PROGRAM
第1章 概述-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
《编译原理实践及应用》
1.1 程序设计语言及翻译程序
为什么要使用编译程序?
• 机器语言 (machine language)
C7 06 0000 0002
• 汇编语言 (assembler language)
MOV X , 2
为该语言编译程序能够识别的形式加入到标准源程序中。 在VC++6.0中,通过预处理后,将.c的源程序变为了.i的文 本文件。
《编译原理实践及应用》
编译
标准的C语言程序由编译程序翻译为对应于某个计算机 上的汇编语言程序。汇编语言是和机器语言一一对应的易于 阅读的文本形式的语言。编译的结果是某种机器上汇编语言 书写的程序。如在VC++6.0中,编译这一步将.i的文本文件 生成了.cod的文本文件,这就是汇编代码。有的编译器生成 .s或.asm后缀的文件。
• 解释程序:将高级程序设计语言写的源程序作为输入,
边解释边执行源程序本身,而不产生目标程序的翻译程序。
• 其他概念:
– 诊断编译程序 – 优化编译程序 – 交叉编译程序 – 可变目标编译程序
宿主机 目标机
《编译原理实践及应用》
对编译程序的一些说明
• 编译程序实质上是一个翻译程序,要注意等价变 换
• 高级语言 (high-level language)
X=2
《编译原理实践及应用》
语言层次和翻译程序大家族
翻译程序:能够将某种语言写的程序转换成另一
种语言的程序,而且后者与前者在逻辑上是等价的。
转换
高级语言层 高级语言1
程序
高级语言2
高级语言3 高级语言4
第一章 概述
第一章概述1.1什麽是编译程序什么是编译程序(compiler)编译程序是现代计算机系统的基本组成部分.从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序. (1)软件分类软件:计算机系统中的程序及其文档系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。
他和具体的应用领域无关,如编译系统和操作系统等。
语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。
软件语言:用于书写软件的语言。
它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。
(2)什么是编译程序语言转(变)换系统(3)术语编译程序(compiler)编译程序的源语言(源程序) (source language)(source program)编译程序的目标语言(目标程序) (object or target language)(object or target program) 编译程序的实现语言(implementation language)语言处理程序(language processor)语言转(变)换(language transformation)1.2 编译过程和编译程序的结构1.编译程序的结构(1)词法分析从左至右读字符流的源程序、识别(拼)单词有关术语词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.单词---token保留字---reserved word标识符 ---identifier(user-defined name)(2)语法分析功能:层次分析.依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树).术语语法分析(syntax analysis or parsing)The purpose of syntax analysis is to determine the source program’s phrase structure.This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax,and to construct a suitable representation of its phrase structure.语法树(推导树)(parse tree or derivation tree)(3)语义分析语义分析术语语义分析(semantic analysis)The parsed program is further analyzed to determine whether it conforms to the source language’s contextual constraints:scope rules, type rulese.g. To relate each applied occurrence of an identifier in the source program to thecorresponding declaration.(4)中间代码生成中间代码生成(intermediate code generation)This is where the intermediate representation of the source program is created.We want this representation to be easy to generate,and easy to translate into the target program.The representation can have a variety of forms,but a common one is called three-address code or 4- tuple code.(5)代码优化代码优化(code optimization)Intermediate code optimizationThe optimizer accepts input in the intermediate representation and output a version still in the intermediate representation .In this phase,the compiler attempts to produce the smallest,fastest and most efficient running result by applying various techniques.Object code optimization(6)目标代码生成(7)符号表管理记录源程序中使用的名字收集每个名字的各种属性信息类型、作用域、分配存储信息符号表(symbol table)Symbol table is a data structure which is employed to associate identifiers with their attributes .An identifier’s attribute consists of information relevant to contextual analysis,and is obtained from the identifier’s declaration.(8)出错处理检查错误、报告出错信息、排错、恢复编译工作出错处理(error handling)(error reporting and error recovery)The compiler should report the location of each error,together with some explanation. The major categories of compile-time error: syntax error, scope error, type error. After detecting and reporting an error,the compiler should attempt error recovery,means that the compiler should try to get itself into a state where analysis of the source program can continue as normally as possible.2。
语言程序设计习题答案
C 语言程序设计习题答案习题一 C 语言程序设计概述一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2(5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4(9)结构化的程序设计P9二、简述题1. 设计程序时应遵循哪些基本原则P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法的要素是什么算法具有哪些特点答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。
4. 有哪三种基本结构答:三种基本结构是:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S 流程图最大的区别是什么答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图、N-S 图分别表示求解以下问题的算法。
1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。
2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。
3. 求1+2+3+…+100的值。
4. 求1×2×3×…×10的值。
5. 求下列分段函数的值。
6. 求100~200之间的所有素数。
7. 求一元二次方程ax 2+bx+c=0的根。
分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。
四、注释下面C 程序的各个组成部分。
main() /*主函数 */{ /*程序开始 */int a,k,m; /*定义三个用来存放整数的变量 */a=10; /*将整数10赋值给变量a */k=2; /*将整数2赋值给变量k */m=1; /*将整数1赋值给变量1 */a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */printf("%d\n",a); /*在屏幕上打印出变量a 的值 */} /*程序结束 */习题二 数据类型、运算符与表达式一、选择题1~10:BCDCB DDBCA11~20: ADDAA DBADC21~28: DABAD CDDY= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5) 输入一个数给x X<=1 Yes no X<1 x<5 Yes no yes no Y=3x y=4x-1 y=5x+1 y=6-3x 输出s 的值 i =100 当i<=200时 n=2; flag=1; 当n< i 时i 能否被n 整除yes no flag=0 n = n+1 flag=1yes no输出i 的值i = i+1二、填空题1.字母L 或字母l2.字符或%c 、整数或%d3.在程序运行过程中,其值可以在一定的范围内变化的量。
编译原理
课程地位:编译理论与方法
计算机科学与技术中理论和实践相结合的最好典范 ACM 图灵奖,授予在计算机技术领域作出突出贡献的 科学家
程序设计语言、编译理论与方法约占1/3
程序的构造方法
1.1 什么是编译程序
编译程序与程序员的关系? 回顾程序执行的方式
解释型,如:BASIC 编译型,如:C 混合型,如:JAVA
1. 词法分析
任务: 对源程序字符流进行扫描和分解,识别出一 个个单词符号。 依循原则:构词规则 描述工具:有限自动机 例: Z := X + 6 * Y z : = x + 6 * y
可识别为下列单词(记号): 标识符z 赋值 := 标识符x 加号+ 数字6 乘号* 标识符y
2. 语法分析
任务:在词法分析的基础上,根据语言的语法规则把单词 符号串分解成各类语法单位。 依循的原则:语法规则 描述工具:上下文无关文法、语法树和抽象语法树 例(PASCAL): VAR Z,X,Y:real; E Z := X + 6* Y :=
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; END.
5
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; 表 0.1 符号名表 SNT M:=N+4; NAME INFORMATION N:=K; END. M 形式参数,整 型,值参数 N 形式参数,整 型,值参数 K 整型,变量
编译原理:第一章 引论
常见的表格:符号名表,常数表,标号表,入 口名表,过程引用表。 格式:
名字
信息
合肥工业大学 计算机与信息学院软件所
例: PASCAL程序段:
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; END.
合肥工业大学 计算机与信息学院软件所
5. 目标代码产生
任务: 把中间代码变换成特定机器上的目标 代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式:
绝对指令代码: 可直接运行 可重新定位指令代码: 需要连接装配 汇编指令代码: 需要进行汇编
合肥工业大学 计算机与信息学院软件所
合肥工业大学 计算机与信息学院软件所
4. 优化
任务:对于前阶段产生的中间代码进行加工变 换,以期在最后阶段产生更高效的目标代码。 主要包括:公共子表达式提取、合并已知量、 删除无用语句、循环优化等。 依循的原则:程序的等价变换规则
FOR K:=1 TO 100 DO BEGIN X:=I+1; M := I + 10 * K; N := J + 10 * K; END
合肥工业大学 计算机与信息学院软件所
语法分析举例说明
C语言程序 Void jisuan() { int y,c,d; float x,a,b; x=a+b*50; y=c+)d*(x+b; } 现在我们对x=a+b*50; 进行语 法分析。
赋值语句的语法 规则: A V=E E T|E+T T F|T*F F V|(E)|C V 标识符 C 常数
编译原理-第一章 概述
蒋凌云
My E-mail: jianglingyun@
教材:《编译技术原理及其实现方法》王汝传 编著
第一章 概 述
§1.1 程序设计语言 一、语言的概念和分类 二、程序设计语言简述 §1.2 翻译程序 一、汇编程序 二、解释程序 三、编译程序 §1.3 编译程序简史 一、汇编语言阶段 二、高级程序语言出现 三、编译程序理论开始确定 四、编译程序技术方法进一步发展 §1.4 编译过程简述 一、编译步骤 二、编译过程简述 三、趟程(遍) §1.5 编译程序的生成 一、编写编译程序的一般方法 二、编译程序开发技术 三、编译程序的自动生成
第一章 概 述
§1.1 程序设计语言
一、语言的概念和分类
1.语言的分类
自然 语言
以数理逻辑、集合论 和统计数学来描述的 一种语言。例如,用 计算机进行几何定理 的证明就得以数理语 言形式进行描述 程序 设计语言
人与人之间交流 信息的一种语言 动物之间通过动 物语言交流信息
数理 语言
是人和计算机进行信息交流的一种 语言,它遵循一定的语法和语义的 规则,而编译程序的功能正是 1)讨论语法,检查程序正确性 2)讨论语义,生成目标代码
计算机的两个基本能力:一是能够存储程序,二是能够自 动地执行程序。 计算机是利用“存储器”(内存)来存放所要执行的程序 的,而称之为CPU的部件可以依次从存储器中取出程序中 的每一条指令,并加以分析和执行,直至完成全部指令任 务为止。
John von Neumann 冯· 诺依曼
1949 EDSAC
多范型程序设计语言时期(2/4)
① 函数式语言 也称作用式语言,纯函数式语言中不使用赋值 语句,其语法形式类似于数学上的函数,典型 函数式语言,如LISP、APL、ML等。 ② 逻辑式语言 也称说明式语言,基于规则式语言,它以逻辑 程序设计思想为理论基础,主要核心是事实规 则与推理机制,其代表语言是 PROLOG(PROgramming in LOGic),PROLOG语 言主要用于人工智能,于1972年由法国马塞大 学人工智能研究中心开发。
C语言第1章概述
1.1 程序设计概述
2、什么是程序设计语言? 程序设计语言通常简称为编程语言,是一组用来定义
计算机程序的语法规则。它是一种被标准化的交流技 巧,用来向计算机发出指令。一种计算机语言让程序 员能够准确地定义计算机所需要使用的数据,并精确 地定义在不同情况下所应当采取的行动。 可以分为机器语言、汇编语言和高级语言三大类。
_22A,lea_1,avg3,day,ABCde43xyw8 以下标志符是非法的:
8Tea ,$_238,a*b,#xy
注意:在C语言中,大小写字母不等效。因此,a和A,I和i,Sum 和sum,分别是两个不同的标识符
18
1.2 C语言简介
2、关键字 具有特定含义的的字符串,也称为保留字。用户定
注意:编译只能发现语法错误,不能发现算法错误。
26
1.3 C语言的编程环境
1.3.2 Visual C++6.0编程环境
1. Visual C++6.0 Visual C++6.0不仅是一个C++编译器,而且是一
个基于Windows操作系统的可视化集成开发环境 (integrated development environment,IDE)。
维护和完善性维护。 可移植性:程序主要与其所完成的任务有关,但也与
它的运行环境有着一定的联系。软件的开发应尽可能 远离机器的特征,以提高它的可移植程度。
14
1.2 C语言简介
1.2.1 C语言出现的历史背景
1978年由美国电话电报公司(AT&T)贝尔实验室正式发 表了C语言。早期的C语言主要是用于Unix系统。
13
1.1 程序设计概述
编译原理王生原(第一章)
目标代码生成
目标代码表示形式
编译器需要将中间代码转换 为目标机器代码,以便在计 算机上运行。
目标代码优化
编译器可以使用各种技术进 行目标代码的优化,如指令 选择、寄存器分配等。
指令生成方法
编译器可以使用模板匹配等 技术生成目标机器指令。
总结
1
词法分析
将程序代码分解成一系列令牌或词法单元
2
语法分析
编译过程概述
编译过程由三个阶段组成:词法分析、语法分析和语义分析。在生成中间代码和目标代码之 前,还需要进行一些优化。
词法分析
目的和原理
将程序代码分解成一系列令牌或词法单元,以便进 行进一步的分析和转换。
识别标识符和关键字
编译器需要识别代码中的标识符和关键字,以便进 行进一步的语法分析。
识别常量
编译器需要将数字和字符串等常量识别并转换为内 部表示形式。
类型检查
编译器需要检查代码中的类型 错误,并将其转换为中间代码 表示形式。
处理语义错误
编译器需要对语义错误进行处 理,如输出错误消息或修复错 误。
中间代码生成
中间代码表示形式
编译器需要将语法树转换为中间代码表示形式,以 便进行后续优化可以使用各种技术进行中间代码的生成和优 化,如常量折叠、复写传播等。
语法分析
1 目的和原理
将词法单元组成的序列转换为语法分析树或语法树,以便进一步分析和转换代码。
2 生成语法规则
编译器需要根据语法规则生成语法分析树,以便进一步处理和转换代码。
3 生成语法树
编译器需要将语法树转换为中间代码表示形式,以便进一步优化和转换代码。
语义分析
目的和原理
检查代码中的语义错误,如类 型不匹配、未定义的变量等, 并生成符号表以便后续处理。
《编译原理课程教案》第1章编译原理概述精品PPT课件
----
《编译原理实践及应用》
教材及主要参考资料
• 教材:编译原理实践及应用,黄贤英,清华大
学出版社
• 主要参考资料: • (1) 编译原理,陈火旺,国防工业出版社 • (2)程序设计语言编译方法,肖军模,大连理工
大学出版社
• (3)编译原理,张素琴,吕映芝,清华大学出版社 • (4)编译原理,alfred V.Aho等著,李建中等译,人民
2020/10/9
《编译原理实践及应用》
第10页
第一章
引论
《编译原理实践及应用》
本章要求
• 主要内容:各种翻译程序的概念,编译 过程和阶段划分,编译程序的组成和结 构,编译程序的构造方法
• 重点掌握:编译程序工作的基本过程及 其各阶段的基本任务,编译程序总框。
2020/10/9
《编译原理实践及应用》
• (2) 学习数据结构,建立“算法”的概念,对编程有更深入的 理解。遇到问题的时候,能够寻找相应的数据结构模型,设计 适当的算法来解决问题;
• (3) 学习汇编语言,这门课程是我们真正深入了解计算机内部 工作的第一门课程。通过学习了解汇编语言如何变为机器语言, 如何对应于一条指令;
• (4) 计算机组成原理课程的学习使我们了解到计算机的硬件组 成,以及机器指令程序如何在计算机中运行的过程。
❖ 编译程序(Compiler)——将高级程序设计语言 程序翻译成逻辑上等价的低级语言(汇编语言,机 器语言)程序的翻译程序。
❖ 功能 源程序
编译程序
目标程序
2020/10/9
输入数据 计算机运行
《编译原理实践及应用》
结果
第14页
计算机中的语言层次和转换关系
编译原理(第一章)
语法分析器通常采用自顶向下的分析 方法,从源代码的起始位置开始,逐 步向下解析,直到找到完整的语法结 构或遇到语法错误。
语法分析是编译器的基础,它决定了 源代码的结构和含义,并为编译器提 供了理解和处理源代码的框架。
语法分析的任务
确定词法单元
语法分析器需要将源代码分解 成一个个的词法单元或符号, 如关键字、标识符、运算符等
对优化后的代码进行评估,包括性能测试、空间占用测试 等,以确定优化的效果是否达到预期目标。
THANKS FOR WATCHING
感谢您的观看
优化的分类
根据优化涉及的方面不同,优 化可以分为局部优化和全局优 化。
局部优化是指在单个函数或代 码块范围内进行的优化,通常 关注单个语句或表达式的优化。
全局优化是指在程序的全局范 围内进行的优化,通常关注函 数或模块之间的优化,以提高 整个程序的性能。
优化技术
在此添加您的文本17字
常见的优化技术包括常量折叠、死代码消除、循环展开、 循环优化、函数内联等。
在此添加您的文本16字
常量折叠是指在编译过程中将常量表达式的结果进行计算 并替换掉原来的表达式,以减少程序运行时的计算量。
在此添加您的文本16字
死代码消除是指删除程序中永远不会被执行到的代码,以 减少程序的空间占用和提高程序的运行效率。
在此添加您的文本16字
循环展开是指将循环体中的代码复制到循环外部,以减少 循环次数和减少循环开销。
。
识别语法结构
语法分析器需要识别出源代码 中的各种语法结构,如表达式 、语句、程序等。
建立语法树
语法分析器需要将识别的语法 结构按照一定的规则组织起来 ,形成一棵语法树。
语义检查
语法分析器在识别语法结构的 同时,还需要进行一些语义检 查,如类型检查、变量声明等
编译原理(第2版)课后习题答案详解
编译原理(第
第1章引论
第1题
解释下列术语:
(1)编译程序
(2)源程序
(3)目标程序
(1)INT 0 A(2)OPR 0 0(3)CAL L A
答案:
PL/0编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中的位置和功能以及所完成的操作说明如下:
INT 0 A
在过程目标程序的入口处,开辟A个单元的数据段。A为局部变量的个数+3。OPR 0 0
在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的数据段基址寄存器B和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使
该文法是否为二义的?为什么?
答案:
对于串abc
(1)S=>Ac=>abc (2)S=>aB=>abc
即存在两不同的最右推导。所以,该文法是二义的。
或者:
对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
第9题
考虑下面上下文无关文法:
S→SS*|SS+|a
(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。
最右推导2〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉a〈表达式〉〈运算符〉〈表达式〉* a〈表达式〉〈运算符〉a * a〈表达式〉+ a * a a + a * a
1hhh第1章 概述
单词符号由词法规则确定。词法规则规 定了源程序中哪样的字符串是单词。 例如,position := initial + rate*60;
单词类型 标识符1(id1) 算符(赋值) 标识符2(id2) 算符(加) 标识符3(id3) 算符(乘) 整数 分号 单词值 position := initial + rate * 60 ;
6. 目标代码生成
(*, id3, 60.0, t1) (+, id2, t1, id1)
movf mulf movf addf movf id3, R2 #60.0, R2 id2, R1 R2, R1 R1, id1
编译工作:分析(analysis)与综合(synthesis) – 源程序的分析: 词性分析、语法分析、语义分析 – 目标程序的综合
编译过程:
词法分析 语法分析 语义分析和中间代码生成 代码优化 目标代码生成
1.词法分析(lexical analysis, scanning)
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出一个个单词。 单词是语言中具有独立意义的最基本结构。 一般包括:各类型的常数、保留字、标识 符、运算符、界符等。 例如,double f = sqrt(-1);
编译程序是现代计算机系统的基本组 成部分,主要由以下部分构成:
词法分析程序 语法分析程序 语义分析和中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序和错误处理程序 运行时存储空间组织
学习编译程序,需要先理解程序设计语 言。每个程序设计语言都有一定的规则 用于规定程序的语法结构,也有一定的 规则用于描述程序的语义。
出 错 处 理 程 序
1.2 程序设计语言的实现
第1章 编译系统概述
1.3 编译过程概述
典型的编译程序工作过程是:输入源程序,对它进行加工处 理,最后输出目标程序(机器语言或汇编语言形式)。整个过 程相当复杂,从数据加工的角度来看,可将其分成4个逻辑阶 段,它们是: 词法分析 语法分析 语义分析(中间代码产生) 目标代码生成 图示如下: 源 程 序 目 标 程 序
㈡汇编语言
用记忆符取代二进制位,存储地址和汇编语句的序号可用符号 名表示。 ①优点 用符号取代二进制数,提高了程序的可理解性。 性能较好的汇编语言,可用符号名来表示存储地址和汇编 语句序号,这样避免了在汇编语句中绝对地址的出现。 可充分利用硬件特性 所以,汇编语言在一定程度上降低了程序编制和维护的难度。 ②缺点 汇编语句和机器指令基本上是一对一的,所以汇编语言的编 程效率并没有质的提高。 和机器语言一样,汇编语言依附于目标计算机。 需汇编程序,将汇编语言译成机器语言。
00000000-00000011(3) 00000000-01000000(128)
……
㈣目标代码生成(Code Generation)
执行目标代码生成的程序称为目标代码生成器。 任务:中间代码 目标代码(机器指令或汇编语言) 依据:目标机器的系统结构 假设模型机器的指令格式为: op Ri , M (Ri)op(M)→ Ri op Ri , Rj (Ri)op(Rj)→ Ri op Ri , C (Ri)op C → Ri 其中Ri表示寄存器,M表示内存地址(可用符号表示),C表 示常数。 表达式3+abc*128最终形成的汇编语言程序示意如下: Load R0,abc Mul R0,128 Store R0,T1 Load R0,3 Add R0,T1 Store R0,T2
㈡语法分析(Parsing)
编译原理简单知识总结(一)---编译程序和解释程序
编译原理简单知识总结(⼀)---编译程序和解释程序⼀、什么是编译程序 ⼀个编译程序就是⼀个语⾔翻译程序。
语⾔翻译程序把⼀种语⾔(称作源语⾔)书写的程序翻译成另⼀种语⾔(称作⽬标程序)的等价程序。
⾼级语⾔程序 ------> 编译程序 -------> 低级语⾔程序(⽬标程序)⾼级语⾔程序的处理过程 需预处理的源程序-------->预处理程序(⽂件合并、⽂件包含、宏处理、条件编译)----->编译程序---->⽬标汇编代码-->汇编程序-->可再装配的机器代码------>可在装配的⽬标⽂件(装配/链接-编译程序)--->绝对的机器代码⼆、编译过程和编译程序的结构 编译过程可划分为词法分析、语法分析、语义分析、中间代码⽣成、代码优化和⽬标代码⽣成六个阶段。
1.词法分析 词法分析是编译过程的第⼀个阶段。
这个阶段的任务是从左到右⼀个字符⼀个字符的读⼊源程序,对构成源程序的字符流进⾏扫描和分解,从⽽识别出⼀个个单词(也称单词符号或符号)。
这⾥所谓的单词是指逻辑上紧密相连的⼀组字符,这些字符具有集体含义。
⽐如标识符是由字母字符开头,后跟字母、数字字符的字符序列组成⼀种单词。
保留字(关键字或基本字)是⼀种单词,此外还有算符、界符等。
源程序------>单词特别序列,把注释、换⾏等直接忽略2.语法分析 语法分析是编译过程的第⼆个阶段,语法分析的任务是在词法分析的基础上讲单词序列分解成各类语法短语,如“”“程序”“”“语句”“”“表达式”等。
⼀般这种语法短语,也称为语法单位,可表⽰成语法树。
单词序列---->语法短语(语法树) 语法分析所依据的是语⾔的语法规则,即描述程序结构的规则,通过语法分析确定整个输⼊串是否构成⼀个语法上正确的程序。
程序的机构通常由递归规则表⽰的。
可⽤以下规则来定义表达式: (1)任何标识符都是表达式。
(2)任何常数(整常数、实常数)是表达式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表达式:标识符、常数是表达式; 例:表达式:标识符、常数是表达式;表达式的运算也是表
A:=B+C*5 :
语法分析所依据的是语言的语法规则, 语法分析所依据的是语言的语法规则, 表示语法规则的工具是上下文无关文法, 表示语法规则的工具是上下文无关文法 用下推自动机实现。 用下推自动机实现。
编译过程概述(续)
o
目标代码的生成:把中间代码 或经优化的中 目标代码的生成:把中间代码(或经优化的中 间代码)变换成特定机器上的低级语言代码 变换成特定机器上的低级语言代码。 间代码 变换成特定机器上的低级语言代码。
目标代码可以是:绝对指令代码、 目标代码可以是:绝对指令代码、可重定位的 指令代码、 指令代码、汇编指令代码
编译后端:指与目标机器有关的部分。如与机器
有关的优化、目标代码生成
构造编译程序
一般生成编译程序的方法有:
用一种语言写另一种语言的编译程序 在一台机器上用一种语言写另一台机器上 (另)一种语言的编译程序 自编译方式
构造编译程序要掌握以下几方面的内容:
源语言:理解其结构和含义 目标语言:必须清楚硬件的系统结构和指令 的格式等 编译方法
作
教材练习第2、4题P12
业
编译程序 的结构
编译程序的结构(续)
几个概念
符号表:登记源程序中出现的名字以及名字的各
种属性
出错处理: 遍:对源程序或源程序的中间结果从头到尾扫描一
次,并作有关的加工处理,生成新的中间结果或目 标程序。
编译前端:主要指与源语言有关,与目标语言无
关的部分,通常包括词法分析、语法分析、语义分 析和中间代码生成,与机器无关部分的代码优化
1.1 什么叫编译程序
1. 功能
程序设 计语言 编译程序 机器语言
2、计算机语言的层次 计算机语言的层次 高级语言、汇编语言、 三个层次 :高级语言、汇编语言、机器语言 语言转化: 语言转化: 高级语言-->机器语言 编译) 机器语言( 高级语言 机器语言(编译) 机器语言-->高级语言 反编译) 高级语言( 机器语言 高级语言(反编译) 汇编语言-->机器语言 汇编) 机器语言( 汇编语言 机器语言(汇编) 机器语言-->汇编语言 反汇编) 汇编语言( 机器语言 汇编语言(反汇编)
编译原理
主讲: 主讲:蒋贤芳
课程简介
先行课程:高等数学、C (PASCAL)、离散数学、
汇编语言、数据结构
编译原理课
例如: 例如: 文本编辑器、信息检索系统、 文本编辑器、信息检索系统、 模式识别器 排版、 排版、绘图系统 程序验证器
程序设计语言编译程序 陈火旺等 国防工业出版社 编译程序构造原理 和实现技术 金成植 高等教育出版社 Compiler Construction Principle and Pratice 编译原理及实践 Kenneth C.Louden 机械工业出版社
1.1 什么叫编译程序
翻译程序: 翻译程序:能够将某种语言写的程序转换 成另一种语言的程序, 成另一种语言的程序,而且后者与前者在 逻辑上是等价的。 逻辑上是等价的。 编译程序:是一种将高级语言程序( 编译程序:是一种将高级语言程序(源程 翻译成低级语言(目标程序) 序)翻译成低级语言(目标程序)的程序
编译过程概述(续)
o
语法分析:在词法分析的基础上, 语法分析:在词法分析的基础上,根据语言的语法 规则,将单词符号串分解成各类语法短语(例 程序、 规则,将单词符号串分解成各类语法短语 例:程序、 语句、表达式) 语句、表达式
达式 语句:标识符= 语句:标识符=表达式 while (布尔表达式 do 语句 布尔表达式) 布尔表达式 if (表达式 then 语句 else 语句 表达式) 表达式
编译的过程
数据 源程序 目标程序 计算机 运行 运行阶段 结果
编译器
编译阶段
3、什么是编译原理 、
编译原理是讨论编译程序设计的基本 理论、基本概念和基本方法的一门学科。 理论、基本概念和基本方法的一门学科
1.2 编译过程概述
1、六个阶段:词法分析、语法分析、语义分析与中间代 六个阶段:词法分析、语法分析、 码生成、代码优化、 码生成、代码优化、目标代码生成 2、每个阶段的任务: 、每个阶段的任务: 词法分析:从左到右扫描源程序, 词法分析:从左到右扫描源程序,识别出一个个单词 保留字 、标识符 、常数 、运算符 、分界符 例:int sum,first,count; sum=first+count*10 ; a、滤掉空格 b、识别单词 、 、 词法分析的工作主要依据语言的词法规则, 词法分析的工作主要依据语言的词法规则,描述词 法规则的有效工具是正规式和有限自动机。 法规则的有效工具是正规式和有限自动机。
o
语义分析和中间代码生成: 语义分析和中间代码生成:对语法分析所识别出的各类语法 单位分析其含义,进行初步的翻译(翻译成中间代码 翻译成中间代码)。 单位分析其含义,进行初步的翻译 翻译成中间代码 。这一 阶段有两项工作:首先对每种语法范畴进行静态语义审查(如 阶段有两项工作:首先对每种语法范畴进行静态语义审查 如 是否定义,类型是否匹配等),若无语义错误, 是否定义,类型是否匹配等 ,若无语义错误,进行中间代码 的翻译。 的翻译。 检查A、B、 类型) 例:A=A*B+C (检查A、B、 类型 检查A、B、C类型 中间代码有多种形式, 中间代码有多种形式,如: 四元式: 运算符 运算对象1,运算对象2,结果) 运算符, 四元式 (运算符,运算对象 ,运算对象 ,结果 (+,A,B,T1) , , , ) (+,T1,C,T2) , , , ) (=,T2,-,A) , ,, ) 语义分析依据的是语言的语义规则,表示工具是属性文法 表示工具是属性文法。 语义分析依据的是语言的语义规则 表示工具是属性文法。
编译过程概述(续)
o
代码优化: 代码优化:对已产生的中间代码进行加工 变换, 变换,使生成的目标代码更为高效 。优 化包括:公共子表达式的提取、循环优化、 化包括:公共子表达式的提取、循环优化、 删除无用代码等。 删除无用代码等。 代码的优化依据的是程序的等价变换规 则。
优化前: 优化前: (+,A,B,T1) , , , ) (+,T1,C,T2) , , , ) (=,T2,-,A) , ,, ) 优化后: 优化后: (+,A,B,T1) , , , ) (+,T1,C,A) , , , )
参 考 书 籍
编译原理 吕映芝 清华大学出版社
编译程序设计原理 杜淑敏等 北京大学出版社 参 考 书 籍
编译原理习题解答 伍春香等 清华大学出版社
考试成绩
作业成绩10%+出勤 作业成绩10%+出勤10% + 期考成绩80 出勤10% 期考成绩80 %
编译原理
第一章 编译程序概述 第二章 一个微小编译器 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法 第六章 自底向上优先分析方法 LR分析方法 第七章 LR分析方法 第八章 语法制导翻译和中间代码生成 第九章 符号表 第一○ 第一○章 代码优化 第一一章 代码生成