四川大学编译原理复习要点
更新时间:2023-04-27 06:54:01 阅读量: 实用文档 文档下载
- 四川大学编译原理期末考试推荐度:
- 相关推荐
四川大学编译原理复习要点2013版
1、编译器各个阶段的功能,输入、输出,前端、后端
1)词法分析:将字符序列收集到称作记号(token)的有意义单元中
扫描程序输入:源代码输出:记号
2)语法分析:从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析,语法分析定义了程序的结构元素及其关系。
输入:记号输出:语法树
3)语义分析程序:分析程序的静态语义,包括声明和类型检查。输入:语法树输出:注释树
4)源代码优化程序:编译器通常包括许多代码改进或优化步骤。绝大多数最早的优化步骤是在语义分析之后完成的,而此时代码改进可能只依赖于源代码。
【对源代码进行优化,并产生中间代码】输入:注释树输出:中间代码
5)目标代码生成:得到中间代码,生成目标机器的代码代码生成器输入:中间代码输出:目标代码
6)目标代码优化程序:编译器改进由代码生成器生成的目标代码。
输入:目标代码输出:目标代码
扫描程序、分析程序和语义分析程序是前端,代码生成器是后端,
前后端分开的好处:可以给编译器带来更方便的可移植性,此时的编译器既能改变源代码,又能改变目标代码。
【遍】编译器发现,在生成代码之前多次处理整个源程序很方便,这些重复就是遍。首遍是从源中构造一个语法树或中间代码,在它之后的遍是由处理中间表示、向它增加信息、更换结构或生成不同的表示组成
二、解释器和编译器的区别与联系?
读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析, 之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)
编译器是把源语言(如C,Pascal,java等高级语言)转换为目标语言(汇编语言、机器语言等低级语言),要产生目标代码。
解释器是以一个源语言(C,Pascal, java等高级语言)为输入,一边解释一边执行源程序,但不产生目标代码。
3、算法描述(伪代码)p41
构造一个扫描程序的自动过程:正则表达式T NFA T DFA T程序
1、正则表达式T NFA
(1)建立字母表。输入的正则表达式由于一般不输入“与”操作符,因此
首先给表达式加入?作为与操作。再利用逆波兰式的堆栈操作,把操作符与字母分开,便得到了字母表。(2)T hompson构造法。首先将构成正则表达式的各个元素分解,对于每
一个元素,按照下述规则 1和规则2生成NFA。注意:如果r中记号a出现了多次,那么对于a的每次出现都需要生成一个单独的NFA。
2、NFA T DFA
从单个输入字符的某个状态中去除£ -转换和多重转换。
(1)利用£ -closure规则即闭包规则,把 NFA状态划分成集合,而后把每个集合作为DFA的状态。
详细描述:从NFA的状态S开始经过£到达的状态存储下,然后再把存储结果中的状态有经过£到达的新状态也存储在一起,这样通过闭包规则就可以这些集合,再把集合作为DFA的状态。
(2)子集构造
3、 DFA T程序DFA状态最小化取出DFA状态中的不可达的状态。
构造最小状态的等价 DFA的算法是通过创建统一到单个状态的状态集来进行。
构造NFA(使用Thompson结构):
1)基本正则表达式基本正则表达式格式 a或£,其中a表示字母表中单个字符的匹配,£表示空串的匹配。与正则表达式 a等同的NFA (即在其语言中准确接受)的是:
2)并置我们希望构造一个与正则表达式r s等同的N FA,其中r和s都是正则表达式。可将与rs对应的N FA构造如下:
3)在各选项中选择我们希望在与前面相同的假设下构造一个与r |s相对应的N
FA。如下进行:
4)重复 我们需要构造与r *相对应的机器,现假设已有一台与
r 相对应的机器。
那么就如下进行: 构造NFA 的一个例子:
例:根据Thompson 结构将正则表达式 a b | a 翻译为N FA 。首先为正则表达式 a 和b 分别构造机
器:
将NFA 转换成DFA (最小子集法):
& -闭包(& -closure )是可由e 转换从某状态或某些状态达到的所有状态集合
,接着再为并置a b 构造机器
:
图
: 现在再为a 构造另一个机器复件,并利用它们组成
a b | a 完整的N FA ,如下
|r - 2-6 11 I I'llionipsoti
L : hl 」:| F -'!0 ab a
它总是包含状态本身
子集构造 相关题目:2.1 , 2.12 , 2.16
四、提左因子和消除左递归
1、在建立LL ⑴ 语法分析器的时候,提左因子和消除左递归的目的、原因 目的:提取左因子---避免程序回溯;
消除左递归---消除无限循环
原因:当有公因子存在时,不能立即区分出文法规则右边的选择; 当有左递归时,将导致一个无限循环。 2、提左因子和消除左递归的算法描述 消除左递归 伪代码 P119
for i:=1 to m do
for j:=1 to i-1 do
replaceeachgrammerrule choice of theform Ai —Aj 3 by the rule
Ai — a 13 | a 2 3 |....| a k 3 , where Aj — a 1| a 2| | a k is
thecurrent rule for Aj
remove,if necessary,immediateeft recursioninvolving Ai
E'T +TE'| £
L FT' T'T *FT'| £ F T i| (E)
b) 消除间接左递归 【一般的左递归,不带有&产生式且不带有循环的文法】
对于间接左递归的消除需要先将间接左递归变为直接左递归,然后再按
a)清除左递归。 例4.13 :以文法G6为例消除左递归: (1)A T aB (2)A T Bb
(3) B T Ac
⑷B Td
解:用产生式(1) , (2)的右部代替产生式(3)中的非终结A 得到左部为]|B 的产生式:
(1) B T aBc
(2) B T Bbc
(3) B Td
消除左递归后得到:
B T aBcB' |dB'
B'T bcB' | &
再把原来其余的产生式
A T aB,A T Bb 加入,最终得到等价文法为: A T a
B A T Bb B T (aBc|d)B' B'T bcB'| &
c) 消除文法中一切左递归的算法 设非终结符按某种规则排序为
消除A 中的一切直接左递归
end (1
)
⑵
⑶ A 1, A 2,…,A n °
n
的产生式为:
…| S n Y
end
提取左因子伪代码P122
当两个或更多文法规则选择共享一个通用前缀时,需要提取左因子:
A Tap | aY
按如下规则提取左因子:
A Ta A'
5、first集合follow集合算法伪代码P126 P131
具体看书上的例子
First集合求法:
1.直接收取:对形如 U — a…的产生式(其中a是终结符),把a收入到First(U)中
2.反复传送:对形入 U — P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到First(U)中。
Follow集合求法:
1.直接收取:注意产生式右部的每一个形如“…Ua…”的组合,把a直接收入到Follow(U)中。
2 .直接收取:对形如“… UP…”(P是非终结符)的组合,把First(P)除£直接收入到 Follow(U)中。
3.反复传送:对形如 P—…U的产生式(其中 U是非终结符),应把Follow(P)中的全部内
容传送到 Follow(U)中。(或 P—…UB且First(B)包含则把 First(B)除£直接收入到 Follow(U)中,并把Follow(P)中的全部内容传送到 Follow(U)中)
6、写递归下降子程序伪代码P10 6
递归下降:将一个非终结符A的文法规则看作将识别A的一个过程的定义一个if语句(简化了的)文法规则是:
if-stmt —if (exp) statement
| if (exp) statementelsestatement
伪代码:
procedure ifstmt;
beg in
match (if );
match (();
exp;
match ());
stateme nt
if toke n = elsethe n
match (else;
stateme nt
en dif ;
en d ifstmt;
给出基于DFA进行词法分析的表驱动的实现算法
p44 state:=1;ch:=nextinput character;
while not accept[state]and not error(state) do
new state:=T[state,ch];
if adva nce[state,ch]the n ch:=n ext in put chracter; State: =n ewstate
en d while;
if accept[state]the n accpet;
7、上下文无关文法 BNFEBNF 最左最右推导
1定义:上下文无关文法 G 是一个四元组G = (N , T , P, S),其中
N 是非终结符的有限集合;
T 是终结符或单词的有限集合,它与
N 不相交; P 是形如A F 的产生式的有限集合,其中
A
正在阅读:
四川大学编译原理复习要点04-27
逆境更有利于人成长辩论赛一稿09-03
2013年四川省中小学体育条件情况调查表06-03
金蝶KIS专业版二次开发技术详解10-16
南京市人民政府关于印发南京市推进总部经济“五个一”行动计划的通知01-12
商务谈判中的倾听的技巧案例12-10
金融学模拟试题(1)09-14
译林版小学英语三年级上第一二单元检测10-24
浅析日本动漫对中国动漫发展的借鉴意义03-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 四川大学
- 编译
- 要点
- 复习
- 原理
- 辽宁煤矿区环境与灾害地质问题(通用版)
- 2018年江苏省各市中考语文试卷(真题)全集-合编
- 凤于九天 二十四 惊隼大捷
- 2015年12月全国电大奥鹏计算机网考题库 计算机应用基础统考资料
- 福建省安装工程 工程消耗量定额-交底材料2012版
- 年产10万吨石英砂生产线项目可行性研究报告可研报告
- 迎泽区职称论文发表网-环境监测质量管理保证论文选题题目
- 湘教版数学七年级上册2.5 整式的加法和减法(二).docx
- FMEA潜在失效模式及分析标准表格模版
- 2017高考数学试题分类汇编(22个专题)
- 2017年度大盘点,说说谁是最好的篮球鞋
- 2020建筑环境与设备工程实习报告4篇
- 2018年安徽师范大学数学计算机科学学院891高等代数考研强化五套模拟题
- 北票市宝国老镇中心小学体测模版
- 初中军训最后一天作文
- Cisco Catalyst 3850 系列网络交换机产品指南
- 麦克威尔——当今世界最盘踞的搭档
- 无锡无锡金桥双语实验学校初二上学期生物 期末试卷带答案
- 七年级地理上册 第一章 第二节《地球的运动》导学案人教新课标版
- 九年级语文自主学习指导课程参考答案20150916