Chapter 4 CFG and PDA¶
CFG && CSG¶
Definition (Context-Free Grammar (CFG); 上下文无关文法)
上下文无关文法 G 是一个四元组 G = (T,N,S,P):
- T 是终结符号 (Terminal) 集合, 对应于词法分析器产生的词法单元 ▶ N 是非终结符号 (Non-terminal) 集合
- S 是开始 (Start) 符号 (S ∈ N 且唯一)
- P 是产生式 (Production) 集合
Bash | |
---|---|
1 |
|
- 头部/左部 (Head) A: 单个非终结符
- 体部/右部 (Body) α: 终结符与非终结符构成的串, 也可以是空串 ε
PS: Context-Sensitive Grammar (CSG) 上下文敏感语法
Bash | |
---|---|
1 2 3 4 |
|
PDA¶
More info in 笔者的编译原理仓库
Basic Info¶
Definition (推导 (Derivation))
推导即是将某个产生式的左边替换成它的右边;每一步推导需要选择替换哪个非终结符号, 以及使用哪个产生式
- Leftmost (最左) Derivation
- Rightmost (最右) Derivation
Definition (Sentential Form; 句型)
如果S⇒*α,且α∈(T∪N) ,则称α是文法G的一个句型
Definition (Sentence; 句子)
如果S=*⇒w,且w∈T ,则称w是文法G的一个句子
Definition (文法 G 生成的语言 L(G))
文法 G 的语言 L(G) 是它能推导出的所有句子构成的集合。
L ( G ) = { w | S ⇒* w }
-
语法分析器的任务: 为输入的词法单元流寻找推导、构建语法分析树, 或者报错
-
正则表达式的表达能力严格弱于上下文无关文法
-
Theorem
L = {anbn | n ≥ 0} 无法使用正则表达式描述
Pumping Lemma for Regular Languages
If L is a regular language, then there exists a number p ≥ 1 (pumping length) such that any string s in L of length ≥ p can be divided into three pieces, s = xyz, satisfying the following conditions:
(i) |y| ≥ 1 (ii) |xy| ≤ p (iii) ∀i≥0: \(xy^iz\) ∈ L