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

左遞歸消除編譯原理

發布時間: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是相同的非終結符
這兩種情況就叫作左遞歸。

閱讀全文

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

熱點內容
51單片機時間 瀏覽:170
後台如何獲取伺服器ip 瀏覽:250
單片機流水燈程序c語言 瀏覽:214
程序員第二職業掙錢 瀏覽:229
運行里怎麼輸入伺服器路徑 瀏覽:831
pythonstepwise 瀏覽:497
劉一男詞彙速記指南pdf 瀏覽:52
php認證級別 瀏覽:360
方舟編譯啥時候推送 瀏覽:999
php手機驗證碼生成 瀏覽:667
哲學思維pdf 瀏覽:5
凌達壓縮機有限公司招聘 瀏覽:525
weblogic命令部署 瀏覽:28
微差事app怎麼注銷賬號 瀏覽:273
騰訊雲伺服器被無差別攻擊 瀏覽:868
郵政app怎麼查詢轉賬憑證 瀏覽:839
程序員語言閱讀 瀏覽:869
程序員考哪些證可以拿錢 瀏覽:872
發貨商庫存清點編程 瀏覽:723
app圖標名字變了怎麼回事 瀏覽:722