【问题标题】:Is it, and if so why, wrong that these two regular grammars are different?这两种常规语法是不同的吗?如果是,为什么?
【发布时间】:2017-04-29 00:05:17
【问题描述】:

我的任务是编写基于正则表达式的正则语法。

给定正则表达式a*b可以写成S -> b | aS

ba* 作为正则文法是S -> b | Sa 不正确吗?

我被告知正确答案实际上是S -> bA, A -> ^| aA,但我自己看不出有什么区别。

非常感谢您的解释!

【问题讨论】:

    标签: grammar regular-language


    【解决方案1】:

    IIRC,您的答案和被称为“正确”的答案都是正确的。见this。您构建的是“左正则语法”,而“正确”答案的支持者显然更喜欢“右正则语法”。还有其他任意规则可能或多或少有些迂腐,例如“无空产生式”规则,但它们并不会真正影响常规语言的类别,只会影响您用于特定语言的语法的紧凑性,如您的示例突出显示 - 具有两个替代方案的单个产品与两个产品,一个具有单个子句,一个具有两个替代方案,其中一个是空的。

    【讨论】:

    • 谢天谢地。我隐喻地撕扯我的头发,沮丧地想知道我到底哪里出了问题。谢谢你的回答,谢谢你的链接。
    猜你喜欢
    • 2013-10-08
    • 2020-05-05
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 2021-08-26
    • 2019-04-19
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多