编译原理总结(《编译与反编译技术》)

思维导图

在这里插入图片描述

引论

什么是编译程序?

把某一种高级语言程序等价的转换成另一种低级语言程序的程序

编译过程都包括哪些阶段?

词法分析、语法分析、语义分析与中间代码生成、中间代码优化、目标代码生成

画出编译程序的结构框图.

符号表管理程序——词法分析器 ————————错误处理程序
语法分析器
语义分析+中间代码生成器
优化器
目标代码生成器

编译程序和解释程序的区别是什么?

解释程序或者直接一边解释一边执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行。控制权在解释器;
编译程序则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序,控制权在目标程序。

遍和阶段的概念,为什么要用遍?

遍:对源程序或中间表示从头到尾扫描一次,并作有关的加工处理,形程新的中间结果或目标程序
一遍可有若干阶段,一个阶段可有若干遍
分成若干遍为了让程序结构更清晰,使程序可读性更强。

词法分析

单词分类、词法分析的输入输出

分类:基本字、标识符、常数、运算符、界符
输入:源程序 输出:单词符号

单词构词规则

表示形式:单词种别+单词符号属性值
单词种别常用整数编码表示:

1、若一个种别只有一个单词符号:
则种别编码就代表该单词符号,
一般来说,基本字、运算符和界符都是一符一种。·若一个种别有多个单词符号,

2、若一个种别多个单词符号:
则对于每个单词符号,给出种别编码和属性信息。
标识符单列一种:属性就是存放它的有关信息的指针。
常数按类型分种:常数的值则表示成标准的二进制形式。

文法和语言的概念及其相互推导

语言:一个字母表的任意子集L称为该字母表的一个语言,语言中的一个值称为一个句子。
文法:用来描述语言语法结构的形式规则。
文法的语言:文法产生的所有终结符串构成的集合。

最左和最右推导,求语法树

最左推导:每次替换最左非终结符
最右推导:每次替换最右非终结符

语法树:每个节点是Vt、Vn,根节点是S、叶子节点是Vt

二义性问题

文法二义性:一个文法某个句子存在两棵语法树。
语言二义性:存在一个文法有二义性问题。

文法分类:

如思维导图
0、1、2、3型

正规表达式、正规集:

对字母表,若a是字母,a是一个正规集
正规集的交、并、结合等都是正规集

自动机

简介:一个模型,逐个读取输入的符号,依据输入跳转到状态。

DFA和NFA的构造

1、正规式——DFA
2、NFA确定化
3、DFA最小化

语法

输入输出

输入:单词符号
输出:语法分析树

自上而下的问题以及解决办法

问题:左递归、回溯、虚假匹配、分析不成功,不知道出错的位置、效率低,代价高

解决:左递归变右递归、提取左因子消除回溯、FIRST+FOLLOW、LL(1)、预测分析表

自下而上的核心问题

识别可规约串进行规约

规范归约与最右推导

规范规约:最右推导逆过程
规范规约推导的句型:规范句型
规范规约实质:出现句柄,就规约

短语、直接短语、句型、句柄

短语:语法树子树
直接短语:语法树同一层的短语
句型:含Vt或Vn的字符串
句柄:最左直接短语

前缀、活前缀、有效项目

前缀:字符串前缀
活前缀:句柄的一个前缀
有效项目:活前缀A推导出的字符串B,B是A的有效项目
项目集规范族:一堆项目,项目通过->构成一个DFA,DFA可以识别活前缀

将语义分析放到语法分析中

语法制导翻译

将静态语义检查与中间代码生成结合到语法分析中进行。

语法制导定义

在上下文无关文法的基础上,为Vt、Vn配备了一组属性 ,为 Vn->Vt配备了一套语义规则。

属性文法

语义规则函数不具有副作用的语法制导定义。
非副作用:只计算属性值

S-L属性文法

综合属性:在分析树节点N上的非终结符A,其综合属性只能通过N的子节点或N本身的属性定义。
继承属性:在分析树节点N上的非终结符A,其继承属性只能通过N的兄弟、父节点或N本身的属性定义。
S属性文法:一个语法制导定义只使用综合属性。
L属性文法:一个语法制导定义只使用继承属性。

翻译模式

将属性(值)与文法符号(Vt、Vn)相关联,并将语义规则用“{}”亏起来,插入产生式右部的合适位置来描述语言结构。

抽象语法树

在语法树中去掉对翻译不必要的信息,从而获得更有效的源程序中间标识,这种经变换后的语法树成为抽象语法树。

中间语言的表示与语法制导翻译实例

为什么要用中间语言

便于进行与机器无关的代码优化工作
编译一致
使程序的结构在逻辑上简单明确

中间语言表示形式

逆波兰表达式、三元式、间接三元式、四元式

语句的翻译实例

说明语句的翻译
赋值语句的翻译
控制语句的翻译

符号表

符号表构成

名称栏
信息栏:记录不同属性(类型、种属、大小、存储指针)

符号表作用

1、登记标识符属性信息
2、查找符号属性,检查符号上下文语义合法性
3、作为目标代码生成地址分配依据

优化

目的:

产生更高效的代码

原则:

等价、有效、经济

常用技术:

如思维导图

基本块概念

程序中一个顺序执行的语句序列,其中只有一个入口和一个出口。入口是第一个语句,出口是最后一个语句

目标代码生成

表示形式

机器语言,汇编语言,待装配机器语言模块

各个形式的特点

机器语言:所有地址已经定位。
汇编语言:需经过汇编程序汇编,转换成机器语言。
待装配机器语言模块:由链接程序把它们和某些运行程序链接,转换成机器语义。

目标代码运行

活动记录

一段连续的存储区,用以存放过程的一次执行所需动态信息

存储分配策略

静态存储分配
动态存储分配

栈式存储分配

1、静态链和活动记录
2、嵌套层次显示表display

堆式存储分配

允许数据对象自由分配和释放

猜你喜欢

转载自blog.csdn.net/qq_42882717/article/details/112178588