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

正文內(nèi)容

編譯原理課程設(shè)計(jì)-在線瀏覽

2025-03-06 01:33本頁面
  

【正文】 y(fourCom[q].result,res)。 strcpy(fourCom[q].opera,op)。 q++。 //字符串(字符數(shù)組) char arg1[10]。 //運(yùn)算符 char arg2[10]。 //結(jié)構(gòu)體數(shù)組3. char *newTemp()該函數(shù)的功能是會(huì)動(dòng)一個(gè)新的臨時(shí)變量,臨時(shí)變量名產(chǎn)生的順序是T1,T2,T3,….char *newTemp(){ char *p。 p=(char *)malloc(10)。 itoa(kk,varTemp,10)。 p[0]=39。 //字符串前加T,便于識(shí)別 return p。int merge(int p1,int p2) //合并p1和p2{ char circle,nResult。 else { nResult=circle=p2。 //strcpy(fourCom[circle].result,p1)。 } //目的是用p1的值覆蓋0 } return nResult。void backpatch(int p,int t) { int w,circle=p。 //四元式circle第四分量內(nèi)容 //strcpy(fourCom[circle].result,t)。 circle=w。}6. void fuzhi()該函數(shù)的功能是對賦值語句進(jìn)行分析。 //num操作數(shù) if(syn==10) //字符串 { strcpy(res,token)。 if(syn==21) //= { scanner()。 emit(res,num,=,)。 } }}7. void tiaojian(int *nChain)該函數(shù)的功能是對條件語句進(jìn)行分析。 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)。 }}8. void xunhuan()該函數(shù)的功能是對循環(huán)語句進(jìn)行分析。 int nChainTemp。 //記住if語句位置,emit之后nextq就變了 //emit(0,if,num1,goto)。 staBlock(amp。 //語句塊 if(syn==9) //while { scanner()。 strcpy(num1,E())。amp。 break。 break。 break。 break。 break。 break。 } } scanner()。 strcat(num1,op)。 nnb=nextq。 backpatch(nnb,nnc)。 emit(0,goto)。 } if(syn==27) //) scanner()?;剀嚭?,程序顯示運(yùn)行結(jié)果。雖然之前實(shí)驗(yàn)時(shí)候,詞法分析程序和語法分析程序的代碼都是自己一個(gè)一個(gè)敲的。課設(shè)的要求呢?要加上語義分析,而且要輸出四元式。運(yùn)動(dòng)會(huì)3天假,時(shí)間全用來啃課本了。3天時(shí)間,終于可以寫出語義程序了。采用遞歸下降的語法制導(dǎo)翻譯法,實(shí)現(xiàn)了對賦值表達(dá)式的語義分析,并生成四元式。程序語句有3種:賦值語句,條件語句,循環(huán)語句。對于賦值語句的翻譯,課本上有詳細(xì)的講解,有代碼的簡單舉例。特別是其中鏈nChain的概念,一直看不懂。再后來利用上機(jī)的時(shí)間,請教了一下老師和另外一個(gè)同學(xué),發(fā)現(xiàn)課本后給的樣例程序是錯(cuò)的,而且錯(cuò)得一塌糊涂。然后就是課設(shè)的第2個(gè)里程碑。接下來又是開發(fā)停滯的一段時(shí)間,直到11月18日。迎來了課設(shè)的第3個(gè)里程碑。而且好像沒有預(yù)期中困難,可能是有條件語句的鋪墊吧。而且由于老師給的語法中沒有布爾表達(dá)式,所以很多merge的工作也可以省略了,嘿嘿。個(gè)人認(rèn)為這次課設(shè)的機(jī)會(huì)非常寶貴,加深了我對編譯器處理語言的過程的理解。一門高級(jí)語言其實(shí)學(xué)起來是很容易的,而在校期間,這些計(jì)算機(jī)基礎(chǔ)課程一定要學(xué)好!才能為將來打好基礎(chǔ)。 //存放所有輸入字符 char token[8]。 //單個(gè)字符 int syn,p,m,n,i。 int count。 //是否帶正負(fù)號(hào)(0不帶,1負(fù)號(hào),2正號(hào))int isError。 //是否是小數(shù) double decimal。 //是否是指數(shù) int index。 //是否帶負(fù)號(hào) 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ù)組void scanner()。 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)。 count=0。 index=0。 kk=0。 do{ ch=getchar()。 }while(ch!=39。)。 isError=0。 lrparser()。inextq。 printf((%5s %5s %5s \t%5s )\n,fourCom[i].arg1,fourCom[i].opera,fourCom[i].arg2,fourCom[i].result)。 nfc=ntc=1。 if(syn==1) //main { scanner()。 if(syn==27) //) { scanner()。nChain)。 } else printf(缺少左括號(hào)\n)。}//語句塊 ::= 39。語句串39。void staBlock(int *nChain) //語句塊{ if(syn==28) //{ { scanner()。 //backpatch(*nChain,nextq)。 //讀下一個(gè) else printf(缺少}號(hào)\n)。}//語句串::=語句{。void staString(int *nChain) //語句串{ sta(nChain)。 while(syn==31) //。 sta(nChain)。}void sta(int *nChain) //語句{ if(syn==10) { fuzhi()。 } else if(syn==6) //if { tiaojian(nChain)。}//條件語句if(條件)語句塊void tiaojian(int *nChain){ char res[10],num1[10],num2[10],op[10]。 //條件表達(dá)式關(guān)系運(yùn)算符表達(dá)式 if(syn==6) //if { scanner()。 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)。 ntc=nextq。 nfc=nextq。 //第一個(gè)0已回填 backpatch(ntc,nextq)。 staBlock(amp。 //語句塊 *nChain=merge(nChainTemp,nfc)。 int nChainTemp。 //記住if語句位置,emit之后nextq就變了 //emit(0,if,num1,goto)。 staBlock(amp。 //語句塊 if(syn==9) //while { scanner()。 strcpy(num1,E())。amp。 break。 break。 break。 break。
點(diǎn)擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1