形式语言与自动机 考前复习 CH5

上下文无关文法

回文

定义.
如果语言 L 中的字符串都是回文, 则称 L 为回文语言 L = {w ∈ Σ∗ | w = wR}.

5.1.1 形式定义
在这里插入图片描述

• 产生式 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.2 归约和派生

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
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 语法分析树

5.2.1 形式定义

5.2.2 语法树和派生的等价性
CFG G = (V,T,P,S) 且 A ∈ V, 那么文法 G 中 A ⇒ ∗ α 当且仅当 G 中存在以 A 为根节点产物为 α 的语法树.

5.3 文法和语言的歧义性

定义. 如果 CFG G 使某些符号串有两棵不同的语法分析树, 称文法 G 是歧义 (ambiguity) 的.
有些文法的歧义性, 可以通过重新设计文法来消除.

5.3.2 语言的固有歧义性

定义. 定义同样的语言可以有多个文法, 如果 CFL L 的所有文法都是歧义的, 那么称语言 L 是固有歧义 (Inherent Ambiguity) 的
•“判定任何给定 CFG G 是否歧义”是一个不可判定问题

文法的化简

  1. 消除无用符号 (useless symbols): 对文法定义语言没有贡献的符号
  2. 消除 ε 产生式 (ε-productions): A → ε (得到语言 L−{ε})
  3. 消除单元产生式 (unit productions): A → B

5.4.1 消除无用符号
无用符号
定义. CFG G = (V,T,P,S), 符号 X ∈ (V ∪T):

  1. 如果 S ⇒ ∗ αXβ, 称 X 是可达的 (reachable);
  2. 如果 αXβ ⇒ ∗ w (w ∈ T∗), 称 X 是产生的 (generating);
  3. 如果 X 同时是产生的和可达的, 即
    S ⇒ ∗ αXβ ⇒ ∗ w (w ∈ T∗),
    则称 X 是有用的, 否则称 X 为无用符号.

消除无用符号
消除全部含有非产生的和非可达的符号的产生式

计算“产生的”符号集

  1. 每个T中的符号都是产生的
  2. A → α ∈ P 且 α 中符号都是产生的, 则 A 是产生的

计算“可达的”符号集
3. S中的符号是可达的
4. A → α ∈ P 且 A 是可达的, 则 α 中符号都是可达的.

**例13. 消除如下文法无用符号
S → AB | a
A → b **
先消除非产生的,
S→a
A→b
再消除非可达的
S→a

**5.4.2 消除 ε-产生式 **
定义. 文法中形如 A → ε 的产生式称为ε-产生式.
如果变元 A ⇒ ∗ ε, 称 A 是可空的.

确定“可空变元”

  1. 如果 A → ε, 则 A 是可空的;
  2. 如果 B → α 且 α 中的每个符号都是可空的, 则 B 是可空的.

替换带有可空变元的产生式
将含有可空变元的一条产生式 A → X1X2···Xn, 用一组产生式 A → Y1Y2···Yn 代替, 其中:
3. 若Xi不可空,则Yi=Xi
4. 若Xi可空,则Yi=Xi 或 ε;
5. 但Yi不能全为 ε;

5.4.3 消除单元产生式

**确定“单元对” **
如果有 A ⇒ ∗ B, 则称 [A,B] 为单元对.

  1. A → B ∈ P, 则 [A,B] 是单元对;
  2. 若 [A,B] 和 [B,C] 都是单元对, 则 [A,C] 是单元对.

消除单元产生式

  1. 删除全部形为 A → B 的单元产生式;
  2. 对每个单元对 [A,B], 将 B 的产生式复制给 A.

限制文法格式
将任意形式的文法转换为:

  1. 乔姆斯基范式 (CNF, Chomsky Normal Form)
  2. 格雷巴赫范式 (GNF, Greibach Normal Form)

**定理 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)

消除间接左递归

  1. 将文法中变元重命名为 A1,A2,··· ,An;
  2. 通过代入, 使产生式都形如
    Ai → Ajα Ai → aα
    但要求 i ≤ j;
  3. 消除直接左递归 Ai → Aiβ, 再代入其他产生式.
    在这里插入图片描述
    在这里插入图片描述
  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值