編譯原理實驗報告2_第1頁
編譯原理實驗報告2_第2頁
編譯原理實驗報告2_第3頁
編譯原理實驗報告2_第4頁
編譯原理實驗報告2_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、學生學號實驗課成績武漢理工大學學生實驗報告書實驗課程名稱編譯原理開課學院計算機科學與技術(shù)學院指導老師姓名饒文碧學生姓名學生專業(yè)班級學年第學期實驗課程名稱:編譯原理實驗項目名稱單詞的詞法分析實驗成績實驗者專業(yè)班級組別同組者實驗日期第一部分:實驗分析與設(shè)計(可加頁)一、實驗內(nèi)容描述(問題域描述)完成對某一種常用高級語言(如Pascal、C語言、PL/0語言)的各類單詞進行詞法分析,即對源程序從左到右進行掃描,對組成源程序的字符串拼接成為單詞;并把其轉(zhuǎn)換成屬性字輸出。實驗要求:(1)選擇常用高級程序設(shè)計語言(如Pascal、C語言、PL/0語言)的源程序作為詞法分析對象。(2)根據(jù)教學要求和學生具體

2、情況,從上列語言之一中選取它的一個適當大小的子集,可以選取一類典型單詞,也可以盡可能使各種類型的單詞都能兼顧到。其基本要求是:對源程序從左到右進行掃描,對組成源程序的字符串拼接成為單詞,并把其轉(zhuǎn)換成屬性字輸出。教育資料二、實驗基本原理與設(shè)計(包括實驗方案設(shè)計,實驗手段的確定,試驗步驟等,用硬件邏輯或者算法描述)#include#include#include#includechar*table7=,main,int,if,then,else,return,TOKEN20,ch;intlookup(char*TOKEN)intm,i;for(i=1;i6;i+)if(m=strcmp(TOKEN

3、,tablei)=0)return(i);return(0);voidout(intc,char*TOKEN)printf(%d,%s)n,c,TOKEN);定義關(guān)鍵字關(guān)鍵字匹配函數(shù)/輸出函數(shù)掃描函數(shù)定義關(guān)鍵字關(guān)鍵字匹配函數(shù)/輸出函數(shù)掃描函數(shù)charTOKEN20=0;charch;inti,c;ch=fgetc(fp);獲取字符指針口并自動指向下一個字符if(isalpha(ch)判斷該字符是否是字母判斷該字符是否是字母或數(shù)字回退一個字符判斷該字符是否是字母或數(shù)字回退一個字符/輸出標識符/輸出關(guān)鍵字判斷是否是數(shù)字TOKEN0=ch;ch=fgetc(fp);i=1;while(isalnum

4、(ch)TOKENi=ch;i+;ch=fgetc(fp);TOKENi=0;fseek(fp,-1,1);c=lookup(TOKEN);if(c=0)out(6,TOKEN);elseout(c,TOKEN);elseif(isdigit(ch)TOKEN0=ch;ch=fgetc(fp);i=1;while(isdigit(ch)TOKENi=ch;i+;ch=fgetc(fp);TOKENi=0;fseek(fp,-1,1);out(7,TOKEN);elseTOKEN0=ch;switch(ch)case:out(17,TOKEN);break;case:out(18,TOKEN);

5、break;case,:out(14,TOKEN);break;case;:out(15,TOKEN);break;case)out(11,TOKEN);elsefseek(fp,-1,1);out(8,TOKEN);break;case=:out(10,TOKEN);break;case:ch=fgetc(fp);TOKEN1=ch;if(ch=)out(13,TOKEN);elsefseek(fp,-1,1);out(12,TOKEN);break;default:printf(error!n);break;voidmain()FILE*fp;if(fp=fopen(D:ZHT.txt,r

6、)=NULL)讀取文件內(nèi)容,并返回文件指針,該指針指向文件的第一個字符fprintf(stderr,errorexit(1);doch=fgetc(fp);if(ch=#)break;fprintf(stderr,errorexit(1);doch=fgetc(fp);if(ch=#)break;if(ch=)scanner(fp);elsefseek(fp,-1,1);opening.n);/文件以#結(jié)尾作為掃描結(jié)束條件如果是空格,自動跳到下個字符如果不是空格,則回退一個字符并掃描scanner(fp);while(ch!=#);return(0);三、主要儀器設(shè)備及耗材VC6.0第二部分:

7、實驗調(diào)試與結(jié)果分析(可加頁)第二部分:實驗調(diào)試與結(jié)果分析(可加頁)一、調(diào)試過程(包括調(diào)試方法描述、實驗數(shù)據(jù)記錄,實驗現(xiàn)象記錄,實驗過程發(fā)現(xiàn)的問題等)在掃描源程序字符串時一旦識別出關(guān)鍵字、分隔符、標識符、無符號常數(shù)中之一即以單詞形式各類單詞均采用相同的結(jié)構(gòu),即二元式編碼形式輸出。每次調(diào)用詞法分析程序它均能自動繼續(xù)掃描下去形成下一個單詞,直至整個源程序全部掃描完畢,并形成相應(yīng)的單詞串形式的源程序。二、實驗結(jié)果及分析(包括結(jié)果描述、實驗現(xiàn)象分析、影響因素討論、綜合分析和結(jié)論等)口涉至二記事本.文件舊統(tǒng)璟但)格式J,查看g幫助(HinainQ.tiiita,b;a=4;return;#實驗課程名稱:編

8、譯原理實驗項目名稱賦值語句的翻譯程序設(shè)計實驗成績實驗者專業(yè)班級組別同組者實驗日期第一部分:實驗分析與設(shè)計(可加頁)一、實驗內(nèi)容描述(問題域描述)對于常用高級語言(如Pascal、。語言)的源程序從左到右進行掃描,把其中賦值語句用所學過的語法分析方法進行語法分析,采用最有代表性的語義分析方法將其轉(zhuǎn)換為中間代碼形式表示輸出。實驗要求(1)選擇最有代表性的語法分析方法,如算符優(yōu)先法(或簡單優(yōu)先法)、遞歸下降分析法、LL分析法和LR分析法之一進行語法分析。(2)選擇對各種常見程序語言都通用的語法結(jié)構(gòu),如賦值語句(尤指表達式)作為分析對象,并且與所選語法分析方法要比較貼切。(3)選擇最有代表性的語義分析

9、方法,如語法制導翻譯方法進行語義翻譯工作。(4)實習時間為46小、時。二、實驗基本原理與設(shè)計(包括實驗方案設(shè)計,實驗手段的確定,試驗步驟等,用硬件邏輯或者算法描述)voidmain()intg,h,i,j,l,p,y,z,count;inta10;/狀態(tài)棧intni10;/存放輸出逆波蘭式的參數(shù)charb10;符號棧charstr10;/放輸入的表達式charc1;inttop1,top2,top3,top,topn,m,n;charx;charcopy10;/放Si,ri,看移進還是歸約charcopy110;charvt6=+,*,i,C,),#;/存放非終結(jié)符charvn=E;/存放終結(jié)

10、符char*LR4=E-E+E,E-E*E,E-(E),E-i;存放產(chǎn)生式;top1=0;top2=0;top3=0;top=0;topn=0;a0=0;y=a0;b0=#;count=0;z=0;cout文法GE:endl;coutt(1)E:=E+Eendl;coutt(2)E:=E*Eendl;coutt(3)E:=(E)|iendl;cout文法GE合法句子舉例:i+i*iendl;cout*endl;cout請輸入符號串:str;l=strlen(str);strl=#;for(i=l+1;i10;i+)stri=NULL;coutendltt符號串str分析過程如下:endl;co

11、ut-endl;cout步驟t狀態(tài)棧tt符號棧tt輸入串ttACTIONtGOTOendl;doy=z;m=0;n=0;/y,z指向狀態(tài)棧棧頂g=top;j=0;x=strtop;count+;coutcountt;while(m=top1)/輸出狀態(tài)棧coutam;m=m+1;couttt;while(n=top2)/輸出符號棧coutbn;n=n+1;couttt;strtop-1=;coutstr;/輸出輸入串couttt;while(x!7tj&j=6)j+;/vt6=+,*,i,(,),#存放終結(jié)符if(j=6&x!=vtj)coutendlendl;coutendl輸入字符串不是該

12、文法的一個句子!endl;coutendl按任意數(shù)字或字母鍵,回車退出!i;return;)if(actionyj=NULL)coutendlendl;coutendl輸入字符串不是該文法的一個句子!endl;coutendl按任意數(shù)字或字母鍵,回車退出!i;return;)else/couty=yj=jstrcpy(copy,actionyj);if(copy0=S)z=copy1-0;top1=top1+1;top2=top2+1;atop1=z;btop2=x;top=top+1;i=0;while(copyi!=#)coutcopyi;i+;)coutendl;)/couty=yj=j

13、actionyj;處理移進/a10狀態(tài)棧actionyj;處理移進/a10狀態(tài)棧/b10符號棧x=strtopactionyj;/處理歸約i=0;while(copyi!=#)cout也)#,田-1#存放產(chǎn)生式/while(copy10!=vn0)k+;/丫過1=飛存放非終結(jié)符l=strlen(LRh);top1=top1-l+3;y=atop1;/couttop1=top1;/y=h-1;p=goto1y;top2=top2-l+4;top1=top1+1;atop1=p;btop2=copy10;z=p;coutt;coutpendl;while(actionyj!=acc);coutac

14、cendl;coutendlendl;coutendl輸入字符串是該文法的一個句子!endl;cout中間代碼的逆波蘭式如下:endl;for(i=0;i10;i+)if(nii=1)coutEEE+=endl;if(nii=2)coutEEE*=endl;if(nii=3)coutEE()=endl;if(nii=4)coutiE=endl;coutendl按任意數(shù)字或字母鍵,回車退出!i;三、主要儀器設(shè)備及耗材VC6.0教育資料教育資料第二部分:實驗調(diào)試與結(jié)果分析(可加頁)調(diào)試過程(包括調(diào)試方法描述、實驗數(shù)據(jù)記錄,實驗現(xiàn)象記錄,實驗過程發(fā)現(xiàn)的問題等)用LR分析法完成此次文法分析的關(guān)鍵在于構(gòu)

15、造該文法的分析表,以及如何運用該分析表完成移入和歸約的過程,從而完成整個文法的分析。根據(jù)LR分析的基本原理,語法分析程序的主要任務(wù)就是:不斷移進輸入符號,識別句柄并歸約它。在分析過程中,利用分析棧存放已識別的那部分句型,而句型的其余部分由剩余輸人串組成,通過輸入串的當前符號和分析棧的棧頂狀態(tài)查找分析表應(yīng)采取的動作,對狀態(tài)棧和符號棧進行相應(yīng)的操作。本程序中主要用到的數(shù)據(jù)結(jié)構(gòu)是棧,實現(xiàn)的相應(yīng)操作有建立兩個空棧操作數(shù)棧OPR,操作符棧OPT,壓棧push,出棧pop,取棧頂元素OPRtop等,每個操作用相應(yīng)的代碼實現(xiàn)。該數(shù)據(jù)結(jié)構(gòu)主要完成狀態(tài)棧的操作,對每個狀態(tài)進行相應(yīng)的壓棧、出棧和取棧頂元素等操作。實驗結(jié)果及分析(包括結(jié)果描述、實驗現(xiàn)象分析、影響因

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論