![編譯原理實(shí)驗(yàn)三_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/2431ec01-d6f4-444f-ab56-20ca5024c03e/2431ec01-d6f4-444f-ab56-20ca5024c03e1.gif)
![編譯原理實(shí)驗(yàn)三_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/2431ec01-d6f4-444f-ab56-20ca5024c03e/2431ec01-d6f4-444f-ab56-20ca5024c03e2.gif)
![編譯原理實(shí)驗(yàn)三_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/2431ec01-d6f4-444f-ab56-20ca5024c03e/2431ec01-d6f4-444f-ab56-20ca5024c03e3.gif)
![編譯原理實(shí)驗(yàn)三_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/2431ec01-d6f4-444f-ab56-20ca5024c03e/2431ec01-d6f4-444f-ab56-20ca5024c03e4.gif)
![編譯原理實(shí)驗(yàn)三_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/28/2431ec01-d6f4-444f-ab56-20ca5024c03e/2431ec01-d6f4-444f-ab56-20ca5024c03e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、編譯原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)三 語義分析 班 級: 學(xué) 號: 姓 名: 任課教師: 計(jì)算機(jī)科學(xué)與工程系2016年 6 月 20 日 一、 實(shí)驗(yàn)?zāi)康耐ㄟ^上機(jī)實(shí)習(xí),加深對語法制導(dǎo)翻譯原理的理解,掌握將語法分析所識別的語法成分變換為中間代碼的語義翻譯方法。二、 實(shí)驗(yàn)要求實(shí)驗(yàn)的輸入和輸出:輸入是語法分析后提供的正確的單詞串,輸出為三地址指令形式的四元式序列。例如:對于語句串begin a:2+3*4;x:(a+b)/c end#輸出的三地址指令如下:(1) t1=3* 4 (4) t3a+b(2) t22+t1 (5) t4t3/c(3) a=t2 (6) x=t4三、 實(shí)驗(yàn)內(nèi)容采用遞歸下降語法制導(dǎo)翻譯法,
2、對算術(shù)表達(dá)式、賦值語句進(jìn)行語義分析并生成四元式序列。四、 算法設(shè)計(jì)和源程序#include "stdio.h"#include "string.h"#include "stdlib.h"char prog100,token8,ch;char *rwtab6="begin","if","then","while","do","end"int syn,p,m,n,sum,q;int kk;struct char resu
3、lt18; char ag118; char op18; char ag218; quad20;char *factor();char *expression();int yucu();char *term();int statement();int lrparser();char *newtemp();scaner();emit(char *result,char *ag1,char *op,char *ag2);main() int j;q=p=kk=0;printf("nplease input a string (end with '#'): ");
4、do scanf("%c",&ch); progp+=ch; while(ch!='#');p=0;scaner();lrparser();if(q>19)printf(" to long sentense!n");else for(j=0;j<q;j+)printf("%s=%s%s%snn",quadj.result1,quadj.ag11,quadj.op1,quadj.ag21);/getch();int lrparser() int schain=0; kk=0; if (syn=1) s
5、caner(); /讀下一個(gè)單詞符號schain=yucu(); /調(diào)用語句串分析函數(shù)進(jìn)行分析if(syn=6) scaner(); /讀下一個(gè)單詞符號 if(syn=0)&&(kk=0) printf("Success!n"); /輸出(“success”)else if(kk!=1)printf("short of 'end' !n");/輸出 缺end 錯(cuò)誤 kk=1;/ getch(); exit(0); else printf("short of 'begin' !n"); /
6、輸出begin錯(cuò)誤 kk=1;/ getch(); exit(0); return (schain);int yucu() int schain=0;schain=statement(); /調(diào)用語句分析函數(shù)進(jìn)行分析while(syn=26) scaner(); /讀下一個(gè)單詞符號 schain=statement(); /調(diào)用語句分析函數(shù)進(jìn)行分析 return (schain);int statement() char tt8,eplace8;int schain=0;if (syn=10) strcpy(tt,token); scaner(); if(syn=18) scaner(); /
7、讀下一個(gè)單詞符號 strcpy(eplace,expression();emit(tt,eplace,"","");schain=0; else printf("short of sign ':=' !n"); /輸出缺少賦值號的錯(cuò)誤 kk=1;/ getch(); exit(0); return (schain); char *expression() char *tp,*ep2,*eplace,*tt;tp=(char *)malloc(12); /分配空間ep2=(char *)malloc(12);eplace
8、=(char *)malloc(12);tt=(char *)malloc(12);strcpy(eplace,term(); /調(diào)用term分析產(chǎn)生表達(dá)式計(jì)算的第一項(xiàng)eplacewhile(syn=13)|(syn=14) if (syn=13)strcpy(tt,"+"); /操作符 tt= +或者 else strcpy(tt,"-"); scaner(); /讀下一個(gè)單詞符號 strcpy(ep2,term(); /調(diào)用term分析產(chǎn)生表達(dá)式計(jì)算的第二項(xiàng)ep2 strcpy(tp,newtemp(); /調(diào)用newtemp產(chǎn)生臨時(shí)變量tp存儲計(jì)算
9、結(jié)果 emit(tp,eplace,tt,ep2); /生成四元式送入四元式表 strcpy(eplace,tp); return (eplace);char *term() /仿照函數(shù)expression編寫 char *tp,*ep2,*eplace,*tt;tp=(char *)malloc(12);ep2=(char *)malloc(12);eplace=(char *)malloc(12);tt=(char *)malloc(12);strcpy(eplace,factor();while(syn=15)|(syn=16) if (syn=15)strcpy(tt,"*&
10、quot;); else strcpy(tt,"/"); scaner(); /讀下一個(gè)單詞符號 strcpy(ep2,factor(); strcpy(tp,newtemp(); emit(tp,eplace,tt,ep2); strcpy(eplace,tp); return (eplace);char *factor() char *fplace;fplace=(char *)malloc(12);strcpy(fplace,"");if(syn=10) strcpy(fplace,token); scaner(); /讀下一個(gè)單詞符號 else
11、if(syn=11) itoa(sum,fplace,10); scaner(); /讀下一個(gè)單詞符號 else if(syn=27) scaner(); /讀下一個(gè)單詞符號 fplace=expression(); /調(diào)用expression分析返回表達(dá)式的值 if(syn=28) scaner(); /讀下一個(gè)單詞符號 else printf("error on ')' !n"); kk=1;/ getch(); exit(0); else printf("error on '(' !n");kk=1;/ getch(
12、);exit(0); return (fplace);char *newtemp() char *p;char m8;p=(char *)malloc(8);kk+;itoa(kk,m,10);strcpy(p+1,m);p0='t'return(p);scaner() sum=0; for(m=0;m<8;m+)tokenm+=NULL; m=0; ch=progp+; while(ch=' ')ch=progp+; if(ch<='z')&&(ch>='a')|(ch<='Z
13、39;)&&(ch>='A') while(ch<='z')&&(ch>='a')|(ch<='Z')&&(ch>='A')|(ch>='0')&&(ch<='9') tokenm+=ch; ch=progp+; p-; syn=10; tokenm+='0' for(n=0;n<6;n+)if(strcmp(token,rwtabn)=0) syn=n+1
14、; break; else if(ch>='0')&&(ch<='9') while(ch>='0')&&(ch<='9') sum=sum*10+ch-'0' ch=progp+;p-;syn=11; else switch(ch) case '<':m=0; ch=progp+; if(ch='>') syn=21; else if(ch='=') syn=22; else syn=20; p-;
15、 break;case '>':m=0; ch=progp+; if(ch='=') syn=24; else syn=23; p-; break;case ':':m=0; ch=progp+; if(ch='=') syn=18; else syn=17; p-; break;case '+': syn=13; break;case '-': syn=14; break;case '*': syn=15;break;case '/': syn=16;break;case '(': syn=27;break;case ')': syn=28;break;case '=': syn=25;break;case '': syn=26;break;case '#': syn=0;break;default: syn=-1;break; emit(char *result,char *ag1,char *op,char *ag2) strcpy(quadq.result1,result);strcpy(quadq.ag11,ag1);strcpy(quadq.op1,o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年五年級班級管理工作總結(jié)(3篇)
- 2025年代理權(quán)轉(zhuǎn)讓協(xié)議范文(2篇)
- 2025年五年級下學(xué)期語文教師工作總結(jié)模版(三篇)
- 2025年鄉(xiāng)村中學(xué)教師七年級語文教學(xué)工作總結(jié)(3篇)
- 2025年個(gè)人擔(dān)保貸款合同參考樣本(2篇)
- 互聯(lián)網(wǎng)企業(yè)調(diào)研居間合同
- 教育實(shí)驗(yàn)室裝修項(xiàng)目協(xié)議
- 疫情封閉小區(qū)大門施工方案
- 健身房裝修合同范本版
- 咖啡館裝飾設(shè)計(jì)合同
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
- 各種標(biāo)本采集的技術(shù)-痰標(biāo)本的采集(護(hù)理技術(shù))
- 實(shí)驗(yàn)室的設(shè)計(jì)規(guī)劃
- 注冊安全工程師《安全生產(chǎn)管理知識》科目知識要點(diǎn)
- 《新時(shí)代公民道德建設(shè)實(shí)施綱要》、《新時(shí)代愛國主義教育實(shí)施綱要》知識競賽試題庫55題(含答案)
- 2024-2030年中國假睫毛行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報(bào)告
- 2019-2020學(xué)年七年級(上)期末數(shù)學(xué)試卷2附解析
- 電話接聽技巧與服務(wù)質(zhì)量提升方案三篇
- 德國職業(yè)學(xué)校教育質(zhì)量保障體系研究
- 2023-2024學(xué)年北師大版數(shù)學(xué)八年級上冊 期末測試卷
評論
0/150
提交評論