上下文无关语言的闭包属性
下推自动机接受上下文无关语言 (CFL)。上下文无关语言可以由上下文无关文法生成,它具有以下形式的产生式(替换规则):
A -> ρ(其中 A ∈ N 和 ρ ∈ (T ∪ N)* 并且 N 是非终结符,T 是终结符)上下文无关语言的属性
联合:如果 L1 和 L2 是两种上下文无关语言,它们的联合 L1 ∪ L2 也将是上下文无关的。例如,
L1 = { 一n b n c m | m >= 0 和 n >= 0 } 和 L2 = { a n b m c m | n >= 0 和 m >= 0 }
L3 = L1 ∪ L2 = { 一n b n c m ∪ 一n b m c m | n >= 0, m >= 0 } 也是上下文无关的。
L1 表示 a 的数量应该等于 b 的数量,L2 表示 b 的数量应该等于 c 的数量。他们的工会说两个条件之一为真。所以它也是上下文无关的语言。
注意:所以 CFL 在 Union 下是关闭的。
连接:如果 L1 和 If L2 是两种上下文无关语言,它们的连接 L1.L2 也将是上下文无关的。例如,
L1 = { 一个n b n | n >= 0 } 和 L2 = { c m d m |米 >= 0 }
L3 = L1.L2 = { a n b n c m d m | m >= 0 和 n >= 0} 也是上下文无关的。
L1 表示 a 的数量应该等于 b 的数量,L2 表示 c 的数量应该等于 d 的数量。它们的串联表示第一个 a 的数量应该等于 b 的数量,然后 c 的数量应该等于 d 的数量。因此,我们可以创建一个 PDA,它将首先推送 a,弹出 b,推送 c,然后弹出 d。所以它可以被下推自动机接受,因此没有上下文。
注意:因此 CFL 在 Concatenation 下关闭。
Kleene Closure :如果 L1 是上下文无关的,它的 Kleene 闭包 L1* 也将是上下文无关的。例如,
L1 = { 一个n b n | n >= 0 }
L1* = { 一个n b n | n >= 0 }* 也是上下文无关的。
注意:因此 CFL 在 Kleen Closure 下关闭。
交集和互补:如果 L1 和 If L2 是两种上下文无关语言,它们的交集 L1 ∩ L2 不必是上下文无关的。例如,
L1 = { 一n b n c m | n >= 0 和 m >= 0 } 和 L2 = (a m b n c n | n >= 0 和 m >= 0 }
L3 = L1 ∩ L2 = { a n b n c n | n >= 0 } 不必是上下文无关的。
L1 表示 a 的数量应该等于 b 的数量,L2 表示 b 的数量应该等于 c 的数量。他们的交集说两个条件都必须为真,但下推自动机只能比较两个。所以它不能被下推自动机接受,因此不是上下文无关的。
类似地,上下文无关语言 L1 的补充,即 ∑* – L1,不必是上下文无关的。
注意:所以 CFL 在交叉和互补下没有关闭。
确定性上下文无关语言
Deterministic CFL 是 CFL 的子集,可以被 Deterministic PDA 识别。确定性 PDA 从给定状态和输入符号只有一步,即它没有选择。对于要成为 DCFL 的语言,应该清楚何时 PUsh 或 POP。
例如,L1= { a n b n c m | m >= 0 and n >= 0} 是 DCFL,因为对于 a,我们可以压入堆栈,对于 b,我们可以弹出。它可以被 Deterministic PDA 识别。另一方面,L3 = { a n b n c m ∪ a n b m c m | n >= 0, m >= 0 } 不能被 DPDA 识别,因为 a 和 b 的数量可以相等,或者 b 和 c 的数量可以相等。因此,它只能由 NPDA 来实现。因此,它是 CFL 而不是 DCFL。
注意: DCFL 仅在互补和逆同态下闭合。问题:考虑如下给出的语言 L1、L2、L3。
L1 = { a m b n |米, n >= 0 }
L2 = { 一个n b n | n >= 0 }
L3 = { 一个n b n c n | n >= 0 }
以下哪项陈述不正确?
A. 下推自动机 (PDA) 可用于识别 L1 和 L2
B. L1 是常规语言
C. 这三种语言都是上下文无关的
D. 图灵机可用于识别所有三种语言
解决方案:选项 (A) 表示 PDA 可用于识别 L1 和 L2。 L1 包含所有没有任何编号的字符串。 a 后跟任何没有。 b。因此,它可以被 PDA 接受。 L2 包含具有 n 个编号的字符串。 a 后面跟着 n 号。 b的。它也可以被 PDA 接受。所以,选项(A)是正确的。
选项 (B) 表示 L1 是规则的。这是真的,因为 L1 的正则表达式是 a*b*。
选项 (C) 表示 L1、L2 和 L3 是上下文无关的。 L3 语言包含所有带有 n 号的字符串。 a 后面跟着 n 号。 b 的后跟 n 号。 c的。但是PDA不能接受。所以选项(C)不正确。
选项(D)是正确的,因为图灵机可以识别所有三种语言。
问题:语言 L = { 0 i 12 i | i ≥ 0 } 在字母表 {0, 1, 2} 上是:
A. 不递归
B. 是递归和确定性 CFL
C. 有规律
D. CFL bot 不是确定性 CFL。
解决方案:上述语言是确定性 CFL,对于 0,我们可以将 0 压入堆栈,对于 2,我们可以弹出相应的 0。由于没有歧义,因此它是确定性的。所以,正确的选项是(B)。由于 CFL 是递归的子集,因此它也是递归的。问题:考虑以下语言:
L1 = { 0 n 1 n | n≥0 }
L2 = { wcwr | w ɛ {a,b}* }
L3 = { wwr | w ɛ {a,b}* }
这些语言中哪些是确定性上下文无关语言?
A. 没有任何一种语言
B. 只有 L1
C. 只有 L1 和 L2
D. 所有三种语言
解决方案: Languages L1 包含所有字符串,其中 n 0 后跟 n 1。可以构建确定性 PDA 以接受 L1。对于 0,我们可以将其压入堆栈,对于 1,我们可以从堆栈中弹出。因此,它是 DCFL。
L2 包含 wcwr 形式的所有字符串,其中 w 是 a 和 b 的字符串,wr 是 w 的逆。例如,aabbcbbaa。为了接受这种语言,我们可以构造 PDA,它将所有符号压入 c 之前的堆栈。在 c 之后,如果输入字符串上的符号与堆栈上的符号匹配,则将其弹出。因此,L2 也可以被确定性 PDA 接受,因此它也是 DCFL。
L3 包含形式为 wwr 的所有字符串,其中 w 是 a 和 b 的字符串,wr 是 w 的倒数。但是我们不知道 w 结束和 wr 从哪里开始。例如; aabbaa 是对应 L3 的字符串。对于第一个 a,我们将它压入堆栈。接下来,a 可以是 w 的一部分,也可以是 wr,其中 w=a。因此,输入符号上的状态可以有多个移动。所以,只有非确定性的 PDA 可以用来接受这种类型的语言。因此,它是 NCFL 而不是 DCFL。
所以,正确的选项是(C)。只有 L1 和 L2 是 DCFL。问题:以下哪种语法生成语言 L = { a i b j |我≠j}
S -> 交流电 | CB, C -> aCb |一个 | b, A -> aA | ɛ, B -> Bb | ε
小号 -> 小号 |锑 |一个 | b
S -> 交流电 | CB, C -> aCb | ɛ, A -> aA | ɛ, B -> Bb | ε
S -> 交流电 | CB, C -> aCb | ɛ, A -> aA | a, B -> Bb | b