- 自动机理论教程
- 自动机理论 - 首页
- 自动机理论 - 入门
- 自动机理论 - 历史
- 自动机理论 - 应用
- 自动机理论术语
- 自动机中字符串的基础
- 自动机的集合论
- 语言和文法
- 计算理论中的文法
- 由文法生成的语言
- 乔姆斯基文法分类
- 有限自动机
- 确定性有限自动机 (DFA)
- 非确定性有限自动机 (NFA)
- 从 NFA 到 DFA 的转换
- DFA 的最小化
- 穆尔机与米利机
- DFA 的补集
- 正则表达式
- 自动机中的正则表达式
- 自动机中的 Arden 定理
- 将正则表达式转换为有限自动机
- 正则文法的泵引理
- 计算理论中的正则集
- 上下文无关文法
- 上下文无关文法 (CFG)
- 上下文无关文法中的二义性
- 上下文无关语言的封闭性
- 简化上下文无关文法
- 乔姆斯基范式 (CNF)
- 格雷巴赫范式 (GNF)
- 上下文无关文法的泵引理
- 下推自动机
- 下推自动机 (PDA)
- 下推自动机的接受
- 从 CFG 构造 PDA
- 下推自动机与解析
- 图灵机
- 图灵机 (TM) 基础
- 图灵机接受的语言
- 多磁带图灵机
- 多轨迹图灵机
- 非确定性图灵机
- 半无限磁带图灵机
- 线性有界自动机 (LBA)
- 可计算性和不可判定性
- 图灵语言的可判定性
- 不可判定语言
- 图灵机停机问题
- 计算理论中的 Rice 定理
- Post 对应问题 (PCP)
- 自动机理论资源
- 自动机理论 - 快速指南
- 自动机理论 - 资源
- 自动机理论 - 讨论
CFG 简化
在 CFG 中,可能会发生并非所有产生式规则和符号都用于字符串的推导。此外,可能存在一些空产生式和单元产生式。消除这些产生式和符号称为 **CFG 的简化**。简化主要包括以下步骤:
- CFG 的化简
- 移除单元产生式
- 移除空产生式
CFG 的化简
CFG 分两个阶段进行化简:
**阶段 1** - 从 CFG **G** 推导出等价文法 **G’**,使得每个变量都推导出某个终结符串。
**推导过程** -
步骤 1 - 包含所有推导出某个终结符的符号 **W1**,并初始化 **i=1**。
步骤 2 - 包含所有推导出 **Wi** 的符号 **Wi+1**。
步骤 3 - 增加 **i** 并重复步骤 2,直到 **Wi+1 = Wi**。
步骤 4 - 包含所有包含 **Wi** 的产生式规则。
**阶段 2** - 从 CFG **G’** 推导出等价文法 **G”**,使得每个符号都出现在某个句型中。
**推导过程** -
步骤 1 - 将开始符号包含在 **Y1** 中,并初始化 **i = 1**。
步骤 2 - 包含所有可以从 **Yi** 推导出的符号 **Yi+1**,并包含所有已应用的产生式规则。
步骤 3 - 增加 **i** 并重复步骤 2,直到 **Yi+1 = Yi**。
问题
找到一个与文法 G 等价的化简文法,G 具有产生式规则 P:S → AC | B,A → a,C → c | BC,E → aA | e
解答
**阶段 1** -
T = { a, c, e }
根据规则 A → a,C → c 和 E → aA,W1 = { A, C, E }
根据规则 S → AC,W2 = { A, C, E } U { S }
W3 = { A, C, E, S } U ∅
由于 W2 = W3,我们可以推导出 G’ 为:
G’ = { { A, C, E, S }, { a, c, e }, P, {S}}
其中 P:S → AC,A → a,C → c ,E → aA | e
**阶段 2** -
Y1 = { S }
根据规则 S → AC,Y2 = { S, A, C }
根据规则 A → a 和 C → c,Y3 = { S, A, C, a, c }
Y4 = { S, A, C, a, c }
由于 Y3 = Y4,我们可以推导出 G” 为:
G” = { { A, C, S }, { a, c }, P, {S}}
其中 P:S → AC,A → a,C → c
移除单元产生式
任何形式为 A → B 的产生式规则,其中 A、B ∈ 非终结符,称为 **单元产生式**。
移除过程 -
**步骤 1** - 为了移除 **A → B**,每当 **B → x** 出现在文法中时,将产生式 **A → x** 添加到文法规则中。[x ∈ 终结符,x 可以为空]
**步骤 2** - 从文法中删除 **A → B**。
**步骤 3** - 重复步骤 1,直到所有单元产生式都被移除。
问题
从以下内容中移除单元产生式:
S → XY,X → a,Y → Z | b,Z → M,M → N,N → a
**解答** -
文法中有 3 个单元产生式:
Y → Z,Z → M,和 M → N
首先,我们将移除 M → N。
由于 N → a,我们添加 M → a,并移除 M → N。
产生式集变为
S → XY,X → a,Y → Z | b,Z → M,M → a,N → a
现在我们将移除 Z → M。
由于 M → a,我们添加 Z→ a,并移除 Z → M。
产生式集变为
S → XY,X → a,Y → Z | b,Z → a,M → a,N → a
现在我们将移除 Y → Z。
由于 Z → a,我们添加 Y→ a,并移除 Y → Z。
产生式集变为
S → XY,X → a,Y → a | b,Z → a,M → a,N → a
现在 Z、M 和 N 不可到达,因此我们可以移除它们。
最终的 CFG 不包含单元产生式:
S → XY,X → a,Y → a | b
移除空产生式
在 CFG 中,非终结符 **‘A’** 是一个可空变量,如果存在产生式 **A → ε** 或存在一个从 **A** 开始并最终以
ε 结束的推导:A → .......… → ε
移除过程
**步骤 1** - 找出推导出 ε 的可空非终结符变量。
**步骤 2** - 对于每个产生式 **A → a**,构造所有产生式 **A → x**,其中 **x** 是从 **‘a’** 中移除一个或多个来自步骤 1 的非终结符获得的。
**步骤 3** - 将原始产生式与步骤 2 的结果结合起来,并移除 **ε - 产生式**。
问题
从以下内容中移除空产生式:
S → ASA | aB | b,A → B,B → b | ∈
**解答** -
有两个可空变量:**A** 和 **B**
首先,我们将移除 B → ε。
移除 **B → ε** 后,产生式集变为:
S→ASA | aB | b | a, A ε B| b | &epsilon, B → b
现在我们将移除 A → ε。
移除 **A → ε** 后,产生式集变为:
S→ASA | aB | b | a | SA | AS | S, A → B| b, B → b
这是最终不包含空转换的产生式集。