Upload
others
View
47
Download
0
Embed Size (px)
Citation preview
湖南大学信息科学与工程学院
软件工程系 杨金民
2019/06
编译技术Compiler Principles
课程总结
2
软件工程技术知识体系
分布式系统面向对象编程计算机网络操作系统数据结构
数据库技术
编译技术
机器学习/神经网络(AI)
基础技术
不确定性( 概率 )
灵活多变,但有基因
联系 组合,摘取
联线 :直观易懂
3
灵活多变:计算器该如何编程实现?
l a + b
l a + b * c
l a + b * (c + d)
l (a + b * (c + d )) * (e + f)
l (a0 + (a1 + (a2 + a3 * x))*x)*x
l ........
4
处理的问题:可扩展的树形结构
l 词法分析是处理线性结构的内容;
l 程序:可扩展的树形结构;
l 其它可扩展的树形结构体:HTML文档,XML文档,JSON;
l 所有交互数据——带语义,须解析的数据 ;
l 解析器,编辑器,编译器;脚本引擎,浏览器,安全扫描器;
l 网状:是在树状的基础上,附加属性:而且是引用属性;
5
可扩展的树形结构
l 串接性;经典的,如串联电路,序列/流程/环节: F(E)
l 并列性;经典的,如并行电路,F(E) | id
l 嵌套性;E E +T ; S while (B)S
l 等级/优先级/有序性:
EE+T;
TT*F
F(E)
Fid
6
前端与后端
中间代码
C语言
Java语言
Basic语言
Fortran语言
pascal语言
Cobol语言
C++语言
X86, Linux
Apple
手机, Andriod
IBM Cray, Unix
X86, Windows虚拟机编译器
7
编译型执行 vs 解释型执行(编译,链接,加载 vs 解释执行)
l 都要对程序进行语法分析和语义分析,翻译成目标代码;
l 在编译型执行中,目标代码为机器指令序列;在解释性执行中,
目标代码为函数调用序列;
l 编译型执行时,是对整个程序进行先翻译,后执行。因此,会
对整个程序进行中间代码优化和机器代码优化;
l 解释型执行时,则是每翻译一个语句,便执行这个语句。因此
通常不做优化。对不要执行的语句块,则直接跳过,不做翻译;
l 编译型执行,适合低级的特定概念层面上的计算密集型程序,
解释型执行适合高级的抽象概念层面上的交互密集型程序;
l 模式的正则表达式表达;
l 正则表达式的三种运算,以及?: 0个或1个
l 基于组合原则的正则表达式表达 NFA;
l 基于子集构造法的NFA DFA
l 基于DFA的匹配与识别:输入串是否匹配正则表达式;
第三章要掌握的内容
l 语法的上下文无关文法表达;正则表达式 上下文无关文法
l LL(1)语法分析:消除左递归,提取左公因子(彻底);
l 对文法的每个产生式:计算FIRST();对每个非终结符号:
计算FIRST(),FOLLOW();
l 填写出文法的LL(1)预测分析表;判断文法是否是LL(1)文法;
l 基于LL(1)预测分析表,基于栈,对输入串做自顶向下的推导。
完成语法分析,语义分析,中间代码的生成。得出产生式展
开序列;判断输入串是否符合文法;
第四章 要掌握的内容——LL文法和LL分析
l LR(0)项目,LR(1)项目,LALR(1)项目,
l 文法 DFA(基于LR(0)项集,LR(1)项目) LR语法分析表;
l 判断文法是否是LR(0),SLR(1),规范LR(1),LALR(1) 文法;
l 基于文法的语法分析表,基于栈(符号实例栈,状态栈),对
输入串做自底向上的推导。完成语法分析,语义分析,中间代
码的生成。得出产生式规约序列;判断输入串是否符合文法;
第四章 要掌握的内容——LR文法和LR分析
I0E'→EE→ E + E E→ E*EE→ (E) E→ id
I3E→ id
I1E'→EE→ E + EE→ E*E
I4E→ E + E E→ E + E E→ E*EE→ (E) E→ id
I7E→ E + E E→ E + EE→ E*E
I5E→ E*E E→ E + E E→ E*EE→ (E) E→ id
I8E→ E * E E→ E + EE→ E*E
E + E
* E
I2F→ (E) E→ E + E E→ E*EE→ (E) E→ id
I6F→ (E )E→ E + EE→ E*E I9
E→ (E)
id
id
(
(
(
id
id
*
E
)(
+
*
+
*
+
DFA的优势——LR(0)项有物理含义
$
Accept
E→ E + T | TT→ T * F | FF→ (E) | id
E→ TE'E' → +TE' | εT→ FT 'T '→ * F T ' | εF→ (E) | id
EE + E E E * E E(E) | id
I4S→ id = E
I0P→SS→ {S} S→ if(B) SS→ while(B) S S→ id = E
I1P→S
S
if
id
I3S→if( B ) S S→ {S}S→ if(B) SS→ while(B) S S→ id = E I6
S→if( B ) S
{
if
I8S→ SS
SS
I2S→ {S} S→ SS S→ if(B) SS→ while(B) S S→ id = E
I5S→ {S} S→ SS S→ if(B) SS→ while(B) S S→ id = E
I7S→ {S}}
S
{
DFA的优势——LR语法分析实用的原因
13
目标:语义分析;中间代码生成;
给非终结符定义属性;综合属性,继承属性,L属性
给终结符只有综合属性,无继承属性;
SDD表达了一个产生式中的各符号的属性之间的关系;
SDT表达了在语法分析中的某个状态时刻,要执行的动作;
自然是:先SDD SDT
SDD:把每个非终结符/终结符看作一个类;SDT:把每个非终结符/终结符看作类的实例;
第五章 语法制导的翻译
编译过程
前端(分析部分) 后端(综合)与源语言有关 与目标机器有关
词法分析器
字符流
语法分析器
标识符流
语义分析器
语法树
中间代码生成器
语法树
中间代码优化器
通用机器代码
机器代码生成器
通用机器代码
机器代码优化器
目标机器代码
目标机器代码
在概念上,语法分析,语义分析,中间代码生成: 三个环节/步骤;
在实现上,三者是一块儿完成的
语言特性
• 高级语言程序:明显的结构体:表达概念间的内在关系(静态),
以及时序关系(依赖关系)。原子数据,结构体,表达式,语句,
语句块,函数。用名字表达:直观简单,通俗易懂,灵活通用,
重用鲁棒;
• 中间代码的特性:数据和代码进行了分离;语句的单一性;概念
减少,如分支/循环的统一化;用概念地址表达。无直观的结构
和层次,语句短小,程序侃长,可读性很差,数据与代码分离。
• 机器语言程序:用内存地址表达;在处理上过程更加细化:因运
算/处理的约束性,存储空间的有限性,引入了数据/代码的运输;
编译技术
• 编译的含义是翻译plus优化;
• 编译被拆分成7个环节;
• 编译器构造方法学:模型,算法,工具的运用,使用编译器来
构造编译器;
第六章 代码生成——语义分析和中间代码生成
l 先看文法,是LL文法,还是LR文法;
l LL文法:设立继承属性,也可有综合属性;
l LR文法:设立综合属性;
l 基于语法分析过程的压栈/出栈特性,构思出SDT;
l 在某时刻的状态值,在后面要用到时,通过设置哑非终结符来记
录,哑非终结符的实例也入栈;
l 在SDD中,把每个非终结符/终结符看作一个类;在SDT中,把
每个非终结符/终结符看作类的实例;
第六章 LR文法的SDT
LR文法:设立综合属性;
l B.truelist, B. falselist ; S. nextlist,因为嵌套,有关系;
B B1 && B2 | B1 || B2 | (B1) | E> E | id ① S if (B) S1 else S2
② S while(B) S1
③ S for(S1; S2; S3) S4
l B.truelist, B. falselist的确定时刻;S. nextlist的确定时刻;
SSS; S {S}
程序
l 程序由数据和代码构成,采用树形结构:程序由块构成,块可
嵌套;
l 数量用变量名来标示,有存储地址。数据通过其地址来访问。
变量分为两类:数据变量和地址变量(也称作引用变量)。
第七章 运行时环境
l 局部变量的内存地址,编译时不确定。表达:BaseAddress + Offfset, BaseAddress:函数实例的;offset:常量;
Ø 每个语句块(block): 都有自己的符号表。
Ø 基于block的嵌套关系,每个符号表都有一个prior,
Ø 一个局部变量的offset的计算,要从它所属的符号表,一直上索到函数的符号表;
l 全局变量:有确定性,内存地址;
l new 变量,引出了一个说不尽的话题:内存回收;
第八章 代码生成
l 中间代码优化:
l 将中间代码划分成基本快:
l 头:起始语句,标签语句,call的目标语句;goto语句随后的语句;
l 尾:call语句;goto语句;结束语句
l 基本快的优化; block之间的优化;
l 活跃变量/死变量;
l 间接变直接;
l 多次变一次;
第八章 代码生成
l 三类机器指令:运输,运算, 跳转;
l 三类寻址:变量;数组a(Rx); 指针0(Rx);
l 寄存器的分配与指派:
Ø基本快翻译中的寄存器分配;
Ø循环体中的寄存器分配;
Ø全局级的寄存器分配;
l 引用表, 寄存器描述符,变量描述符;
因为供不应求,引发了寄存器的腾空问题
概念名词
l 语法分析树;
l 注释语法分析树;带上属性值的语法分析树;
l 抽象语法分析树;表达引用关系
l DAG(有向无环图):无重复的抽象语法树;
展望
l 调试和Debug:
l 多处理器结构:将代码划分成可并行执行的块:数据流分析,依
赖关系分析;
l 缓存结构:对即将要的数据和代码:内存 二级cache
一级cache 寄存器;
l 拓展应用领域:WEB,安全,生物,经济;
谢 谢!谢谢大家,有缘相识
大家实现了飞跃吗?