一学期的课就没怎么听过…还有几天就考了,抓紧时间复习一下…
教材是陈火旺第3版
只针对一些知识点进行临时抱佛脚
----
简答
- 编译器的五个组成部分及各部分作用:
词法分析器:输入源程序,进行词法分析,输出单词符号
语法分析器:对单词符号进行语法分析,识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”
语义分析与中间代码产生器:根据语义规则对语法分析器归约出的语法单位进行语义分析并把它们翻译成一定形式的中间代码
优化器:对中间代码进行优化处理
目标代码生成器:把中间代码翻译成目标程序
- 编译前端和编译后端
编译前端:主要由与源语言相关,但与目标机无关的那些部分组成
编译后端:包括编译程序中与目标机有关的那些部分
计算or证明
- 证明有二义性
其实就是找出两棵不同的语法树,一般最上面的都是一样的,找文法中可以产生多解的句子。
- 最左推导,最右推导,短语、直接短语和句柄
最左推导:从句子的最左边开始推导
最右推导:从句子的最右边开始推导
短语:每棵子树的叶子
直接短语:直接子树(高度为1)的叶子
句柄:最左直接短语
- NFA,DFA确定化,最小化
一般是给一个 正则式或条件,先画出nfa,再确定化,如有需要再最小化
在确定化的过程中要注意:包含了原来的终态的状态都是终态。
最小化就是先分为终态和初态两个部分,然后分别看看需不需要继续分。
- LL1文法
步骤就是:
(1)消除左递归
(2)消除回溯
(3)找first和follow集
(4)判断是否为ll1
(5)得预测分析表
消除左递归:套公式
消除回溯(没看太懂)
first集相当于首部集,找所有产生式右边的首部
follow集中不含空字,但有#
还有:
判断是否为ll1:
预测分析表:在表中所有first集对应的位置填上对应的公式,在引入的A'的follow集对应的位置填上 A'-空
- 算符优先分析法
(1)求firstvt和lastvt(求法和上面的first集和follow集有点像,但比那个简单)
(2)画优先关系表
(3)计算优先函数
(4)计算算符优先分析过程(移进规约)
- LR(0)文法
首先就是要知道文法的项目,也就是在产生式右边加•
在做题前要先引入S'
步骤:
(1)先求项目集规范族(通过go函数 )
(2)画识别活前缀的DFA
(3)构造lr0分析表
这个dfa可以按照书上的画,也就是把每个状态里面包含的项目也写进去,用方框表示。
SLR(1)文法和LR(0)文法的不同就在于最后写r的时候,SLR(1)只写在follow集里面
LR(0)文法没有移进规约冲突,SLR(1)可以有,但可以解决。
- 三元序列,四元序列,逆波兰式
还有属性文法和其他一些不那么重要的知识点…但还是有考的可能,搞懂了再补吧…