0

你能否解释我,我该如何检查,第一个上下文无关语法(G1)的语言是第二上下文无关语法(G2)语言的子集。如何检查一个上下文无关语法的语言是否是第二个上下文无关语法的子集?

G1和G2两种LL(1)具有相同的字母文法:

{a, b, c, d, f} 

生产规则是什么样子:

A -> αB 

A -> α 

和α是非epsilon字符串(终端符号)。

上下文无关文法G1:

S1 -> aK 
K -> bC|cE 
C -> cB|d 
E -> bA|f 
A -> abC 
B -> acE 

上下文无关文法G2:

S2 -> aX 
X -> bZ|cY 
Z -> cV|d 
Y -> bU|f 
V -> aQ 
U -> aP 
Q -> cY 
P -> bZ 

自动方式是首选。

在额外的,我怎么能检查两个任意 上下文无关文法的语言是相等的。

+0

问题也在这里问:http://cs.stackexchange.com/questions/52495/how-can-i-check-that-the-language-of-one-context-free-grammar-is-a-子集的作为 – rici

+0

今后,请不要交叉提问。有关更多信息,请参阅[这里](http://meta.stackexchange.com/q/64068)。既然你已经收到你在其他网站上发布的问题的答案,我将会关闭这个答案(http://cs.stackexchange.com/questions/52495/how-can-i-check-that-the-language -of酮上下文无关文法-是-A-子集的-AS)。 – Matt

+0

我正在投票结束这个问题,因为它已经在cs.stackexchange.com上被询问并回答了,它在主题上“更多”。 http://cs.stackexchange.com/questions/52495/how-can-i-check-that-the-language-of-one-context-free-grammar-is-a-subset-of-a-s – Matt

回答

0

你实际上不能。这是不可判定的。

您可以发现确定语法是否生成Σ *的问题是不可判定的。这意味着测试两个语法是否产生相同的语言是不可判定的,因为您可以为Σ *构建语法并测试另一个语法是否生成相同的语言,然后可以让您测试语法是否具有语言Σ *,我们知道我们做不到。因此,您也无法测试一种语法的语言是否是另一种语法的语言的子集,因为如果可以的话,您可以测试Σ *是该语法的语言子集,然后它会告诉您语法是否可以生成所有字符串。

对不起!

相关问题