導航:首頁 > 源碼編譯 > 左遞歸消除編譯原理

左遞歸消除編譯原理

發布時間:2025-02-21 13:08:07

❶ 【編譯原理】自頂向下LL(1)分析中,消除左遞歸和提取左因子的目的是什麼

通常LL(1) 是以函數遞歸調用來實現的
如文法: A -> A + a | a
代碼實現則為:
function A()
{
A();
match('+');
Term(a);
}
這樣你可以看得出死循環了吧...?
將文法消除左遞歸後
A -> aA'
A' -> +aA'
則可以避免這一問題
提出公因式 就像樓上說的一樣,避免程序回溯,消除二義性.
樓上高手啊,求搞基.

❷ 編譯原理 G[S]: S::=a|b|(T) T::=T,S|S怎麼消去左遞歸

T::=T,S|S 轉化為以下兩個式子
T::=SK
K::=,SK|空
這樣就消除左遞歸了~
不懂的可以繼續問我~

❸ 編譯原理的消除左遞歸是怎麼回事啊

如果一個CFG像這樣
A -> Ab
A -> e

就是有左遞歸,語法分析里的遞歸下降法和LL(1)就不能處理啦,因為程序會陷入遞歸而無法前進。
而CFG
A -> bA'
A' -> bA'|e
和前面一個表達的語言是一樣的,但所有語法的第一項都是終結符,就消除了左遞歸。

有消除左遞歸的演算法,一般編譯原理書上會有介紹,不是很復雜。

❹ 編譯原理左遞歸消除

這些題很難啊!!!
都有間接左遞歸。要先變成直接左遞歸,然後消除掉。
--------------------
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:

--------------------

❺ 編譯原理中的左遞歸

1.A->Aa
2.A->Ba
B->Ab (A和B屬於非終結符,a和b屬於終結符)

通俗點講:左遞歸就是情況1所說的「->」兩邊都含有同一個非終結符;
情況2所說的A->Ba中「->」後面的B 與 B->Ab中「->」前面的B是相同的非終結符
這兩種情況就叫作左遞歸。

閱讀全文

與左遞歸消除編譯原理相關的資料

熱點內容
小說管理系統項目源碼 瀏覽:899
php注冊判斷 瀏覽:652
我的世界伺服器名稱和地址 瀏覽:145
將軍不聽元帥命令出關 瀏覽:136
linuxawk命令 瀏覽:986
三菱plc編程軟體gxdevelop 瀏覽:402
php從入門到精通光碟下載 瀏覽:924
不能表示演算法的是什麼 瀏覽:139
讀卡器在文件夾怎麼查看照片 瀏覽:804
程序員是屬於哪個部門管理 瀏覽:617
交換機命令be 瀏覽:332
存儲壓縮加密技術情況 瀏覽:504
知名的可編程步進電機驅動器工廠 瀏覽:184
銀行卡信息加密想取消 瀏覽:219
程序員唱可愛 瀏覽:824
除了移動花卡怎麼更改定向app 瀏覽:326
python多線程java 瀏覽:255
2021程序員筆記本r5 瀏覽:662
演算法監管的要點在於 瀏覽:895
長安s460壓縮機 瀏覽:246