



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、題目:詞法分析器的設計與實現一、引言 .3二、詞法分析器的設計 .42.1 詞的內部定義 .42.2詞法分析器的任務及功能 .52.2.1任務 .52.2.2功能: .52.3單詞符號對應的種別碼: .6三、詞法分析器的實現 .63.1主程序示意圖: .73.2函數定義說明 .73.3程序設計實現及功能說明 .81關鍵字8關鍵字的定義8符合的關鍵字的查找8四、詞法分析程序的C語言源代碼:8五、 結果分析:11摘要:詞法分析是中文信息處理中的一項基礎性工作。詞法分析結果的好壞將直接影響中文信息處理上層應用的效果。通過權威的評測和實際應用表明 ,IRLAS 是一個高精度、高質量的、高可靠性的詞法分
2、析系統。 眾所周知 , 切分歧義和未登錄詞識別是中文分詞中的兩大難點。理解詞法分析在編譯程序中的作用,加深對有窮自動機模型的理解,掌握詞法分析程序的實現方法和技術,用 c 語言對一個簡單語言的子集編制一個一遍掃描的編譯程序,以加深對編譯原理的理解, 掌握編譯程序的實現方法和技術。Abstract:lexical analysis is a basic task in Chineseinformation processing. The results of lexical analysis willdirectlyaffectthe effectivenessof the applicatio
3、nof Chinese2information processing. The evaluation and practicalapplication show that IRLAS is a high precision, high qualityand high reliabilitylexicalanalysis system. Itis wellknownthat segmentation ambiguity and unknown word recognition arethe two major difficulties in Chinese word segmentation.
4、Theunderstanding of lexical analyse the program at compile,deepenof finite automata model for understanding, master lexicalanalysis program implementation method and technology, usingC language subsetof a simplelanguage compilationof a scannedagain compiler, to deepen to compile the principle soluti
5、on, master compiler implementation method and technology.關鍵詞: 詞法分析器掃描器單詞符號預處理Keywords: lexical analyzer word symbol pretreatment scanner一、引言3運用 C 語言設計詞法分析器,由指定文件讀入預分析的源程序,經過詞法分析器的分析,將結果寫入指定文件。本程序是在 VisualStudio環境下,使用C 語言作為開發工具。基于實驗任務的內容及目的,實現初步的需求分析,具備詞法分析器的基本功能和整體構架。逐步細化其功能,做到相應模塊的具體化。畫出未成熟的流程圖,確定整
6、體設計的走向,在一定范圍內約束編程活動,確保沒有大的問題及缺陷存在,然后通過將來的具體的編程設計完善流程圖。完成計算機翻譯過程的關鍵階段, 它為后面的語法分析、語義分析做好準備 , 打好基礎 , 以便快速地、高質量地生成目標語言程序。二、詞法分析器的設計由于我們規定的程序語句中涉及單詞較少" 故在詞法分析階段忽略了單詞輸入錯誤的檢查 " 而將編譯程序的重點放在中間代碼生成階段$詞法分析器的功能是輸入源程序" 輸出單詞符號 $規定輸出的單詞符號格式為如下的二元式%!單詞種別 "單詞自身的值#2.1 詞的內部定義對常量,變量,臨時變量,保留關鍵字(if,wh
7、ile,begin,else,do等 ) 、關系運算符、邏輯運算符、分號、括號等, 規定其內部定義如附表所示42.2 詞法分析器的任務及功能任務就編譯器基本結構而言,詞法分析(lexicalanalysis)是編譯過程的第一階段。實際上,在詞法分析之前,有些編譯器模型存在編譯預處理階段,C 語言就是一個典型的例子。不過,大多數Pascal 編譯器都不存在預處理器。本書對編譯預處理不作討論。詞法分析的任務是從左到右掃描與分析構成源程序的字符流(字符串),把字符流分解為多個單詞( token )。每個單詞都是具有獨立含義且不可再分割的字符序列。在編譯器框架中,完成詞法分析任務的模塊稱為詞法分析器。
8、功能:詞法分析器的基本功能是, 按照語言的定義規則, 逐個地讀入源程序的符號, 識別出對語言有意義的符號串, 即單詞符號; 然后分析單詞符號的屬性, 并把單詞符號及其屬性填寫在表中;同時把源程序改造成等價的計算機內部表示單詞記號,以便編譯的后續階段5使用。( 1)識別出源程序中的各個單詞符號,并將其轉換成內部編碼形式;( 2)刪除無用的空白字符、回車字符以及其他非實質性字符;( 3)刪除注釋( 4)進行詞法檢查,報告所發現的錯誤。2.3 單詞符號對應的種別碼:單詞符號對應的種別碼單詞符號種別碼單詞符號種別碼bgin1:17If2: =18Then3<20wile4<>21do
9、5<=22end6>23lettet10>=24( letter|digit) *dight dight*11=25+13;2614(27*15)28/16#0三、詞法分析器的實現編寫詞法分析器, 詞法分析器能夠識別關系算符,詞法分析器能夠識別標識符和關鍵字,詞法分析器能夠識別無符號數。編制一個能夠分析三種整數、標識符、 主要運算符和主要關鍵字的詞法分析器。詞法分析是從左向右掃描每行源程序的符號,拼成單詞, 換成統一的二元式( 單詞種別碼, 單詞符號的屬性值) 表示。對給定的程序通過詞法分析器識別一個個單詞符號,并以二元式( 單詞種別碼,單詞符號的屬性值) 顯示, 設計一個詞
10、法分析程序,理解6詞法分析器實現的原理,掌握程序設計語言中的各類單詞的詞法分析方法,加深對詞法分析原理的理解。3.1 主程序示意圖: 關鍵字表的初值。關鍵字作為特殊標識符處理,把它們預先安排在一張表格中(稱為關鍵字表),當掃描程序識別出標識符時,查關鍵字表。如能查到匹配的單詞,則該單詞為關鍵字,否則為一般標識符。關鍵字表為一個字符串數組,其描述如下:Char *rwtab6 = “ begin ” ,“ if ”,“ then ”,“ while ” ,“ do”,“ end”,;置初值調用掃描子程序輸出單詞二元組輸出串結束?是結束(2) 程序中需要用到的主要變量為syn, token 和 s
11、um。3.2 函數定義說明(1) search()查找并識別當前單詞類別,并給定單詞類別二元式碼,決定給定字符串類別碼(即單詞種別)和記錄次序碼。(2) alphaprocess()識別當前是數組、保留字、標識符。(3) point()識別當前字符串是指針。(4) digitprocess()識別當前是常整數、小數、負小數。(5) otherprocess()識別當前是其它(標點符號等)。7(6) fopen()在默認路徑下打開分析程序并讀入字符串。3.3 程序設計實現及功能說明關鍵字關鍵字:beginifend whlieelsewritereaddo callconstcharUntilp
12、roducerepeat運算符:+*/界符:(),.;:關鍵字的定義void init() for( int j=0; j<18; j+) strcpy(symtablej.lexptr,strj); symtablej.token=j+3; 符合的關鍵字的查找int search(char *temp)for(unsigned int i=0;i < 18;i+) if(!strcmp(symtablei.lexptr ,temp) return symtablei.token; return 0;四、詞法分析程序的C語言源代碼:#include <iostream>
13、#include<string>using namespace std;8#define MAX 22char ch =' 'string key15="begin","end","if","then","else","while","write","read","do","call","const","char","u
14、ntil","procedure","repeat"/ 字符串鍵 15 = “開始”, “結束”, “如果”, “當時”, “其他”, “當”, “寫”,“讀”,“做”,“訪問”,“常量”,“字符”,“直到”,“程序”,“重復” ;int Iskey(string c)/關鍵字判斷int i;for(i=0;i<MAX;i+) if(pare(c)=0) return 1;/將 i 作比較,返回1return 0;int IsLetter(char c) /判斷是否為字母if(c<='z')&
15、&(c>='a')|(c<='Z')&&(c>='A') return 1;else return 0;int IsDigit(char c)/判斷是否為數字if(c>='0'&&c<='9') return 1;else return 0;void analyse(FILE *fpin)/無效的分析(文件及外地個人識別號)string arr=""while(ch=fgetc(fpin)!=EOF) /賦值arr="
16、;"if(ch=' '|ch='t'|ch='n')else if(IsLetter(ch)while(IsLetter(ch)|IsDigit(ch) if(ch<='Z')&&(ch>='A') ch=ch+32;arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);if (Iskey(arr)cout<<arr<<"t$關鍵字 "<<endl;else cout<
17、<arr<<"t$普通標識符 "<<endl;else if(IsDigit(ch)while(IsDigit(ch)|ch='.'&&IsDigit(fgetc(fpin)arr=arr+ch;ch=fgetc(fpin);fseek(fpin,-1L,SEEK_CUR);9cout<<arr<<"t$無符號實數 "<<endl;else switch(ch)/標識符分類識別case'+':case'-' :case'
18、;*' :case'/' :cout<<ch<<"t$運算符 "<<endl;break;case'=' :case'(' :case')' :case'' :case'' :case'' :case'' :cout<<ch<<"t$界符 "<<endl;break;case'' :case',' :case'
19、:' :ch=fgetc(fpin);if(ch='=') cout<<":="<<"t$運算符 "<<endl;else cout<<"="<<"t$運算符 "<<endl;fseek(fpin,-1L,SEEK_CUR);break;case'.' :case'<' :ch=fgetc(fpin);if(ch='=')cout<<"<=
20、"<<"t$運算符 "<<endl;else if(ch='<')cout<<"<<"<<"t$輸出控制符 "<<endl;else if(ch='>') cout<<"<>"<<"t$運算符 "<<endl;elsecout<<"<"<<"t$運算符 "
21、<<endl;fseek(fpin,-1L,SEEK_CUR);break;case'>' :ch=fgetc(fpin);if(ch='=') cout<<">="<<"t$運算符 "<<endl;if(ch='>')cout<<">>"<<"t$輸入控制符 "<<endl;else cout<<">"<<"t$運算符 "<<endl;fseek(fpin,-1L,SEEK_CUR);break;default : cout<<ch<<"t$無法識別字符 "<<endl;void main()char in_fn30;FILE * fpin;cout<<"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紹興電動推拉棚施工方案
- 山東杏林科技職業學院《商務英語閱讀2》2023-2024學年第二學期期末試卷
- 四平職業大學《憲法與法理學前沿問題研究》2023-2024學年第二學期期末試卷
- 濟南幼兒師范高等專科學校《移動后臺設計與開發》2023-2024學年第一學期期末試卷
- 營口理工學院《藥廠設備及車間工藝設計》2023-2024學年第一學期期末試卷
- 宜春幼兒師范高等專科學校《概率論與數理統計II》2023-2024學年第二學期期末試卷
- 吉林交通職業技術學院《裝飾材料與構造》2023-2024學年第二學期期末試卷
- 洛陽文化旅游職業學院《農業環境監測》2023-2024學年第二學期期末試卷
- 煙臺鐵皮房防水施工方案
- 2025至2031年中國水晶活性金深層滋養去角質層行業投資前景及策略咨詢研究報告
- 醫院保安服務投標方案(技術方案)
- 2025-2030中國保健品行業市場發展分析及投資前景預測研究報告
- 經皮球囊擴張椎體后凸成形術(PKP)及病例分享
- 中國慢性腰背痛診療指南(2025 版)解讀課件
- 眼科學重點總結-臨床醫學
- 監獄改擴建項目可行性研究報告-送審稿
- 同步練習:4.1 光的直線傳播
- Mission-Planner地面站操作手冊
- 2025+DeepSeek自學手冊:從理論(模型訓練)到實踐(模型應用)
- 小學數學課程與教學論教案
- 神經重癥氣管切開患者氣道功能康復與管理專家共識
評論
0/150
提交評論