1. 程式人生 > >編譯原理LL(1)文法實驗報告

編譯原理LL(1)文法實驗報告

      LL(1)分析法,就是指從左到右掃描輸入串(源程式),同時採用最左推導,且對每次直接推導只需向前看一個輸入符號,便可確定當前所應當選擇的規則。實現LL(1)分析的程式又稱為LL(1)分析程式或LL(1)分析器。
一個文法要能進行LL(1)分析,那麼這個文法應該滿足:無二義性,無左遞迴,無左公因子。當文法滿足條件後,再分別構造文法每個非終結符的FIRST和FOLLOW集合,然後根據FIRST和FOLLOW集合構造LL(1)分析表,最後利用分析表,根據LL(1)語法分析構造一個分析器。
LL(1)的語法分析程式包含了三個部分:控制程式,預測分析表函式,先進先出的語法分析棧。
LL(1)預測分析程式的總控程式在判斷STACK棧頂符號X和當前的輸入符號a做哪種過程的。對於任何(X,a),總控程式每次都執行下述三種可能的動作之一:  
   (1)若
X = a =‘#’,則宣佈分析成功,停止分析過程。  
   (2)若X = a !=‘#’,則把X從STACK棧頂彈出,讓a指向下一個輸入符號。  
   (3)若X是一個非終結符,則檢視預測分析表M。若M[A,a]中存放著關於X的一個產生式,那麼,首先把X彈出STACK棧頂,然後,把產生式的右部符號串按反序一一彈出STACK棧(若右部符號為ε,則不推什麼東西進STACK棧)。若M[A,a]中存放著“出錯標誌”,則調用出錯診斷程式ERROR。
1   LL(1)分析法
    LL(1)分析法又稱預測分析法,是一種不帶回溯的非遞迴自頂向下分析法。
    LL(1)的含義是:第一個 L 表明自頂向下分析是從左至右掃描輸入串的;第二個 L 表明分析過程中將用最左推導;“1”表明只需向右檢視一個符號就可以決定如 何推導(即可知用哪一個產生式進行推導)。