上下文自由语言的形式上下文免费语法

时间:2013-10-20 05:32:38

标签: context-free-grammar automata

如何为以下语言生成正式的上下文无关语法:

  

{ai bjck | i != j or j != k}

我有以下作品,但无法理解:

     S->AX | YC                     unequal b’s c’s or a’s b’s

     A-> aA | e                     0 or more A’s

     C -> cC |e                     0 or more c’s

     B -> bB | e                    0 or more B’s

     X -> bXc | bB | cC             equal b’s, c’s then 1+ b’s, 
                                    1+C’s (i.e. unequal b’s and c’s)

     Y -> aYb | bB | aA             unequal a’s b’s

任何人都可以帮助我理解并解决这个问题吗?

1 个答案:

答案 0 :(得分:9)

语言 L = {ai bj ck | i != j or j != k}可以简单地写为 L = L1 U L2 L1 = {ai bj ck | i != j } L1 = {ai bj ck | j != k }

在L 1 中,对符号c没有约束,只有条件numberOf(a)不应等于numberOf(b)numberof(a) > numberOf(b) numberof(a) < numberOf(b)。所以这种语言的语法应该是:

L1  =>  EX              // L1 is start variable 
E  =>  aEb | A | B
X  =>  C | ^ 
A  =>  aA | a
B  =>  bB | b
C  =>  cC | c

在使用E的上述语法中,我们可以在a的模式中生成相同数量的banEbn,然后将这种情感转换为句子形式E必须替换为BA导致生成表单中的字符串,使ai bji != j,使用变量X任意数量的{{1}可以为模式c添加后缀。

要理解这个语法,请阅读:Tips for creating Context free grammarWhy the need for terminals? Is my solution sufficient enough?

类似地,对于L 2 ,对符号ai bj没有约束,只有条件a不应等于numberOf(b)numberOf(c) > numberof(b) numberOf(c) < numberof(b)。所以这种语言的语法应该是:

numberOf(c)

现在使用这两种语法,引入一个新的开始变量L2 => YF // L2 is start variable F => bFc | B | C Y => A | ^ A => aA | a B => bB | b C => cC | c 和两个新的生成规则S,我们得到了语言S => L1 | L2的语法。