⑴ 編譯原理左遞歸消除
這些題很難啊!!!
都有間接左遞歸。要先變成直接左遞歸,然後消除掉。
--------------------
G3.1
S->SA|Ab|b|c
A->Bc|a
B->Sb|b
--------------------
間接左遞歸轉直接左遞歸
B代入A:A ->(Sb|b)c|a -> Sbc|bc|a
A代入S:S -> S(Sbc|bc|a)|(Sbc|bc|a)b|b|c -> SSbc|Sbc|Sa|Sbcb|bcb|ab|b|c
消除直接左遞歸
S->bcbS'|abS'|bS'|cS'
S'->SbcS'|bcS'|aS'|bcbS'|ε
S'還是有直接左遞歸,繼續消除
S'->bcS'T|aS'T|bcbS'T
T->bcS'T|ε
最後,這題答案就是S,S',T的產生式
--------------------
下面兩題更難了,上一題反復代入還能把其他非終結符消掉,下面兩個文法都是最後代入還剩下兩個非終結符反復迭代,佛了!
G3.2
E->ET+|T
T->TF*|F
F->E|i
--------------------
F代入T: T->T(E|i)*|(E|i)->TE*|Ti*|E|i
T代入E:
--------------------
G3.3
S->V_1
V_1->V_2|V_1 2 V_2
V_2->V_3|V_2 + V_3
V_3->V_1 * |(
這些字母我都不認識了,換一下
S->A|SiA
A->B|A+B
B->S*|(
--------------------
B代入A:A->(S*|()|A+(S*|()->S*|(|A+S*|A+(
A代入S:
--------------------