




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、語義分析實驗報告1、 實驗目的:通過上機實習,加深對語法制導翻譯原理的理解,掌握將 語法分析所識別的語法成分變換為中間代碼的語義翻譯方法。2、 實驗要求:采用遞歸下降語法制導翻譯法,對算術(shù)表達式、賦值語句 進行語義分析并生成四元式序列。三、算法思想:1'設置語義過程。(1) emit(char *result,char *ag1 ,char *op,char *ag2)該函數(shù)的功能是生成一個三地址語 句送到四元式表中。四元式表的結(jié)構(gòu)如下:structchar result8;char ag18;char op8;char ag28;quad20;char*newtemp()該函數(shù)回送一
2、個新的臨時變量名,臨時變量名產(chǎn)生的順序為T1 ,T2,char *newtemp(void) char *p;char m8;p=(char *)malloc(8);k+;itoa(k,m,10); strcpy(p+1,m);p0= r;return(p);)2、函數(shù)Irparser在原來語法分析的基礎上插入相應的語義動作: 將輸入串翻譯成四元式序列。在實驗中我們只對表達式、賦值語句進 行翻譯。四、源程/予代碼:#include<stdio.h> #include<string.h> #include<iostream.h>#include<stdl
3、ib.h> struct char result12;char ag112;char op12;char ag212;quad;char prog80,token12;char ch;int syn,p,m=O,n,sum=O,kk; /p 是緩沖區(qū) prog 的指針、m 是 token 的指針char *rwtab6=''begin,1f,",thenM,Hwhile,;'do,;,endn;void scaner();char *factor(void);char *term(void);char *expression(void);int yucu
4、();void emit(char *result,char *ag1 ,char *op,char *ag2);char *newtemp();int statement();int k=0;void emit(char *result,char *ag1 ,char *op,char *ag2) (strcpy(quad.result,result);strcpy(quad.ag15ag1);strcpy(quad.op,op);strcpy(quad.ag2,ag2);cout«quad.result«,f=n«quad.ag1«quad.op
5、171;quad.ag2«endl; )char *newtemp() (char *p;char m12;p=(char *)malloc(12);k+;itoa(k5m510);strcpy(p+13m);pO=t; return (p);)void scaner()(for(n=0;n<8;n+) tokenn=NULL;ch=progp+;while(ch= *) (ch=progp;P+;Hf(ch>='a'&&ch<='z')|(ch>='A,&&ch<='Z
6、39;) (m=O;while(ch>=,0'&&ch<='9')|(ch>='a'&&ch<='z')|(ch>="A'&&ch<='Z') < tokenm+=ch; ch=progp+;token m+='O'P-;syn=10;for(n=0;n<6;n+)if(strcmp(token,rwtabn)=0)syn=n+1; break;)else if(ch>='0
7、9;&&ch<=,9') (sum=0;while(ch>='0'&&ch<='9') (sum=sum*10+chO1;ch=progp+;P-;syn=11;if(sum>32767) syn=-1;else switch(ch)(case,<f:m=0;tokenm+=ch;ch=progp+;if(ch='>f)(syn=21;tokenm+=ch;)else if(ch=,=,)(syn=22; tokenm+=ch;)elsesyn=23;P-;)break;case
8、,>,:m=0;tokenm+=ch;ch=progp+;if(ch='=,)(syn=24; tokenm+=ch;jelse(syn=20;P-;)break;case,:l:m=0;tokenm+=ch;ch=progp+;if(ch='=,)fsyn=18; tokenm+=ch;elsesyn=17;P-;)break;case,*,:syn=13;token0=ch;break; case7,:syn=14;token0=ch;break;casef+f:syn=15;token0=ch;break; case,J:syn=16;token0=ch;break
9、;case =f:syn=25;token0=ch;break;case,;l:syn=26;token0=ch;break; case'(,:syn=27;token0=ch;break;case,),:syn=28;token0=ch;break; case,#,:syn=0;token0=ch;break; default: syn=-1 ;break;int lrparser()coutvv” 調(diào)用 lrparserH«endl; int schain=O;kk=O;if(syn=1)(scaner(); schain=yucu();if(syn=6)scaner()
10、; if(syn=O && (kk=O) cout«Hsuccess!H«endl;)elseif(kk!=1)coutvv” 缺 end!”vvendl;kk=1;)elsecoutvv” 缺 begin!"«endl;kk=1; return(schain);int yucu()“coutvv” 調(diào)用 yucu"«endl;int schain=O;schain=statement();while(syn=26)(scaner();schain=statement();)return(schain);int sta
11、tement()coutvv” 調(diào)用 statement"«endl;char *eplace,*tt;eplace=(char *)malloc(12);tt=(char *)malloc(12);int schain=O;switch(syn)(case 10:strcpy(tt,token);scaner();if(syn=18)scaner();strcpy(eplace,expression();emit(tt5eplace;n,;n,);schain=O;elsecoutvv”缺少賦值符r«endl;kk=1;return(schain);break;
12、return(schain);char *expression(void)char *tp,*ep25*eplace,*tt; tp=(char *)malloc(12); ep2=(char *)malloc(12); eplace=(char*)malloc(12); tt =(char *)malloc(12); strcpy(eplace,term ();if(syn=15)strcpy(tt,H+,f); elsewhile(syn=15)|(syn=16)/調(diào)用term分析產(chǎn)生表達式計算的第一項eplacestrcpy(tt/,J,); scaner();strcpy(ep2,te
13、rm();strcpy(tp,newtemp();emit(tp,eplace,tt,ep2);strcpy(eplace,tp);/調(diào)用term分析產(chǎn)生表達式計算的第二項ep2調(diào)用newtemp產(chǎn)生臨時變量tp存儲計算結(jié)果/生成四元式送入四元式表»return(eplace);char *term(void)/ coutvv” 調(diào)用 termH«endl; char *tp/ep2,*eplace,*tt; tp=(char *)malloc(12); ep2=(char*)malloc(12); eplace=(char *)malloc(12); tt=(char *
14、)malloc(12); strcpy(eplace,factor();while(syn=13)|(syn=14) df(syn=13)strcpy(tt,'*n); else strcpy(tt/7"); scaner();strcpy(ep2,factor(); strcpy(tp,newtemp(); emit(tp,eplace,tt,ep2); strcpy(eplace,tp);)return(eplace);/調(diào)用factor分析產(chǎn)生表達式計算的第二項ep2 char *factor(void)調(diào)用newtemp產(chǎn)生臨時變量tp存儲計算結(jié)果char *fpla
15、ce;生成四元式送入四元式表fplace=(char *)malloc(12); strcpy(fplace,flt);if(syn=1O)strcpy(fplace,token);/將標識符token的值賦給fplacescaner();else if(syn=11)dtoa(sum,fplace,10); scaner();)else if(syn=27) scaner();fplace=expression(); 調(diào)用 expression if(syn=28) 分析返回表達式的值scaner();else(cout«n 缺)錯誤!”vvendl;kk=1;)elsecout«"缺(錯誤!"«endl;kk=1;)return(fplace);void main()(P=o;coutvv” 語義分析程序 *-«endl;cout«,fPlease input string:n«endl; docin.get(ch); prog
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單價度合同范本
- 發(fā)電項目合同范本
- 出租房屋補充合同范例
- 酒店地點租賃合同范本
- 雙方分成協(xié)議合同范本
- 2025年鈾及其轉(zhuǎn)化物項目合作計劃書
- 2025年工業(yè)清洗清理設備:工業(yè)吸塵設備合作協(xié)議書
- 合同范本類別廣告合同
- 企業(yè)制度合同范本
- 借調(diào)勞動合同范本
- 部編版《語文》(八年級-下冊)第一單元教材分析與教學建議
- Unit 1 Home 單元測試卷 重難點提優(yōu)卷(含答案)譯林版(2024)七年級英語下冊
- 現(xiàn)代企業(yè)服務營銷的創(chuàng)新與實踐
- 5.2 做自強不息的中國人 (課件)-2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 【寒假開學第一課】AI時代做自己的哪吒
- 陵園墓地代理居間
- CWAN 0043-2021攪拌摩擦焊攪拌頭設計及制造標準
- 從入門到精通:2025年化妝基本步驟
- 移動傳輸匯聚機房施工項目
- 教學課件:《公共關(guān)系學》(本科)
- 劉聰版在燦爛陽光下鋼琴伴奏譜簡譜版
評論
0/150
提交評論