freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理課程設(shè)計(jì)要求(參考版)

2024-11-14 22:27本頁(yè)面
  

【正文】 。在課程設(shè)計(jì)結(jié)束時(shí)上機(jī)運(yùn)行,展示運(yùn)行效果。參考資料《程序設(shè)計(jì)語(yǔ)言編譯原理》,陳火旺編著,國(guó)防工業(yè)出版社《編譯原理》,呂映芝、張素琴、蔣維杜編著,清華大學(xué)出版社《編譯原理》,Alfred ,李建中譯,機(jī)械工業(yè)出版社考察方式最終完成一個(gè)完整的編譯程序。樣本語(yǔ)言樣本語(yǔ)言為C語(yǔ)言(見(jiàn)附錄),其中基本的語(yǔ)句要求必須實(shí)現(xiàn),其余部分可根據(jù)自己的實(shí)際情況選擇實(shí)現(xiàn)。要求實(shí)現(xiàn)while循環(huán)和for循環(huán)語(yǔ)句的優(yōu)化。設(shè)計(jì)構(gòu)造基本塊的DAG圖的算法,以及將DAG圖還原實(shí)現(xiàn)基本塊的優(yōu)化的算法。出錯(cuò)處理應(yīng)設(shè)計(jì)成一個(gè)出錯(cuò)處理子程序。(3)語(yǔ)法分析與中間代碼產(chǎn)生器要求用預(yù)測(cè)分析法、遞歸下降分析法、算符優(yōu)先分析法、SLR分析法(幾種方法任選),實(shí)現(xiàn)對(duì)表達(dá)式、各種說(shuō)明語(yǔ)句、控制語(yǔ)句進(jìn)行語(yǔ)法分析。功能包括:。(2)設(shè)計(jì)詞法分析器設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼。要考慮能夠存儲(chǔ)有關(guān)名字的信息,并可以高效地完成如下操作::根據(jù)給定的名字,在符號(hào)表中查找其信息。要求用C或C++語(yǔ)言描述及上機(jī)調(diào)試,實(shí)現(xiàn)一個(gè)小編譯器(詞法分析,語(yǔ)法分析,中間代碼產(chǎn)生,優(yōu)化,目標(biāo)代碼生成等重要子程序,其中詞法分析、語(yǔ)法分析及語(yǔ)義分析功能必須完成),使學(xué)生將理論與實(shí)際應(yīng)用結(jié)合起來(lái),受到軟件設(shè)計(jì)等開(kāi)發(fā)過(guò)程的全面訓(xùn)練,從而提高學(xué)生軟件開(kāi)發(fā)的能力。第五篇:編譯原理課程設(shè)計(jì)設(shè)計(jì)任務(wù)書(shū)編譯原理課程設(shè)計(jì)任務(wù)書(shū)目的學(xué)生在學(xué)習(xí)《程序設(shè)計(jì)語(yǔ)言編譯原理》課程過(guò)程中,結(jié)合各章節(jié)的構(gòu)造編譯程序的基本理論,總共用10個(gè)課時(shí)完成課程設(shè)計(jì)。通過(guò)本次的課設(shè)我知道了一個(gè)算法的設(shè)計(jì)是需要靜下心來(lái)仔細(xì)的研究的,且實(shí)現(xiàn)中必須先了解程序的整個(gè)流程,也就是說(shuō)在編程中首先必須看懂那些對(duì)應(yīng)的UML圖,只有在圖的指導(dǎo)下,編程中才不會(huì)盲目,也有一定的方向性。在實(shí)現(xiàn)此程序中,由于要實(shí)現(xiàn)關(guān)鍵字和符號(hào)表中字段的搜索,實(shí)現(xiàn)中就必須注意快速查找的方法,而在實(shí)現(xiàn)的過(guò)程中多次用到了二分搜索的方法,這是個(gè)比較快的搜索方法。// 對(duì)目標(biāo)代碼的解釋執(zhí)行程序} 實(shí)驗(yàn)運(yùn)行結(jié)果:運(yùn)行的的文件見(jiàn)下圖右側(cè):實(shí)驗(yàn)中我是固定了文件名的,可以是改寫(xiě)成動(dòng)態(tài)輸入,由于在測(cè)試中我把所有的測(cè)試語(yǔ)句都放在同一個(gè)文件中了,沒(méi)有太多的必要。// 分程序分析處理功能()。()。(CONSTSYM),(VARSYM),(PROCSYM)。symset fsys。ifprintf(fout,”%d %s %d %dn “,i,mnemonic[code[i].f],code[i].l,code[i].a)。} return b1。//find base l levels down while(l0){b1= s[b1]。cout// 通過(guò)靜態(tài)鏈求出數(shù)據(jù)區(qū)的基地址int PL0::base(int l,int b,int s[]){ int b1。break。case JPC:if(s[t] == 0)p= 。case JMP:p= 。case INT:t= t+。p=。s[t+3]= p。case CAL:// generate new block marks[t+1]= base(,b,s)。t= t1。break。case LOD:t= t+1。}。case 14: couts[t]。elses[t]=0。case 13: t= t1。elses[t]=0。case 12: t= t1。elses[t]=0。case 11: t= t1。elses[t]=0。case 10: t= t1。elses[t]=1。case 9: t= t1。elses[t]=0。case 8: t= t1。elses[t]=0。break。case 5: t= t1。s[t]= s[t]*s[t+1]。break。case 3: t= t1。s[t]= s[t]+s[t+1]。break。break。p= s[t+3]。break。if(err10){coutcoutt= t+1。break。break。break。break。break。break。expression(fsys,tx,lev)。else{relop= sym。} else {expression(tmp,tx,lev)。expression(fsys,tx,lev)。(EQL),(NEQ),(LSS),(LEQ),(GTR),(GEQ)。} }//factor end// 條件處理void PL0::condition(symset fsys,int tx,int lev){ symbol relop。elseerror(22)。expression(tmp,tx,lev)。symset tmp=fsys。getsym()。num= 0。}getsym()。case PROCEDURE:error(21)。case VARIABLE:gen(LOD,levtable[i].,table[i].)。elseswitch(table[i].kind){case CONSTANT:gen(LIT,0,table[i].)。while((sym)!=()){if(sym ==IDENT){i= position(id,tx)。} }// term end// 因子處理void PL0:: factor(symset fsys,int tx,int lev){ int i。if(mulop ==TIMES)gen(OPR,0,4)。getsym()。amp。factor(tmp,tx,lev)。for(int t=TIMES。symbol mulop。elsegen(OPR,0,3)。term(tmp,tx,lev)。symaddop= sym。while(sym =PLUSamp。if(addop ==MINUS)gen(OPR,0,1)。getsym()。amp。t((symbol)t)。symset tmp=fsys。test(fsys,setT,19)。}elseerror(34)。condition(fsys,tx,lev)。statement(temp1,tx,lev)。while((sym)!= ()){if(sym == SEMICOLON)getsym()。temp2 = statbegsys。getsym()。temp1= fsys,(SEMICOLON),(UNTILSYM)。code[cx2].a= cx。statement(fsys,tx,lev)。if(sym ==DOSYM)getsym()。cx2= cx。(DOSYM)。// 記下當(dāng)前代碼分配位置,這是while循環(huán)的開(kāi)始位置getsym()。else if(!sourceEnd)error(17)。statement(tmp,tx,lev)。if(sourceEnd)return。for(i=SEMICOLON。}elseerror(10)。else if(sym=PERIOD){error(26)。while((sym)!=()){if(sourceEnd)return。tmp=statbegsys。i((symbol)i)。symset tmp=fsys。code[cx2].a=cx。code[cx1].a=cx。cx2=cx。code[cx1].a= cx。statement(tmp,tx,lev)。gen(JPC,0,0)。elseerror(16)。condition(tmp,tx,lev)。for(int i = THENSYM。} } else if(sym ==IFSYM){ getsym()。elseerror(15)。if(i == 0)error(11)。if(sym!=IDENT)error(14)。} gen(OPR,0,15)。if(sym!=RPAREN)error(33)。gen(OPR,0,14)。t((symbol)t)。symset tmp=fsys。} else if(sym == WRITESYM){ getsym()。while((sym)!=())getsym()。}while(sym == COMMA)。gen(STO,levtable[i].,table[i].)。if(i==0)error(35)。if(sym==IDENT)i=position(id,tx)。if(sym!=LPAREN)error(34)。if(i!= 0)gen(STO,levtable[i].,table[i].)。expression(fsys,tx,lev)。if(sym ==BECOMES)getsym()。i= 0。if(i == 0)error(11)。int i,cx1,cx2。if(listswitch)for(i= cx0。getsym()。} if(sym!= RPAREN)} error(32)。if(sym == NUMBER || sym == CONSTSYM){downscript = num。} if(sym == COMMA)getsym()。getsym()。getsym()。tx,intamp。} elseerror(4)。dx,int lev){ if(sym == IDENT){enter(VARIABLE,tx,dx,lev)。}// constdeclaration end// 變量說(shuō)明處理void PL0::vardeclaration(intamp。}elseerror(3)。getsym()。getsym()。amp。dx,int lev){ if(sym == IDENT){getsym()。}//position end// 常量定義處理void PL0::constdeclaration(intamp。while(strcmp(table[i].name,id)!=0)i。strcpy(table[0].name, id)。break。break。break。table[tx].=dx。break。num=0。table[tx].kind=k。dx,int lev){ tx= tx+1。}// block end// 登入名字表void PL0::enter(obj0 k,int amp。test(fsys,s2,8)。gen(OPR,0,0)。i ((symbol)i)。symset tmp=statbegsys。cx0= cx。table[tx0].= cx。}while((sym)!=())。(IDENT)。}elseerror(5)。i((symbol)i)。symset tmp = statbegsys。block(lev+1,tx,tmp)。symset tmp = fsys。if(sym ==SEMICOLON)getsym()。getsym()。} while(sym ==PROCSYM)// 處理過(guò)程的聲明 { getsym()。elseerror(5)。vardeclaration(tx,dx,lev)。do{vardeclaration(tx,dx,lev)。}while(sym==IDENT)。} if(sym ==SEMICOLON)getsym()。while(sym == COMMA){}getsym()。do{if(sym == CONSTSYM)// 處理常量聲明{getsym()。gen(JMP,0,0)。// 變量的個(gè)數(shù) tx0= tx。// initial table index int cx0。int dx。//s1=s1+s2while((sym)==())getsym()。it!=()。symset::iterator it。}//gen end// 測(cè)試當(dāng)前單詞符號(hào)是否合法void PL0::test(symset s1,symset s2,int n){ if(sourceEnd)return。code[cx].a= z。}code[cx].f= x。cc= cc+1。if(line[ll1]==10)ll。codeNo++。}cc= 0。sourceEnd=true。// 其它符號(hào)的賦值getch()。} elsesym= GTR。){sym= GEQ。if(ch == 39。// extra stuff added to support 39。} elsesym= NUL。){sym= BECOMES。if(ch == 39。:39。if(k nmax)error(30)。getch()。039。sym= NUMBER。} else if(isdigit(ch))// number { k= 0。}while(i j)sym= wsym[k]。if(strcmp(id, word[k])j= k1。j= norw。} strcpy(id,a)。kk= kk1。else { do{a[kk]= 39。}while(isalpha(ch)||isdigit(ch))。} getch()。
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1