版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 實(shí)驗(yàn)四:語義分析一實(shí)驗(yàn)?zāi)康模和ㄟ^上機(jī)實(shí)習(xí),加深對語法制導(dǎo)翻譯原理的理解,掌握將語法分析所識(shí)別的語法成分變換為中間代碼的語義翻譯方法二 實(shí)驗(yàn)要求:采用的是遞歸下降語法制導(dǎo)翻譯法,對算術(shù)表達(dá)式,賦值語進(jìn)行語義分析并生成四元式序列。1. 實(shí)驗(yàn)的輸入和輸出分別為以下:輸入是語法分析后提供的正確的單詞串,輸出為三地址指令形式的四元式序列。例如:對于語句串 begin a:=2+3*4;x:=(a+b)/c end #輸出的三地址指令如下所示:(1) t1=3*4;(2) t2=2+t1;(3) a=t2;(4) t3=a+b;(5) t4=t3/c;(6) x=t4;2. 實(shí)驗(yàn)算法的思想為:(1) 設(shè)
2、置語義分析過程 這其中用到的幾個(gè)重要的函數(shù)的功能和代碼如下面所列出的:1. emit (char *result ,char *ag1,char *op,char *ag2)該函數(shù)的功能是生成一個(gè)三地址語句送到四元式表中。四元式表的結(jié)構(gòu)如下: Struct Char result8; Char ag18; Char op8; Char ag28;quad20;2char *newtemp()該函數(shù)的功能是回送一個(gè)新的變量名,臨時(shí)變量的名稱產(chǎn)生的順序依次為T1, T2 ,.Char *newtemp()Char *p;Char m8;P=(char *)malloc(8);K+;Iota(k,m
3、,10);Strcpy(p+1,m);P0=t;Return (p);(2) 主程序的示意圖如圖所示: (3) 函數(shù)lrparser在原來語法分析的基礎(chǔ)上插入相應(yīng)的語義分析動(dòng)作,將輸入串翻譯成四元式序列,在實(shí)驗(yàn)中我們僅僅所作的是對表達(dá)式和賦值語句進(jìn)行翻譯。三,實(shí)驗(yàn)程序源碼代碼如下:#include stdio.h#include string.h#include ctype.hchar token20 ;char prog100;char ch;char *rwtab6=begin,if,then,while,do,end;int syn,p,m,n,sum;#define STACK_SIZ
4、E 100int compute(int x,char c,int y);int stack_numSTACK_SIZE;int num_top=-1;bool notfull_num() if(num_top=STACK_SIZE) return false; else return true;void push_num(int value)if(notfull_num() num_top+;stack_numnum_top=value;void pop_num()num_top-;int num_top_value()int m=stack_numnum_top;/printf(sing=
5、%dn,m);return m;bool empty_num()if(num_top=-1)return true;else return false;char stack_operationSTACK_SIZE;int operation_top=-1;bool notfull_operation()if(operation_top=STACK_SIZE)return false;else return true;void push_operation(char c)if(notfull_operation()stack_operation+operation_top=c;void pop_
6、operation()operation_top-;char operation_top_value()return stack_operationoperation_top;bool empty_operation()if(operation_top=-1)return true ;else return false;int compute(int x,char c,int y)int m;if(c=+)m=x+y;else if(c=-) m=x-y;else if(c=*) m=x*y;else if(c=/) m=x/y;return m;struct int result;int a
7、g1;char op ;int ag2;quad20;void scanner();int findf(char c);int findg(char c);int findf(char c)if(c= ) return 7;else if(c=*) return 5;else if(c=/) return 5;else if(c=+) return 3;else if(c=-) return 3;else if(c=$) return 0;int findg(char c)if(c=) return 6;else if(c=*) return 4;else if(c=/) return 4;e
8、lse if (c=+) return 2;else if(c=-) return 2;else if (c=$) return 0;void main() p=0; printf(please input the stringn);int quadsign=0; do scanf(%c,&ch); /輸入所需要的文字 progp=ch; p+; while(ch!=#); p=0; push_operation($); / printf(OKn); do scanner(); /* case 11:printf(11,%d),sum);break; case -1:printf(error)
9、;break; default:printf(%d, %s),syn,token);break; */ if(syn=11) push_num(sum);/ printf(sum=%dn,sum); sum=0; else if(syn=13|syn=14|syn=15|syn=16|syn=100) if( findf(operation_top_value() =findg(token0)push_operation(token0);else doquadquadsign.ag2=num_top_value(); pop_num();/ printf(%dn,quadquadsign.ag
10、2);for(int i=0;ifindg(token0); push_operation(token0); while(syn!=0); for(int i=0;iquadsign;i+) printf(%d=%d%c%dn,quadi.result,quadi.ag1,quadi.op,quadi.ag2);void scanner()for(n=0;n8;n+)tokenn=0; ch=progp+; while(isspace(ch) ch=progp+; m=0; /設(shè)置token數(shù)組為空 if(isalpha(ch) while (isalnum(ch) tokenm+=ch; c
11、h=progp+; tokenm+=0; p-; syn=10; for(n=0;n6;n+) if(strcmp(token,rwtabn)=0) syn=n+1; break; else if(isdigit(ch) while(isdigit(ch) sum=sum*10+ch-0; ch=progp+; p-; syn=11; else switch(ch) case) syn=21; tokenm+=ch; else if(ch=) syn=22; tokenm+=ch; else syn=20; p-; break; case: tokenm+=ch;ch=progp+;if(ch=)syn=24;tokenm+=ch;else syn=23;p-;break; case: tokenm+=ch; ch=progp+; if(ch=) syn=18; tokenm+=ch; else syn=17; p-; break; case+:syn=13;token0=ch;break; case-:syn=14;token0=ch;break; case*:syn=15;token0=ch;break; case/:syn=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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年高職學(xué)校社會(huì)工作(學(xué)校社工技巧)試題及答案
- 2025年大學(xué)大三(生態(tài)學(xué))群落生態(tài)學(xué)基礎(chǔ)試題及解析
- 2025年高職化妝品檢驗(yàn)技術(shù)(化妝品檢驗(yàn)應(yīng)用)試題及答案
- 2025年大學(xué)護(hù)理學(xué)(老年護(hù)理基礎(chǔ))試題及答案
- 2025年中職(飼料加工技術(shù))飼料配方設(shè)計(jì)階段測試題及答案
- 2025年中職文化創(chuàng)意與策劃(文案寫作)試題及答案
- 2025年中職軟件工程(軟件測試自動(dòng)化框架)試題及答案
- 2025年大學(xué)植物科學(xué)與技術(shù)(農(nóng)產(chǎn)品質(zhì)量檢測)試題及答案
- 2025年高職餐飲管理(餐飲質(zhì)量管理)試題及答案
- 2025年高職(建筑裝飾工程技術(shù))軟裝設(shè)計(jì)測試題及答案
- 2026年護(hù)理部工作計(jì)劃
- 1-6-黃煌經(jīng)方使用手冊
- 全省通信線路培訓(xùn)班通信電纜講稿教學(xué)課件
- 人教A版高中數(shù)學(xué)選擇性必修第二冊全冊各章節(jié)課時(shí)練習(xí)題含答案解析(第四章數(shù)列、第五章一元函數(shù)的導(dǎo)數(shù)及其應(yīng)用)
- 國開電大公共行政學(xué)形考任務(wù)二答案
- 六年級下冊小升初全復(fù)習(xí)-第12講 工程問題-北師大 (含答案)
- 某項(xiàng)目盤扣式滿堂腳手架搭設(shè)施工方案
- 食管癌影像學(xué)表現(xiàn)及TNM分期課件
- 金風(fēng)科技-風(fēng)電產(chǎn)業(yè)集團(tuán)-供應(yīng)商現(xiàn)場作業(yè)基礎(chǔ)安全考試附答案
- 烹飪原料知識(shí) 水產(chǎn)品蝦蟹類
- 考勤抽查記錄表
評論
0/150
提交評論