第二章 程序设计语言及其文法
想让编译系统自动的对语言进行词法、语法、语义分析,就需要把语言的相关知识 ——— 文法提供给计算机
1. 基本概念
1.1 字母表
字母表 ∑ 是一个有穷符号集合
符号:字母、数字、标点符号、...
运算
乘积
例:
n次幂
例:
正闭包
例:
克林闭包
例:
1.2 串
设 是一个字母表, ,x称为是上的一个串
串是字母表中符号的一个有穷序列
串 s 的长度,通常记为 ,是指 s 中符号的个数
例:
空串是长度为0的串,用 (epsilon) 表示
运算
连接
且 ,那么
设x, y, z 是三个字符串,如果 x = yz,则称 y 是 x 的前缀,z 是 x 的后缀
幂
2. 文法的定义
:终结符集合(非空)
终结符是文法所定义的语言的基本符号,有时也称为token
例:
:非终结符集合(非空)
非终结符是用来表示语法成分的符号,有时也称为“语法变量”
例:
:产生式集合
产生式描述了将终结符和非终结符组合成串的方法
产生式的一般形式: 读作: 定义为
,且 中至少包含 中的一个元素:称为产生式的头部或者左部
,称为产生式的体或右部
例:
:开始符号
。开始符号表示的是该文法中最大的语法成分
例:
例:
3. 语言的定义
有了文法(语言规则),如果判断一个词串是否满足文法的句子?
句子的推导(派生) - 从生成语言的角度
句子的归约 - 从识别语言的角度

句子和句型
含有非终结符的为句型,只有终结符的为句子

语言的定义
由文法G的开始符号S推导出的所有句子构成的集合称为文法G生成的语言,记为L(G)
4. 文法的分类
0型文法
: 中至少包含一个非终结符
1型文法(上下文有关文法)
:
2型文法(上下文无关文法)
:
3型文法(正规文法、有限自动机)
右线性文法:
左线性文法:
5. CFG的分析树

5.1 二义性文法
如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的
判定:对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但可以给出一组充分条件,满足这组充分条件的文法是无二义性的
满足,肯定无二义性
不满足,不一定有二义性
Last updated
Was this helpful?