CFG 简化


在 CFG 中,可能会出现不需要所有产生式规则和符号来导出字符串的情况。此外,还可能存在一些空产生式和单元产生式。消除这些产生式和符号称为CFG 的简化。简化主要包括以下步骤 -

  • 减少CFG
  • 移除单位产品
  • 删除空产生式

减少CFG

CFG 分两个阶段减少 -

第 1 阶段-从 CFG G派生等效语法G',以便每个变量派生一些终端字符串。

推导过程-

步骤 1 - 包括导出某个终端并初始化i=1的所有符号W 1

步骤 2 - 包括导出Wi 的所有符号Wi +1

步骤 3 - 增加i并重复步骤 2,直到Wi +1 = Wi

步骤 4 - 包括所有包含W i的产生式规则。

第 2 阶段-从 CFG G'推导等效语法G”,使得每个符号都以句子形式出现。

推导过程-

步骤 1 - 将起始符号包含在Y 1中并初始化i = 1

步骤 2 - 包括可以从Y i导出的所有符号Y i+1并包括已应用的所有产生规则。

步骤 3 - 增加i并重复步骤 2,直到Y i+1 = Y i

问题

找到与语法 G 等价的简化语法,具有产生式规则 P:S → AC | B、A → a、C → c | BC、E → aA | e

解决方案

第一阶段-

T = { a, c, e }

W 1 = { A, C, E } 根据规则 A → a, C → c 和 E → aA

W 2 = { A, C, E } U { S } 根据规则 S → AC

W 3 = { A, C, E, S } U ∅

由于 W 2 = W 3,我们可以将 G' 推导为 -

G' = { { A, C, E, S }, { a, c, e }, P, {S}}

其中 P:S → AC,A → a,C → c,E → aA | e

第 2 阶段-

Y 1 = { S }

Y 2 = { S, A, C } 根据规则 S → AC

Y 3 = { S, A, C, a, c } 根据规则 A → a 和 C → c

Y 4 = { S, A, C, a, c }

由于 Y 3 = Y 4,我们可以推导出 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 ∈ Terminal, x 可以为 Null]

步骤 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 | 乙

删除空产生式

在 CFG 中,如果存在产生式A → ε或存在从A开始并最终以

ε: A → .... → ε

移除程序

步骤 1 - 找出导出 ε 的可空非终结变量。

步骤 2 - 对于每个产生式A → a,构造所有产生式A → x,其中x是通过从步骤 1 中删除一个或多个非终结符从'a'获得的。

步骤 3 - 将原始产生式与步骤 2 的结果相结合并删除ε-产生式

问题

从以下内容中删除空产生式 -

S → ASA | 乙 | b,A → B,B → b | ε

解决方案-

有两个可为 null 的变量 - AB

首先,我们将删除 B → ε。

移除B → ε后,产生式集变为 -

S→ASA | 乙 | 乙| a, A ε B | 乙| ε, B → b

现在我们将删除 A → ε。

移除A → ε后,产生式集变为 -

S→ASA | 乙 | 乙| 一个 | 南澳 | 作为| S,A→B| b, B → b

这是没有空转换的最终生产集。