上下文无关语言

来自testwiki
imported>InternetArchiveBot2021年7月8日 (四) 13:41的版本 (Add 1 book for verifiability (20210707)) #IABot (v2.0.8) (GreenC bot
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

上下文无关语言是可以用上下文无关文法定义的形式语言。所有上下文无关语言的集合同一于下推自动机所接受的语言的集合。

例子

一个原型上下文无关语言是 L={anbn:n1},它是所有非空、偶数长度字符串的语言,字符串的整个前半部分都是 a,整个后半部分都是 bL 由文法 SaSb|ab 生成,并被下推自动机 M=({q0,q1,qf},{a,b},{a,z},δ,q0,{qf}) 接受,这里的 δ 定义如下:


δ(q0,a,z)=(q0,a)
δ(q0,a,a)=(q0,a)
δ(q0,b,a)=(q1,x)
δ(q1,b,a)=(q1,x)
δ(q1,b,z)=(qf,z)
这里的 z 是初始栈符号而 x 意味着弹出动作。


上下文无关语言在编程语言中有很多应用。大多数算术表达式可用上下文无关文法生成。

闭包性质

上下文无关语言闭合于下列运算下。就是说,如果 LP 是上下文无关语言而 D正则语言,下列语言也是上下文无关语言:

上下文无关语言不闭合于补集交集差集下。

在交集下不闭包

上下文无关语言不闭合于交集下。其证明在 Sipser 97 中被作为习题给出。选用语言 A={ambncnm,n0}B={anbncmm,n0},它们都是上下文无关的。它们的交集是 AB={anbncnn0},它可以用上下文无关语言的泵引理证实为非上下文无关的。

可判定性性质

上下文无关语言的下列问题是不可判定的:

  • 等价:给定两个上下文无关文法 A 和 B,L(A)=L(B) 吗?
  • L(A)L(B)= 吗?
  • L(A)=Σ* 吗?
  • L(A)L(B) 吗?

上下文无关语言的下列问题是可判定的:

  • L(A)= 吗?
  • L(A) 是有限的吗?
  • 成员关系:给定任何字 w,wL(A) 吗?(成员关系问题甚至是多项式可判定的 - 参见CYK算法

上下文无关语言的性质

引用

Template:形式语言与形式文法