構(gòu)造詞法分析器實習報告_第1頁
構(gòu)造詞法分析器實習報告_第2頁
構(gòu)造詞法分析器實習報告_第3頁
構(gòu)造詞法分析器實習報告_第4頁
構(gòu)造詞法分析器實習報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、班級:06級計算機1班學號:姓名:成績: 教學實習題目:構(gòu)造詞法分析器一、教學實習目的 編譯原理課程設計是計算機應用專業(yè)的主要實踐性教學環(huán)節(jié),在學習了編譯原理及專業(yè)基礎課的基礎上,設計一個實際的程序語言編譯系統(tǒng),可以加深對程序語言結(jié)構(gòu)和機器處理方式的理解,初步掌握高級語言到機器指令的基本轉(zhuǎn)換方法,提高進行工程設計的基本技能及分析解決實際問題的能力,為畢業(yè)設計和以后的工程實踐打下良好的基礎。二、教學實習要求 根據(jù)課本p43頁的圖3.3構(gòu)造詞法分析器。要求輸入源數(shù)據(jù)文件,能夠得出詞法分析的結(jié)果,并顯示出來,包括顯示分離出來的單詞符號、它們的助記符和內(nèi)碼值以及種類(如常數(shù)、字母、保留字及運算符、界符

2、等)。三、教學實習步驟3.1程序設計說明 3.1.1需求分析詞法分析是編譯過程的第一個階段,他的任務是輸入源程序,對構(gòu)成源程序的字符串進行掃描和分解,識別出一個個的單詞符號,如基本字(begin、end、if、for、while等),標識符、常數(shù)、算符和界符(標點符號、左右括號等等)。單詞符號是語言的基本組成成分,是人們理解和編寫程序的基本要素。對于詞法分析器,它的功能是輸入源程序,輸出單詞符號。程序語言的單詞符號一般有以下幾種:(1)保留字,是程序語言定義的具有固定意義的標識符。(2)標識符,是用來表示各種名字,如變量名,數(shù)組名,過程名等等。(3)常數(shù),一般有整型,實型,布爾型,文字型等等。

3、(4)運算符,如+、*、/等等。(5)界符,如逗號,分號,括號等等。在詞法分析器中要求輸出的單詞符號以二元式的形式給出:(單詞種別,單詞符號的屬性值),單詞種別常常用助記符來表示,單詞符號的屬性值則用內(nèi)碼來表示。3.1.2詳細設計首先給出詞法分析器的結(jié)構(gòu)圖。從圖中可以看出:詞法分析器工作的第一步是輸入源程序文本。輸入串一般是放在一個緩沖區(qū)中,在很多情況下,把輸入串處理一下,對單詞符號的識別工作是比較方便的。預處理可以剔除一些無意義的符號,如注釋、多個空白符等等。詞法分析器調(diào)用預處理子程序后,處理出一串確定長度的輸入字符,并將其裝進詞法分析器所指定的緩沖區(qū)中,即掃描緩沖區(qū),之后詞法分析器就在這個

4、緩沖區(qū)中直接進行單詞符號的識別。當緩沖區(qū)里的字符串被處理完之后,它又調(diào)用預處理子程序裝入新串。分析器對掃描緩沖區(qū)進行掃描時一般用兩個指示器,一個指向當前正在識別的單詞的開始位置,另一個用于向前搜索以尋找單詞的終點,而單詞符號識別采用的方法是超前搜索。超前搜索技術(shù)即在單詞識別的過程中,通過向前多讀幾個符號的形式,準確的進行單詞的識別,一旦確定識別到的單詞之后,需要進行掃描指針的回退,保證單詞識別工作的順利進行。對于標識符,常數(shù),算符及界符等都需要通過超前搜索進行識別。通過上述的對詞法分析器原理的闡述,可以得出詞法分析器是這樣工作的:先構(gòu)造預處理器,刪除非執(zhí)行代碼(如注釋語句,多余的分隔符等等),

5、之后構(gòu)造掃描器,對預處理結(jié)果進行掃描包括對常數(shù)、標識符、關(guān)鍵字、運算符的識別都采用超前搜索技術(shù)進行掃描,最后指針要及時地回退到適當?shù)奈恢谩?.1.3流程圖(詞法分析部分) 3.2、源程序代碼 #include#include#includeconst int max=120;/規(guī)定字符串的最大長度不超過120個字符char strtokenmax;/存放當前字符串char *key_word5=dim,if,do,stop,end;/存放保留字file *fp;int isletter(char ch)/是否為字母if(ch=a&ch=a&ch=0&ch=9)return 1;return 0

6、;int reserve()/是否為保留字int i;for(i=0;i5;i+)if(strcmp(strtoken,key_wordi)=0)return (i+1);return 0;void retract(int &i,char &ch)/將搜索指示器回調(diào)一個位置,并將ch置為空白字符i=i-1;ch= ;void getchar(int &i,char buffermax,char &ch)/將下一輸入字符讀到ch中,搜索指示器前移一個字符位置 i=i+1;ch=bufferi;void concat(char &ch,char strtokenmax,int &k)/將ch中的字

7、符連接到strtoken之后strtokenk=ch; k=k+1;void insertid(char valuemax,char strtokenmax)/將strtoken中的字符加到value中for(int i=0;imax;i+)valuei=strtokeni;void analysis()int i,k,code;char buffermax,ch,valuemax;/緩沖區(qū)存放文件中每一行的內(nèi)容,每行最多max=120個字符while(!feof(fp) /檢測文件是否結(jié)束 strcpy(buffer,);/清空緩沖區(qū)fgets(buffer,max,fp);/從文件中讀入字

8、符串i=0;while(imax&ch!=0)ch=bufferi;if(isletter(ch)k=0;while(isletter(ch)|isdigit(ch)&imax)/是標識符 concat(ch,strtoken,k); getchar(i,buffer,ch);strtokenk=0;retract(i,ch);coutstrtoken;code=reserve();/匹配保留字,并返回其編碼值if(code=0)insertid(value,strtoken);cout$id,valuet標識符endl;/標識符elsecoutcodet保留字endl;/保留字strcpy(

9、strtoken,);else if(isdigit(ch)k=0;while(isdigit(ch)&imax)/常數(shù)concat(ch,strtoken,k); getchar(i,buffer,ch);strtokenk=0;retract(i,ch);coutstrtoken;cout$int,;coutstrtokent常數(shù)endl;strcpy(strtoken,);else if(ch=*)coutch; getchar(i,buffer,ch);if(ch=*)coutch endl;/*elsecoutendl;-i;/*else if(ch=+)coutch endl;/+else if(ch=()coutch endl;/(else if(ch=)coutch endl;/)else if(ch=;)coutch endl;/;else if(ch=)coutchendl;/ else if(ch=)coutchendl;/i+;/while(imax)ch= ;/while(!feof(fp)fclose(fp);int main(void)char filename20;coutinput the file name:filename;if(fp=fopen(filename,r)=null)coutcant ope

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論