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

正文內容

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

2025-02-09 17:27 本頁面
 

【文章內容簡介】 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語句位置 emit(0,if,num1,goto)。 nfc=nextq。 //if中表達式為假 emit(0,goto)。 //第一個0已回填 backpatch(ntc,nextq)。 //ntc鏈接的所有四元式都回填nextq } if(syn==27) //) scanner()。 staBlock(amp。nChainTemp)。 //語句塊 *nChain=merge(nChainTemp,nfc)。 }}//循環(huán)語句::=do 語句塊while 條件void xunhuan(){char res[10],num1[10],num2[10],op[10]。 int nChainTemp。 if(syn==8) //do {nnc=nextq。 //記住if語句位置,emit之后nextq就變了 //emit(0,if,num1,goto)。 scanner()。 staBlock(amp。nChainTemp)。 //語句塊 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() //賦值語句只有1個操作數(shù){char res[10],num[10]。 //num操作數(shù) if(syn==10) //字符串 {strcpy(res,token)。 //結果 scanner()。 if(syn==21) //= {scanner()。 strcpy(num,E())。 emit(res,num,=,)。 } else {printf(缺少=號\n)。 }}}char* E() //Expression表達式{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項{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) //二進制數(shù) {itoa((int)sum,res,10)。 //整數(shù)轉換為字符串 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所鏈接的每個四元式的第四個分量都回填tvoid backpatch(int p,int t) {int w,circle=p。 while(circle) //circle不為0的時候 {w=atoi(fourCom[circle].result)。 //四元式circle第四分量內容 //strcpy(fourCom[circle].result,t)。 //把t填進四元式circle的第四分量 sprintf(fourCom[circle].result,%d,t)。 circle=w。 //w記錄的是鏈條上下一個四元式,移動! } 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)) //四元式第四個分量不為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中讀出一個字符到ch中 while(ch==39。 39。||ch==39。\n39。) //跳過空字符(無效輸入) 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++]。 //讀下一個字符 } token[m++]=39。\039。 p。 //回退一格 syn=10。 //標識符 //如果是begin,if,then,while,do,end標識符中的一個 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ù)字本身是當做字符存放的 ch=prog[p++]。 } if(ch==39。.39。) { isDecimal=1。 ch=prog[p++]。 count=0。 //之前忘了清零,+兩個浮點數(shù)就無法識別 while((ch=39。039。)amp。amp。(ch=39。939。)) { //pow(x,y)計算x的y次冪 temp=(ch39。039。)*pow(,++count)。 decimal=decimal+temp。
點擊復制文檔內容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1