版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
編譯原理課程實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)3:語(yǔ)義分析姓名趙璐媛院系軟件學(xué)院學(xué)號(hào)1143710516任課教師陳?ài)粗笇?dǎo)教師實(shí)驗(yàn)地點(diǎn)軟件學(xué)院三樓機(jī)房實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)課表現(xiàn)出勤、表現(xiàn)得分實(shí)驗(yàn)報(bào)告得分實(shí)驗(yàn)總分操作結(jié)果得分一、需求分析得分要求:闡述語(yǔ)義分析系統(tǒng)所要完成的功能。(1)能分析以下幾類(lèi)語(yǔ)句,并生成中間代碼(三地址指令和四元式形式): 聲明語(yǔ)句(包括變量聲明、數(shù)組聲明、記錄聲明和過(guò)程聲明) 表達(dá)式及賦值語(yǔ)句(包括數(shù)組元素的引用和賦值) 分支語(yǔ)句:if_then_else 循環(huán)語(yǔ)句:do_while 過(guò)程調(diào)用語(yǔ)句(2)具備語(yǔ)義錯(cuò)誤處理能力,包括變量或函數(shù)重復(fù)聲明、變量或函數(shù)引用前未聲明、運(yùn)算符和運(yùn)算分量之間的類(lèi)型不匹配(如整型變量與數(shù)組變量相加減)等錯(cuò)誤,能準(zhǔn)確給出錯(cuò)誤所在位置,并采用可行的錯(cuò)誤恢復(fù)策略。(3)系統(tǒng)的輸入形式:要求能夠通過(guò)文件導(dǎo)入測(cè)試用例。測(cè)試用例要涵蓋第(1)條中列出的各種類(lèi)型的語(yǔ)句,以及第(2)條中列出的各種類(lèi)型的錯(cuò)誤。(4)系統(tǒng)的輸出分為兩部分:一部分是打印輸出符號(hào)表。另一部分是打印輸出三地址指令和四元式序列(5)除此之外,可以實(shí)現(xiàn)一些額外功能,例如自動(dòng)類(lèi)型轉(zhuǎn)換,識(shí)別其它類(lèi)型語(yǔ)義錯(cuò)誤,如過(guò)程返回類(lèi)型與聲明類(lèi)型不匹配;過(guò)程調(diào)用時(shí)實(shí)參與形參數(shù)目或類(lèi)型不匹配;對(duì)非數(shù)組型變量使用數(shù)組訪問(wèn)操作符“[…]”;對(duì)普通變量使用過(guò)程調(diào)用操作符“call”;數(shù)組訪問(wèn)操作符“[…]”中出現(xiàn)非整數(shù)等。二、文法設(shè)計(jì)得分要求:給出如下語(yǔ)言成分所對(duì)應(yīng)的語(yǔ)義動(dòng)作聲明語(yǔ)句(包括變量聲明、數(shù)組聲明、記錄聲明和過(guò)程聲明)表達(dá)式及賦值語(yǔ)句(包括數(shù)組元素的引用和賦值)分支語(yǔ)句:if_then_else循環(huán)語(yǔ)句:do_while過(guò)程調(diào)用語(yǔ)句聲明語(yǔ)句:P→{offset=0}DD→Tid;{enter(id.lexeme,T.type,offset);offset=offset+T.width;}DD→εT→B{t=B.type;w=B.width;}C{T.type=C.type;T.width=C.width;}T→↑T1{T.type=pointer(T1.type);T.width=4;}B→int{B.type=int;B.width=4;}B→real{B.type=real;B.width=8;}C→ε{C.type=t;C.width=w;}C→[num]C1{C.type=array(num.val,C1.type);C.width=num.val*C1.width;}賦值語(yǔ)句:Sid=E;{p=lookup(id.lexeme);ifp==nilthenerror;gen(p‘=’E.addr);}EE1+E2{E.addr=newtemp();gen(E.addr‘=’E1.addr‘+’E2.addr);}EE1*E2{E.addr=newtemp();gen(E.addr‘=’E1.addr‘*’E2.addr);}EE1{E.addr=newtemp();gen(E.addr‘=’‘uminus’E1.addr);}E(E1){E.addr=E1.addr;}Eid{E.addr=lookup(id.lexeme);ifE.addr==nilthenerror;}Lid[E]{L.array=lookup(id.lexeme);ifL.array==nilthenerror; L.type=L.array.type.elem; L.offset=newtemp(); gen(L.offset‘=’E.addr‘*’L.type.width);} |L1[E]{L.array=L1.array; L.type=L1.type.elem; t=newtemp(); gen(t‘=’E.addr‘*’L.type.width); L.offset=newtemp(); gen(L.offset‘=’L1.offset‘+’t);}分支語(yǔ)句:Sif{B.true=newlabel();B.false=newlabel();}B then{label(B.true);S1.next=S.next;}S1{gen(‘goto’S.next)} else{label(B.false);S2.next=S.next;}S2Sif{B.true=newlabel();B.false=S.next;}B then{label(B.true);S1.next=S.next;}S1循環(huán)語(yǔ)句:Swhile{S.begin=newlabel(); label(S.begin); B.true=newlabel(); B.false=S.next;}B do{label(B.true);S1.next=S.begin;}S1 {gen(‘goto’S.begin);}布爾值:B→E1relopE2{gen('if'E1.addrrelopE2.addr'goto'B.true);gen('goto'B.false);}B→true{gen('goto'B.true);}B→false{gen('goto'B.false);}B→({B1.true=B.true;B1.false=B.false;}B1)B→not{B1.true=B.false;B1.false=B.true;}B1B→{B1.true=B.true;B1.false=newlabel();}B1 or{label(B1.false);B2.true=B.true;B2.false=B.false;}B2B→{B1.true=newlabel();B1.false=B.false;}B1 and{label(B1.true);B2.true=B.true;B2.false=B.false;}B2過(guò)程調(diào)用:S→callid(Elist) { n=0; forq中的每個(gè)tdo { gen(‘param’t); n=n+1; } gen(‘call’id.addr‘,’n); }Elist→E { 將q初始化為只包含E.addr; }Elist→Elist1,E { 將E.addr添加到q的隊(duì)尾; }三、系統(tǒng)設(shè)計(jì)得分要求:分為系統(tǒng)概要設(shè)計(jì)和系統(tǒng)詳細(xì)設(shè)計(jì)。(1)系統(tǒng)概要設(shè)計(jì):給出必要的系統(tǒng)宏觀層面設(shè)計(jì)圖,如系統(tǒng)框架圖、數(shù)據(jù)流圖、功能模塊結(jié)構(gòu)圖等以及相應(yīng)的文字說(shuō)明。(2)系統(tǒng)詳細(xì)設(shè)計(jì):對(duì)如下工作進(jìn)行展開(kāi)描述核心數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)主要功能函數(shù)說(shuō)明程序核心部分的程序流程圖系統(tǒng)概要設(shè)計(jì)系統(tǒng)設(shè)計(jì)類(lèi)圖如下,建議放大查看。系統(tǒng)詳細(xì)設(shè)計(jì)語(yǔ)義分析部分關(guān)鍵類(lèi)為IntermediateCode類(lèi),主要功能為對(duì)聲明語(yǔ)句進(jìn)行分析并生成符號(hào)表,對(duì)調(diào)用語(yǔ)句進(jìn)行分析,生成三地址碼和四元式。符號(hào)表:makeD、makePlist、makeT、makeC等方法分別對(duì)以語(yǔ)法變量D/D’,Plist/Plist’,T,C為根的語(yǔ)法子樹(shù)進(jìn)行語(yǔ)義分析,生成符號(hào)表,同時(shí)處理函數(shù)、記錄、變量、數(shù)組等重復(fù)聲明的錯(cuò)誤。符號(hào)表格式及內(nèi)容見(jiàn)第四部分(3)。三地址碼和四元式:makeS、makeElist、makeL、makeL_、makeE、makeE_、makeF、makeF_、makeG、makeB、makeB_等方法分別對(duì)以語(yǔ)法變量S/S’,Elist/Elist’,L,L’,E,E’,F(xiàn),F(xiàn)’,G,B,B’為根的語(yǔ)法子樹(shù)進(jìn)行語(yǔ)義分析,生成三地址碼和四元式,并在需要時(shí)進(jìn)行回填,同時(shí)處理函數(shù)、記錄、變量、數(shù)組等未聲明或類(lèi)型不相符的錯(cuò)誤,并且實(shí)現(xiàn)了變量類(lèi)型自動(dòng)轉(zhuǎn)換的功能。四、系統(tǒng)實(shí)現(xiàn)及結(jié)果分析得分要求:對(duì)如下內(nèi)容展開(kāi)描述。系統(tǒng)實(shí)現(xiàn)過(guò)程中遇到的問(wèn)題;針對(duì)一測(cè)試程序輸出其語(yǔ)義分析結(jié)果;輸出針對(duì)此測(cè)試程序經(jīng)過(guò)語(yǔ)義分析后的符號(hào)表;輸出針對(duì)此測(cè)試程序?qū)?yīng)的語(yǔ)義錯(cuò)誤報(bào)告;對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。注:其中的測(cè)試樣例需先用已編寫(xiě)的詞法分析程序進(jìn)行處理。遇到的問(wèn)題:對(duì)于有嵌套的過(guò)程聲明,里層的函數(shù)應(yīng)該可以使用外層函數(shù)內(nèi)的值,而符號(hào)表只記錄了當(dāng)前函數(shù)內(nèi)的變量。解決辦法:對(duì)于有嵌套的函數(shù),里層的函數(shù)在parent字段記錄外層函數(shù)所對(duì)應(yīng)的符號(hào)表,查找變量時(shí)便可以對(duì)上層進(jìn)行查找。測(cè)試用例、符號(hào)表分析結(jié)果、錯(cuò)誤報(bào)告0: [+,k,j[0],t0] t0=k+j[0]1: [=,t0,-,k] k=t02: [=,1,-,k] k=13: [=,1,-,i] i=14: [*,100,i,t1] t1=100*i5: [=,t1,-,j] j=t16: [=,0,-,t2] t2=07: [*,t2,6,t3] t3=t2*68: [=,1,-,t5] t5=19: [*,t5,2,t6] t6=t5*210: [+,t4,t6,t7] t7=t4+t611: [=,100,-,k[t7]] k[t7]=10012: [j<,i,j,14] ifi<jgoto1413: [j,-,-,20] goto2014: [j>,i,0,16] ifi>0goto1615: [j,-,-,20] goto2016: [*,1,j,t9] t9=1*j17: [+,i,t9,t8] t8=i+t918: [=,t8,-,i] i=t819: [j,-,-,21] goto2120: [=,j,-,i] i=j21: [+,i,2,t10] t10=i+222: [=,t10,-,i] i=t1023: [+,j,1,t11] t11=j+124: [=,t11,-,j] j=t1125: [j<,i,j,21] ifi<jgoto2126: [j,-,-,27] goto2727: [param,1,-,-] param128: [call,error,1,-] callerror,1ErroratLine3:重復(fù)的變量聲明iErroratLine6:j不是變量類(lèi)型ErroratLine7:k不是數(shù)組類(lèi)型E
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 岳陽(yáng)職業(yè)技術(shù)學(xué)院《信息檢索實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年變更子女撫養(yǎng)權(quán)案件處理及協(xié)議模板
- 2025年度工作室員工勞動(dòng)合同(創(chuàng)意設(shè)計(jì)行業(yè)專(zhuān)用)2篇
- 2025年度國(guó)際專(zhuān)利商標(biāo)許可轉(zhuǎn)讓合同3篇
- 2025年度工作餐配送合同(含員工餐飲文化教育)3篇
- 2025年度二零二五年度員工宿舍租賃與管理綜合服務(wù)協(xié)議3篇
- 2025年度工人施工安全責(zé)任與職業(yè)健康風(fēng)險(xiǎn)評(píng)估協(xié)議3篇
- 2025年度寵物展會(huì)組織與參展合同3篇
- 2025年度城市軌道交通工程建設(shè)戰(zhàn)略合作框架協(xié)議
- 2025年度高新技術(shù)企業(yè)研發(fā)團(tuán)隊(duì)勞務(wù)合同模板詳盡版2篇
- 部隊(duì)物業(yè)服務(wù)投標(biāo)方案
- 銷(xiāo)售單 代合同范例
- 2024譯林版七年級(jí)英語(yǔ)上冊(cè)單詞(帶音標(biāo))
- 品管圈PDCA案例-普外科提高甲狀腺手術(shù)患者功能鍛煉合格率
- 2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè) 部編版期末測(cè)試卷(含答案)
- 2025年消防救援設(shè)施操作員職業(yè)技能資格知識(shí)考試題庫(kù)與答案
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- FANUC機(jī)器人培訓(xùn)教程(完成版)
- 220千伏線(xiàn)路工程內(nèi)懸浮抱桿分解組立鐵塔施工方案
- 2025年蛇年春聯(lián)帶橫批-蛇年對(duì)聯(lián)大全新春對(duì)聯(lián)集錦
評(píng)論
0/150
提交評(píng)論