编译原理清华大学导论
编译原理课后习题答案+清华大学出版社第二版
一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序 的总体结构图。
答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语
义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和 错误处理程序。其各部分的主要功能简述如下。
第 4题
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代 码生成)报告的。 (1) else 没有匹配的 if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析
第5题
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来 完成,即只翻译不执行。
3
《编译原理》课后习题答案第一章
第6题
计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?
答案:计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语
言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反 复。
清华大学编译原理第二版课后习答案
Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理,清华大学,第2版_第8章 语法制导翻译和中间代码生成
将if-then-else看作一个完整的操作符,则e、x和 y 分别是三个操作数,这显然是一个三元运算。根据后缀式 的特点,它的后缀式可以写为:
exy if-then-else(记为: exy¥) 但是,这样的表示有个弱点。按照算法的计算次序,e、 x和y均需计算,而实际上,根据条件e的取值,计算x则不 计算y,计算y则不计算x。
一、逆波兰表示 典型特征是操作数在前,操作符紧跟其后。 特点:由于操作符紧跟操作数之后,因此只要知道操作 符有几个操作数,每一步的运算就可以确定。
1、 表达式的表示:
例:a+b 例:-a+b*c 例: (a+b)*c ab+ a@bc*+ ab+c* <左部><表达式的逆波兰式> ::=
2、 赋值语句的逆波兰表示:
E → E1 + E2
E → E1 * E2 E → (E1) E → num
E.val := E1.val + E2.val;
val[top] := val[top]+val[top+2];
E.val := E1.val * E2.val; E.val := E1.val; E.val := num.lexval;
第八章 语法制导翻译和中间代码生成
• 教学要求:本章介绍编译程序的第三个阶段语 义分析及中间代码生成的设计原理和实现方法,
要求理解语法制导翻译、语义动作的基本概念;
掌握语义规则和中间代码的表示形式。 • 教学重点:语义规则,中间代码的表示形式, 自下而上分析制导翻译概述。
语义处理功能: • 1、静态语义审查:验证语法结构合理 的程序是否真正有意义。 • 2、解释执行动态语义、生成代码:执 行真正的翻译(生成中间代码或目标代 码)。
编译原理第三版课后答案清华大学
编译原理第三版课后答案清华大学出版社
一、单项选择题
1.每一个解释器必须完成运行程序所需的基本功能是什么?
A.翻译代码
B.执行代码
C.优化代码
D.分析代码
答案:B.执行代码
2.下列哪个不是一种程序设计语言?
A.C
B. Lisp
C. Java
D.汇编语言
答案:D.汇编语言
3.哪一种语言可以编译成多种机器语言?
A.动态语言
B.汇编语言
C.静态语言
D.高级语言
答案:D.高级语言
4.什么类型的编译器可以将源代码转换为机器可以识别的字节码?
A.汇编器
B.解释器
C.直译器
D.编译器
答案:D.编译器
二、填空题
5.编译器用于将高级语言(________)翻译成机器语言(________)。
答案:源代码,目标代码
6.编译器通过不同的(________)实现程序翻译的过程。
编译原理 第10章(清华大学)
∶ ∶
(a) (a) 到 达 标 号 B1处 ;
BB 的 内 情 向 量 ZZ
BB11 的 TT OO P DISPLAY
形式单元 m,n 2
连接数据 A的TOP
∶ ∶ (b) (b)进 入 分 程 序 B1;
31
数 组B
B的 内 情 向 量 z
B1 的 T O P D I S P LAY
20
用Display表的方案
(1)主程序--->(2)P--->(3)Q--->(4)R
top
P的
display sp 活动记录
d[1]
主程序的
d[0]
活动记录
top display
主程序的
d[0]
sp 活动记录
(2)
(1)
21
用Display表的方案
• 主程序--->P--->Q--->R
d[2]displatyopsp
endmainmainqrmainqqtopr的活动记录q的活动记录spq的活动记录q的活动记录主程序全局主程序全局数据区数据区top临时工作单元局部简单变量局部数组的内情向量保存运行过程前的状态返回地址寄存器值??实参形式单元和参数个数sp控制链老sptop的数组区sp的活动记录q的活动记录主程序全局数据区嵌套过程语言的栈式分配方案l主要特点语言一个过程可以引用包围它的任一外层过程所定义的标识符如变量数组或过程等
地址 3 参数个数 4 形式单元
. . . d D ISP L A Y . 简单变量 . 数组内情向量 . 临时变量
• 当过程的层次为n, 它的 display为n+1个 值。 • 一个过程被调用时, 从调用过程的 DISPLAY表中自下向 上抄录n个SP值,再加 上本层的SP值。 •全局DISPLAY地址
编译原理 清华大学出版社
Hale Waihona Puke 3、语义分析(1)语义
定义语言的单词符号和语法单位的意义.一个语言的 语义是指这样的一组规则,使用它可以定义一个程序的 意义.这些规则称为语义规则.
离开语义,语言只不过是一堆符号的集合.
语义分析阶段的主要任务
审查源程序有无语义错误,为代码生成阶段收集类型信 息.
18
3、语义分析(2)
例如: 类型审查、数组下标检查、强制类型转换等
2. 任何常数(整常数、实常数)是表达式。
3. 若表达式1和表达式2都是表达式,那么 ·表达式1+表达式2 ·表达式1*表达式2 ·(表达式1)
都是表达式。
16
程序结构(2)
语句的表示: 1. 标识符:=表达式 是语句。 2. while (表达式) do 语句 和
if (表达式) then 语句 else 语句 都是语句。
整数:10 界符:。
逗号:, 冒号::
分号:; 赋值号::= 加号:+ 乘号:*
机内码为:id1:=id2+id3*10
13
2、语法分析
❖ 任务:单词符号串 → 各类语法单位 在词法分析的基础上将单词序列分解成各类语法短语.通常 用语法树表示这种语法短语.
❖ 依据:语言的语法规则 ❖ 描述语法规则的工具:上下文无关文法、确定的下推自动机
任课教师:湛 燕 Email: zhanyan@
数学与计算机学院
1
教材与参考书
编译原理(第二版). 张素琴,吕映芝,蒋维杜,戴桂兰编 著,清华大学出版社,2005.2.
名称 编译原理 编译原理 编译原理
作者 何炎祥 陈火旺等 蒋立源
出版社 华中理工大学 国防工业出版社 西北工业大学
《编译原理》(清华大学出版社第二版)课后习题答案
PL/0编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语言中下列指令各自的功能和所完成的操作。
(1)INT 0 A
(2)OPR 0 0
(3)CAL L A
答案:
PL/0编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中的位置和功能以及所完成的操作说明如下:
或者:允许0开头的非负整数?
第3题
为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:
G[S]:
S->S+D|S-D|D
D->0|1|2|3|4|5|6|7|8|9
第4题
已知文法G[Z]:
Z→aZb|ab
写出L(G[Z])的全部元素。
答案:
Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb
N→D|1|3|5|7|9
D→2|4|6|8
F→N|0
G→D|0
第6题
已知文法G:
<表达式>::=<项>|<表达式>+<项>
<项>::=<因子>|<项>*<因子>
<因子>::=(<表达式>)|i
试给出下述表达式的推导及语法树。
(5)i+(i+i)
(6)i+i*i
答案:
(5) <表达式>
=><表达式>+<项>
n n
L(G[Z])={a b |n>=1}
第5题写一文法,使其语言是偶正整数的集合。要求:
编译原理_第7章(清华大学)
+ + > - > * > / > > ( < ) > i > # <
> > > > > < > > <
* < < > > > < > > <
/ < < > > > < > > <
< < < < < < > > <
( < < < < < <
) > > > > > = > >
<
i # < > < > < > < > < > < > > < =
规定 若 S a…或 S Ca… 则 # < a 若 S …a 或 S …aC 则 a > #
在 OG文法 G 中,若任意两个终结符间至多有 一种算符优先关系存在,则称G 为算符优先文 法(OPG)。 注意:允许b>c, c>b; 不允许 b>c, b<c, b=c中任两个 同时存在。 b=c 不一定 c = b。 例7.1中:“(” = “)”,“)”<>“(”。
最左素短语为:T*F
T
E + T
句型T+T+i的素短语为: i
句型T+T+F的素短语为:T+T
分析程序模型
输入串#
总控程序 # 算符优先关系表
编译原理课后习题答案解析+清华大学出版社第二版
管理。(数组 CODE 存放的只读目标程序,它在运行时不改变。)运行时的数据区 S 是由解 释程序定义的一维整型数组,解释执行时对数据空间 S 的管理遵循后进先出规则,当每个 过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。 应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。
RA 的用途说明如下: T: 栈顶寄存器 T 指出了当前栈中最新分配的单元(T 也是数组 S 的下标)。 B:基址寄存器,指向每个过程被调用时,在数据区 S 中给它分配的数据段起 始 地址,
也称基地址。 SL: 静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来 完成,即只翻译不执行。
)
第4题
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代 码生成)报告的。 (1) else 没有匹配的 if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
CAL L A 调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基址 寄存器 B 中,目标程序的入口地址 A 的值送指令地址寄存器 P 中,使指令从 A 开始执 行。 第6题
编译原理_第5章(清华大学)
学习目标: ➢掌握:LL(1)文法的判别,预测分析
法,递归子程序的构造方法 ➢理解:LL(1)文法 ➢了解:不确定的自顶向下分析
语法分析的作用是识别由词法分析给出的单词序 列是否是给定文法的正确句子
分类:
语法分析
自顶向下分析 自底向上分析
确定的
不确定的 算法优先分析(第六章)
进行推导,类似地LL(k)文法需要向前看K个符号才 可以确定选用哪个产生式。
例 有文法G[S]为:
S→aAS
SELECT(S→aAS)= {a}
S→b
SELECT(S→b)= {b}
A→bA
SELECT(A→bA)= {b}
A→ε
SELECT(A→ε)=Follow(A)= {a,b}
Hale Waihona Puke 由于SELECT(A→bA)∩SELECT(A→ε)={b}≠Φ,
此外若可能导出空串,A自动获得匹配,输入符a 有可能与A后的一个符号匹配,所以当a应属于 Follow(A)时,选择产生式A→也是可以的。
直观上说某产生式A→α的选择集合是指遇到哪些输 入符号(包括#)时选用该产生式向下推导。
例 G3[S]: 若α≠>*ε,则SELECT(A→α)=FIRST(α) S→aA 若α=>*ε, 则SELECT(A→α)
例文法G2[S]: S→Ap FIRST(Ap)={a,c}
S→Bq FIRST(Bq)={b,d}
A→a
FIRST(a)={a }
A→cA FIRST(cA)={c}
B→b
FIRST(b)={b}
B→dB FIRST(dB)={d}
由于同一非终结符的两个产生式的右部推导出来的 开始符号集不相交,因此可根据当前输入符属于哪 个产生式右部的开始符号集而决定选哪个产生式进 行推导,可以进行确定的自顶向下分析
编译原理_第3章(清华大学)
文法:是语言语法的描述工具,实现用 有穷的规则把语言的无穷句子集描述出 来。
例:“我是大学生”是汉语的一个句子 用EBNF来表示汉语句子的构成规则: 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我|你|他 〈名词〉∷= 王明|大学生|工人|英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是|学习 〈直接宾语〉∷=〈代词〉|〈名词〉
第三章
文法和语言
学习目标: 掌握:自上而下与自下而上的分析方法 理解:文法的形式定义,推导,归约,句 型,句子,语言,上下文无关文法,规范 句型,语法树,短语,直接短语,句柄 了解:文法的类型,文法使用中的限制, 文法的二义性
3.1 3.2 3.3 3.4 3.5 3.6 3.7
语言和文法的直观概念 符号和符号串 文法和语言的形式定义 文法的类型 上下文无关文法及其语法树 句型的分析 有关文法实用中的一些说明
文法类别产生式形式产生的语言说明0型文法短语文法v且至少含一个非终结符v0型语言对产生式基本无限制1型文法上下文有关文法1或avavnv1型语言上下文有关语言将a替换成时必须考虑a的上下文2型文法上下文无关文法aavnv2型语言上下文无关语言无需考虑a在上下文中的出现情况3型文法正规文法aab或aaabvnavt3型语言正规语言产生式全部是规定的形式四种文法之间的逐级包含关系2型文法1型文法3型文法0型文法35上下文无关文法及其语法树1
3.3 文法和语言的形式定义
1.文法的定义 2.文法的简化表示法 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
பைடு நூலகம்
1.文法的定义
产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production): 产生式(规则)集合 S: 开始符号或识别符号
编译原理(清华)第一章编译程序概论
综合阶段:中间代码的生成,代码优化,目标代 码生成,对源程序进行翻译,生成目标代码
2. 前端与后端 前端(依赖于源语言而与目标机无关): 词法分析、语法分析、语义分析和中间 代码的生成,中间代码优化; 后端(依赖于目标机而一般不依赖源语 言):目标代码生成;
编译过程的实现: 一个编译过程可以由一遍、两遍或多遍完成 遍(pass) :对源程序或中间语言程序从头 到尾扫描并完成规定任务的过程。 一遍的编译器是通过一遍扫描直接从源程 序生成出目标代码,而多遍的编译器则通 过多遍扫描产生目标代码。比如第一遍进 行词法分析、语法分析、中间代码生成和 中间代码优化,而第二遍扫描则从中间代 码产生目标代码 影响分遍的因素:源语言结构,目标机资 源
3.语义分析
(semantic analysis)
任务:审查源程序是否有语义错误,为代 码生成阶段收集类型信息
类型审查(静态语义): 上下文相关性 类型匹配:每个算符是否具有语言规 范允许的运算对象 类型转换
例: program p() var rate:real; procedure initial; … position := initial /*error*/ + rate*60
4. 编译程序的发展
第一个编译程序的出现:20世纪50年代 早期,主要将算术公式翻译成机器代码 20世纪50年代中期,一批编译系统程序 开发成功 20世纪50年代末,开始研究编译程序的 自动生成工具 20世纪60年代,研究使用自展技术 并行编译技术
1.2 编译程序概述
一个编译程序的整个工作过程是划分成 阶段进行的,每个阶段将源程序从一种 表示形式转换成另一种表示形式。 典型的划分方法:
3. 语言程序的测试工具 静态分析器:检查变量的定值与引用关系 动态测试器:用测试用例记录程序运行时的 实际路径
重点难点-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
重点难点第一章引论考核目的:考核学生对编译原理的基本概念、定义、编译原理的应用发展和现状的了解和掌握情况。
考核的知识点:正确理解什么是编译程序;熟悉编译程序总流程框图;了解编译程序工作的基本过程及其各阶段的基本任务;了解编译程序的生成过程和构造工具。
考核要求:掌握:什么是编译程序、编译过程、编译程序构造。
理解:什么是编译的关键技术、编译程序与程序设计环境解决了哪些实际问题;编译程序的生成。
了解:编译技术的发展。
第二章高级语言及其语法描述考核目的:考核学生对程序语言的定义、高级语言的一般特征及程序语言的语法描述理的理解和掌握。
考核的知识点与考核要求:•理解:词法、语法和语义的概念,语言生成过程上下文无关文法基本概念,包括:文法的定义、编写、句型、句子、语言、语法树、二义性等;•掌握:能对表达式进行推导并构造语法树会判断文法的二义性能找出句型的短语、直接短语、句柄高级语言一般结构和主要共同特征第三章词法分析考核目的:考核学生对词法分析器的任务、词法分析器的设计、正规表达式与有限自动机、词法分析器的自动产生等内容的理解和掌握。
考核的知识点:词法分析器的任务,词法分析器设计,正规表达式与有限自动机,词法分析器自动生成。
考核要求:1.词法分析器的作用和接口,用高级语言编写词法分析器等内容,它们与词法分析器的实现有关。
应重点掌握词法分析器的任务与设计,状态转换图等内容。
2.掌握下面涉及的一些概念,它们之间转换的技巧、方法或算法。
•非形式描述的语言↔正规式•正规式→ NFA(非确定的有限自动机)• NFA → DFA(确定的有限自动机)• DFA →最简DFA第四章语法分析—自上而下分析考核目的:考核学生对语法分析器的功能、自上而下分析所面临的问题、LL (1)分析法、递归下降分析的构造过程、预测分析程序等内容的理解和掌握。
考核的知识点:语法分析器的功能,自上而下分析方法,LL(1)文法,递归下降分析程序构造,预测分析表的构造及预测分析过程。
清华大学编译原理答案
清华大学编译原理答案【篇一:编译原理(_第二版_清华大学_课后答案)】第 1 题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理_第1章(清华大学)
语义分析
语义审查(静态语义)
上下文相关性 类型匹配 类型转换
例: Program p(); Var rate:real; procedure initial; … position := initial + /* error */ /* error */ …
rate * 60 /* warning */;
编译程序结构(components) 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序 出错处理程序
词法分析程序
语法分析程序
表 格 管 语义分析程序 中间代码生成程序 出 错 处
理
代码优化程序
功能:层次分析.依据源程序的语法规则把源程序 的单词序列组成语法短语(表示成语法树).
position := initial + rate * 60 ; 规则 <赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
又如: int arr [2],abc; abc = arr * 10;
… Program p(); Var rate:real; Var initial :real; Var position :real ; … position := initial +
编译原理_清华大学_第2版_第1章 编译程序概论ppt
( *, y,
( +, x,
20
10.0, t1 )
t1, A )
目标代码生成
•任务:把中间代码变换成特定机器上 的绝对指令代码或可重定位的指令代 码或汇编指令代码。
•特点:与硬件系统结构和指令含义有 关,涉及到硬件系统功能部件的运用、 机器指令的选择、各种数据类型变量 的存储空间分配以及寄存器和后缓寄 存器的调度等。
21
A := x + y * 10 ( *, y, 10.0, t1 )
( +, x, MOVF
MULF MOVF
t1, y,
10.0, x,
A ) R2
R2 R1
ADDF
MOV
R1,
R1,
R2
A
22
符号表管理 • 符号表用来记录源程序中出现的标识符, 并收集每个标识符的各种属性信息。 • 符号表是由若干记录组成的数据结构,每 个标识符在表中有一条记录,每条记录有 多个域,每个域记载标识符的一个属性。
高级语言:使用便于理解的自然语言。
6
语言处理程序
• 解释程序(器):接受某种语言源程序,然后直接解释执行 源程序。
源程序 (高级语言 ) 初始数据
解释程序 计算结果 计算机
解释程序解释执行过程的示意图
7
•编译程序(器):接受某种语言的源语言程序后,
将它改造成另一种逻辑上等价的目标语言程序。
高级语言程序 (源程序 )
17
中间代码生成
将源程序生成一种内部表示形式,这种内部表 示形式叫中间代码。 中间代码:一种结构简单、含义明确的记号系统。 原则:
•容易生成;
•容易将它翻译成目标代码。
如四元式:
编译原理课后习题答案解析+清华大学出版社第二版
计算机执行用高级语言编写的程序有哪些途径它们之间的主要区别是什么
答案:计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语
言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反 复。
第2题
若 PL/0 编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分 别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句 b∶ =10 时运行 栈的布局示意图。 var x,y; procedure p; var a; procedure q; var b; begin (q) b∶ =10; end (q); procedure s; var c,d; procedure r; var e,f; begin (r) call q; end (r); begin (s) call r; end (s); begin (p) call s;
(2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析
第5题
编译程序大致有哪几种开发技术
答案:
(1) 自编译:用某一高级语言书写其本身的编译程序。 (2) 交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3) 自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的
第6题
给出对 PL/0 语言作如下功能扩充时的语法图和 EBNF 的语法描述。 (1) 扩充条件语句的功能使其为: if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充 repeat 语句为: repeat〈语句〉{;〈语句〉}until〈条件〉
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[5]《编译程序构造原理和实现技术》
主编:金成植
出版社:高等教育出版社
出版时间:2002年7月
[6]《编译原理及编译程序构造》
主编:高仲仪、金茂忠
出版社:北京航空航天大学出版社 出版时间:2001年3月
[7]《编译原理(第2版)》
主编:蒋立源, 康慕宁
出版社:西北工业大学出版社 出版时间:1999年4月
编译系统是现代计算机系统的基本组成之一,编译程序 构造的基本原理和技术不仅应用于编译程序的设计,也广泛 应用于一般软件的设计和实现。本课程是计算机类专业的一 门重要的核心专业课。
先修课程: 高级程序设计语言、汇编语言、 离散数学、数据结构
学习要求:不旷课,上课认真听讲,课上保持安静; 课后即时复习,认真完成作业; 实验课内实践程序独立设计及实现 。
输出
翻译程序根据所处理的对象和实现的途径不同又分为: 汇编程序、编译程序和解释程序。
(2). 汇编程序(Assembler)
如果源语言是某种汇编语言,而目标语言是某种计算机的机 器语言,这样的一个翻译程序就称为汇编程序。
源程序 (汇编语言)
输入
翻译程序 (汇编程序)
图1.2 汇编程序
目标程序 (机器语言)
❖ 在软件逆向工程、软件的设计方法、程序理解和软件安 全等方面有着广泛的应用。
课程要求
❖讲课进展较快,平时要复习并加深理解。 ❖作业较多,要求独立完成。 ❖实验和课内实践,每次验收检查。 ❖学期总评成绩 = 考试成绩60% + 平时成绩40%
平时成绩40% = 作业实验考勤30% + 课内实践10%
第三阶段,语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)
此阶段的任务是: 对语法分析所识别出的各类语法范畴,分析其含义,并进
行初步翻译(产生中间代码)。
中间代码是一种独立于具体硬件的记号系统。 常用的中间代码:三地址码,四元式,三元式、间接三 元式、逆波兰式,树形表示等。
如果一个编译程序产生不同于其宿主机的机器代码。
(4)可变目标编译程序(Retargetable Compiler):
不需重写编译程序中与机器无关的部分就能改变目标机。
宿主机(host machine):运行编译程序的计算机。 目标机(object machine) :运行编译程序所产生目标代码的计算机。
注解
(1)
:=
I
M
M:=I
(2)
:=
J
N
N:=J
(3)
:=
1
K
K:=l
(4)
j<
100
K
(9) if(100<k)goto(9)
(5)
+
M
10
M
M:=M+10
(6)
+
N
10
N
N:=N十 10
(7)
+
K
1
K
K:=K+l
(8)
j
(4) goto(4)
(9)
优化后目标程序的执行效率提高很多。因为,对于前者,在循环中需 做300次加法和200乘法;对于后者,在循环中只需做300次加法。
所谓“中间代码”是一种含义明确、便于处理的记号系统,它通 常独立于具体的硬件。这种记号系统或者与现代计算机的指令形式有某 种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。
四元式的形式是: ( 算符 左操作数 右操作数 结果)
它的意义是:对“左、右操作数”进行某种运算(由 “算符”指明),把运算所得的值作为“结果”保留下来。
输出
(3). 编译程序(Compiler)
如果源语言是某种高级语言,而目标语言是某种低级语言 (汇编语言或机器语言),这样的一个翻译程序就称为编译程 序。
源程序 (高级语言)
输入
翻译程序 (编译程序)
图1.3 编译程序
目标程序 (低级语言)
输出
(4). 解释程序(Interpreter)
这是另外一种类型的翻译程序,在翻译过程它按照高级语 言源程序在计算机上执行的动态顺序对源程序的语句逐条翻译 (解释),边解释边执行直至结束,它不产生目标程序,它的 工作结果就是源程序的执行结果,这样的一个翻译程序就称为 解释程序。
§1.2 编译过程概述
编译程序的工作,从输入源程序开始到输出目标程序为止的 整个过程,是非常复杂的。 一段英文翻译为中文时,通常需经下列步骤: (1)识别出句子中的一个个单词; (2)分析句子的语法结构; (3)根据句子的含义进行初步翻译; (4)对译文进行修饰; (5)写出最后的译文。
类似地,编译程序的工作过程一般也可以划分为五个阶 段:词法分析、语法分析、语义分析与中间代码产生、优化、 目标代码生成。
要在计算机上执行用高级语言(或汇编语言)编写的程序, 必须通过特定的途径来进行,也就是要通过翻译程序把用高级 语言(或汇编语言)编写的程序翻译成为机器语言构成的程序, 计算机才能执行。
在计算机上执行一个高级语言程序一般要分为两步:
第一步,用一个编译程序把高级语言翻译成机器语言程序;
第二步,运行所得的机器语言程序求得计算结果。
“并行运算”,还可以对代码进行并行化处理。
优化所依循的原则: 程序的等价变换规则。
例如,有程序片断 for K:=1 to 100 do begin
M:=I+10*K N:=J+10*K end
其中间代码为:
序号
OP
ARG1 ARG2 RESULT
注解
(1) :=
1
K
K:=1
(2) j<
100
K
(9) 若100<K转至第(9)个四元式
语法分析所依循的是语言的语法规则。语法规则通常用上 下文无关文法描述。
词法分析是一种线性分析,而语法分析是一种层次结构分析。 例如,在很多语言中,符号串
z:=X十0.618*Y
代表一个“赋值语句”,而其中的 X+0.618*Y代表一个“算术 表达式”。因而,语法分析的任务就是识别 X+0.618*Y为算术 表达式,同时,识别上述整个符号串属于赋值语句这个范畴。
第五阶段,目标代码生成(Code Generation)
第一阶段: 词法分析 (Lexical analysis)
词法分析的任务:
输入源程序,对构成源程序的字符串进行扫描和分解, 识别出一个个的单词。
保留字(begin、end、if、for、while等)、 标识符(x1、s等变量名)、 常数(3.14、100等)、 算符(+、-、and、or等)、 界符(标点符号、左右括号等)。
[8]《编译原理》
主编:张幸儿
出版社:科学出版社
出版时间:1999年4月
第1章 引论
本章主要内容: ❖什么是编译程序 ❖编译过程和编译程序的结构 ❖为什么要学习编译程序
本章的重点: 本章没有难以理解的内容,主要
是对编译程序的功能和结构做一综 合描述
§1.1 什么叫编译程序
使用过现代计算机的人都知道,多数用户是应用高级语言 来实现他们所需要的计算的。现代计算机系统一般都含有不止 一个的高级语言编译程序,对有些高级语言甚至配置了几个不 同性能的编译程序,供用户按不同需要进行选择。
算法,无需偏向于某种源语言或目标机器
学习的意义
❖ 对编程语言的设计和实现有深刻的理解,对和编程语言 有关的理论有所了解,对宏观上把握编程语言来说,起 一个奠基的作用。
❖ 从软件工程看,编译器是一个很好的实例,所介绍的概 念和技术能应用到一般的软件设计之中。
❖ 大多数程序员同时是简单语言的设计者,有助于提高对 这些语言的设计水平。
课程简介
总学时: 72学时 4.5学分 课堂教学: 52学时 ; 课内实验: 8学时 课内实践: 12学时
主讲:林泓
课程内容
❖ 介绍编译器构造的一般原理和基本实现方法 ❖ 理论知识:形式语言和自动机理论、语法制导翻译的定
义和属性文法等 ❖ 形式化描述技术 ❖ 对编译原理和技术的宏观理解,注意力无需分散到枝节
源程序 (高级语言)
初始数据
翻译程序 (解释程序)
计算结果
输入
图1.4 解释程序
输出
根据不同的用途,编译程序可进一步分类: (1)诊断编译程序(Diagnostic Compiler):
专门用于帮助程序开发和调试的编译程序。 (2)优化编译程序(Optimizing Compiler):
着重于提高目标代码效率的编译程序。 (3)交叉编译程序(Cross Compiler):
(3)
*
10
K
T1
T1 :二10*K; T1为临时变量
(4)
+
I
T1
M
M :=I+T1
(5)
*
10
K
T2
T2 :=10*k; T2为临时变量
(6)
+
J
T2
N
N :=J十T2
(7)
+
K
1
K
K :=K十1
(8)
j
(2) 转至第(2)个四元式
(9)
转换成如下的等价代码:
序号
OP ARG1 ARG2 RESUL
Compilers:Principles,Techniques,and Tools
主编:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
出版社:人民邮电出版社
出版时间:2002年2月
参考资料
[4]《编译原理与技术》(第二版)
主编:陈意云
出版社:中国科学技术大学出版社 出版时间:2002年1月