版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 題目: 詞法分析器的設(shè)計與實現(xiàn) 摘要:詞法分析是中文信息處理中的一項基礎(chǔ)性工作。詞法分析結(jié)果的好壞將直接影響中文信息處理上層應(yīng)用的效果。通過權(quán)威的評測和實際應(yīng)用表明,IRLAS是一個高精度、高質(zhì)量的、高可靠性的詞法分析系統(tǒng)。 眾所周知,切分歧義和未登錄詞識別是中文分詞中的兩大難點。理解詞法分析在編譯程序中的作用,加深對有窮自動機(jī)模型的理解,掌握詞法分析程序的實現(xiàn)方法和技術(shù),用c語言對一個簡單語言的子集編制一個一遍掃描的編譯程序,以加深對編譯原理的理解,掌握編譯程序的實現(xiàn)方法和技術(shù)。Abstract: lexical analysis is a basic task
2、in Chinese information processing. The results of lexical analysis will directly affect the effectiveness of the application of Chinese information processing. The evaluation and practical application show that IRLAS is a high precision, high quality and high reliability lexical analysis system. It
3、is well known that segmentation ambiguity and unknown word recognition are the two major difficulties in Chinese word segmentation. The understanding of lexical analyse the program at compile, deepen of finite automata model for understanding, master lexical analysis program implementation method an
4、d technology, using C language subset of a simple language compilation of a scanned again compiler, to deepen to compile the principle solution, master compiler implementation method and technology. 關(guān)鍵詞:詞法分析器 掃描器 單詞符號 預(yù)處理Keywords: lexical analyzer word symbol pretreatment scanner一、引言運
5、用C語言設(shè)計詞法分析器,由指定文件讀入預(yù)分析的源程序,經(jīng)過詞法分析器的分析,將結(jié)果寫入指定文件。本程序是在Visual Studio環(huán)境下,使用C語言作為開發(fā)工具。基于實驗任務(wù)的內(nèi)容及目的,實現(xiàn)初步的需求分析,具備詞法分析器的基本功能和整體構(gòu)架。逐步細(xì)化其功能,做到相應(yīng)模塊的具體化。畫出未成熟的流程圖,確定整體設(shè)計的走向,在一定范圍內(nèi)約束編程活動,確保沒有大的問題及缺陷存在,然后通過將來的具體的編程設(shè)計完善流程圖。完成計算機(jī)翻譯過程的關(guān)鍵階段,它為后面的語法分析、語義分析做好準(zhǔn)備,打好基礎(chǔ),以便快速地、高質(zhì)量地生成目標(biāo)語言程序。二、詞法分析器的設(shè)計由于我們規(guī)定的程序語句中涉及單詞較少
6、"故在詞法分析 階段忽略了單詞輸入錯誤的檢查"而將編譯程序的重點放在中 間代碼生成階段$詞法分析器的功能是輸入源程序"輸出單詞 符號$規(guī)定輸出的單詞符號格式為如下的二元式%!單詞種別" 單詞自身的值#2.1詞的內(nèi)部定義 對常量,變量,臨時變量,保留關(guān)鍵字(if,while,begin,else,do等)、關(guān)系運算符、邏輯運算符、分號、括號等,規(guī)定其內(nèi)部定義如附表所示2.2詞法分析器的任務(wù)及功能 2.2.1任務(wù)就編譯器基本結(jié)構(gòu)而言,詞法分析(lexical analysis)是編譯過程的第一階段。實際上,在詞法分析之前,有些編譯器模型存在編譯預(yù)處理階段,C
7、語言就是一個典型的例子。不過,大多數(shù)Pascal編譯器都不存在預(yù)處理器。本書對編譯預(yù)處理不作討論。詞法分析的任務(wù)是從左到右掃描與分析構(gòu)成源程序的字符流(字符串),把字符流分解為多個單詞(token)。每個單詞都是具有獨立含義且不可再分割的字符序列。在編譯器框架中,完成詞法分析任務(wù)的模塊稱為詞法分析器。 2.2.2 功能:詞法分析器的基本功能是,按照語言的定義規(guī)則,逐個地讀入源程序的符號,識別出對語言有意義的符號串,即單詞符號;然后分析單詞符號的屬性,并把單詞符號及其屬性填寫在表中; 同時把源程序改造成等價的計算機(jī)內(nèi)部表示單詞記號, 以便編譯的后續(xù)階段使用。 (1) 識別出源程序中的各個單詞符號
8、,并將其轉(zhuǎn)換成內(nèi)部編碼形式; (2) 刪除無用的空白字符、回車字符以及其他非實質(zhì)性字符; (3) 刪除注釋(4) 進(jìn)行詞法檢查,報告所發(fā)現(xiàn)的錯誤。2.3單詞符號對應(yīng)的種別碼:單詞符號對應(yīng)的種別碼單詞符號種別碼 單詞符號種別碼bgin1:17If2:=18Then3<20wile4<>21do5<=22end6>23lettet(letter|digit)*10>=24dight dight*11=25+13;2614(27*15)28/16#0三、詞法分析器的實現(xiàn)編寫詞法分析器,詞法分析器能夠識別關(guān)系算符,詞法分析器能夠識別標(biāo)識符和關(guān)鍵字,詞法分析器能夠識別
9、無符號數(shù)。編制一個能夠分析三種整數(shù)、標(biāo)識符、主要運算符和主要關(guān)鍵字的詞法分析器。詞法分析是從左向右掃描每行源程序的符號,拼成單詞,換成統(tǒng)一的二元式 (單詞種別碼,單詞符號的屬性值)表示。對給定的程序通過詞法分析器識別一個個單詞符號,并以二元式(單詞種別碼,單詞符號的屬性值)顯示,設(shè)計一個詞法分析程序,理解詞法分析器實現(xiàn)的原理,掌握程序設(shè)計語言中的各類單詞的詞法分析方法,加深對詞法分析原理的理解。3.1主程序示意圖: 關(guān)鍵字表的初值。關(guān)鍵字作為特殊標(biāo)識符處理,把它們預(yù)先安排在一張表格中(稱為關(guān)鍵字表),當(dāng)掃描程序識別出標(biāo)識符時,查關(guān)鍵字表。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一
10、般標(biāo)識符。關(guān)鍵字表為一個字符串?dāng)?shù)組,其描述如下:Char *rwtab6 = “begin”, “if”, “then”, “while”, “do”, “end”,; 置初值 調(diào)用掃描子程序結(jié)束輸出串結(jié)束?輸出單詞二元組 是(2)程序中需要用到的主要變量為syn,token和sum。3.2函數(shù)定義說明(1) search() 查找并識別當(dāng)前單詞類別,并給定單詞類別二元式碼,決定給定字符串類別碼(即單詞種別)和記錄次序碼。(2) alphaprocess() 識別當(dāng)前是數(shù)組、保留字、標(biāo)識符。(3) point() 識別當(dāng)前字符串是指針。(4) digitprocess() 識別當(dāng)前是常整數(shù)、小
11、數(shù)、負(fù)小數(shù)。(5) otherprocess() 識別當(dāng)前是其它(標(biāo)點符號等)。(6) fopen() 在默認(rèn)路徑下打開分析程序并讀入字符串。3.3程序設(shè)計實現(xiàn)及功能說明3.3.1關(guān)鍵字關(guān)鍵字:beginifendwhlieelsewritereaddocallconstcharUntilproduce repeat運算符:+*/界符:(),.;:3.3.2關(guān)鍵字的定義void init() for( int j=0; j<18; j+) strcpy(symtablej.lexptr,strj); symtablej.token=j+3; 3.3.3符合的關(guān)鍵字的查找int searc
12、h(char *temp)for(unsigned int i=0;i < 18;i+) if(!strcmp(symtablei.lexptr ,temp)return symtablei.token; return 0; 四、詞法分析程序的C語言源代碼:#include <iostream>#include<string>using namespace std;#define MAX 22 char ch =' 'string key15="begin","end","if",&quo
13、t;then","else","while","write","read","do", "call","const","char","until","procedure","repeat"/字符串鍵 15 = “開始”,“結(jié)束”,“如果”,“當(dāng)時”,“其他”,“當(dāng)”,“寫”,“讀”,“做”,“訪問”,“常量”,“字符”,“直到”,“程序”,“重復(fù)”;int Iskey
14、(string c) /關(guān)鍵字判斷 int i; for(i=0;i<MAX;i+) if(pare(c)=0) return 1; /將i作比較,返回1 return 0;int IsLetter(char c) /判斷是否為字母 if(c<='z')&&(c>='a')|(c<='Z')&&(c>='A') return 1; else return 0;int IsDigit(char c) /判斷是否為數(shù)字 if(c>='0'
15、;&&c<='9') return 1; else return 0;void analyse(FILE *fpin) /無效的分析(文件及外地個人識別號) string arr="" while(ch=fgetc(fpin)!=EOF) /賦值 arr="" if(ch=' '|ch='t'|ch='n') else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch<='Z')&&a
16、mp;(ch>='A') ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)cout<<arr<<"t$關(guān)鍵字"<<endl; else cout<<arr<<"t$普通標(biāo)識符"<<endl; else if(IsDigit(ch) while(IsDigit(ch)|ch='.'&&IsDigit(fgetc(fpin) a
17、rr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); cout<<arr<<"t$無符號實數(shù)"<<endl; else switch(ch) /標(biāo)識符分類識別 case'+': case'-' : case'*' : case'/' :cout<<ch<<"t$運算符"<<endl;break;case'=' : case'(' : ca
18、se')' : case'' : case'' : case'' :case'' :cout<<ch<<"t$界符"<<endl;break;case'' : case',' :case':' :ch=fgetc(fpin); if(ch='=') cout<<":="<<"t$運算符"<<endl; else cout&
19、lt;<"="<<"t$運算符"<<endl; fseek(fpin,-1L,SEEK_CUR); break;case'.' : case'<' :ch=fgetc(fpin); if(ch='=')cout<<"<="<<"t$運算符"<<endl; else if(ch='<')cout<<"<<"<<&qu
20、ot;t$輸出控制符"<<endl; else if(ch='>') cout<<"<>"<<"t$運算符"<<endl; elsecout<<"<"<<"t$運算符"<<endl; fseek(fpin,-1L,SEEK_CUR); break;case'>' :ch=fgetc(fpin); if(ch='=') cout<<&q
21、uot;>="<<"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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高級鉗工試題庫及答案
- 風(fēng)險投資學(xué)考試題及答案
- 規(guī)范煤礦安全管理制度
- 會計電算化規(guī)范制度
- 規(guī)范寵物買賣制度
- 疫情外賣規(guī)范管理制度
- 病人交接規(guī)范制度
- 膠帶使用規(guī)范管理制度
- 規(guī)范發(fā)票管理制度
- 門窗售后制度規(guī)范
- 北京市2025年第一次普通高中學(xué)業(yè)水平合格性考試政治試題(原卷版)
- GB/T 45732-2025再生資源回收利用體系回收站點建設(shè)規(guī)范
- CJ/T 120-2016給水涂塑復(fù)合鋼管
- 中國特色社會主義知識點總結(jié)中職高考政治一輪復(fù)習(xí)
- 計算機(jī)應(yīng)用專業(yè)發(fā)展規(guī)劃
- 結(jié)算審核實施方案
- 企業(yè)管理的基礎(chǔ)工作包括哪些內(nèi)容
- 2025-2030中國奶瓶消毒烘干器行業(yè)市場發(fā)展分析及競爭格局與投資前景研究報告
- 鋁合金門窗工程技術(shù)規(guī)范
- 食材配送服務(wù)方案投標(biāo)文件(技術(shù)標(biāo))
- 電力儲能知識培訓(xùn)課件
評論
0/150
提交評論