構(gòu)造一個(gè)dfa_編譯程序?qū)儆谑裁窜浖㥮編譯程序構(gòu)造
本文關(guān)鍵詞:編譯程序構(gòu)造,由筆耕文化傳播整理發(fā)布。
1.題目:編譯程序構(gòu)造 2.內(nèi)容:涉及詞法分析、自下而上語法分析程序的實(shí)現(xiàn):SLR(1)分析器的實(shí)現(xiàn)以及生成中間代碼。 3.具體要求 根據(jù)LR分析算法構(gòu)造SLR(1)分析程序,并完成語法分析動(dòng)作(當(dāng)需要一個(gè)單詞時(shí),調(diào)用詞法分析程序獲。瑫r(shí)完成語義分析生成四元式輸出。要求程序具有通用性,改變文法時(shí)只需改變程序的數(shù)據(jù)初值,無需改變程序主體; (1)基本要求:完成1條說明語句、2條算數(shù)表達(dá)式和賦值語句的翻譯,生成中間代碼。 (2)高級(jí)要求:在完成基本要求的基礎(chǔ)上,實(shí)現(xiàn)if語句和布爾表達(dá)式的翻譯。if語句的文法和翻譯方案參見課本。 變量說明語句的文法及相應(yīng)的語義子程序:.att表示數(shù)據(jù)類型屬性,fill函數(shù)表示將單詞id及其類別屬性填寫符號(hào)表。 (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; } 算數(shù)表達(dá)式和賦值語句的文法及相應(yīng)的語義子程序。 (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(xiàn).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;} 構(gòu)造其用于SLR(1)分析的識(shí)別活前綴的DFA以及action表和goto表。然后編程實(shí)現(xiàn)。(關(guān)于詞法分析部分只需識(shí)別出與此文法相關(guān)的單詞即可(+,*,(,),id,=))。 4.程序設(shè)計(jì)提示: (1)分析棧設(shè)計(jì)時(shí)可以用一個(gè)棧完成,也可以設(shè)計(jì)三個(gè)棧:一個(gè)符號(hào)棧,一個(gè)狀態(tài)棧,一個(gè)語義棧,則歸約時(shí),則需要在符號(hào)棧中退掉n個(gè)符號(hào),在狀態(tài)棧中退掉n個(gè)符號(hào)(n為產(chǎn)生式符號(hào)個(gè)數(shù)),,語義棧中退掉n個(gè)符號(hào)對(duì)應(yīng)的語義; (2)終結(jié)符表和非終結(jié)符表的組織和預(yù)測(cè)分析程序中相同(將符號(hào)對(duì)應(yīng)到一個(gè)數(shù)字,表示在分析表中對(duì)應(yīng)的下標(biāo))。 (3)action表中的錯(cuò)誤處理:簡(jiǎn)化的錯(cuò)誤處理:當(dāng)查找action表出現(xiàn)空白時(shí),則當(dāng)前單詞無法移進(jìn)和規(guī)約,可簡(jiǎn)單的認(rèn)為當(dāng)前單詞為多余的單詞,則拋棄當(dāng)前單詞,讀下一單詞繼續(xù)分析。 5.測(cè)試數(shù)據(jù): 作為程序測(cè)試數(shù)據(jù),以賦值語句area=r*r+r$作為測(cè)試輸入(源程序)。程序要求輸出二元式序列、符號(hào)表、語法分析過程、四元式序列。 假設(shè)AA.TXT的文件內(nèi)容如下: int area,r; r=1; area=r*r+r; 程序運(yùn)行情況如下: 請(qǐng)輸入源文件名稱:E:\AA.TXT<回車> 語法分析過程如下: 狀態(tài)棧 符號(hào)棧 語義棧 動(dòng)作說明 源程序?qū)?yīng)的二元式如下: (int,-) (id,0) (,,-) (id,1) (;,-) (id,1) (=,) (num,0) (id,0) (=,) (id,1) (*,) (id,1) (+,) (id,1) (;,-) 符號(hào)表如下: Name type value addr 0 area int 1 r int 數(shù)字表如下 源程序?qū)?yīng)的四元式序列如下: (=,1, , r) (*,r,r,T1) (+,T1,r,T2) (=,T2,,area) 分析過程完成。 6.程序擴(kuò)展要求 有能力的同學(xué)可將編譯程序擴(kuò)展布爾表達(dá)式、if語句的分析和四元式生成,布爾表達(dá)式和if語句的翻譯參見教材。
本文關(guān)鍵詞:編譯程序構(gòu)造,由筆耕文化傳播整理發(fā)布。
本文編號(hào):53302
本文鏈接:http://sikaile.net/kejilunwen/jisuanjikexuelunwen/53302.html