上下文无关的语法中可以有“死态”吗?


18

上下文无关的语法可以包含自动机的“死态”吗?

G=({一种,b,C},{一种,乙,C},{一种→一种乙,乙→b,乙→C,C→CC},一种)?

生产规则和C → c C将永远循环,并且永远不会生成单词。这是允许的还是必须在某些时候以终端结束生产规则?乙→CC→CC

Answers:


24

上下文无关的语法允许包含无效规则。之所以被接受是因为每个CFG都会生成与某种适当的CFG相同的语言,其中不包含任何非生产性规则,没有空字符串产生,也没有循环。因此可以安全地假设CFG是适当的而不会失去一般性。


不完全是:适当的CFG必须满足另外两个要求。因此,我将重新制定这一点。
— reinierpost

@reinierpost:我想您的意思是说,存在某些CFG类别禁止非生产性规则,但仍然包括不正确的CFG类别?我想重新制定
— 公式

我的意思是,并非每个没有无效规则的CFG都是正确的,这与您的陈述相矛盾;但是通过明确地排除非生产性规则来定义适当的CFG,这清楚地表明,在任意CFG中这些都是可能的,这就是我要写的。
— reinierpost

感谢您的改进。我的意思是说,有些CFG的子类不允许它们包含此类规则。
— ilke444

是否有一个适当的CFG,其中没有无效规则,没有空字符串产生,也没有与({a},{A},{A-> epsilon},A)生成相同语言的循环?我喜欢第一句话。也许第二句话应该是“这是因为CFG的定义允许将任何有限的终端和非终端字符串作为产品的左侧”。
— 西奥多·诺维尔

3

当然是。每个NFA都可以写为CFG。而且,构建具有“死状态”(我曾教过的术语是“沉没”)的DFA并不容易。

G=({一种},{一种},{一种→一种},一种)
{一种}

ϵ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.