上下文无关的语法是一个四元组(V, Σ, R, S),其中
这里有一个语法例子
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的子字符串。
如果上下文无关语法的赢博体育规则都遵守以下约束,那么它就是乔姆斯基范式:
参见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