詞法分析器的實現與設計_第1頁
詞法分析器的實現與設計_第2頁
詞法分析器的實現與設計_第3頁
詞法分析器的實現與設計_第4頁
詞法分析器的實現與設計_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、題目詞法分析器的設計與實現一、弓丨言錯誤!未定義書簽。TOCo1-5hz二、詞法分析器的設計32.1詞的內部定義32.2詞法分析器的任務及功能4221任務4222功能:42.3單詞符號對應的種別碼:5三、詞法分析器的實現53.1主程序示意圖:63.2函數定義說明63.3程序設計實現及功能說明6關鍵字6關鍵字的定義7符合的關鍵字的查找7四、詞法分析程序的C語言源代碼:7五、結果分析:9摘要:詞法分析是中文信息處理中的一項基礎性工作。詞法分析結果的好壞將直接影響中文信息處理上層應用的效果。通過權威的評測和實際應用表明,IRLAS是一個高精度、高質量的、高可靠性的詞法分析系統。眾所周知,切分歧義和未

2、登錄詞識別是中文分詞中的兩大難點。理解詞法分析在編譯程序中的作用,加深對有窮自動機模型的理解,掌握詞法分析程序的實現方法和技術,用c語言對一個簡單語言的子集編制一個一遍掃描的編譯程序,以加深對編譯原理的理解,掌握編譯程序的實現方法和技術。Abstract:lexicalanalysisisabasictaskinChineseinformationprocessing.TheresultsoflexicalanalysiswilldirectlyaffecttheeffectivenessoftheapplicationofChineseinformationprocessing.Theeva

3、luationandpracticalapplicationshowthatIRLASisahighprecision,highqualityandhighreliabilitylexicalanalysissystem.ItiswellknownthatsegmentationambiguityandunknownwordrecognitionarethetwomajordifficultiesinChinesewordsegmentation.Theunderstandingoflexicalanalysetheprogramatcompile,deepenoffiniteautomata

4、modelforunderstanding,masterlexicalanalysisprogramimplementationmethodandtechnology,usingCIanguagesubsetofasimpleIanguagecompilationofascannedagaincompiler,todeepentocompiletheprinciplesolution,mastercompilerimplementationmethodandtechnology.關鍵詞:詞法分析器掃描器單詞符號預處理Keywords:lexicalanalyzerwordsymbolpretr

5、eatmentscanner運用C語言設計詞法分析器,由指定文件讀入預分析的源程序,經過詞法分析器的分析,將結果寫入指定文件。本程序是在VisualStudio環境下,使用C語言作為開發工具基于實驗任務的內容及目的,實現初步的需求分析,具備詞法分析器的基本功能和整體構架。逐步細化其功能,做到相應模塊的具體化。畫出未成熟的流程圖,確定整體設計的走向,在一定范圍內約束編程活動,確保沒有大的問題及缺陷存在,然后通過將來的具體的編程設計完善流程圖。完成計算機翻譯過程的關鍵階段,它為后面的語法分析、語義分析做好準備,打好基礎,以便快速地、高質量地生成目標語言程序。二、詞法分析器的設計由于我們規定的程序語

6、句中涉及單詞較少”故在詞法分析階段忽略了單詞輸入錯誤的檢查而將編譯程序的重點放在中間代碼生成階段$詞法分析器的功能是輸入源程序輸出單詞符號$規定輸出的單詞符號格式為如下的二元式!單詞種別”單詞自身的值#2.1詞的內部定義對常量,變量,臨時變量,保留關鍵字(if,while,begin,else,do等)、關系運算符、邏輯運算符、分號、括號等,規定其內部定義如附表所示2.2詞法分析器的任務及功能221任務就編譯器基本結構而言,詞法分析(lexicalanalysis)是編譯過程的第一階段。實際上,在詞法分析之前,有些編譯器模型存在編譯預處理階段,C語言就是一個典型的例子。不過,大多數Pascal

7、編譯器都不存在預處理器。本書對編譯預處理不作討論。詞法分析的任務是從左到右掃描與分析構成源程序的字符流(字符串),把字符流分解為多個單詞(token)。每個單詞都是具有獨立含義且不可再分割的字符序列。在編譯器框架中,完成詞法分析任務的模塊稱為詞法分析器。功能:詞法分析器的基本功能是,按照語言的定義規則,逐個地讀入源程序的符號,識別出對語言有意義的符號串,即單詞符號;然后分析單詞符號的屬性,并把單詞符號及其屬性填寫在表中;同時把源程序改造成等價的計算機內部表示一一單詞記號,以便編譯的后續階段使用。(1)識別出源程序中的各個單詞符號,并將其轉換成內部編碼形式;(2)刪除無用的空白字符、回車字符以及

8、其他非實質性字符;(3)刪除注釋(4)進行詞法檢查,報告所發現的錯誤。2.3單詞符號對應的種別碼:單詞符號對應的種別碼單詞符號種別碼單詞符號種別碼bgin1:17If218Then320wile421do523lettet10=24(letter|digit)*dightdight*11=25+13;26一14(27*15)28/16#0三、詞法分析器的實現編寫詞法分析器,詞法分析器能夠識別關系算符,詞法分析器能夠識別標識符和關鍵字,詞法分析器能夠識別無符號數。編制一個能夠分析三種整數、標識符、主要運算符和主要關鍵字的詞法分析器。詞法分析是從左向右掃描每行源程序的符號,拼成單詞,換成統一的二元

9、式(單詞種別碼,單詞符號的屬性值)表示。對給定的程序通過詞法分析器識別一個個單詞符號,并以二元式(單詞種別碼,單詞符號的屬性值)顯示,設計一個詞法分析程序,理解詞法分析器實現的原理,掌握程序設計語言中的各類單詞的詞法分析方法,加深對詞法分析原理的理解。3.1主程序示意圖:關鍵字表的初值。關鍵字作為特殊標識符處理,把它們預先安排在一張表格中(稱為關鍵字表),當掃描程序識別出標識符時,查關鍵字表。如能查到匹配的單詞,貝U該單詞為關鍵字,否則為一般標識符。關鍵字表為一個字符串數組,其描述如下:Char*rwtab6=“begin”,“if”,“then”,“while”,“do”,“end”,;置初

10、值置初值置初值程序中需要用到的置初值程序中需要用到的程序中需要用到的調用掃描子程序輸出單詞二元組程序中需要用到的調用掃描子程序輸出單詞二元組要變量為syn,token和sum。3.2函數定義說明3.2函數定義說明輸出串結束?(1)search()查找并識別當前單詞類別,并給定單詞類別二元式碼,決定給定字符串類別結束碼(即單詞種別)和記錄次序碼。alphaprocess()識別當前是數組、保留字、標識符。point()識別當前字符串是指針。digitprocess()識別當前是常整數、小數、負小數。otherprocess()識別當前是其它(標點符號等)。(6)fopen()在默認路徑下打開分析

11、程序并讀入字符串。3.3程序設計實現及功能說明關鍵字關鍵字:beginifendwhlieelsewritereaddocallconstcharUntilproducerepeat運算符:+*/界符:332關鍵字的定義voidinit()for(intj=0;j18;j+)strcpy(symtablej.lexptr,strj);symtablej.token=j+3;符合的關鍵字的查找intsearch(char*temp)for(unsignedinti=0;i18;i+)if(!strcmp(symtablei.lexptr,temp)returnsymtablei.token;re

12、turn0;四、詞法分析程序的C語言源代碼:#include#includeusingnamespacestd;#defineMAX22charch=;stringkey15=begin,end,if,then,else,while,write,read,do,call,const,char,until,procedure,repeat;/字符串鍵15=“開始”,“結束”,“如果”,“當時”,“其他”,“當”,“寫”,“讀”,“做”,“訪問”,“常量”,“字符”,“直到”,“程序”,“重復”;intIskey(stringc)/關鍵字判斷inti;for(i=0;iMAX;i+)if(pare

13、(c)=0)return1;/將i作比較,返回1return0;intIsLetter(charc)/判斷是否為字母if(c=a)|(c=A)return1;elsereturn0;intlsDigit(charc)/if(c=0&c=0&c=0&c=9)return1;elsereturn0;voidanalyse(FILE*fpin)/stringarr=;while(ch=fgetc(fpin)!=EOF)/c,n判斷是否為數字無效的分析(文件及外地個人識別號)賦值if(ch=|ch=t|ch=n)elseif(IsLetter(ch)while(lsLetter(ch)|lsDigit

14、(ch)if(ch=A)ch=ch+32;arr=arr+ch;if(ch=|ch=t|ch=n)elseif(IsLetter(ch)while(lsLetter(ch)|lsDigit(ch)if(ch=A)ch=ch+32;arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);if(ch=|ch=t|ch=n)elseif(IsLetter(ch)while(lsLetter(ch)|lsDigit(ch)if(ch=A)ch=ch+32;arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);

15、if(lskey(arr)coutarrt$關鍵字endl;elsecoutarrt$普通標識符endl;elseif(IsDigit(ch)while(lsDigit(ch)|ch=.&IsDigit(fgetc(fpin)arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);coutarrt$elseswitch(ch)/case+:case-:case*:無符號實數endl;標識符分類識別case/:coutcht$case=:case/:coutcht$case/:coutcht$case=:運算符endl;break;case(case

16、)casecasecasecase(case)casecasecasecasecase(case)casecasecasecase:coutcht$case;:case:coutcht$case;case:coutcht$case;:界符endl;break;case,:case,:case,:case:ch=fgetc(fpin);if(ch=)cout:=t$elsecout=t$fseek(fpin,-1L,SEEK_CUR);if(ch=)cout:=t$elsecout=t$fseek(fpin,-1L,SEEK_CUR);break;case.:casev:ch=fgetc(fpi

17、n);if(ch=)cout=t$elseif(ch=)cout)coutt$elsecoutt$fseek(fpin,-1L,SEEK_CUR);break;case:ch=fgetc(fpin);if(ch=)cout=)coutt$elsecoutt$fseek(fpin,-1L,SEEK_CUR);if(ch=)cout:=t$elsecout=t$fseek(fpin,-1L,SEEK_CUR);break;case.:casev:ch=fgetc(fpin);if(ch=)cout=t$elseif(ch=)cout)coutt$elsecoutt$fseek(fpin,-1L,S

18、EEK_CUR);break;case:if(ch=)cout:=t$elsecout=t$fseek(fpin,-1L,SEEK_CUR);break;case.:casev:ch=fgetc(fpin);if(ch=)cout=t$elseif(ch=)cout)coutt$elsecoutt$fseek(fpin,-1L,SEEK_CUR);break;case:ch=fgetc(fpin);if(ch=)cout=)coutt$elsecoutt$fseek(fpin,-1L,SEEK_CUR);運算符endl;運算符endl;運算符endl;輸出控制符endl;運算符endl;運算符endl;運算符endl;輸入控制符endl;運算符endl;break;default:coutcht$無法識別字符endl;void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論