【问题标题】:CFG and closure properties [closed]CFG 和闭包属性
【发布时间】:2013-04-29 08:12:40
【问题描述】:

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

在 union 下使用闭包表明以下语言是上下文无关的:

{am bn cp dq : n=q 或 m

【问题讨论】:

  • 由于这与编程无关,我建议在 cs.stackexchange.com 上询问。

标签: context-free-grammar formal-languages


【解决方案1】:

由于您没有具体说明您的问题是什么,我将仅介绍您需要了解的内容。

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

L ∪ S = 上下文无关语言

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

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

L = {am bn cp dq : n=q 或 m

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

A = {am bn cp dq : n = q }
B = {am bn cp dq : m C = {am bn cp dq : 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.. 形式的字符串的语法,其中bs 和ds 的数量必须相等。

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

S 是起始变量(或非终端),ε 是空字符串(有些人使用空符号^,但我一直被告知使用ε)。该语法应该能够生成语言A,因此A 是上下文无关的。 (如果有人检测到错误,请告诉我。我有一段时间没有创建 CFG)。

由于这是一个练习,我会让你解决剩下的部分,但你应该知道如何去做。

【讨论】:

  • 非常感谢您提供这么棒的文字!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多