CFG和封闭属性

时间:2013-04-29 08:12:40

标签: context-free-grammar formal-languages

我正在解决一个问题,我迫切需要一个提示来解决一个问题:

  

使用union下的闭包来显示以下语言是无上下文的:

     

{a m b n c p d q :n = q或m <= p或m + n = p + q}

1 个答案:

答案 0 :(得分:4)

由于您未指明问题所在,我将通过您需要了解的内容。

在联盟下关闭 - 这是什么意思?
如果我们有一种语言L和一种语言S并且两者都没有上下文,我们就知道语言的联合也是无上下文的。

  

L∪S=无语境语言

有关CFL的更多闭包属性,请参阅this,如果您有兴趣(或者您可以尝试制作自己的证明),可以在网上找到相关证明。

如何使用它来解决您的问题?
你有这个语言规范(我们称之为L):

  

L = {a m b n c p d q :n = q或m < = p或m + n = p + q}

您可以将此语言拆分为其他3种语言:

  

A = {a m b n c p d q :n = q}   B = {a m b n c p d q :m <= p}
  C = {a m b n c p d q :m + n = p + q}

很容易看到A ∪ B ∪ C = L

如果你能证明A,B和C没有上下文,你可以得出结论L也是无上下文的。

<强>解决方案
要确定某种语言是否无上下文,请参阅this answer。引用答案:

  

首先,您应该尝试构建一个构成主题语言的context-free grammar。如果所有产品的左侧都包含一个非终端符号,则语法是无上下文的。根据定义,如果存在,那么语言是无上下文的。

     

等效构造将是pushdown automaton。它与DFA相同,但可以使用堆栈。它可能比语法更容易构建。

因此,如果您可以为A,B和C语言构建一个CFG(或PDA),那么您已经解决了问题。

我们采用语言A: 我们需要一个语法来生成a..b..c..d..形式的字符串,其中我们必须有相同数量的bd s。

S -> AE
A -> Aa  | ε
E -> bEd | C
C -> Cc  | ε

S是起始变量(或非终端),ε是空字符串(有些人使用空符号^,但我总是被告知使用{{1} }})。该语法应该能够生成语言ε,因此A是无上下文的。 (如果有人发现错误,请告诉我。我暂时没有创建CFG。)

由于这是一个练习,我会让你解决其余部分,但你应该已经知道如何去做。