跳到主要内容

上下文无关文法

阐述​

形式定义​

四元组 G=(V,Σ,R,S)G=(V,\Sigma,R,S),其中

  • VV 是变量的有限集

  • Σ\Sigma 是终结符的有限集

  • RR 是规则的有限集,每条规则将一个变量替换为一个由变量和终结符构成的字符串或 ε\varepsilon

  • S∈VS\in V 是起始变量

  • uu 生成 vv(u⇒vu\Rightarrow v):通过单步替换可以得到

  • uu 推出 vv(u⇒∗vu\Rightarrow^*v):通过多步替换可以得到

性质​

由它生成的语言 L(G)={w∈Σ∗∣S⇒∗w}L(G)=\{w\in\Sigma^*|S\Rightarrow^*w\} 称为上下文无关语言。

上下文无关文法可以用 Chomsky 范式 表达。

上下文无关文法与非确定性的下推自动机等价。

设计​

  1. 将给定的语言分解为几个语言的并集,然后添加新的起始变量
  2. 如果是正则语言,可以用 DFA 转化而来(见下)
  3. 使用类似于 R→uRvR\to uRv 的语法来让字符串的不同部分保持关联

模糊性​

最左推导:推出 ww 的过程中每次都是替换最左端的变量

  • 如果 ww 有两个或更多的最左推导,则它是模糊的
  • 如果存在一个 ww 是模糊的,则 GG 是模糊的
  • 有些 CFL 只能用模糊语法生成,称它是内在模糊的

实例​

性质​

相关内容​

正规语言的上下文无关文法​

先构建出正规语言的有限状态自动机,然后

  • 对每个状态 qiq_i 定义一个变量 RiR_i,特别地定义 R0R_0 对应于起始状态 q0q_0
  • 如果 δ(qi,a)=qj\delta(q_i,a)=q_j,添加规则 Ri→aRjR_i\to aR_j
  • 如果 qiq_i 是接受状态,添加规则 Ri→εR_i\to\varepsilon

参考文献​