令 G = (V, T, P, S) 为 CFL。如果 P 中的每个产生式都具有以下形式
A -> aa
如果 A 在 V 中,a 在 T 中,a 在 V* 中,则称 G 为 Greibach 范式 (GNF)。
S -> aAB | bB A -> aA | 一种
B -> bB | C
定理 - 让 L 是不包含 {s} 的 CFL。那么存在一个 GNF 文法 G 使得 L = L(G)。
引理 1 - 让 L 成为 CFL。那么存在一个 PDA M 使得 L = LE(M)。
证明 - 不失一般性地假设 s 不在 L 中。该构造可以修改为稍后包含。
设 G = (V, T, P, S) 是一个 CFG,并且不失一般性地假设 G 在 GNF 中。
构造 M = (Q, E, r, 5, q, z, 0) 其中 -
Q = {q}
E = T
r = V
z = S
5:对于 E 中的所有 a 和 r 中的 A,
5(q, a, A) 包含 (q, y) 如果 A -> ay 在 P 中或更确切地说 -
5(q, a, A) = {(q, y) | A -> ay 在 P 中,y 在 r*} 中,因为 E 中的所有 a 和 r 中的 A
对于 E* 中的给定字符串 x,M 将尝试用 G 模拟 x 的最左推导。
考虑以下 GNF 中的 CFG。
S ^ aS a
构造 M 如下 -
Q = {q}
E = T = {a} r = V = {S}
z = S
5(T a S) = {(TS) (T s)}
5(q, s, S) = 0