格雷巴赫范式


如果产生式采用以下形式,则 CFG 处于 Greibach 范式 -

甲 → 乙

A → bD 1 …D n

S → ε

其中 A, D 1 ,...,D n是非终结符,b 是终结符。

将 CFG 转换为 Greibach 范式的算法

步骤 1 - 如果开始符号S出现在右侧,则创建一个新的开始符号S'和一个新的产生式S' → S

步骤 2 - 删除空产生式。(使用前面讨论的空产生式去除算法)

步骤 3 - 删除单位产生式。(使用前面讨论的单位生产去除算法)

步骤 4 - 删除所有直接和间接左递归。

步骤 5 - 对产生式进行适当的替换,将其转换为正确的 GNF 形式。

问题

将以下CFG转换为CNF

S → XY | Xn | p

X → mX | 米

Y → Xn | 哦

解决方案

这里,S不出现在任何产生式的右侧,并且产生式规则集中不存在单元产生式或空产生式。因此,我们可以跳过步骤 1 到步骤 3。

步骤4

现在更换后

S 中的 X → XY | Xo | p

米X | 米

我们获得

S → mXY | 米亚 | mXo | 莫| p。

并且更换后

Y 中的 X → X n | 哦

与右侧

X → mX | 米

我们获得

Y → mXn | 百万 | o。

两个新的产生式 O → o 和 P → p 被添加到产生式集中,然后我们得到最终的 GNF,如下所示 -

S → mXY | 米亚 | 米XC | MC | p

X → mX | 米

Y → mXD | 医学博士 | 哦

奥 → 奥

P → p