声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记。
一、基本概念
字母表
字母表Σ 是一个有穷符号集合。字母表也称为符号集。
- 符号:字母、数字、标点符号…
- 例:ASCII 字符集,二进制字母表:{0,1},Unicode字符集
字母表上的运算
- 字母表与字母表的乘积
- 字母表的 n次幂:长度为 n 的符号串构成的集合
- 字母表的正闭包:长度正数的符号串构成的集合
- 字母表的克林闭包:任意符号串(长度可以为零)构成的集合
符号串
- 串:由字母表中的符号组成的任何有穷序列。
- 串 s 的长度,通常记作 |s| ,指 s 中符号的个数。 例:|aab|=3。
- 空串是长度为0 的串,用 ε 表示,| ε |=0。
串上的运算
-
串的连接:如果 x 和 y 是串,那么 x 和 y 的连接,是把 y 附加到 x 后面而形成的串,记作 xy。
例如,如果 x=dog 且 y=house,那么 xy=doghouse。 空串是连接运算的单位元,即,对于任何串 s 都有, εs=sε=s。
-
串的幂运算:将 n 个 串连接起来。
二、文法的定义
文法的形式化定义
产生式的简写
符号约定
- 终结符
·字母表中排在前面的小写字母,如a、b、c
·运算符,如+、乘等
·标点符号,如括号、逗号等
·数字0、1、. . . 、9
·粗体字符串,如id、if等
- 非终结符
·字母表中排在前面的大写字母,如A、B、C
·字母S。通常表示开始符号
·小写、斜体的名字,如expr、stmt等
·代表程序构造的大写字母。如E(表达式)、T(项) 和F(因子)
三、语言的定义
推导和归约
句型和句子
语言的形式化定义
由文法 G 的开始符号 S 推导出的所有句子构成的集合称为文法 G 生成的语言,记作 L(G)。
语言上的运算
四、文法的分类
0型文法,无限制文法
1型文法,上下文有关文法
2型文法,上下文无关文法
3型文法,正规文法
四种文法之间的关系
五、CFG的分析树
分析树是推导的图形化表示
句型的短语
给定一个句型,其分析树中的每一颗子树的边缘称为该句型的一个短语。
如果子树只有父子两代节点,那么这课子树的边缘称为该句型的一个直接短语。
二义性文法
如果一个文法可以为某个句子生成多棵分析树, 则称这个文法是二义性的
二义性文法的判定
对于任意一个上下文无关文法,不存在一个算法, 判定它是无二义性的;
但能给出一组充分条件, 满足这组充分条件的文法是无二义性的
满足,肯定无二义性
不满足,也未必就是有二义性的