




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
編譯原理語義分析總結計劃實驗報告計劃編譯原理語義分析總結計劃實驗報告計劃19/19編譯原理語義分析總結計劃實驗報告計劃編譯原理綜合訓練語義分析實驗報告指導老師:班級:學生:zeadom學號:學生:學號:2011/6/29目錄語言文法的形式化描述錯誤!不決義書簽。語義規則錯誤!不決義書簽。運行環境介紹錯誤!不決義書簽。要點算法的流程圖及文字講解錯誤!不決義書簽。1、本編譯器的總框架錯誤!不決義書簽。2、在語義分析中的主要函數介紹錯誤!不決義書簽。3、產生布爾表達式錯誤!不決義書簽。4、While-do語句的語義分析錯誤!不決義書簽。5、詞法、語法和語義分析的連結錯誤!不決義書簽。測試報告錯誤!不決義書簽。附錄錯誤!不決義書簽。語言文法的形式化描述(BNF范式)程序開始P->programi;SDnSC;定義語句SDn->SDSDn|nullSD->varintiSDTSDT->null|,iSDT復合語句SC->beginSnendSn->S;Sn||null單個語句S->SD|SA|SIF|SW|SC賦值語句SA->i:=E算術表達式E->cET|iET|(E)ETET->AE|CE|DE|null;C->+|-|*|/;布爾表達式B->EAEBT|NOTB|(B)BTBT->DB|nullA->>|<|=|>=|<=|<>D->AND|ORif語句SIF->ifBthenSSELSESELSE->null|elseS2while語句SW->whileBdoS語義規則(屬性文法)產生式語義規則i:=E{Gen(:=,,—,entry(i))}EE1+E2{=Newtemp;Gen(+,,,)}EE1*E2{=Newtemp;Gen(*,,,)}E-E1{=Newtemp;Gen(@,,—,)}E(E1){=}Ei{=Entry(i)}產生式語義規則Ei{:=makelist(nextquad);:=makelist(nextquad+1);Gen(jnz,entry(i),—,0);Gen(j,—,—,0)}Ei1Ri2{:=makelist(nextquad);:=makelist(nextquad+1);Gen(jR,entry(i1),entry(i2),0);Gen(j,—,—,0)}E┐E1{:=;:=;}E(E1){:=;:=;}Mε{:=nextquad;}{backpatch,);EE1∧ME2:=;:=merge,E2.Falselist)}EE1∨ME2
{backpatch(E1.falselist,);:=merge(E1.truelist,E2.truelist);:=E2.Falselist}EE1∧ME2
{backpatch,:=;:=merge,
}
);產生式
語義
規則Sif
EthenM
S1
{backpatch,
);:=merge,
}Mε{:=nextquad;}Nε{:=makelist(nextquad);Gen(j,—,—,0)}SifEthenM1S1{backpatch,);NelseM2S2backpatch,);:=merge,,}SwhileM1E{backpatch,);Gen(j,—,—,);doM2S1backpatch,);:=}SbeginLend{:=}SA{:=makelist()/*空鏈*/}LS{:=}LL1;MS{backpatch,);:=}運行環境介紹運行環境是DEVC++Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。它會集了GCC、MinGW32等眾多自由軟件,并且可以獲取最新版本的各種工具支持,而這所有工作都是來自全球的狂熱者所做的工作,并且你擁有對這所有工具自由使用的權益,包括獲取源代碼等,前提是你也必定遵守GNU協議。Dev-C++每日都在進步著,因為它是一個自由軟件。Dev-C++是一個特別合用的編程軟件,多款著名軟件均由它編寫而成,它在C的基礎上,增強了邏輯性要點算法的流程圖及文字講解1、本編譯器的總框架2、在語義分析中的主要函數介紹Backpatch(intlist,intquad)代碼:voidbackpatch(intlist,intpatch){inttmp;while(list){tmp=list;list=RSS[tmp].jump;RSS[tmp].jump=patch;}}Merge(intlist1,intlist2)代碼:intmerge(intlist1,intlist2){inttmp=list2;if(list2==0)list2=list1;elsewhile(RSS[tmp].jump){tmp=RSS[tmp].jump;}RSS[tmp].jump=list1;returnlist2;}3、產生布爾表達式4、While-do語句的語義分析5、詞法、語法和語義分析的連結1、詞法分析是分析輸入代碼產生詞法三元式的程序。讀入代碼,并將代碼中的單詞分解成詞法三元式。2、語法分析讀入詞法三元式,并依照詞法三元式對句子進行語法分析。3、語義分析嵌入在語法分析中。依照語法分析中獲取的句子種類和語義四元式產生規則,產生四元式測試報告(測試用例,測試結果)測試用例輸入程序(文件):programexample;varintj,m,n;begin/*thereisacomment*/j:=6;m:=3;:"30","<=":"31",">=":"32","<>":"33"}defisLetter():globalchifch==None:returnFalseelse:return()defisDigit():globalchifch==None:returnFalseelse:return()defconcat():globalcodeglobalchcode=code+chdefgetchar(l,i):iflen(l)<=iori<0:returnNoneelse:returnl[i]defgetstr():globalcodeglobalkey_wordsgloballltype=0state=Nonestr="";ifcode==None:str=u"(0,"+code+",%d)"%llelifcodeinkey_words:if(key_words[code]==25):str="errorcodeinline%d\n"%llstr=str+"errorcode:"else:str=u"("+key_words[code]+u","+code+",%d)"%llelif():str="(16,"+code+",%d)"%llelse:str="(15,"+code+",%d)"%llreturnstr=0flag=[];if__name__=="__main__":src=r""outfile=r""ifnotprint"cannotopenfile",srcelse:inputf=open(src,"r")outputf=open(outfile,"w")annotation=0ll=0forlineininputf:ll=ll+1i=0l=len(line)whilei<l:ifi>=len(line):breakcode=""ch=getchar(line,i)i=i+1ifannotation==1:ifch=="*"andgetchar(line,i)!=Noneandgetchar(line,i)=='/':str="annotationendinline%d\n"%ll(str)annotation=0i=i+1continueifch=='/'andgetchar(line,i)!=Noneandgetchar(line,i)=='/':("lineannotationinline%d\n"%ll)i=i+1breakifch==None:breakelifch=="/"andgetchar(line,i)!=Noneandgetchar(line,i)=='*':str="annotationstartinline%d\n"%ll(str)i=i+1annotation=1elifch==""orch=="\n"orch=='\t':continueelifisLetter():whileisLetter()orisDigit():concat()ch=getchar(line,i)i=i+1i=i-1str=getstr()str=str+"\n"(str)continueelifisDigit():whileisDigit():concat()ch=getchar(line,i)i=i+1i=i-1str=getstr()str=str+"\n"(str)continueelifchinkey_words:concat()ch=getchar(line,i)i=i+1ifch!=Noneand(code+ch)inkey_words:concat()str=getstr()str=str+"\n"(str)else:i=i-1str=getstr()str=str+"\n"(str)else:str="errorinline%d\n"%ll(str)("errorcode"+ch+"\n");資源文件()#ifndefRESOURCE_H_ZEADOM#defineRESOURCE_H_ZEADOM#define$program1#define$begin2#define$end3#define$var4#define$integer5#define$if6#define$then7#define$else8#define$do9#define$while10#define$int11#define$and12#define$or13#define$not14#define$flag15#define$num16#define$add17#define$sub18#define$left19#define$right20#define$eq21#define$gt22#define$lt23#define$24#define$copy26#define$comma27#define$mul28#define$div29#define$point30#define$loe31#define$goe32#define$ne33#endif語義分析頭文件()#ifndefZEADOM_SEMANTIC_H#defineZEADOM_SEMANTIC_H#include"string"usingnamespacestd;#include"iostream"#include"fstream"#include"sstream"intquad,varT;intNextquad(){returnquad++;}stringNextT(){varT++;stringtemp="T";stringstreamss;ss<<varT;temp=temp+();returntemp;}voidsemantic_init(){varT=0;quad=100;}structsiyuanshi{stringop,par1,par2,result;boolhasop,haspar1,haspar2,hasresult;boolisjump;intjump;siyuanshi(){op=par1=par2=result="";hasop=haspar1=haspar2=hasresult=false;jump=0;isjump=false;}voidsetop(stringarg){op=arg;hasop=true;}voidsetpar1(stringarg){par1=arg;haspar1=true;}voidsetpar2(stringarg){par2=arg;haspar2=true;}voidsetresult(stringarg){result=arg;hasresult=true;}voidsetjump(intarg){jump=arg;isjump=true;}voidoutput(ofstream&s){s<<"("<<op<<",";if(haspar1)s<<par1<<",";elses<<"-"<<",";if(haspar2)s<<par2<<",";elses<<"-"<<",";if(isjump)s<<jump<<")"<<endl;elseif(hasresult)s<<result<<")"<<endl;elses<<"-"<<")"<<endl;}};siyuanshiRSS[10000];structEstruct{stringlexval;Estruct(){lexval="";}};structBstruct{inttruelist;intfalselist;Bstruct(){truelist=falselist=0;}};structMstruct{intquad;Mstruct(){quad=0;}};voidbackpatch(intlist,intpatch){inttmp;while(list){tmp=list;list=RSS[tmp].jump;RSS[tmp].jump=patch;}}intmerge(intlist1,intlist2){inttmp=list2;if(list2==0)list2=list1;elsewhile(RSS[tmp].jump){tmp=RSS[tmp].jump;}RSS[tmp].jump=list1;returnlist2;}voidsemantic_output(){ofstreamout("");for(inti=100;i<quad;i++){out<<i;RSS[i].output(out);}();}structSstruct{intnextlist;Sstruct(){nextlist=0;}};structNstruct{intnextlist;Nstruct(){nextlist=0;}};#endif語法和語義分析程序()*#include"iostream"usingnamespacestd;#include""#include"string"#include""#include""#include""#include""#definedeal(s)if(!(s)){returnfalse;}#definepdeal(s)if(!(s)){cout<<"沒有找到文件結尾(程序可否未完成)"<<endl;returnfalse;}etop(":=");RSS[quad].setpar1;RSS[quad].setresult(result);returntrue;}etop("j");RSS[].setjump(0);Mstructm2;=quad;Sstructss2;if(!SELSE(ss2))ret=false;deal;backpatch,;backpatch,;merge(merge,,;returnret;}}etop("j");RSS[swquad].setjump;backpatch,;backpatch,;;returnret;}etjump(0);RSS[quad].setpar1;RSS[quad].setpar2;RSS[quad].setop(op);quad=Nextquad();=quad;RSS[quad].setop("j");RSS[quad].setjump(0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 終止合同書協議書
- 作業之道模板
- 二零二五版店面轉讓協議書樣板
- 二零二五版執業藥師租賃合同書范例
- 二零二五版汽車運輸合同書標準文本
- 二零二五版電子商務公司股權分配協議書
- 二零二五股權轉讓回購協議范例
- 音樂時光穿梭
- 常用擔保貸款合同模板
- 二零二五志愿者兼職聘用合同書
- 《電力建設工程起重施工技術規范》
- 乳腺腺病超聲診斷
- 北師大版數學五年級(下冊)長方體(二) 練習四
- 電子商務的區塊鏈與加密貨幣
- DB35T 2082-2022 人民防空疏散基地建設基本要求
- 2023年中國少女發育內衣行業發展白皮書
- 再生鋁商業計劃書
- 江蘇省蘇州市2022-2023學年二年級下學期語文期中調研試卷(含答案)
- 邊緣人格障礙患者辯證行為治療的療效研究
- 化學期中成績分析
- 江蘇省期末試題匯編-04-認識圖形(二)(選擇題經典常考題)-小學一年級數學下冊(蘇教版)
評論
0/150
提交評論