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

正文內(nèi)容

編譯原理課程設(shè)計(jì)---編譯代碼生成器設(shè)計(jì)-在線瀏覽

2025-03-02 17:27本頁面
  

【正文】 圖二 if語句的四元式生成 圖三 循環(huán)語句四元式生成(5)匯編生成if(strcmp(fourCom[i].opera,=)==0) {printf(Move AX,%1s\n,fourCom[i].arg1)。}if(strcmp(fourCom[i].opera,+)==0) { printf(Mov AX,%1s\n,fourCom[i].arg1)。printf(Mov %1s,Ax\n,fourCom[i].result)。 printf(SUB Ax,%1s\n,fourCom[i].arg2)。}if(strcmp(fourCom[i].opera,*)==0) {printf(Mov AL,%1s\n,fourCom[i].arg1)。 printf(Mov %1s,Ax\n,fourCom[i].result)。 printf(DIv %1s\n,fourCom[i].arg2)。}if(strcmp(fourCom[i].opera,goto)==0) { printf(jmp L%1s\n,i)。通過該課程設(shè)計(jì),收獲頗多。通過本試驗(yàn)的完成,更加加深了對詞法分析原理的理解。調(diào)用scaner函數(shù)讀下一個(gè)單詞符號224。結(jié)束。不是則“出錯(cuò)處理”,若是則“調(diào)用scaner函數(shù)”224?!芭袛嗍欠駷閑nd”224。“判斷syn=0amp。kk=0是否成立”成立則說明分析成功打印出來。   一、對實(shí)驗(yàn)原理有更深的理解  通過該課程設(shè)計(jì),掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程、構(gòu)造工具及其相關(guān)的技術(shù)對課本上的知識有了更深的理解,課本上的知識師機(jī)械的,表面的?! 《?、對該理論在實(shí)踐中的應(yīng)用有深刻的理解  通過把該算法的內(nèi)容,算法的執(zhí)行順序在計(jì)算機(jī)上實(shí)現(xiàn),知道和理解了該理論在計(jì)算機(jī)中是怎樣執(zhí)行的,對該理論在實(shí)踐中的應(yīng)用有深刻的理解。把死板的課本知識變得生動(dòng)有趣,激發(fā)了學(xué)習(xí)的積極性。以前對與計(jì)算機(jī)操    在這次課程設(shè)計(jì)中,我就是按照實(shí)驗(yàn)指導(dǎo)的思想來完成?!?附錄程序清單includeincludeincludefstreamincludeiostreamusing namespace std。 //存儲(chǔ)輸入句子int temp1=0。 //判斷輸出信息int m2=0,sum2=0。A39。//用于存輸入表達(dá)式int tokene=0。int syn1,p1,m1,n1,sum1。int r1 。 //存放所有輸入字符 char token[8]。 //單個(gè)字符 int syn,p,m,n,i。 int count。 //是否帶正負(fù)號(0不帶,1負(fù)號,2正號)int isError。 //是否是小數(shù) double decimal。 //是否是指數(shù) int index。 //是否帶負(fù)號 double temp。int repeat。int kk。char *rwtab[9]={main,int,float,double,char,if,else,do,while}。 //字符串(字符數(shù)組) char arg1[10]。 char arg2[10]。 //結(jié)構(gòu)體數(shù)組cifafenxi()。zhongjiandaima()。void e()。void t()。void f()。 void staBlock(int *nChain)。 //語句串void sta(int *nChain)。 //賦值語句void tiaojian(int *nChain)。 //循環(huán)語句char* E()。 //Term項(xiàng)char* F()。 //自動(dòng)生成臨時(shí)變量void backpatch(int p,int t)。 //合并p1和p2void emit(char *res,char *num1,char *op,char *num2)。 //掃描void lrparser(){int nChain。 nextq=1。 if(syn==26) //( {scanner()。 staBlock(amp。 } else printf(缺少右括號\n)。} else printf(缺少main\n)。{39。}39。staString(nChain)。if(syn==29) //} scanner()。 } else printf(缺少{號\n)。語句}。backpatch(*nChain,nextq)。{scanner()。 } //backpatch(*nChain,nextq1)。 //*nChain=0。 } else if(syn==8) //do xunhuan()。 int nChainTemp。 //strcpy(num1,E())。 strcpy(num1,E())。amp。 break。 break。 break。 break。 break。 break。 }} scanner()。 strcat(num1,op)。 //nfc=nextq+1。 //記住if語句位置 emit(0,if,num1,goto)。 //if中表達(dá)式為假 emit(0,goto)。 //ntc鏈接的所有四元式都回填nextq } if(syn==27) //) scanner()。nChainTemp)。 }}//循環(huán)語句::=do 語句塊while 條件void xunhuan(){char res[10],num1[10],num2[10],op[10]。 if(syn==8) //do {nnc=nextq。 scanner()。nChainTemp)。 if(syn==26) //( {scanner()。 if((syn=37)amp。(syn=32)) {switch(syn) {case 32: strcpy(op,)。 case 33: strcpy(op,=)。 case 34: strcpy(op,)。 case 35: strcpy(op,=)。 case 36: strcpy(op,==)。 case 37: strcpy(op,!=)。 default: printf(error)。 strcpy(num2,E())。 strcat(num1,num2)。 emit(0,if,num1,goto)。 nna=nextq。 backpatch(nna,nextq)。 }}}void fuzhi() //賦值語句只有1個(gè)操作數(shù){char res[10],num[10]。 //結(jié)果 scanner()。 strcpy(num,E())。 } else {printf(缺少=號\n)。 res=(char *)malloc(10)。 op=(char *)malloc(10)。 strcpy(num1,T())。 else strcpy(op,)。 strcpy(num2,T())。 emit(res,num1,op,num2)。 } return num1。res=(char *)malloc(10)。op=(char *)malloc(10)。strcpy(num1,F())。 else strcpy(op,/)。 strcpy(num2,F())。 emit(res,num1,op,num2)。 } return num1。res=(char *)malloc(10)。 scanner()。 //整數(shù)轉(zhuǎn)換為字符串 scanner()。 res=E()。 } else isError=1。 return res。 char varTemp[10]。 kk++。 strcpy(p+1,varTemp)。T39。}//將p所鏈接的每個(gè)四元式的第四個(gè)分量都回填tvoid backpatch(int p,int t) {int w,circle=p。 //四元式circle第四分量內(nèi)容 //strcpy(fourCom[circle].result,t)。 circle=w。}int merge(int p1,int p2) //合并p1和p2{char circle,nResult。 else {nResult=circle=p2。 //strcpy(fourCom[circle].result,p1)。 }//目的是用p1的值覆蓋0 } return nResult。strcpy(fourCom[nextq].arg1,num1)。strcpy(fourCom[nextq].arg2,num2)。}void scanner() { sum=0。 m=0。n8。 ch=prog[p++]。 39。\n39。 if(((ch=39。)amp。(ch=39。))||((ch=39。)amp。(ch=39。))) //ch是字母字符 { while(((ch=39。)amp。(ch=39。))||((ch=39。)amp。(ch=39。))||((ch=39。)amp。(ch=39。))) { token[m++]=ch。 //讀下一個(gè)字符 } token[m++]=39。 p。 //標(biāo)識符 //如果是begin,if,then,while,do,end標(biāo)識符中的一個(gè) for(n=0。n++) if(strcmp(token,rwtab[n])==0) { syn=n+1。 } } else if((ch=39。)amp。(ch=39。)) { IsNum: if(isSignal==1) { //token[m++]=39。 } while((ch=39。)amp。(ch=39。)) { sum=sum*10+ch39。 //ch中數(shù)字本身是當(dāng)做字符存放的 ch=prog[p++]。.39。 ch=prog[p++]。 //之前忘了清零,+兩個(gè)浮點(diǎn)數(shù)就無法識別 while((ch=39。)amp。(ch=39。)) { //pow(x,y)計(jì)算x的y次冪 temp=(ch39。)*pow(,++count)。 //AddToDec()。 } sum=sum+decimal。e39。E39。 ch=prog[p++]。39。 ch=prog[p++]。039。amp。939。039。 } //10的冪 //123e3代表123*10(3) //sum=sum*pow(10,index)。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1