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

正文內(nèi)容

編譯原理課程設(shè)計(jì)---編譯代碼生成器設(shè)計(jì)(編輯修改稿)

2025-02-09 17:27 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ak。 case 35: strcpy(op,=)。 break。 case 36: strcpy(op,==)。 break。 case 37: strcpy(op,!=)。 break。 default: printf(error)。 }} scanner()。 strcpy(num2,E())。 strcat(num1,op)。 strcat(num1,num2)。 //nfc=nextq+1。 ntc=nextq。 //記住if語(yǔ)句位置 emit(0,if,num1,goto)。 nfc=nextq。 //if中表達(dá)式為假 emit(0,goto)。 //第一個(gè)0已回填 backpatch(ntc,nextq)。 //ntc鏈接的所有四元式都回填nextq } if(syn==27) //) scanner()。 staBlock(amp。nChainTemp)。 //語(yǔ)句塊 *nChain=merge(nChainTemp,nfc)。 }}//循環(huán)語(yǔ)句::=do 語(yǔ)句塊while 條件void xunhuan(){char res[10],num1[10],num2[10],op[10]。 int nChainTemp。 if(syn==8) //do {nnc=nextq。 //記住if語(yǔ)句位置,emit之后nextq就變了 //emit(0,if,num1,goto)。 scanner()。 staBlock(amp。nChainTemp)。 //語(yǔ)句塊 if(syn==9) //while {scanner()。 if(syn==26) //( {scanner()。 strcpy(num1,E())。 if((syn=37)amp。amp。(syn=32)) {switch(syn) {case 32: strcpy(op,)。 break。 case 33: strcpy(op,=)。 break。 case 34: strcpy(op,)。 break。 case 35: strcpy(op,=)。 break。 case 36: strcpy(op,==)。 break。 case 37: strcpy(op,!=)。 break。 default: printf(error)。 } } scanner()。 strcpy(num2,E())。 strcat(num1,op)。 strcat(num1,num2)。 nnb=nextq。 emit(0,if,num1,goto)。 backpatch(nnb,nnc)。 nna=nextq。 emit(0,goto)。 backpatch(nna,nextq)。 } if(syn==27) //) scanner()。 }}}void fuzhi() //賦值語(yǔ)句只有1個(gè)操作數(shù){char res[10],num[10]。 //num操作數(shù) if(syn==10) //字符串 {strcpy(res,token)。 //結(jié)果 scanner()。 if(syn==21) //= {scanner()。 strcpy(num,E())。 emit(res,num,=,)。 } else {printf(缺少=號(hào)\n)。 }}}char* E() //Expression表達(dá)式{char *res,*num1,*op,*num2。 res=(char *)malloc(10)。 num1=(char *)malloc(10)。 op=(char *)malloc(10)。 num2=(char *)malloc(10)。 strcpy(num1,T())。 while((syn==22)||(syn==23)) //+ {if(syn==22) //+ strcpy(op,+)。 else strcpy(op,)。 scanner()。 strcpy(num2,T())。 strcpy(res,newTemp())。 emit(res,num1,op,num2)。 strcpy(num1,res)。 } return num1。}char* T() //Term項(xiàng){char *res,*num1,*op,*num2。res=(char *)malloc(10)。num1=(char *)malloc(10)。op=(char *)malloc(10)。num2=(char *)malloc(10)。strcpy(num1,F())。while((syn==24)||(syn==25)) //* / {if(syn==24) strcpy(op,*)。 else strcpy(op,/)。 scanner()。 strcpy(num2,F())。 strcpy(res,newTemp())。 emit(res,num1,op,num2)。 strcpy(num1,res)。 } return num1。}char* F() //Factor因子{char *res。res=(char *)malloc(10)。if(syn==10) //字符串{strcpy(res,token)。 scanner()。 } else if(syn==20) //二進(jìn)制數(shù) {itoa((int)sum,res,10)。 //整數(shù)轉(zhuǎn)換為字符串 scanner()。 } else if(syn==26) //( {scanner()。 res=E()。 if(syn==27) //) {scanner()。 } else isError=1。 } else isError=1。 return res。}char *newTemp(){char *p。 char varTemp[10]。 p=(char *)malloc(10)。 kk++。 itoa(kk,varTemp,10)。 strcpy(p+1,varTemp)。 p[0]=39。T39。 return p。}//將p所鏈接的每個(gè)四元式的第四個(gè)分量都回填tvoid backpatch(int p,int t) {int w,circle=p。 while(circle) //circle不為0的時(shí)候 {w=atoi(fourCom[circle].result)。 //四元式circle第四分量?jī)?nèi)容 //strcpy(fourCom[circle].result,t)。 //把t填進(jìn)四元式circle的第四分量 sprintf(fourCom[circle].result,%d,t)。 circle=w。 //w記錄的是鏈條上下一個(gè)四元式,移動(dòng)! } return。}int merge(int p1,int p2) //合并p1和p2{char circle,nResult。 if(p2==0) nResult=p1。 else {nResult=circle=p2。 while(atoi(fourCom[circle].result)) //四元式第四個(gè)分量不為0 {circle=atoi(fourCom[circle].result)。 //strcpy(fourCom[circle].result,p1)。 sprintf(fourCom[circle].result,%s,p1)。 }//目的是用p1的值覆蓋0 } return nResult。 //p2是頭,p1覆蓋0,接在p2后邊}void emit(char *res,char *num1,char *op,char *num2){strcpy(fourCom[nextq].result,res)。strcpy(fourCom[nextq].arg1,num1)。strcpy(fourCom[nextq].opera,op)。strcpy(fourCom[nextq].arg2,num2)。nextq++。}void scanner() { sum=0。 decimal=0。 m=0。 for(n=0。n8。n++) token[n]=NULL。 ch=prog[p++]。 //從prog中讀出一個(gè)字符到ch中 while(ch==39。 39。||ch==39。\n39。) //跳過(guò)空字符(無(wú)效輸入) ch=prog[p++]。 if(((ch=39。a39。)amp。amp。(ch=39。z39。))||((ch=39。A39。)amp。amp。(ch=39。Z39。))) //ch是字母字符 { while(((ch=39。a39。)amp。amp。(ch=39。z39。))||((ch=39。A39。)amp。amp。(ch=39。Z39。))||((ch=39。039。)amp。amp。(ch=39。939。))) { token[m++]=ch。 //ch=token ch=prog[p++]。 //讀下一個(gè)字符 } token[m++]=39。\039。 p。 //回退一格 syn=10。 //標(biāo)識(shí)符 //如果是begin,if,then,while,do,end標(biāo)識(shí)符中的一個(gè) for(n=0。n9。n++) if(strcmp(token,rwtab[n])==0) { syn=n+1。 break。 } } else if((ch=39。039。)amp。amp。(ch=39。939。)) { IsNum: if(isSignal==1) { //token[m++]=39。39。 } while((ch=39。039。)amp。amp。(ch=39。939。)) { sum=sum*10+ch39。039。 //ch中數(shù)字本身是當(dāng)做字符存放的 ch=prog[p++]。 } if(ch==39。.39。) { isDecimal=1。 ch=prog[p++]。 count=0。 //之前忘了清零,+兩個(gè)浮點(diǎn)數(shù)就無(wú)法識(shí)別 while((ch=39。039。)amp。amp。(ch=39。939。)) { //pow(x,y)計(jì)算x的y次冪 temp=(ch39。039。)*pow(,++count)。 decimal=decimal+temp。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1