基本概念
字母表
- 字母表(Sigma):有穷符号集合
字母表上的运算
-
乘积
(Sigma)1(Sigma)2 = { ab|a(in)(Sigma)1, b(in)(Sigma)2 }
-
n次幂
字母表的n次幂:长度为n的符号串构成的集合
- (Sigma)0 = { (varepsilon) }
- (Sigma)n = (Sigma)n-1(Sigma) , n$geq$1
-
正闭包
字母表的正闭包:长度正数的符号串构成的集合
(Sigma)+ = (Sigma) U (Sigma)2 U (Sigma)3 U ...
-
克林闭包
字母表的克林闭包:任意符号串(长度可以为零)构成的集合
(Sigma)* = (Sigma)0 U (Sigma)+ = (Sigma)0 U (Sigma) U (Sigma)2 U (Sigma)3 U ...
串
- (forall) x (in) (Sigma)*,x称为(Sigma)上的一个串
- 串是字母表中符号的一个有穷序列
- 串s的长度|s|:s中符号的个数
- 空串 (varepsilon) :长度为0的串
串上的运算
-
连接
-
如果 x 和 y 是串,那么 x 和 y 的连接是把 y 附加到 x 后面而形成的串,记作 xy
-
空串是连接运算的单位元,即对于任何串s 都有:(varepsilon)s = s(varepsilon) = s
-
设x,y,z 是三个字符串,如果 x= yz则称 y 是 x 的前缀,z 是 x 的后缀
-
-
幂
串s的n次幂:将n个s连接起来
- s0 = (varepsilon)
- sn = sn-1s , n$geq$1
文法定义
形式化定义
G = ( VT , VN , P , S )
-
VT:终结符集合
终结符(token):文法定义的基本符号
-
VN:非终结符集合
非终结符(nonterminal):表示语法成分的符号,又称语法变量
VT (cap) VN = (phi)
VT (cup) VN :文法符号集
-
P:产生式集合
产生式:描述终结符和非终结符组合成串的方法
产生式一般形式:(alpha) ( ightarrow) (eta) (alpha)定义为(eta)
产生式头部/左部:(alpha) (in) ( VT (cup) VN )+
产生式体/右部:(eta) (in) ( VT (cup) VN )*
-
S:开始符号
开始符号表示该文法中最大的语法成分
S (in) VN
符号约定
终结符
-
字母表中排在前面的小写字母
-
运算符
-
标点符号
-
数字
-
粗体字符串
非终结符
- 字母表中排在前面的大写字母
- 字母S:通常表示开始符号
- 小写、斜体的名字
- 代表程序构造的大写字母:E(表达式)、T(项)、F(因子)
文法符号
- 字母表中排在后面的大写字母(即终结符或非终结符)
终结符号串
- 字母表中排在后面的小写字母(包括空串)
文法符号串
- 小写希腊字母(包括空串)
开始符号
- 除非特别声明,第一个产生式的左部是开始符号
产生式简写
-
一组有相同左部的(alpha)产生式:(alpha)( ightarrow)(eta)1, (alpha)( ightarrow)(eta)2, ... , (alpha)( ightarrow)(eta)n,可简记为:(alpha)( ightarrow)(eta)1|(eta)2|...|(eta)n
(eta)1,(eta)2,(eta)n 称为(alpha)的候选式
语言定义
推导和归约
-
推导:用产生式的右部替换左部
-
归约:用产生式左部替换右部
句型和句子
语言的形式化定义
语言上的运算
文法分类
0型文法(PSG)
产生式左边至少有一个非终结符
1型文法(CSG)
产生式右边比左边长
- 非终结符A上下文均为 (alpha)1 (alpha)2 时,才可以替换为(eta)
2型文法(CFG)
产生式左边只由非终结符
3型文法(RG)
产生式左边是一个非终结符,右边是0/1个非终结符和终结符号串
w:终结符号串
右边非终结符在左即左线性,在右即右线性
四种文法间的联系
CFG分析树
基本概念
图形化表示
分析树是推导的图形化表示
句型的短语
二义性文法
- 如果一个文法可以为某个句子生成多棵分析树,则该文法是二义性的
- 对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的