临时抱佛脚之编译原理期末复习

这篇博客详细梳理了编译器的五大组成部分及其功能,包括词法分析、语法分析、语义分析、优化和目标代码生成。同时,讨论了编译器的前端和后端区别,以及如何判断文法的二义性。还介绍了最左推导、最右推导等概念,并探讨了LL1文法、算符优先分析法以及LR(0)和SLR(1)文法的区别。此外,提到了三元序列、四元序列和逆波兰式在表达式求解中的应用,以及属性文法等相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一学期的课就没怎么听过…还有几天就考了,抓紧时间复习一下…

教材是陈火旺第3版

只针对一些知识点进行临时抱佛脚

----

简答

  • 编译器的五个组成部分及各部分作用:

词法分析器:输入源程序,进行词法分析,输出单词符号

语法分析器:对单词符号进行语法分析,识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”

语义分析与中间代码产生器:根据语义规则对语法分析器归约出的语法单位进行语义分析并把它们翻译成一定形式的中间代码

优化器:对中间代码进行优化处理

目标代码生成器:把中间代码翻译成目标程序

5ac3c5d72b844b14b1436450ed239f54.png

 

  • 编译前端和编译后端

编译前端:主要由与源语言相关,但与目标机无关的那些部分组成

编译后端:包括编译程序中与目标机有关的那些部分

 

计算or证明

  • 证明有二义性

其实就是找出两棵不同的语法树,一般最上面的都是一样的,找文法中可以产生多解的句子。

4e54b928ac1243f494857138899fed29.png

 

  • 最左推导,最右推导,短语、直接短语和句柄

最左推导:从句子的最左边开始推导

最右推导:从句子的最右边开始推导

短语:每棵子树的叶子

直接短语:直接子树(高度为1)的叶子

句柄:最左直接短语

11d6b95f35814f61bda1f1091c4c464d.png

 

  • NFA,DFA确定化,最小化

一般是给一个 正则式或条件,先画出nfa,再确定化,如有需要再最小化

在确定化的过程中要注意:包含了原来的终态的状态都是终态。

最小化就是先分为终态和初态两个部分,然后分别看看需不需要继续分。

b20de4756076469d85b63b6b7604585f.png

  • LL1文法

 步骤就是:

(1)消除左递归

(2)消除回溯

(3)找first和follow集

(4)判断是否为ll1

(5)得预测分析表

消除左递归:套公式

f3a99c819e564f16815383c0bcebfff2.png

 消除回溯(没看太懂)

9758f9cdf3e2410997d8d1b69d32a9ea.png

 

first集相当于首部集,找所有产生式右边的首部

follow集中不含空字,但有#

6be4c47ef2924a029cbcf1fcfbccd2ad.png

还有:

b8fa396d17414a2593d27bfc4b24efd0.png 

判断是否为ll1:

f4a93c651f604c69aec4a3917a2a5fb6.png

预测分析表:在表中所有first集对应的位置填上对应的公式,在引入的A'的follow集对应的位置填上 A'-空

f3acffeb54fd407c99f1095d67363318.png

 

1fc80e40e4674b8a9b4b05f3c7662343.png

 

  • 算符优先分析法 

(1)求firstvt和lastvt(求法和上面的first集和follow集有点像,但比那个简单)

(2)画优先关系表

(3)计算优先函数

(4)计算算符优先分析过程(移进规约)

bee46bfe461a42b7a43d11dced693875.png

d8b89d5aa10b4580be5a248f1591c048.png 

c803ba5531724385bc1a36178a461598.png 

5faf3ca98ce74c0389d293208ac8945c.png 

  •  LR(0)文法

首先就是要知道文法的项目,也就是在产生式右边加•

2c5d8b16e57a463592527c8709043f94.png

在做题前要先引入S'

步骤:

(1)先求项目集规范族(通过go函数 )

(2)画识别活前缀的DFA

(3)构造lr0分析表

a303bbc1916a4bd08015f6af171e40b3.png

这个dfa可以按照书上的画,也就是把每个状态里面包含的项目也写进去,用方框表示。

bcf7e949d1654c54ad7c30fcdfe95692.png 

SLR(1)文法和LR(0)文法的不同就在于最后写r的时候,SLR(1)只写在follow集里面

LR(0)文法没有移进规约冲突,SLR(1)可以有,但可以解决。

 

  • 三元序列,四元序列,逆波兰式

d09b9a08c5154b6cb7e30a2dd0ccd6e2.png

d2277eeae0f044b2bdbc0502ce23f48e.png 

还有属性文法和其他一些不那么重要的知识点…但还是有考的可能,搞懂了再补吧… 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值