它是,如果是这样,为什么,这两个常规语法不同是错误的?

时间:2016-12-13 19:49:46

标签: grammar regular-language

我的任务是根据正则表达式编写常规语法。

鉴于正则表达式a*b可以写为S -> b | aS

ba*作为常规语法S -> b | Sa是不正确的?

我被告知正确答案实际上是S -> bAA -> ^| aA但我自己并没有看到差异。

非常感谢您的解释!

1 个答案:

答案 0 :(得分:1)

IIRC,您的回答和被称为“正确”的回答都是正确的。见this。你所构建的是“左常规语法”,而“正确”答案的提议者显然更喜欢“正确的常规语法”。还有其他任意规则可以或多或少地保持迂回,例如“无空制作”规则,但它们并不真正影响常规语言的类,只是用于特定语言的语法的紧凑性,如您的示例要点 - 单个制作,包含两个选项,两个制作,一个包含单个子句,另一个包含两个选项,其中一个是空的。