将正确的递归语法翻译成乔姆斯基范式

时间:2010-10-29 10:47:19

标签: theory context-free-grammar chomsky-normal-form

我正在尝试进行练习,将语法翻译成乔姆斯基普通形式。我理解在正常情况下如何做到这一点,但这次我正在使用的语法是正确的递归。 (从技术上讲,语法是前一个问题的答案,所以我可能只是错误的伽玛。)

我认为我可以通过使用固定的规则序列代替ε规则来做到这一点,但我想确保我不会朝错误的方向前进。用一个例子来解释更容易:

对于产生n'a的语法,其中n大于0且是3的倍数:(别担心,这与我实际练习的语法完全不同)

S-> Aaaa
A-> Aaaa
A-> ε

正确的翻译是:

S0-> S
S-> A'B
A'-> AA'
A-> A'B
B-> B'C
A'-> a
B'-> a
C-> a

1 个答案:

答案 0 :(得分:1)

虽然你的语法是正确递归的,但你可以像执行任何其他(非右递归)语法一样执行Chomsky Normal Form转换。只需按照本书中列出的算法进行操作,该算法可能包含两个步骤:(1)用规则 A - >替换所有出现的终端 a 。 a ,其中 A 未出现在规则集中; (2)转换所有规则 A - > w ,其中 len (w)> 2,长度为2的规则包含新变量。

对于 A 规则,然后构建一个导出终端的规则,例如 K - > a ,并替换所有出现的终端 a

A -> AKKK

然后将语法放入CNF

A    -> AA'
A'   -> KA''
A''  -> KK