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

时间:2015-06-07 18:37:06

标签: context-free-grammar regular-language

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

以下是我无法理解如何展示常规(或非常规)的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 :(得分:0)

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

  1. 每个正则表达式(RE)也是一个CFG,但反过来却不正确(参见here)。因此,除非您的提问者知道给定的CFG也是RE(由于问题的构建),否则很可能不是RE。
  2. 如果CFG等同于RE(不可解决的问题),则无法计算给出CFG。请参阅here
  3. 把这给你的东西放在一起Am_I_Helpful的答案没有理论支持,不应该使用。

答案 1 :(得分:0)

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

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

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

其中MJ,DET,A,N和TV是您提供的无上下文语法中表示的列表所给出的选项的缩写(MJ表示" Mary或John。")你可以为语法的语言写一个正则表达式,你有什么

  • 无上下文语法,
  • 这不是常规语法,但
  • 描述了一种常规语言。