考点:文法⇒推导树
解:(1)
(2)
(3)
考点:文法⇒最左/右推导
解:最左推导: E ⇒ l m E + T ⇒ l m T + T ⇒ l m F + T ⇒ l m b + T ⇒ l m b + T / F ⇒ l m b + F / F ⇒ l m b + b / F ⇒ l m b + b / b E⇒_{lm} E+T⇒_{lm} T+T⇒_{lm} F+T⇒_{lm} b+T⇒_{lm} b+T/F⇒_{lm} b+F/F⇒_{lm} b+b/F⇒_{lm} b+b/b E⇒lmE+T⇒lmT+T⇒lmF+T⇒lmb+T⇒lmb+T/F⇒lmb+F/F⇒lmb+b/F⇒lmb+b/b
最右推导: E ⇒ r m E + T ⇒ r m E + T / F ⇒ r m E + T / b ⇒ r m E + F / b ⇒ r m E + b / b ⇒ r m T + b / b ⇒ r m F + b / b ⇒ r m b + b / b E⇒_{rm} E+T⇒_{rm} E+T/F⇒_{rm} E+T/b⇒_{rm} E+F/b⇒_{rm} E+b/b⇒_{rm} T+b/b⇒_{rm} F+b/b⇒_{rm} b+b/b E⇒rmE+T⇒rmE+T/F⇒rmE+T/b⇒rmE+F/b⇒rmE+b/b⇒rmT+b/b⇒rmF+b/b⇒rmb+b/b
考点:文法二义性证明
解:画出语言 a a a b a aaaba aaaba 的2颗推导树如下:
同一文法可画出2个不同的推导树,因此该文法具有二义性。
考点:语言⇒上下文无关文法(设计上下文无关文法)
解:(1)考虑在产生相同数目的0,1后,再生成多余的1.
G = ( { S } , { 0 , 1 } , P , S ) G=(\{S\},\{0,1\},P,S) G=({
S},{
0,1},P,S),其中P为: S → 1 S 0 ∣ 1 S ∣ 10 S→1S0|1S|10 S→1S0∣1S∣10
(2)考虑将0和1的部分拆开: G = ( { S , A } , { 0 , 1 } , P , S ) G=(\{S,A\},\{0,1\},P,S) G=({
S,A},{
0,1},P,S),其中P为:
S → 1 A 1 ∣ 1 S 1 S→1A1|1S1 S→1A1∣1S1
A → 00 A ∣ 00 A→00A|00 A→00A∣00(服务 0 2 m 0^{2m} 02m)
(3)考虑将语言拆为2部分: G = ( { S , A , B } , { 0 , 1 } , P , S ) G=(\{S,A,B\},\{0,1\},P,S) G=({
S,A,B},{
0,1},P,S),其中P为:
S → A B S→AB S→AB(拆为2部分)
A → 1 A 0 ∣ 10 A→1A0|10 A→1A0∣10
B → 1 B 0 ∣ 10 B→1B0|10 B→1B0∣10
考点:消除无用符号
解:(1)首先使用算法1,得到非生成符号C,删去C及其生成式有:
S → E D S→ED S→ED
D → a D→a D→a
E → b E→b E→b
使用算法2,发现没有不可达符号,因此等价文法为: G = ( { S , D , E } , { a , b } , P , S ) G=(\{S,D,E\},\{a,b\},P,S) G=({
S,D,E},{
a,b},P,S),其中P:
S → E D S→ED S→ED
D → a D→a D→a
E → b E→b E→b
(2)首先使用算法1,得到非生成符号C,删去C及其生成式有:
S → D S→D S→D
D → b S ∣ b D→bS|b D→bS∣b
E → D S ∣ b E→DS|b E→DS∣b
使用算法2,发现不可达符号E,删去E及其生成式。因此等价文法为: G = ( { S , D } . { b } , P , S ) G=(\{S,D\}.\{b\},P,S) G=({
S,D}.{
b},P,S),其中P:
S → D S→D S→D
D → b S ∣ b D→bS|b D→bS∣b
考点:消空产生式
解:根据算法得,可得致空符号有: D 、 E 、 C 、 S D、E、C、S D、E、C、S, S S S 也为致空符号,因此加入 S 1 → S ∣ ε S_1→S|ε S1→S∣ε,对于 S → D C E S→DCE S→DCE 有: S → D C E ∣ C E ∣ D E ∣ D C ∣ D ∣ C ∣ E S→DCE|CE|DE|DC|D|C|E S→DCE∣CE∣DE∣