编译原理学习总结
第一章 引论
1 了解什么是编译程序
程序编译就是利用编译器,通过上述过程,将一种语言编译成另一种需要的语言。
词法分析
读入源程序 识别出单词 并用记号方式表示识别出的单词
语法分析
在词法分析的基础上,根据语言的语法规则,把单词符号串组成各类语法单位.即在单词流的基础上建立一个层次结构-----建立语 法树
读入源程序 识别出单词 并用记号方式表示识别出的单词
语法分析
在词法分析的基础上,根据语言的语法规则,把单词符号串组成各类语法单位.即在单词流的基础上建立一个层次结构-----建立语 法树
语义分析阶段
语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作信息及类型信息
中间代码生成阶段
语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作信息及类型信息
中间代码生成阶段
这种中间表示可以看成是某种抽象的程序,通常是与平台无关的
要易于产生,而且便于翻译成目标程序
第二章 高级语言及其语法描述
1 上下文无关文法
文法是描述语言的语法结构的形式规则。
它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。
一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。
2 语法分析树和二义性
语法树的根结由开始符号所标记;随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。
在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。
如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
3 形式语言
第三章 词法分析
正规式与有限自动机
1 把句子表现成正规式
2 把正规式装换成NFA
转换规则
3 把NFA转化成DFA
4 化简DFA
第四章 语法分析-自上而下分析法
任务 :
在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。
问题 :
文法的左递归问题,回溯的不确定性,虚假匹配的问题,不能准确地确定输入串中出错的位置
LL(1)文法
1 判断
(1)文法不含左递归
(2)对于文法中每一个非终结符A的各个产生式的候选式的FIRST集两两不相交。即,若
- A→α1|α2|…|αn 则 FIRST(αi)∩FIRST(αj)=Φ (i≠j)
(3)对于文法中的每个非终结符A,若它的某个候选首符集包含ε,则
FIRST(A)∩FOLLOW(A)=Φ
(2)对于文法中每一个非终结符A的各个产生式的候选式的FIRST集两两不相交。即,若
- A→α1|α2|…|αn 则 FIRST(αi)∩FIRST(αj)=Φ (i≠j)
(3)对于文法中的每个非终结符A,若它的某个候选首符集包含ε,则
FIRST(A)∩FOLLOW(A)=Φ
2 FIRST与FOLLOW集
3 消除左递归 消除回溯
第五章 语法分析-自下而上分析
自下而上分析原理
1 算符优先分析法:
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
…QR…则我们称该文法为算符文法。
…QR…则我们称该文法为算符文法。
2 LR分析法
基本原理
第六章 属性文法和语法制导翻译
(1) 属性文法的属性分为综合属性和继承属性。
基于属性文法的处理方法:主要掌握依赖图和抽象语法树。
L-属性文法和自顶向下翻译:
翻译模式设计:(1)只需要综合属性的情况为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。
(2)既有综合属性又有继承属性的情况
①产生式右边的符号的继承属性必须在这个符号以前的动作中计算出来。
②一个动作不能引用这个动作右边符号的综合属性。
③产生式左边非终结符号的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的未尾。
第七章 语义分析和中间代码产生
1 语义分析
任务:
(1)审查每一个语法结构的静态语义,即验证语法正确的结构是否有意义。
如:赋值语句:x:=x+y,左边变量类型与右边变量类型是否一致。
(2) 在语义正确的基础上生成一种中间代码或目标代码
(2) 在语义正确的基础上生成一种中间代码或目标代码
2中间代码生成
(1)逆波兰表示
(2)抽象树表示
(3)DAG表示
(4)三元式
(5)四元式