我正在尝试将 CFG 转换为 CNF,但我不确定将什么标识为“变量”。这是问题所在:
S -> aA | ABa
A -> AA | a
B -> AbA | bb
我添加了一个新的开始变量来使它
S' -> S
S -> aA | ABa
A -> AA | a
B -> AbA | bb
那么,单位生产去除后,就是:
S' -> aA | ABa
S -> aA | ABa
A -> AA | a
B -> AbA | bb
我知道下一步是更改任何具有超过 2 个变量的产品,但 ABa 是三个变量吗?或者它是两个变量和一个终端?
如果它是两个变量和一个终端,为了最终简化它,我是否能够创建这样的东西:
S' -> aA | Xa
S -> aA | Xa
A -> AA | a
B -> Yb | bb
X -> AB
Y -> AA
谢谢!