構造一個dfa_編譯程序屬于什么軟件_編譯程序構造
本文關鍵詞:編譯程序構造,由筆耕文化傳播整理發布。
1.題目:編譯程序構造 2.內容:涉及詞法分析、自下而上語法分析程序的實現:SLR(1)分析器的實現以及生成中間代碼。 3.具體要求 根據LR分析算法構造SLR(1)分析程序,并完成語法分析動作(當需要一個單詞時,調用詞法分析程序獲取),同時完成語義分析生成四元式輸出。要求程序具有通用性,改變文法時只需改變程序的數據初值,無需改變程序主體; (1)基本要求:完成1條說明語句、2條算數表達式和賦值語句的翻譯,生成中間代碼。 (2)高級要求:在完成基本要求的基礎上,實現if語句和布爾表達式的翻譯。if語句的文法和翻譯方案參見課本。 變量說明語句的文法及相應的語義子程序:.att表示數據類型屬性,fill函數表示將單詞id及其類別屬性填寫符號表。 (0)S→D; {acc} (1)D→int id { fill(id,int);D.att=int; } (2)D→float id {fill(id,float); D.att=float; } (3)D→D(1),id { fill(id,D(1).att);D.att=D(1).att; } 算數表達式和賦值語句的文法及相應的語義子程序。 (1)A→id=E; {p=lookup(id.name); emit(E.PALCE, , p);} (2)E→E(1)+T {E.PALCE=newtemp(); emit(+,E(1).PALCE,T.PALCE,E.PALCE)} (3)E→T {E.PALCE=T.PALCE;} (4)T→T(1)*F {T.PALCE=newtemp(); emit(+,T(1).PALCE,F.PALCE,T.PALCE)} (5)T→F {T.PALCE=F.PALCE;} (6)F→(E) { F.PALCE=E.PALCE;} (7)F→id {P=LOOKUP(id.name) F.PALCE=P;} (8)F→num { P=LOOKUP(num.value) F.PALCE=P;} 構造其用于SLR(1)分析的識別活前綴的DFA以及action表和goto表。然后編程實現。(關于詞法分析部分只需識別出與此文法相關的單詞即可(+,*,(,),id,=))。 4.程序設計提示: (1)分析棧設計時可以用一個棧完成,也可以設計三個棧:一個符號棧,一個狀態棧,一個語義棧,則歸約時,則需要在符號棧中退掉n個符號,在狀態棧中退掉n個符號(n為產生式符號個數),,語義棧中退掉n個符號對應的語義; (2)終結符表和非終結符表的組織和預測分析程序中相同(將符號對應到一個數字,表示在分析表中對應的下標)。 (3)action表中的錯誤處理:簡化的錯誤處理:當查找action表出現空白時,則當前單詞無法移進和規約,可簡單的認為當前單詞為多余的單詞,則拋棄當前單詞,讀下一單詞繼續分析。 5.測試數據: 作為程序測試數據,以賦值語句area=r*r+r$作為測試輸入(源程序)。程序要求輸出二元式序列、符號表、語法分析過程、四元式序列。 假設AA.TXT的文件內容如下: int area,r; r=1; area=r*r+r; 程序運行情況如下: 請輸入源文件名稱:E:\AA.TXT<回車> 語法分析過程如下: 狀態棧 符號棧 語義棧 動作說明 源程序對應的二元式如下: (int,-) (id,0) (,,-) (id,1) (;,-) (id,1) (=,) (num,0) (id,0) (=,) (id,1) (*,) (id,1) (+,) (id,1) (;,-) 符號表如下: Name type value addr 0 area int 1 r int 數字表如下 源程序對應的四元式序列如下: (=,1, , r) (*,r,r,T1) (+,T1,r,T2) (=,T2,,area) 分析過程完成。 6.程序擴展要求 有能力的同學可將編譯程序擴展布爾表達式、if語句的分析和四元式生成,布爾表達式和if語句的翻譯參見教材。
本文關鍵詞:編譯程序構造,由筆耕文化傳播整理發布。
本文編號:53302
本文鏈接:http://www.malleg.cn/kejilunwen/jisuanjikexuelunwen/53302.html

