我有一个问题,我希望得到一些帮助:
正式和非正式地描述以下语法的语言G =(Σ,N,S,P)
Σ = {a,b,c}
N = {S,T,X}
S = S
p = {
S->aTXc,
S->bTc,
T->aTX,
T->bT,
TXX->T,
Tc->*empty set*,
TXc-a>
}
此外,简要而非正式地解释这种语法如何产生其语言。
提示:使用| w | x表示法来描述该语法的语言。
答案 0 :(得分:0)
我相信语法的语言
S → bTc | aTXc
T → bT | aTX
TXX → T
Tc → λ
TXc → a
是(a|b)+
。首先,考虑使用T
生成的T
的派生:
T ⇒* bnT (T → bT)
T ⇒* anTXn (T → aTX)
其中n > 0
。由于T → bT
和T → aTX
可以任意顺序应用,因此可以遵循
T ⇒* uTX|u|a
其中u
的格式为(a|b)+
和|u|a ≥ 0
。接下来,考虑生产TXX → T
:
T ⇒* uTX|u|a ⇒* uTX1(|u|a (mod 2) ≡ 1)
其中1(P) = 1
是P
,否则是0
。将其与S
作品一起,我们拥有:
S ⇒ bTc ⇒* buTX1(|u|a (mod 2) ≡ 1)c ⇒ buTc ⇒ bu
S ⇒ aTXc ⇒* auTX1(|u|a (mod 2) ≡ 1)Xc ⇒ auTXc ⇒ aua
如果|u|a (mod 2) ≡ 0
和
S ⇒ bTc ⇒* buTX1(|u|a (mod 2) ≡ 1)c ⇒ buTXc ⇒ bua
S ⇒ aTXc ⇒* auTX1(|u|a (mod 2) ≡ 1)Xc ⇒ auTXXc ⇒ auTc ⇒ au
如果|u|a (mod 2) ≡ 1
其中u
的格式为(a|b)+
。在上述派生的最后一步中,应用更多的T
产生式不会生成具有不同形式的字符串。因此,我相信所有可派生的字符串都具有(a|b)+
的形式。我担心的是,您被指示使用|u|a
表示法来描述语法的语言,因此这种信念可能是错误的。