L = {a ^ n b ^ m c ^ k | n = m + 2k}
L = {wE(a,b)* | Na(w)+ 2Nb(w)!= Nc(w)}
查找以下内容(生成规则)的上下文无关语法
答案 0 :(得分:1)
对于第一个,将其重写为L = {a ^ 2k a ^ m b ^ m c ^ k}。请注意,我们可以从外部开始构建字符串,方法是首先要求为每个c添加两个a,然后再要求为每个b添加另一个a。
S -> aaSc | T // add two a to the front and one c to the back
T -> aTb | e // add one a and one b to the middle
对于第二个,将其重写为不同情况的并集:
我们可以从Na(w)+ 2Nb(w)= Nc(w)的语法开始:
S -> Sac | Sca | aSc | acS | caS | cSa | SS | T
T -> Tbcc | Tcbc | Tccb | TScc | bcTc | bccT | cTbc
| cTcb | cbTc | cbcT | ccTb | ccbT | TT | e
对于情况1,我们需要更多c。我们可以如下更改上述语法:
S -> Sac | Sca | aSc | acS | caS | cSa | SS | T
T -> Tbcc | Tcbc | Tccb | bTcc | bcTc | bccT | cTbc
| cTcb | cbTc | cbcT | ccTb | ccbT | TT | C
C -> cC | c
这确保至少有一个c被添加到某处,并允许任意数量的额外c被添加到任何地方。对于情况2,我们需要更多a或b。我们可以如下更改上述语法:
S -> Sac | Sca | aSc | acS | caS | cSa | SS | T
T -> Tbcc | Tcbc | Tccb | bTcc | bcTc | bccT | cTbc
| cTcb | cbTc | cbcT | ccTb | ccbT | TT | C
C -> aC | bC | a | b
这可以确保在某个位置添加至少一个a或b,并允许在任意位置添加任意数量的额外a或b。