回文
定义.
如果语言 L 中的字符串都是回文, 则称 L 为回文语言 L = {w ∈ Σ∗ | w = wR}.
• 产生式 A → α, 读作 A 定义为 α
• 如果有多个 A 的产生式
A → α1, A → α2, ··· , A → αn,可简写为A → α1 | α2 |···| αn
• 文法中变元 A 的全体产生式, 称为 A 产生式
续例1. 回文语言 Lpal = {w ∈{0,1}∗ | w = wR} 的文法可设计为 :
G = ({A},{0,1},{A → ε | 0 | 1 | 0A0 | 1A1},A).
5.1.3 最左派生和最右派生
只替换符号串最左变元的派生过程,成为最左派生;(left-most derivation)(lm)
只替换符号串最右变元的派生过程,成为最右派生;(right-most derivation)(rm)
注意:• 任何派生都有等价的最左派生和最右派生
5.1.4 文法的语言
上下文无关语言
语言 L 是某个 CFG G 定义的语言, 即 L = L(G), 则称 L 为上下文无关语言 (CFL, Context-Free Language).
@上下文无关是指在文法派生的每一步中:
、
符号串 γ 仅根据 A 的产生式派生, 而无需依赖 A 的上下文 α 和 β.
文法的等价性:
定义.
如果有两个文法 CFG G1 和 CFG G2, 满足 L(G1) = L(G2),则称 G1 和 G2 是等价的
句型
定义.
若 CFG G = (V,T,P,S), 初始符号 S 派生出来的符号串, 称为 G 的句型 (sentential form), 即 α ∈ (V ∪T)∗ 且 S ⇒ ∗ α. 如果 S ⇒ ∗ lm α, 称 α 为左句型. 如果 S ⇒ ∗ rm α, 称 α 为右句型.
• 只含有终结符的句型, 也称为 G 的句子 (sentence)
• 而 L(G) 就是文法 G 全部的句子
5.1.5 文法的设计举例
例3.
给出语言 L = {w ∈{0,1}∗ | w contains at least three 1s} 的文法
S→A1A1A1,A→0A I 1A I ε
例4.
描述 CFG G = ({S},{a,b},{S → aSb,S → ab},S) 定义的语言
L(G)={an bn I n>0}
例5. 请为语言 L = {0n1m | n 不等于 m} 设计文法
S→AC I CB
C→0C1 I 空串
A→A0 I 0
B→1B I 1
例6. 设计 Leq = {w ∈{0,1}∗ | w 中 0 和 1 个数相等} 的文法
S→0S1 I 1S0 I SS空串
例7. 设计 Lj≥2i = {aibj | j ≥ 2i} 的文法.
S→AB
A→aAbb I 空串
B→Bb I 空串
例8. [Exe. 5.1.3] Show that every regular laugnage is a context-free laugnage
对正则表达式 R 中运算符的个数 n 进行归纳:
1)当n=1时,正则表达式只能为空集、空串、或a(a属于字母表);此时可以构造仅有一条产生式的文法 S → ε, S →∅ 或 S → a 得到.
2)
假设当n<=m时均成立
当n=m+1时,
• 若 R = R1 + R2, 则 R1 和 R2 中运算符都不超过 m, 所以都存在文法 G1 和 G2, 分别开 始于 S1 和 S2, 只需构造新产生式和开始符号 S → S1|S2, 连同 G1 和 G2 的产生式, 构 成 R 的文法;
• 若 R = R1R2, 则同理构造 S → S1S2 即可;
• 若 R = R∗ 1, 则构造 S → SS1 | ε 即可
5.2.1 形式定义
5.2.2 语法树和派生的等价性
CFG G = (V,T,P,S) 且 A ∈ V, 那么文法 G 中 A ⇒ ∗ α 当且仅当 G 中存在以 A 为根节点产物为 α 的语法树.
定义. 如果 CFG G 使某些符号串有两棵不同的语法分析树, 称文法 G 是歧义 (ambiguity) 的.
有些文法的歧义性, 可以通过重新设计文法来消除.
5.3.2 语言的固有歧义性
定义. 定义同样的语言可以有多个文法, 如果 CFL L 的所有文法都是歧义的, 那么称语言 L 是固有歧义 (Inherent Ambiguity) 的
•“判定任何给定 CFG G 是否歧义”是一个不可判定问题
文法的化简
5.4.1 消除无用符号
无用符号
定义. CFG G = (V,T,P,S), 符号 X ∈ (V ∪T):
消除无用符号
消除全部含有非产生的和非可达的符号的产生式
计算“产生的”符号集
计算“可达的”符号集
3. S中的符号是可达的
4. A → α ∈ P 且 A 是可达的, 则 α 中符号都是可达的.
**例13. 消除如下文法无用符号
S → AB | a
A → b **
先消除非产生的,
S→a
A→b
再消除非可达的
S→a
**5.4.2 消除 ε-产生式 **
定义. 文法中形如 A → ε 的产生式称为ε-产生式.
如果变元 A ⇒ ∗ ε, 称 A 是可空的.
确定“可空变元”
替换带有可空变元的产生式
将含有可空变元的一条产生式 A → X1X2···Xn, 用一组产生式 A → Y1Y2···Yn 代替, 其中:
3. 若Xi不可空,则Yi=Xi
4. 若Xi可空,则Yi=Xi 或 ε;
5. 但Yi不能全为 ε;
5.4.3 消除单元产生式
**确定“单元对” **
如果有 A ⇒ ∗ B, 则称 [A,B] 为单元对.
消除单元产生式
限制文法格式
将任意形式的文法转换为:
**定理 21 (乔姆斯基范式 CNF).
每个不带 ε 的 CFL 都可由这样的 CFG G 定义, G 中每个产 生式都形为
A → BC 或 A → a
其中 A, B 和 C 都是变元, a 是终结符.
**
CFG 转为 CNF 的方法
5.4.5 格雷巴赫范式
定理 22 (格雷巴赫范式 GNF).
每个不带 ε 的 CFL 都可由这样的 CFG G 定义, G 中每个产 生式都形为 A → aα 其中 A 是变元, a 是终结符, α 是零或多个变元的串
直接左递归 定义.
文法中形式为 A → Aα 的产生式, 称为直接左递归 (immediate left-recursion).
间接左递归
定义. 文法中如果有形式为
A → Bα | … B → Aβ | … 的产生式, 称为间接左递归 (indirect left-recursion)
消除间接左递归