25
湖南大学信息科学与工程学院 软件工程系 杨金民 2019/06 编译技术 Compiler Principles 课程总结

编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

  • Upload
    others

  • View
    47

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

湖南大学信息科学与工程学院

软件工程系 杨金民

2019/06

编译技术Compiler Principles

课程总结

Page 2: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

2

软件工程技术知识体系

分布式系统面向对象编程计算机网络操作系统数据结构

数据库技术

编译技术

机器学习/神经网络(AI)

基础技术

不确定性( 概率 )

灵活多变,但有基因

联系 组合,摘取

联线 :直观易懂

Page 3: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

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 ........

Page 4: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

4

处理的问题:可扩展的树形结构

l 词法分析是处理线性结构的内容;

l 程序:可扩展的树形结构;

l 其它可扩展的树形结构体:HTML文档,XML文档,JSON;

l 所有交互数据——带语义,须解析的数据 ;

l 解析器,编辑器,编译器;脚本引擎,浏览器,安全扫描器;

l 网状:是在树状的基础上,附加属性:而且是引用属性;

Page 5: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

5

可扩展的树形结构

l 串接性;经典的,如串联电路,序列/流程/环节: F(E)

l 并列性;经典的,如并行电路,F(E) | id

l 嵌套性;E E +T ; S while (B)S

l 等级/优先级/有序性:

EE+T;

TT*F

F(E)

Fid

Page 6: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

6

前端与后端

中间代码

C语言

Java语言

Basic语言

Fortran语言

pascal语言

Cobol语言

C++语言

X86, Linux

Apple

手机, Andriod

IBM Cray, Unix

X86, Windows虚拟机编译器

Page 7: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

7

编译型执行 vs 解释型执行(编译,链接,加载 vs 解释执行)

l 都要对程序进行语法分析和语义分析,翻译成目标代码;

l 在编译型执行中,目标代码为机器指令序列;在解释性执行中,

目标代码为函数调用序列;

l 编译型执行时,是对整个程序进行先翻译,后执行。因此,会

对整个程序进行中间代码优化和机器代码优化;

l 解释型执行时,则是每翻译一个语句,便执行这个语句。因此

通常不做优化。对不要执行的语句块,则直接跳过,不做翻译;

l 编译型执行,适合低级的特定概念层面上的计算密集型程序,

解释型执行适合高级的抽象概念层面上的交互密集型程序;

Page 8: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

l 模式的正则表达式表达;

l 正则表达式的三种运算,以及?: 0个或1个

l 基于组合原则的正则表达式表达 NFA;

l 基于子集构造法的NFA DFA

l 基于DFA的匹配与识别:输入串是否匹配正则表达式;

第三章要掌握的内容

Page 9: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

l 语法的上下文无关文法表达;正则表达式 上下文无关文法

l LL(1)语法分析:消除左递归,提取左公因子(彻底);

l 对文法的每个产生式:计算FIRST();对每个非终结符号:

计算FIRST(),FOLLOW();

l 填写出文法的LL(1)预测分析表;判断文法是否是LL(1)文法;

l 基于LL(1)预测分析表,基于栈,对输入串做自顶向下的推导。

完成语法分析,语义分析,中间代码的生成。得出产生式展

开序列;判断输入串是否符合文法;

第四章 要掌握的内容——LL文法和LL分析

Page 10: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

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分析

Page 11: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

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

Page 12: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

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语法分析实用的原因

Page 13: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

13

目标:语义分析;中间代码生成;

给非终结符定义属性;综合属性,继承属性,L属性

给终结符只有综合属性,无继承属性;

SDD表达了一个产生式中的各符号的属性之间的关系;

SDT表达了在语法分析中的某个状态时刻,要执行的动作;

自然是:先SDD SDT

SDD:把每个非终结符/终结符看作一个类;SDT:把每个非终结符/终结符看作类的实例;

第五章 语法制导的翻译

Page 14: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

编译过程

前端(分析部分) 后端(综合)与源语言有关 与目标机器有关

词法分析器

字符流

语法分析器

标识符流

语义分析器

语法树

中间代码生成器

语法树

中间代码优化器

通用机器代码

机器代码生成器

通用机器代码

机器代码优化器

目标机器代码

目标机器代码

在概念上,语法分析,语义分析,中间代码生成: 三个环节/步骤;

在实现上,三者是一块儿完成的

Page 15: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

语言特性

• 高级语言程序:明显的结构体:表达概念间的内在关系(静态),

以及时序关系(依赖关系)。原子数据,结构体,表达式,语句,

语句块,函数。用名字表达:直观简单,通俗易懂,灵活通用,

重用鲁棒;

• 中间代码的特性:数据和代码进行了分离;语句的单一性;概念

减少,如分支/循环的统一化;用概念地址表达。无直观的结构

和层次,语句短小,程序侃长,可读性很差,数据与代码分离。

• 机器语言程序:用内存地址表达;在处理上过程更加细化:因运

算/处理的约束性,存储空间的有限性,引入了数据/代码的运输;

Page 16: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

编译技术

• 编译的含义是翻译plus优化;

• 编译被拆分成7个环节;

• 编译器构造方法学:模型,算法,工具的运用,使用编译器来

构造编译器;

Page 17: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

第六章 代码生成——语义分析和中间代码生成

l 先看文法,是LL文法,还是LR文法;

l LL文法:设立继承属性,也可有综合属性;

l LR文法:设立综合属性;

l 基于语法分析过程的压栈/出栈特性,构思出SDT;

l 在某时刻的状态值,在后面要用到时,通过设置哑非终结符来记

录,哑非终结符的实例也入栈;

l 在SDD中,把每个非终结符/终结符看作一个类;在SDT中,把

每个非终结符/终结符看作类的实例;

Page 18: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

第六章 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}

Page 19: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

程序

l 程序由数据和代码构成,采用树形结构:程序由块构成,块可

嵌套;

l 数量用变量名来标示,有存储地址。数据通过其地址来访问。

变量分为两类:数据变量和地址变量(也称作引用变量)。

Page 20: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

第七章 运行时环境

l 局部变量的内存地址,编译时不确定。表达:BaseAddress + Offfset, BaseAddress:函数实例的;offset:常量;

Ø 每个语句块(block): 都有自己的符号表。

Ø 基于block的嵌套关系,每个符号表都有一个prior,

Ø 一个局部变量的offset的计算,要从它所属的符号表,一直上索到函数的符号表;

l 全局变量:有确定性,内存地址;

l new 变量,引出了一个说不尽的话题:内存回收;

Page 21: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

第八章 代码生成

l 中间代码优化:

l 将中间代码划分成基本快:

l 头:起始语句,标签语句,call的目标语句;goto语句随后的语句;

l 尾:call语句;goto语句;结束语句

l 基本快的优化; block之间的优化;

l 活跃变量/死变量;

l 间接变直接;

l 多次变一次;

Page 22: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

第八章 代码生成

l 三类机器指令:运输,运算, 跳转;

l 三类寻址:变量;数组a(Rx); 指针0(Rx);

l 寄存器的分配与指派:

Ø基本快翻译中的寄存器分配;

Ø循环体中的寄存器分配;

Ø全局级的寄存器分配;

l 引用表, 寄存器描述符,变量描述符;

因为供不应求,引发了寄存器的腾空问题

Page 23: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

概念名词

l 语法分析树;

l 注释语法分析树;带上属性值的语法分析树;

l 抽象语法分析树;表达引用关系

l DAG(有向无环图):无重复的抽象语法树;

Page 24: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

展望

l 调试和Debug:

l 多处理器结构:将代码划分成可并行执行的块:数据流分析,依

赖关系分析;

l 缓存结构:对即将要的数据和代码:内存 二级cache

一级cache 寄存器;

l 拓展应用领域:WEB,安全,生物,经济;

Page 25: 编译技术 Compiler Principles - hnu.edu.cncsee.hnu.edu.cn/Content/UploadFiles/2004213/Files/ba3f1992-ccca-4a05-a... · 法 分 析 器 字 符 流 语 法 分 析 器 标 识 符

谢 谢!谢谢大家,有缘相识

大家实现了飞跃吗?