首页 文章

证明无上下文语法是常规的

提问于
浏览
1

我知道要证明一种语言是非常规的,可以使用抽取引理 . 我想我理解它是如何工作的,但是当谈到表明无上下文语法(或不常规)时,我遇到了很大的问题 .

这是一个CFG的例子,我无法理解如何显示是常规(或非常规):

i) S → NP VP
ii) NP → DET N
iii) VP → TV NP
iv) N → N N
v) N → A N
vi) NP → Mary |John
vii) DET → a |the |her |his
viii) TV → bought |loves |misses
ix) N → bike |jersey |mountain |sleeve |brake |
x) A → long |hydraulic |knitted |expensive |steep

我最初的猜测是,由于第四条规则,它不常规,但我不知道如何使用抽水引理来显示它 . 如果第四条规则被删除,那么它会不会是正规的?

所以,我的问题是:1 . 上述语法是否有规律?当试图表明这样的CFG是常规的还是非常规的时,有什么方法? 2.如果移除了递归规则,那么它是否是常规的?

我希望有人能够提供一些有用的工具,当给出如上所述的CFG时,有人想表明它是否有规律 .

2 回答

  • 0

    这里的其他答案指出了我认为你可能会遗漏的细微差别 . 无上下文语法是一组描述语言的规则,但它本身不是一种语言 . 因此,询问无上下文语法是否规则并不是一个有意义的问题 - 就像询问所有自然数的集合是否可被17整除一样 .

    另一方面,问题“这个CFG描述的语言是常用语言吗?”是一个有意义的问题,在这种情况下答案是肯定的 . 为了说明这一点,你需要弄清楚所描述的语言实际上是什么样的,然后可以为它构建DFA / NFA,为它编写正则表达式,或者为它编写常规语法 . 在这种特殊情况下,我们可以看到语法等同于以下正则表达式:

    (MJ | DET (A* N)*) TV (MJ | DET (A* N)*)
    

    其中MJ,DET,A,N和TV是由您提供的无上下文语法中表示的列表给出的选项的缩写(MJ表示“Mary或John” . )因为您可以为该语言编写正则表达式语法,你有什么

    • 无上下文语法,

    • 这不是常规语法,但是

    • 描述了常规语言 .

  • 0

    想要指出有两点需要注意:

    • 每个正则表达式(RE)也是一个CFG,但反过来却不正确(参见here) . 因此,除非您的提问者知道给定的CFG也是RE(由于问题的构建),否则很可能不是RE .

    • 给定CFG是不可能的,如果它等于RE(不可解除的问题),请参阅here

    把这给你的东西放在一起Am_I_Helpful的答案没有理论支持,不应该使用 .

相关问题