【发布时间】:2021-12-08 17:36:13
【问题描述】:
我正在尝试将 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
谢谢!
【问题讨论】:
-
我敢肯定,无论是谁设置了这个问题,都会使用大写字母是非终结符(“语法变量”)而小写字母是终结符的约定。我也很确定他们在某处提到了这个事实。 (很明显,没有扩展
a的生产,对吧?这就是为什么你在删除单元生产时没有删除A->a。)
标签: context-free-grammar automata computation-theory chomsky-normal-form