上下文无关文法

上下文无关的语法是一个四元组(V, Σ, R, S),其中

  1. V是一个有限变量集合,
  2. Σ是一个有限集合,与V不相交,称为终端,
  3. R是一个有限规则集,每个规则是一个变量和一串变量和终端,
  4. S∈V是开始变量。

语法示例

这里有一个语法例子

S→0

S→1s1

年代→ε

缩写符号

如果语法为变量的扩展提供了多个选项,我们可以将赢博体育这些选项合并到一个规则中,该规则在右侧提供了几个以|符号分隔的选项。

例如,

S→0

S→1s1

年代→ε

变成了

S→0 0 | 1s1 | ε

派生

派生是语法规则的一系列赢博体育程序,从字符串S开始,一直持续到字符串中只剩下终端符号。

下面是使用前面示例语法的示例派生。

S→050→01s10→011110

上下文无关语言

上下文无关语言是可以从特定上下文无关语法派生的赢博体育字符串的集合。

为了演示语言中的特定字符串,我们必须给出该字符串的派生。

为了表明一种特定的语言是一种与上下文无关的语言,我们必须为该语言构造一个语法,然后论证该语法准确地生成L。

一个例子

考虑语言

L = {x | x包含至少两个1}

我认为下面的语法生成L:

S→aab

A→0a | a0 | 1a | a1 | 1

B→0b | 1b | ε

这种语法背后的直觉是,L中的任何字符串都可以分解为三个部分:包含至少一个1的子字符串,包含至少一个1的第二个子字符串,以及包含0个或多个1的第三个子字符串。变量A的规则生成的子字符串必须至少有一个1。变量B的规则生成包含0个或多个1的子字符串。

乔姆斯基范式

如果上下文无关语法的赢博体育规则都遵守以下约束,那么它就是乔姆斯基范式:

  1. start变量不会出现在任何规则的右侧。
  2. 如果规则的右侧包含任何变量,则右侧恰好包含两个变量。
  3. 如果规则的右侧包含终端符号,则该终端符号是唯一出现在右侧的符号。
  4. 唯一允许在其右侧包含ε的规则是规则S→ε

将语法转换为乔姆斯基范式

参见https://en.wikipedia.org/wiki/Chomsky_normal_form

一个例子

我们转换前面的示例语法

S→aab

A→0a | a0 | 1a | a1 | 1

B→0b | 1b | ε

转化为乔姆斯基范式。

1)从右手边删除开始符号:不需要

2)消除带有非孤立终端的规则:

S→aab

A→za | az | oa | ao | o

B→zb | ob| ε

Z→0

0→1

3)消除长右手边:

S→ac

C→ab

A→za | az | oa | ao | o

B→zb | ob| ε

Z→0

0→1

4)消除ε规则

S→ac

b . b . b . b

A→za | az | oa | ao | o

B→zb | ob | z | o

Z→0

0→1

5)消除单位规则

S→ac | aa | oc | ao | oa | oo

b→b→b→b→b→b→b→b→b→b→b→b→b→b→

A→za | az | oa | ao | oz | oo

B→zb |→|→|→|→|→| oz

Z→0

0→1