🔍文中如有不对,欢迎讨论
第1章:引论
1.1 什么是编译程序
一个编译程序就是一个语言翻译程序
判断题:编译程序就是解释程序 (❌)
编译程序与解释程序的异同
相同点:都是进行翻译
不同点:
编译程序进行整体翻译
解释程序进行逐条翻译
1.2 编译过程和编译程序的结构
1.2.1 编译过程概述
1.词法分析
任务:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
2.语法分析
任务:在词法分析的基础上将单词序列分解成各类语法短语
1.2.2 编译程序的结构
❌出错处理主要的三个错误
词法错误
语法错误
语义错误
表格管理程序
负责收集记录查询编译当中所缺的信息,像常量表、符号表、数组信息表。
1.2.3 编译阶段的组合
有时把编译的过程分为前端和后端
阶段 | |
---|---|
前端 | 词法分析、语法分析、语义分析、中间代码生成阶段 |
后端 | 目标代码生成、相关出错处理、符号表操作 |
第2章:文法和语言
2.2 符号和字符串
🟩选择题、填空题
1)符号串的头尾,固有头和固有尾
如果z=xy是一符号串,那么x是z的头,y是z的尾,如果x是非空的,那么y是固有尾,如果y是非空的,那么x是固有头
2)符号串的连接:设x和y是字符串,它们的连接xy是把y的符号写在x的符号之后得到的符号串
如:X=ST,y=abu,则xy=STabu
3)符号串的方幂
设x是符号串,把x自身连接n次得到符号串z,即z=xx…xx,称为符号串x的方幂
4)符号串集合
若集合A中的一切元素都是以某字母表上的符号串,则称A为该字母表上的符号串集合。形成语言或正规式的形式
2.3 文法和语言的形式定义
🟢必考点 名词解释:1.文法的概念
文法G定义为四元组(VN,VT,P,S)
🟢2.直接推导、推导的定义
直接推导: 从字符串A到B只使用了一次规则,A=>B即直接推导
推导: 存在一个直接推导序列,即A=>B=>C=>D=>…=>Z,则A=>+Z表示从A出发,经过1步或若干步直接推导可推出Z。
🟢3.句型、句子的定义
句型: G[S]是一个文法,如果符号串x是从识别符号推导出来的,即S=>x,则称x是文法G[S]的句型。
句子: 若x仅由终结符号组成,则成为G[S]的句子
4.文法描述的语言是该文法一切句子的集合
5.文法的等价性
观察两个文法所描述的语言是否相同
若L(G1)=L(G2),则称文法G1和G2等价
2.4文法的类型
🟨选择题:如0型文法又叫什么文法?
0型文法,也称短语文法
设G为一个文法,如果它的每个产生式a->b,满足a、b是非终结符VN和终结符VT的闭包集合(包含空串),且a中至少有一个非终结符,则称G是一个0型文法
做限制条件:
1.使产生式右边长度大于等于左边,除了空字外
得到1型文法,又叫上下文有关的
2.a是一个非终结符
得到2型文法,又叫上下文无关的
3.产生式的形式都是A->aB或A->a,其中A,B都是非终结符
得到3型文法,又叫正规文法
2.5 上下文无关文法及语法树
🌲语法树: 描述上下文无关文法(2型文法)的句型推导的直观工具,也叫推导树
🎈最左(右)推导:在推导任何一步a=>b,其中a,b是句型,都是对a中的最左(右)非终结符进行替换
注:
最右推导常被称为规范推导
规范推导的逆过程,称为最左归约,也称为规范归约
💊二义性:一个文法存在某个句子对应两颗不同的语法树,或者说,一个文法中存在某个句子,它有两个不同的最左(右)推导
2.6 句型的分析
2.6.1 自顶向下的分析方法(推导过程)
如:
LL(1)分析法
递归下降分析法
2.6.2 自底向上的分析方法(规约过程)
简单优先分析法
算符优先分析法
优先函数
LR分析法
2.6.3 句型分析的有关问题
回溯:从各种可能的选择随机挑选一种,如果发现它是错误的,必须退回去重新选择
🟢必考点(名词解释或综合题):短语、直接短语、句柄
名词解释
综合题案例
(1)串abbaa最左推导:
S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa
最右推导:
S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa
(2)产生式有:
S→ABS|Aa|ε
A→a
B→SBB|b
可能元素有:εaa ab abbaa aaabbaa……
(3)该句子的短语有:
a是相对A的短语
b是相对B的短语
bb是相对B的短语
aa是相对S的短语
abbaa是相对S的短语
直接短语有:a b
句柄是:a
2.7 有关文法实际应用的一些说明
2.7.1 有关文法的实用限制
❌有害规则:是指像U->U这种没有必要的产生式,因为这会引起文法的二义性所以有害
❗多余规则:指文法中那些连一个句子的推导都用不到的规则,以两种形式出现:不可到达的、不可终止的
练习
第3章 词法分析
3.1.2 词法分析程序的输出
单词符号可分为以下5类
1)关键字
2)标识符
3)常数
4)运算符
5)界符
词法分析所输出的单词符号可以采用以下二元式表示
(单词种别,单词自身的值)
3.3 单词的形式化描述工具
3.3.2 正规式
正规式正规集的等价变换
正规式代数规律
3.3.3 正规文法和正规式的等价性
1.将正规式转换成正规文法
2.将正规文法转换成正规式
3.4 有穷自动机
3.4.1 确定的有穷自动机(DFA)
一个确定的有穷自动机M是一个五元组:
三种表示形式:定义表示、状态图表示、矩阵表示
3.4.2 不确定的有穷自动机(NFA)
一个不确定的有穷自动机M是一个五元组
3.4.3 NFA转换为等价的DFA(确定化)
子集法
3.4.4 确定的有穷自动机的化简(最小化)
分割法
通过消除无用状态和合并等价状态
练习:
正规式->DFA
1)先构造NFA
2)确定化
3)最小化
2.正规文法->DFA
给出右线性文法:
S -> 0S | 1S | 1A | 0B
A -> 1C | 1
B -> 0C | 0
C -> 0C | 1C | 0 | 1
1)构造NFA
2)确定化
3)最小化
第4章 自顶向下语法分析方法
4.2 确定的自顶向下分析思想
简单讲就是
First集:第一个终结符号
Follow集:后面紧跟的终结符号
🟢LL(1)的含义
L:从左向右扫描输入串
L:最左推导
1:只需向后看一个符号便可决定如何推导
LL(1)文法的判别
过程:
1)求出能推出空字的非终结符
2)计算First集
3)计算Follow集
4)计算select集
4.3 某些非LL(1)文法到LL(1)文法的等价变换
🟨判断题
1.所有非LL(1)文法都可以到LL(1)文法转换(❌)
2.左公共因子和左递归都可以消除(❌)
LL(1)文法的充要条件
1)没有左公共因子
2)没有左递归
3)select交集为空
左公共因子
1)隐式
2)显示
左递归
1)直接
2)间接
4.3.1 提取左公共因子
4.3.2 消除左递归
综合案例
构造过程
1.判断文法是否为LL(1)文法
2.构造预测分析表
3.分析过程
练习:
参考答案:https://www.docin.com/p-696386725.html
第5章 自底向上优先分析
1)简单优先
2)算符优先
5.2 简单优先分析法
5.2.1 优先关系定义
🟨判断题
若X的优先级大于Y,则可以推出Y的优先级小于X (❌)
5.3 算符优先分析
算符优先分析只考虑终结符
🟢名词解释:OG、OPG
OG:算符文法
OPG:算符优先文法
OG:算符文法
1.任何句型都不包含两个相邻的非终结符
2.如果如果Ab出现在算符文法的句型r中,其中A属于非终结符,b属于终结符,则r中任何含此b的短语必含有A
OPG:算符优先文法
1.在算符文法中任何句型都不包含两个相邻的非终结符
2.不能出现空产生式
3.终结符之间最多只有一种优先关系
5.3.3 算符优先关系表的构造
1)求出等于大于小于关系
2)求FIRSTVT(小于关系)、LASTVT集合(大于关系)
🟩综合题:按照书上5.3步骤写
例题5.3
5.3.4 算符优先算法
🟢名词解释:最左素短语
最左素短语:设有文法G[S],其句型的素短语是一个短语,它至少包含一个终结符,并除自身外不包含其他素短语,最左边的素短语称最左素短语
第6章 LR分析
6.2 LR(0)分析
6.2.4 LR(0)项目集规范族的构造
重点:p130-137