编译原理笔记--哈工大教学视频
第一章 绪论
一、什么是编译
编译:将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程
二、编译系统的结构
三、词法分析概述
词法分析任务:
从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示词法单元 (token) 形式
四、语法分析概述
语法分析:
语法分析器(parser) 从词法分析器输出的token 序列中识别出各类短语 ,并构造语法分析树(parse tree)
五、语义分析概述
语义分析的主要任务:
-
收集标识符的属性信息
收集到的信息存放在符号表中。
(NAME分为两个部分:在字符串表中的位置+长度) -
语义检查
六、中 间 代 码 生 成 及编 译 器 后 端 概 述
常用的中间表示形式
- 三地址码
- 语法结构树/语法树
目标代码生成器:
以源程序的中间表示形式作为输入,,并把它映射到目标语言。
【目标代码生成的一个重要任务是为程序中使用的变量合理分配寄存器】
代码优化
第二章 语言及其文法
一、基本概念
字母表:
例如:二进制字母表:{0,1}
字母表上的运算
-
乘积
-
n次幂
字母表的0次幂:空串ε
-
正闭包
-
克林闭包
多一个空串ε
串:
串的运算:
-
连接
-
空串是连接运算的单位元
-
前缀与后缀
-
幂运算
串的0次幂是空串
二、文法的定义
- VT: 终结符集合
-
VN:非终结符集合
-
P: 产生式集合
- S:开始符号
例子:
符号约定:
三、语言的定义
推导和归约
句子和句型
句型:句型既可以包含终结符 ,又可以包含非终
结符,也可能是空串。
句子:句子是不包含非终结符的句型。
语言:
【文法解决了有限符号表示无穷语言的问题】
四、文法的分类
-
0型文法(无限制文法/短语结构文法)
-
1型文法(上下文有关文法)
-
2型文法(上下文无关文法)
左侧是一个非终结符
-
3型文法(正则文法)
右线性文法:右部左侧是个终结符号串
左线性文法:右部右侧是个终结符号串
四种文法之间的关系:
四、CFG(上下文无关文法)的分析树
上下文无关文法分析树:
边缘:分析树从左到右排列叶节点得到的符号串
句型的短语:
直接短语:子树高度为2的边缘
二义性文法:
例子:
二义性文法的判断: