编译原理 核心理论基础-摘自清华大学编译原理第3版
来源:互联网 发布:淘宝违法规则大全2016 编辑:程序博客网 时间:2024/05/20 23:33
1.编译过程概述 :
词法分析 : 对源程序的字符流进行扫描和分解,识别出一个个单词符号
语法分析 : 将单词序列分解成各类语法短语(这种语法单位可以表示成语法树)
语义分析 : 对源程序进行类型审查,为代码生成收集信息;
中间代码生成 : 把源程序变成内部表示(三地址指令的四元式 : 运算符,运算对象1,运算对象2,结果),设计原则 : 容易生成,容易翻译成目标代码
代码优化 : 对中间代码进行变换改造,使目标代码省时省空间;
目标代码生成 : 把中间代码转换成具体机器的绝对指令;
2.四种文法类型(存在等价文法,语言和文法是一对多的关系)
0型文法(短语文法) : 能力相当于图灵机,等价于'递归可枚举'
1型文法(上下文有关文法) : aAb->aBb只有A出现在ab的上下文中,B才可替换A
2型文法(上下文无关文法) : 用B替换A时,与A所在的上下文无关;
3型文法(正规文法) : 形如A->aB或A->a,其中A,B非终结,a终结符
3.式图转换
(1)正规式转NFA:
aa (X1) a-> (X2) a-> (X3)
a|b (X1) a-> (X2)
|b-> (X3)
(a)* (X1)-> (X2) ->(X3)
| a-> |
(2)NFA转DFA:
状态(equel) 跳转状态(move a) 跳转状态(move b)...
S S的等价move一个a所达到的等价状态集
...
(3)最简化DFA:
一致性(Vt,Vn)
蔓延性(看跳转集)
ps: DFA一个输入只跳一个状态,图中不存在空输入;
正规式形如:aa(a|b)(a)*b
文法->句型->句子(Vt)->语言: 语言对于一个等价文法集
4.自顶向下语法分析
a.消除左递归
P->Pa|b : P->bQ , Q->aQ|#
b.消除回溯
P->Qa|Qb : P->Q(a|b)
First集: 左边->右边 取右边第一个终结符
直接取终结符
若首符非终结,继续深入
First集可以包含空字符
Follow集: 右边里紧跟其后的终结符
直接找后跟终结符
找后跟非终结符的First集
考虑后跟的非终结符取空
本身如果可取空,添加左邻Vt的Follow集
Select集:
Select(A->a) = First(a) | First(a)-# + Follow(A)
Ps:
词法分析 : 对源程序的字符流进行扫描和分解,识别出一个个单词符号
语法分析 : 将单词序列分解成各类语法短语(这种语法单位可以表示成语法树)
语义分析 : 对源程序进行类型审查,为代码生成收集信息;
中间代码生成 : 把源程序变成内部表示(三地址指令的四元式 : 运算符,运算对象1,运算对象2,结果),设计原则 : 容易生成,容易翻译成目标代码
代码优化 : 对中间代码进行变换改造,使目标代码省时省空间;
目标代码生成 : 把中间代码转换成具体机器的绝对指令;
2.四种文法类型(存在等价文法,语言和文法是一对多的关系)
0型文法(短语文法) : 能力相当于图灵机,等价于'递归可枚举'
1型文法(上下文有关文法) : aAb->aBb只有A出现在ab的上下文中,B才可替换A
2型文法(上下文无关文法) : 用B替换A时,与A所在的上下文无关;
3型文法(正规文法) : 形如A->aB或A->a,其中A,B非终结,a终结符
3.式图转换
(1)正规式转NFA:
aa (X1) a-> (X2) a-> (X3)
a|b (X1) a-> (X2)
|b-> (X3)
(a)* (X1)-> (X2) ->(X3)
| a-> |
(2)NFA转DFA:
状态(equel) 跳转状态(move a) 跳转状态(move b)...
S S的等价move一个a所达到的等价状态集
...
(3)最简化DFA:
一致性(Vt,Vn)
蔓延性(看跳转集)
ps: DFA一个输入只跳一个状态,图中不存在空输入;
正规式形如:aa(a|b)(a)*b
文法->句型->句子(Vt)->语言: 语言对于一个等价文法集
4.自顶向下语法分析
a.消除左递归
P->Pa|b : P->bQ , Q->aQ|#
b.消除回溯
P->Qa|Qb : P->Q(a|b)
First集: 左边->右边 取右边第一个终结符
直接取终结符
若首符非终结,继续深入
First集可以包含空字符
Follow集: 右边里紧跟其后的终结符
直接找后跟终结符
找后跟非终结符的First集
考虑后跟的非终结符取空
本身如果可取空,添加左邻Vt的Follow集
Select集:
Select(A->a) = First(a) | First(a)-# + Follow(A)
Ps:
LL(k)最左推导,只需看k个符号就可决定如何推导
附加:
算术表达式文法:
E->E+T|E-T|T
T->T*F|T%F|
F->i|(E)
消回溯后:
E->TE'
E'->+TE'|-TE'|#
T->FT'
T'->*FT'|/FT'|#
F->i|(E)
其中i代表变量或者数字;
改天有空附一个表达式的语法匹配,C++版;
0 0
- 编译原理 核心理论基础-摘自清华大学编译原理第3版
- 【链接】清华大学编译原理课程
- 计算机操作系统 核心理论基础-摘自西安电子科技大学第4版
- 编译原理:第三节
- 编译原理:第五节
- 编译原理:第八节
- 《编译原理(英文版.第2版)》
- 《编译原理-龙书》练习第3章
- [编译原理]第一篇 博客
- 编译原理词法分析器(java)版的核心代码
- Java核心知识点-Java编译原理
- 编译原理 阅读(3)
- 编译原理复习3
- 编译原理
- 《编译原理》
- 编译原理
- 编译原理
- 编译原理
- Spring中配置和读取多个Properties文件
- 快速排序
- Spring通过@Value注解注入属性的几种方式
- 论文笔记 | VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE -SCALE IMAGE RECOGNITION
- newbie: <lists> versus <util:list>
- 编译原理 核心理论基础-摘自清华大学编译原理第3版
- property和constructor-arg的使用
- [转载]有向图的最小生成树,最小树形图
- JAVA中的URI,URL,URN(转)
- PD003-NET通用后台系统
- 【解题报告】Codeforces Round #360 (Div. 2)
- leetcode 148. Sort List
- ulimit命令
- 项目管理概述