第一章 总论
编译程序的功能
较为复杂的翻译程序
编译程序的组成,各部分的功能?
分析:词法分析,语法分析,语义分析
综合:中间代码生成,中间代码优化,目标代码生成,目标代码优化
各部分功能:
什么是趟(遍)?
对一种代码形式从头到尾扫描一遍
高级程序设计语言有哪两种执行方式?各有什么优缺点?两种执行方式的区别。
编译执行:源程序的执行分两步:编译和运行.即先通过一个存放在计算机内的.成为编译程序的机器语言程序,把源程序全部翻译成和机器语言表示等价的目标程序代码,然后计算机在运行此目标代码,以完成源程序要处理的运算并取得结果
解释执行:源程序输入到计算机后,解释程序将源程序逐句翻译,翻译一句执行一句,边翻译边执行,不产生目标程序
区别:编译方式把源程序的执行过程严格地分成两大步:编译和运行.即先把源程序全部翻译成目标代码,然后再运行此目标代码,获执行结果.即:先编译后执行.解释方式则不然:它是按照源程序中语句的动态顺序,直接地逐句进行分析解释,并立即执行.即:边编译边执行.
第二章 文法和语言
文法的定义
文法是一个四元组:非终结符集合,终结符组成的字母表,有穷非空的重写规则集合,识别符号
推导、规范推导、归约、规范归约
什么是规范推导、规范归约?
什么是规范句型、规范分析?
推导:非终推出一串
规范推导:最右推导,得到的句型为规范句型
规约:一串归到一个非终
规范归约:最右规约
句子、句型、短语、简单短语、句柄
句型:有终结符和非终结符
句子:只有终结符
短语:w=xuy是一个句型,Z=>xUy,且U=>u(好几步),则称u是句型w的相对于U的短语
直接短语:w=xuy是一个句型,若有Z=>xUy,且U=>u(一步),则称u是句型w的相对于U的直接(简单)短语
句柄:句型的最左简单短语称为该句型的句柄
根据语法分析树如何求?
👍
子树的末端结点符号串是相对于子树根的短语。
简单子树的末端结点组成的符号串是相对于简单子树根的简单短语;
最左简单子树的末端结点组成的符号串为句柄。
语言的定义
语言:该文法一切句子的集合
文法和语言的关系
一个文法,能构造出唯一的语言
一个语言,能确定文法,但是不是唯一的文法
文法和语言的分类、对应的自动机
0型文法:
1型文法(上下文有关文法):cD->BDb
2型文法(上下文无关文法):A->aBb
3型文法(正规文法):左线性/右线性
二义性文法的判别
同一个句子,最左推导最右推导能得到两个分析树
句型分析分哪两类?各自的难点及要解决的问题是什么?
自顶向下分析技术
基本思想是:从识别符号出发,由它推导出与输入符号串相同的终结符号串。自顶向下识别过程是一个不断建立直接推导的过程。
问题:如何确定用哪个ui代替U?
自底向上分析技术
基本思想是:从输入符号串出发,试图把它归约成识别符号。
问题:把x归约到A还是B?
语法分析树的作用?
为一个给定的终结符号串构建一棵语法分析树的过程称为对该符号串进行语法分析
第三章 词法分析
词法分析的任务
识别出源程序中具有独立含义的最小语法单位——符号或单词
根据状态转换图写正则文法;根据正则文法画状态转换图
👍
对于形如A∷=a的每个规则,引一条从开始状态S到状态A的弧,其标记为a;
对形如A∷=Ba的规则引一条从状态B到A的弧,其标记为 a。
如果一个状态转换图中有从状态B到状态A的弧,弧上标记为a,显然必存在规则A∷=Ba;
如果从开始状态S到状态A有一弧,弧上标记为a时,则存在规则A∷=a。
根据语言写文法;根据正则文法构造有限自动机
👍
根据语言写文法:先构造状态转换图,然后用几个句子测试状态装换图对不对,然后根据状态转换图写文法
正则文法构造有限自动机:先构造状态转换图,然后列一个表格(映射函数M)(A经过a到B->A行a列值为B)
特别强调:正则文法的形式采用左线性
什么是NFA、DFA?
DFA:确定有穷自动机 五元组
(有穷非空状态集合,有穷非空输入字母表,映像M,开始状态,非空的终止状态集合)
NFA:非确定有穷自动机
(有穷非空状态集合,有穷非空输入字母表,全体映像M,非空的开始状态集合,非空的终止状态集合)
NFA和DFA主要区别是什么?
DFA的确定性表现在转换函数M:对任一状态和输入,M唯一的确定了下一个状态
NFA:对任一状态和输入,下一个状态不能唯一确定
NFA的确定化算法
👍
先列出NFA
1 、 从新开始状态出发,列表求出其它一切新状态(每出现一个新状态,加到列表里);
2 、以状态名中包含原有终止状态名的一切新状态作为新终止状态;
3 、 构造DFA N′。
第四章 自顶向下的语法分析
自顶向下的语法分析技术的基本思想,要解决的主要问题是什么?
自顶向下分析技术
基本思想是:从识别符号出发,由它推导出与输入符号串相同的终结符号串。自顶向下识别过程是一个不断建立直接推导的过程。
问题:如何确定用哪个ui代替U?
文法的等价变换:提取左公共因子
👍
一般形式:A→αβ1|αβ2|…|αβn
提取左公共因子: A→α(β1|β2|…|βn )
引进新的非终结符A’: A→αA’ A’→β1|β2|…|βn
消除左递归的方法
👍
将 A→Aα1|Aα2|…|Aαm|β1|β2|…|βn
改写为: A→β1A’|β2A’…|βn A’ A’→α1A’|α2A’…|αm A’|ε
这里, αi不等于ε,βj不以A开头。
FIRST()集合与FOLLOW()集合的求法
👍
FIRST():只看右边的第一个符号,如果是终结符,就是终结符,如果是非终结符,继续求这个非终结符的FIRST()
FELLOW(): 在右边找A ,找到之后求A的右边的FIRST()
- 把FIRST()中除了空集的元素都加进去
- 如果FIRST()中有空集,把左边非终结符的FELLOW()加进去
Select()集合的求法
👍
对于一个规则A->★
- 如果★推不出空集,把FIRST(★)加进去
- 如果★能推出空集,把FIRST(★)中除了空集的元素加进去,再加上FELLOW(A )
何构造预测分析表?
👍
对于一个规则A->★
- FIRST(★)中除了空集的每一个符号下都有这个规则
- 如果FIRST(★)中有空集,FELLOW(A)中的每一个符号下都有这个规则
LL(1)文法的定义和判定方法
👍
对于一个非终结符有多条规则,每一条规则的Select集没有交集,就是LL(1)
递归下降分析技术的实现思想
文法的每一个非终结符所对应的子程序,根据选定的产生式右端出现的符号来设计,具体构造方法如下:
- 每遇到一个终结符,则判断当前读入的单词是否与该终结符相匹配,若匹配,则继续读取下一个单词;若不匹配,则进行错误处理。
- 每遇到一个非终结符,则调用相应的子程序。
根据文法写出递归下降分析程序(伪代码)
👍
若规则呈U → u|ε,则对于当前输入单词a,当a∊first(u)时,a与u匹配,否则,任何的a都与ε匹配。
第五章 自底向上的语法分析 算符优先
(自学内容—教材第五章)
算符优先分析技术的实现思想,算符优先关系,算符优先文法的判别
素短语,最左素短语。
素短语:1.是一个短语.2.至少包含一个终结符.3.除自身外不再包含其他素短语
最左素短语:最左边的素短语
算符优先分析的优缺点;
优点:简单,有效,适合表达式的分析
缺点:只适合于算符优先文法
在规约的过程中只考虑终结符之间的优先关系来确定句柄,而与非终结符无关
算符优先分析过程和规范归约的比较。
第五章 自底向上的语法分析
什么是移入项、归约项、待约项?
移入项:🔺后面是终结符
待约项:🔺后面是非终结符
规约项:🔺在最后
LR(0)项集规范族的构造
👍
…
特征有穷状态机
各个状态与后继符合组成的状态转换图
LR(0)文法的判别、 LR(0) 分析表的构造
👍
判别:没有移进规约冲突
构造:…
LR(0)分析过程
👍
…
SLR(1) 分析表的构造,SLR(1)文法的判别
👍
判别:如果有移进规约冲突,并且FELLOW()无交集是SLR(1)
构造:…
向前搜索符号,LR(1)项,有效项
什么是活前缀、可归前缀?
P125
在符号栈中的都是活前缀
每次归约之前的符号串都是可归前缀
LR(1)项集规范族的构造
👍
…
LR(1)文法的判别、 LR(1) 分析表的构造
👍
…
LR(1)分析过程
👍
…
三种LR分析方法的比较
第六章 语义分析与目标代码生成
程序的含义包含哪两个方面?
数据结构的含义与控制结构的含义
语义分析的功能
1.确定类型2.类型检查3.识别含义4,其他静态语义检查
什么是语法制导翻译?
语法制导翻译 是在语法规则制导下,通过对语义规则的计算,完成对输入符号串的翻译。即,在使用语法规则进行推导或归约的同时又使用语义规则来指导翻译与最终产生目标代码。
属性文法的定义
在文法基础上,为文法符号关联的有特定意义的任何内容,称为属性。
如类型、数值、存储地址与代码等。
属性文法和翻译模式的区别
翻译模式:是适合语法制导语义计算的另一种描述形式。在形式上与属性文法类似,但允许语义动作出现在产生式右端的任何位置,以显式的表达属性计算的次序
属性文法: 在属性文法中,每个产生式都关联一个语义规则的集合,每个语义规则可以是一个语义动作,或者是一个条件谓词。
什么是综合属性、继承属性?
综合属性:产生式左边符号的属性由右边的符号的属性决定
继承属性:产生式右边符号的属性由左边符号和右边符号的属性决定
如何根据基础文法设计相应的属性文法和翻译模式?
S-属性文法、L-属性文法
S-翻译模式、L-翻译模式
S-属性文法:只包含综合属性的文法
L-属性文法:可以包含综合属性也能包含继承属性,但是产生式右端的符号的继承属性只能由他左边符号决定
语义计算
遍历分析树进行语义计算
基于属性文法的语义计算:1.基于S-属性文法的语义计算 2.基于L-属性文法的语义计算基于翻译模式的语义计算:基于L-翻译模式的递归下降翻译程序(例题7.9)
源程序的内部中间表示有哪几种?
抽象语法树
逆波兰表达式
四元式
根据给出的C语言源程序,写出相应的四元式序列。
👍
while和if判断时去运算符号的反