




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)課題編譯器的實(shí)現(xiàn)實(shí)驗(yàn)類型:口綜合性口設(shè)計(jì)性應(yīng)用性)實(shí)驗(yàn)課程 編譯原理實(shí)驗(yàn)時(shí)間2018年12月19日學(xué)生姓名向錢龍專業(yè)班級(jí)網(wǎng)絡(luò) 200801學(xué)號(hào)_2目錄一、課設(shè)要求 2二、總體設(shè)計(jì)思想 3三、詳細(xì)算法設(shè)計(jì) 3四、流程框圖 4五、函數(shù)相關(guān)說明 81. 所有函數(shù)一覽 82. void emit(char *res,char *nu m1,char *op,char *nu m2>83. char *newTemp(> 94. int merge(i nt p1,i nt p2> 95. void backpatch(i nt p,i nt t> 106. void fuz
2、hi(> 107. void tiaojia n(i nt *n Cha in> 118. void xun hua n(> 12六、編譯器使用說明 14七、心得與體會(huì) 14課設(shè)要求用C語言對(duì)下述文法和單詞表定義的語言設(shè)計(jì)編制一個(gè)編譯器。<1)單詞符號(hào)及種別表單詞符號(hào)種別編州單詞值mai n1int213 / 12float3double4char5if6else7do8while9l(l|d>*10內(nèi)部字符串(+|-| £> d*(.dd* | £>( e ( +|-| £> dd*| £>20二進(jìn)
3、制數(shù)值表示=21+22-23*24/25(26>272829530o31>32> =33<34< =35=36!=37v 2)語法結(jié)構(gòu)定義程序 :=main( v 語句塊 語句塊 :='語句串 八' I I程序用括號(hào)括起來v語句串 :=語句。 語句。語句 := 賦值語句|條件語句|循環(huán)語句賦值語句:=ID= v表達(dá)式 賦值語句用"3號(hào)條件語句:=ifv條件v語句塊 條件怎么沒有括號(hào),冏 v自己加1個(gè))循環(huán)語句:=do語句塊while v條件條件 :=表達(dá)式 關(guān)系運(yùn)算符 v表達(dá)式 沒有布爾運(yùn)算,還算簡(jiǎn)單V表達(dá)式 :=V項(xiàng) + V項(xiàng)|-項(xiàng)項(xiàng):
4、:=V因子 *V因子|/ V因子因子 :=ID|num|(v 表達(dá)式 num:=( +卜| £數(shù)字*(.數(shù)字?jǐn)?shù)字* | S( e ( +|-| £數(shù)字?jǐn)?shù)字*| e ID:=字母(字母|d數(shù)字*字母:二a|b|c |z|A|B|C |Z數(shù)字:=0|1|2 |9關(guān)系運(yùn)算符 :=v|v =|=|=|!=總體設(shè)計(jì)思想采用遞歸下降 < 自上而下)的語法制導(dǎo)翻譯法3、 詳細(xì)算法設(shè)計(jì)在前兩次實(shí)驗(yàn)的基礎(chǔ)上改進(jìn)。詞法分析程序編譯器。不 語法分析程序語義分析程序斷完善,不斷改進(jìn)。漸變的過程。4、 流程框圖調(diào)用VIrparser+J1 !置初值1調(diào)用scanner讀下一個(gè)單詞符號(hào)心循環(huán)出四
5、元式fourComfip圖I主函數(shù)示意圖圖II遞歸下降分析程序示意圖圖III語句塊分析示意圖圖IV語句串分析示意圖是否為字符串?調(diào)用賦值語句分析函數(shù)f uz hi調(diào)用循環(huán)語句分析函數(shù)xu nhuan圖V語句分析示意圖5、 函數(shù)相關(guān)說明1. 所有函數(shù)一覽void scanner(> 。 掃描void lrparser(>。void staBlock(int *nChain> 。 語句塊 void staString(int *nChain> 。/語句串void sta(int *nChain> 。/ 語句 void fuzhi(>。 賦值語句void tiao
6、jian(int *nChain> 。 條件語句void xunhuan(> 。 循環(huán)語句char* E(>。/Expresiion 表達(dá)式char* T(> ° /Term 項(xiàng)char* F(>。/Factor 因子 char *newTemp(> 。自動(dòng)生成臨時(shí)變量void backpatch(int p,int t> 。 /回填int merge(int p1,int p2> 。合并 pl 和 p2void emit(char *res,char *num1,char *op,char *num2> 。 /生成四元式2. v
7、oid emit(char *res,char *num1,char*op,char*num2>該函數(shù)的功能是生成一個(gè)三地址語句送到四元式表中。 void emit(char *res,char*num1,char *op,char *num2> strcpy(fourComq.result,res> 。 strcpy(fourComq.arg1,num1> 。strcpy(fourComq.opera,op> 。strcpy(fourComq.arg2,num2> 。q+ 。 四元式表中的結(jié)構(gòu)如下:structchar result10 。 /字符串<
8、;字符數(shù)組)char arg110 。 /操作數(shù)1char opera10 。 /運(yùn)算符 char arg210 。 /操作數(shù)2fourCom20 。/結(jié)構(gòu)體數(shù)組3. char *newTemp(>該函數(shù)的功能是會(huì)動(dòng)一個(gè)新的臨時(shí)變量,臨時(shí)變量名產(chǎn)生的順序是char *newTemp(> char *p 。T1,T2,T3,char varTemp10 。 p=(char *>malloc(10> 。kk+ 。 itoa(kk,varTemp,10> 。 /整數(shù)轉(zhuǎn)換為字符串strcpy(p+1,varTemp> 。pO=T 。字符串前加T, 便于識(shí)別retur
9、n p 。 4. int merge(int p1,int p2>該函數(shù)的功能是將以 P1,P2 為鏈?zhǔn)椎膬蓷l鏈合并成一條鏈,返回時(shí)的函數(shù)值作為合并后 的鏈?zhǔn)住nt merge(int p1,int p2> / 合并 pl 和 p2 char circle,nResult 。if(p2=0>nResult=p1 。else nResult=circle=p2 。while(atoi(fourComcircle.result>> / 四元式第四個(gè)分量不為 0 circle=atoi(fourComcircle.result> 。 /strcpy(fourCo
10、mcircle.result,p1> 。 sprintf(fourComcircle.result,"%s",p1> 。 / 目的是用 pl 的值覆蓋 0 return nResult 。 p2 是頭, pl 覆蓋 0, 接在 p2 后邊 5. void backpatch(int p,int t>該函數(shù)的功能是把P 所鏈接的每個(gè)四元式的第四區(qū)段<result 段)都回填tovoid backpatch(int p,int t> int w,circle=p 。while(circle> /circle 不為 0 的時(shí)候 w=atoi(f
11、ourComcircle.result> 。 四元式 circle 第四分量?jī)?nèi)容 strcpy(fourComcircle.result,t> 。 /把 t 填進(jìn)四元式 circle 的第四分量 sprintf(fourComcircle.result,"%d",t> 。circle=w 。 w 記錄的是鏈條上下一個(gè)四元式,移動(dòng)!return 。 6. void fuzhi(>該函數(shù)的功能是對(duì)賦值語句進(jìn)行分析。void fuzhi(> / 賦值語句只有 1 個(gè)操作數(shù) char res10,num10。 /num 操作數(shù)if(syn=10>
12、 / 字符串 strcpy(res,token> 。 /結(jié)果 scanner(> 。if(syn=21> /= scanner(> 。strcpy(num,E(>> 。 emit(res,num,"=",""> 。else printf(" 缺少 =號(hào) n"> 。7. void tiaojian(int *nChain>該函數(shù)的功能是對(duì)條件語句進(jìn)行分析。/<條件語句 >->if(< 條件 >><語句塊 >void tiaojian(i
13、nt *nChain> char res10,num110,num210,op10。int nChainTemp 。/<條件 >->< 表達(dá)式 >< 關(guān)系運(yùn)算符 >< 表達(dá)式 > if(syn=6> /if scanner(> 。/strcpy(num1,E(>> 。if(syn=26> /( scanner(> 。 strcpy(num1,E(>> 。 if(syn<=37>&&(syn>=32>>switch(syn> case 3
14、2: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(&q
15、uot;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 中表達(dá)式為假emit("0","","","goto">。/第一個(gè)0 已回填19 /1
16、2backpatch(ntc,nextq>ntc 鏈接的所有四元式都回填nextqif(syn=27> />scanner(> 。staBlock(&nChainTemp> 。 /語句塊*nChain=merge(nChainTemp,nfc> 。8. void xunhuan(>該函數(shù)的功能是對(duì)循環(huán)語句進(jìn)行分析。/<循環(huán)語句 >:=do < 語句塊 >while < 條件 >void xunhuan(> char res10,num110,num210,op10。int nChainTemp 。if(
17、syn=8> /donnc=nextq 。 / 記住 if 語句位置, emit 之后 nextq/emit("0","if",num1,"goto">。scanner(> 。staBlock(&nChainTemp> 。 /語句塊if(syn=9> /whilescanner(> 。if(syn=26> /(scanner(> 。strcpy(num1,E(>> 。if(syn<=37>&&(syn>=32>>switc
18、h(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:就變了break 。break 。break 。break 。break 。break 。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","",&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年果汁行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025-2030年抗抑郁藥行業(yè)市場(chǎng)發(fā)展分析及趨勢(shì)前景與投資戰(zhàn)略研究報(bào)告
- 2025-2030年快餐外賣產(chǎn)業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025電子產(chǎn)品采購(gòu)版合同
- 2025-2030年全球及中國(guó)餐飲服務(wù)餐廳行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025年中級(jí)經(jīng)濟(jì)師實(shí)時(shí)試題及答案分享
- 中級(jí)經(jīng)濟(jì)師考試的宏觀經(jīng)濟(jì)趨勢(shì)試題及答案
- 學(xué)習(xí)工程經(jīng)濟(jì)中的定性與定量分析試題及答案
- 2025版權(quán)許可合同樣式
- 工程項(xiàng)目成本預(yù)算的關(guān)鍵試題及答案
- VDA6.3-2023版培訓(xùn)教材課件
- 形勢(shì)與政策補(bǔ)考2-國(guó)開(XJ)-參考資料
- 眼部健康檢測(cè)與分析課件
- 偏心塊振動(dòng)式土壤夯實(shí)機(jī)的結(jié)構(gòu)設(shè)計(jì)說明
- 專業(yè)碩士學(xué)位論文修改報(bào)告(二)
- 蘇州市建設(shè)工程造價(jià)計(jì)價(jià)解釋
- 主題班會(huì)《堅(jiān)定信念--放飛理想》
- 煤礦機(jī)電設(shè)備春季預(yù)防性檢修計(jì)劃
- 2017年山東、臨沂爆炸事故案例分析
- S771(一) 水力循環(huán)澄清池
- 高密度電法探測(cè)及數(shù)據(jù)處理解釋--答辯
評(píng)論
0/150
提交評(píng)論