为什么我们添加新的开始状态S0 - >当我们想将语法转换为乔姆斯基普通形式时?如果我们不这样做会出现什么问题?
起初我认为这是因为epsilon规则。但是我们不会从start变量中删除epsilon规则。那么,添加S0的好处是什么? S'
由于
答案 0 :(得分:1)
根据空字符串是否使用该语言,您可能会使用规则$ S - > \ epsilon $(或$ S_0 - > \ epsilon $)。如果这些符号出现在规则的右侧,则可以删除任意数量的符号$ S $。因为我们不希望再次出现开始符号,所以我们引入一个新符号。
通过这种方式,我们在每个应用规则A - >>时得到一个符号。公元前。
答案 1 :(得分:0)
我想我有一些解释。如果语法是这样的:
MyBuilderExt::func(builder)
然后,在删除"单位规则"由于我们不考虑任何特定订单,我们可能会删除S - >首先是S1,我们将:
S --> S1
S1 --> S
S1 --> a
并完全删除了起始变量。