版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理程序設計實驗報告逆波蘭式生成班級:計算機1306班 姓名:張濤 學號:20133967實驗目標:在對表達式語法分析的基礎上設計實現(xiàn)逆波蘭式形式的中間代碼生成程序。實驗內容:概要設計:對表文法加入語義動作形成屬性文法,這樣在對表達式語法分析的基礎上設計實現(xiàn)逆波蘭式形式的中間代碼生成程序。數據結構:int op=0;當前判斷進度char ch;當前字符char nowword10=;當前單詞char operate4=+,-,*,/;運算符char bound2=(,); 界符struct Tokenint code;char ch10;/Token 定義struct Token toke
2、nlist50; /Token 數組struct Token tokentemp; 臨時 Token 變量關鍵函數:int IsLetter(char ch) 判斷 ch 是否為字母int IsDigit(char ch) 判斷ch是否為數字int Iskey(char *string)判斷是否為關鍵字int Isbound(char ch)判斷是否為界符int Isboundnum(char ch) 給由界符所在 token 值void T();分析子程序void F();分析子程序void E1();分析子程序void E();分析子程序void T1();分析子程序(包括:概要設計、數據
3、結構、流程圖、關鍵函數等有選擇填寫)源程序代碼:(加入注釋)#include#include#include#includeint op=0;當前判斷進度char ch;當前字符char nowword10=; 當前單詞char operate4=+,*,7;char bound2=(,);struct Token(int code;char ch10;);struct Token tokenlist50;void T();void F();void E1();void E();void T1();int IsLetter(char ch) 判斷 ch 是否為字母(int i;for(i=0;
4、i=a&ch=A&ch=Z)return 1;return 0;) int IsDigit(char ch) 判斷ch是否為數字(int i;for(i=0;i=0&ch=9)return 1;return 0;)int Isbound(char ch)(int i;for(i=0;i2;i+)(if(ch=boundi)(return i+1;)return 0;int Isoperate(char ch)(int i; for(i=0;i4;i+)( if(ch=operatei) ( return i+3; return 0;int main()(FILE *fp;int q=0,m=0
5、;char sour200=”;F:2.txtn);printf(請將源文件置于以下位置并按以下方式命名:if(fp=fopen(F:2.txt,r)=NULL)( printf(文件未找到! n); else while(!feof(fp) if(isspace(ch=fgetc(fp); else sourq=ch;q+; int p=0;printf(輸入句子為:n);for(p;p=q;p+) printf(%c”,sourp); printf(n); int state=0,nowlen=0;BOOLEAN OK=TRUE,ERR=FALSE;int i,flagpoint=0;fo
6、r(i=0;iq;i+)switch(state)(case 0:ch=souri;if(Isbound(ch)(if(ERR)(printf(無法識別 n);ERR=FALSE;OK=TRUE;else if(!OK)( printf( 標識符 n”,nowword);(struct Token tokentemp;tokentemp.code=10;int i=0;for(i;i=nowlen;i+)tokentemp.chi=nowwordi;tokenlistm=tokentemp;m+; OK=TRUE;state=4;else if(IsDigit(ch)(if(OK)(memse
7、t(nowword,0,strlen(nowword);nowlen=0;nowwordnowlen=ch;nowlen+;state=3;OK=FALSE;break;else(nowwordnowlen=ch;nowlen+;)else if(IsLetter(ch) (if(OK) (memset(nowword,0,strlen(nowword);nowlen=0;nowwordnowlen=ch;nowlen+;OK=FALSE;if(souri+1=#) (printf( 標識符 n,nowword);(struct Token tokentemp;tokentemp.code=1
8、0;int i=0;for(i;i=nowlen;i+)tokentemp.chi=nowwordi;tokenlistm=tokentemp; m+;else (nowwordnowlen=ch;nowlen+;else if(Isoperate(ch)(if(!OK)( printf( 標識符 n”,nowword); struct Token tokentemp;tokentemp.code=10;int i=0;for(i;i=nowlen;i+)tokentemp.chi=nowwordi;tokenlistm=tokentemp;m+;OK=TRUE;printf( 運算符 n,I
9、soperate(ch),ch);struct Token tokentemp;tokentemp.code=Isoperate(ch);tokentemp.ch0=ch;tokenlistm=tokentemp;m+;break;if(IsLetter(ch)printf(錯誤 n);nowwordnowlen=ch;nowlen+;ERR=FALSE;state=0;break;if(IsDigit(ch=souri)nowwordnowlen=ch;nowlen+;else if(souri=.&flagpoint=0)flagpoint=1;nowwordnowlen=ch;nowle
10、n+;elseprintf( 數字 n”,nowword);i-;state=0;OK=TRUE;struct Token tokentemp;tokentemp.code=20;int i=0;for(i;i=nowlen;i+)tokentemp.chi=nowwordi;tokenlistm=tokentemp;m+;)break;i-;printf( 界符 n,Isbound(ch),ch);struct Token tokentemp;tokentemp.code=Isbound(ch);tokentemp.ch0=ch;tokenlistm=tokentemp;m+;state=0
11、;OK=TRUE;break;)int io=0;for(io;io=m;io+)printf(tokenlist%d.code 值為 %dn,io,tokenlistio.code);printf(tokenlist%d.ch 值為 %sn,io,tokenlistio.ch);)printf(*逆波蘭式為:n);E();printf(n);if(op=m)printf(OK!);elseprintf(WRONG!);return 0;)void E()T();E1();)void E1()if(tokenlistop.code=3|tokenlistop.code=4)char c=tok
12、enlistop.ch0;tokenlistop+;T();E1(); printf(%c,c);)void T1()if(tokenlistop.code=5|tokenlistop.code=6)char c=tokenlistop.ch0;tokenlistop+;F();T1();printf(%c,c);)void T()F();T1();)void F()if(tokenlistop.code=10|tokenlistop.code=20) int i=0;char c10;for(i;itokenlist 6 .code 值為 520 .2|tokenlist6 .ch值力 Btokenlist7.code 1J |tokenlist7.ch值一 tokenlist8.code 值 It o ken list 8 卜值,okenlist9 .code值為6Mkenlist9 .ch值為/kokenlist10.code 值為 20kokenlist10.ch值為 3xokenlistll .code值為2r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨部門協(xié)作的推進計劃
- 塑料制品行業(yè)原料安全檢測方案
- 提升決策效率的措施計劃
- 影視公司前臺工作感想
- 律師辦公室實習報告
- 營養(yǎng)科護士工作總結
- 快遞行業(yè)客服工作總結快捷服務傳遞溫暖
- 2024年物聯(lián)網應用場景開發(fā)分包合作協(xié)議
- 呼叫中心行業(yè)美工工作總結
- 王者榮耀的危害作文4篇
- 煤炭物流園區(qū)總體規(guī)劃(2016-2030)參考范本
- 一級部門職責及組織架構-總裁辦教學
- 精品新技術、新產品、新工藝、新材料的應用
- 豎井涌水量方程判定方法
- T∕ACSC 01-2022 輔助生殖醫(yī)學中心建設標準(高清最新版)
- 6.2Kendall 相關性檢驗
- 國家開放大學《理工英語1》邊學邊練參考答案
- 國家開放大學電大??啤豆芾頃嫛菲谀┰囶}及答案
- 內蒙古師范大學論文封面
- (整理)《運籌學》期末考試試題與參考答案
- (完整版)《金匱要略》方劑總匯(完整版)
評論
0/150
提交評論