编译原理要点整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理要点整理
//红色字体标注的是重点中的重点,大题的归宿
第一章引论
1.翻译器,编译器的定义
2.编译器工作步骤和流程
3.编译器前端后端的概念,理解为什么要有前端后端
4.“遍”的概念
第二章词法分析
1.词法分析器的定义
2.词法分析器所要完成的任务
3.记号,模式,词法单元概念区分
4.串的运算(和,连接,指数,闭包,正闭包)
5.正规定义
6.转换图(注意开始状态和结束状态以及需要将指针回退的状态)
7.不确定的有限自动机(NFA)定义
8.确定的有限自动机(DFA)定义
9.从正规式到NFA(明确通过正规式如何构造连接运算,和运算,闭包运算的NFA)
10.此方法产生的NFA的性质
11.从NFA到DFA(子集构造法)
12.DFA的化简(合并不可区别状态)
13.从语言描述直接到DFA
14.了解Lex
学完本章:能语言描述改写成正规定义,能将正规定义转化为语言描述,给出一个正规式,能转换成相应的NFA,DFA并化简。
第三章语法分析
1.上下文无关文法定义
2.区分句子和句型
3.最左推导&& 最右推导
4.分析树
5.文法二义性
6.消除左递归&& 提左因子
7.了解语言鸟瞰(0型文法:短语文法;1型文法:上下文有关文法;2型文法:
上下文无关文法;3型文法:正规式)
8.FIRST集合&& FOLLOW集合定义及计算方法
9.LL(1)文法定义
10.了解自上而下的递归下降的预测分析
11.自上而下非递归的预测分析(详细明确预测分析器接受某一输入串时的具体过
程,明确栈如何变化,输入输出如何变化)
12.预测分析表的构造
13.句柄的概念
14.自下而上的分析方法:用栈实现移近-归约分析(详细明确预测分析器接受某一
输入串时的具体过程,明确栈如何变化,输入输出如何变化)
15.LR文法和LR分析算法
16.构造SLR分析表(从文法构造识别活前缀的DFA(LR(0)项目集规范族),从
DFA构造SLR分析表)
17.构造规范的LR分析表(从文法构造识别活前缀的DFA(LR(1)项目集规范族),
从DFA构造规范的LR分析表)
18.构造LALR分析表(从文法构造识别活前缀的DFA(合并同心的LR(1)项目集),
从DFA构造规范的LR分析表)(合并同心项目集可能会引起归约-归约冲突,不
会引起新的移进-归约冲突)
学完本章:能计算FIRST集合和FOLLOW集合;给定一个文法,能判断是否是LL(1)文法,并为其构造分析表;能构造LR(1)文法的三种预测分析表;明确移近归约分析中的每一个步骤,明确栈如何变化。
第四章语法制导的翻译
1.语法制导的定义
2.综合属性(S属性定义)
3.注释分析树(S属性定义可以自下而上的完成)
4.继承属性
5.语法树
6.S属性的自下而上计算(将LR分析器增加一个域来保存综合属性值)(一定要明
确每一步移近-归约时属性栈如何变化)
7.L属性定义(例:变量类型声明的语法制导定义)
8.翻译方案(能根据文法以及需要计算的属性写出一个翻译方案)
9.L属性定义的自上而下的计算
10.L属性定义的自下而上的计算
学完本章:要能根据要求设计简单问题的语法制导定义和翻译方案。
例:为文法
S—> ( L ) | a
L—> L , S | S
写一个语法制导定义,它输出括号的对数。
第五章(不要求)
第六章运行时存储空间的组织和管理
1.过程定义、过程调用、形式参数、实在参数、活动的生存期
2.名字的作用域和绑定
3.活动记录(运行程序时存储区布局,活动记录的一般布局)
4.局部数据的安排(内存对齐问题)
5.局部存储分配策略
6.全局存储分配策略(静态,栈式,堆式)
7.运行栈&& 活动树
8.访问链&& 控制链
9.非局部名字的访问(静态作用域,动态作用域的区别)
10.四种参数传递方式的区别(值调用,引用调用,复写-恢复调用,换名调用)
学完本章:能判断一个变量的作用域;熟悉静态分配与动态栈式分配的区别;明确非局部数据访问的实现方法;各种参数传递方式的区别;会处理内存对齐问题;会画活动树。
例:指出下面程序中各个变量对应的分配策略?
int a;
void p(int b){
int c;
int *d = malloc(sizeof(int)*b);
}
void main(){p(3);}
第七章中间代码生成
1.中间语言(能将表达式转化为后缀表示,图形表示,三地址代码形式)
2.区分图形表示中的语法树和有向无环图
学完本章:能将表达式转化为后缀表达式,语法树,有向无环图,三地址代码形式。
例:将表达式a := (b + c*d ) + c*d转化为后缀表达式,有向无环图,三地址代码形式
第八章代码生成
1.指令的代价
学完本章:会计算指令的代价
例:指令代价
MOV R0,R1 1
MOV R5,M 2
ADD #1,R3 2
SUB 4(R0), *12(R1) 3