編譯原理詞法分析器實(shí)踐報(bào)告_第1頁
編譯原理詞法分析器實(shí)踐報(bào)告_第2頁
編譯原理詞法分析器實(shí)踐報(bào)告_第3頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、理工大學(xué) 軟件學(xué)院編譯原理 項(xiàng)目實(shí)踐報(bào)告目:詞法分析器 級(jí):軟件15-4班業(yè):軟件工程:呂小勝春祥學(xué)號(hào)指導(dǎo)教師 日期1514010414一、需求分析 1二、系統(tǒng)設(shè)計(jì) 1(一)系統(tǒng)中的數(shù)據(jù)定義 1(二)系統(tǒng)的概要設(shè)計(jì) 2(三)系統(tǒng)的詳細(xì)設(shè)計(jì) 2(四)系統(tǒng)的核心算法 3三、系統(tǒng)編碼及運(yùn)行 3(一)系統(tǒng)開發(fā)涉及的軟件 3(二)系統(tǒng)運(yùn)行界面及結(jié)果 4四、系統(tǒng)測(cè)試 5五、總結(jié) 6附錄(源代碼) 6、需求分析詞法分析(Lexical Analysis)是編譯的第一階段。詞法分析器的主要任務(wù)是讀入源程序的輸入字符、將他們組成詞素,生成并輸出一個(gè)詞法單元序列, 每個(gè)詞法單元對(duì)應(yīng)一個(gè)詞素。這個(gè)詞法單元序列被輸出

2、到語法分析器進(jìn)行語法 分析。二、系統(tǒng)設(shè)計(jì)(一)系統(tǒng)中的數(shù)據(jù)定義本詞法分析器演示的是C語言的一個(gè)子集,故字符集如下:(1)標(biāo)識(shí)符:以字母開頭的字母數(shù)字串。常熟(3) 保留字:auto, break, case, char, con st, con ti nue, default, do, double, else, enum, exter n, float, for, goto, if, i nt, I ong,register, retur n, short, sig ned, sizeof, static, struct, switch,typedef, union, un sig ned,

3、 void, volatile, while(4) 運(yùn)算符: +、-、*、/、% 、=、!=、=、=、=、+、-、& && | ;(5) 界符: ( ) :“” # ,單詞分類號(hào)標(biāo)識(shí)符1常數(shù)2保留字3界符4運(yùn)算符5單詞分類表(二)系統(tǒng)的概要設(shè)計(jì)(三)系統(tǒng)的詳細(xì)設(shè)計(jì)1、TestLexer()2、void writeFile(String str1,StringBuilder number)3、boolean isDigit(char ch) 4、boolean isLetter(char ch)5、boolean isKeyWord(StringBuilder str)6

4、、boolean isOperator(char ch)7、boolean isSeparators(char ch)(四)系統(tǒng)的核心算法TestLexer()程序入口Stri ngBuffer buffer;文件讀入緩沖區(qū)Char cs;字符變量,存放源程序字符Stri ngBuilder sb;字符串,存放切割出的字詞boolea n isLetter(char ch)判斷ch是否為字母boolea n isDigit(char ch)判斷是否為數(shù)字boolean isKeyWord(Stri ng)判斷是否為關(guān)鍵字boolea n isOperator(char)判斷是否為運(yùn)算符bool

5、ea n isSeparators(char)判斷是否為分隔符void writeFile(String str1,StringBuilder nu按照二元式規(guī)則寫入文件mber)三、系統(tǒng)編碼及運(yùn)行(一)系統(tǒng)開發(fā)涉及的軟件WPSfc字、eclipse、(二)系統(tǒng)運(yùn)行界面及結(jié)果intint a = G;for(int i = 0; i <- 100; i+) String bb = "haha"r*色turn 0;aaa.txt - ki夢(mèng)W字符 字符符 字字符符 符符 符符 留識(shí)符符符留識(shí)算數(shù)符留符留識(shí)M數(shù)符識(shí)算數(shù)符識(shí)算符 保標(biāo)界界界保標(biāo)運(yùn)常界保界尿標(biāo)運(yùn)常界標(biāo)運(yùn)常界標(biāo)

6、運(yùn)界1/ n t *1 門la ink3,L4.£ 久3.L5.N4.3,4.3,L5.2.4.L5,2,4.L5,4>fx Jt J(x- /I- /v zv zk zt -X n zc flirit mainLuz Jr JZ LJr t r t ) o- )BUT- o Jr. VIJ J. -1Jo. n 1JZ lz J - - o- .1/ J- * JJ 1 a - - o p f* i 1 = o ;1 X? 1 - p T1 + .)rinta0for( in: i0<=IflO+)四、系統(tǒng)測(cè)試五、總結(jié)通過此次實(shí)驗(yàn),讓我了解到如何設(shè)計(jì)、編制并調(diào)試詞法 分

7、析程序,熟悉了構(gòu)造詞法分析程序的手工方式的相關(guān)原理,加深了對(duì)編譯原理詞法分析的理解,本次使用java語言直接編寫此法分析程序,也讓我重新熟悉了java語言的相關(guān)容,加深了對(duì) java語言的用途的理解。本程序的數(shù)據(jù) 輸入采取直接從文件中讀取,而不是由鍵盤輸入,因此在測(cè)試過程中,輸入得到大大簡(jiǎn)化, 但是本程序的關(guān)鍵字表只初始化了一部分關(guān)鍵字,還可繼續(xù) 擴(kuò)充(只需擴(kuò)大數(shù)組,向其中補(bǔ)充要添加的關(guān)鍵字),而且 程序的測(cè)試數(shù)據(jù)存在不足,程序可能存在未發(fā)現(xiàn)的漏洞,以 上兩點(diǎn)有待改善。附錄import java.io.File;import java.io.FileReader;import java.io.

8、FileWriter;import java.io0Exception;import java.ionputStream;public class TestLexer /保留字集staticStringkeyWords= "auto" , "break","case","char","const","continue","default" , "do" , "double","else",&quo

9、t;enum","extern","float","for" , "goto" , "if" , "int","long","register","return","short","signed" , "sizeof" , "static"5"struct","switch"5"

10、typedef","union" , "unsigned" , "void"5"volatile" , "while" ;/運(yùn)算符集static char operators =+''-''*''/''%''=''<''>''!''&''I'/界符集staticchar Separators = &#

11、39;', '', '' , '','(',')''''IIH# ,:' ;throwspublic static void main(String args)Exception /讀取文件File f = new File( "d:/aa.txt" );FileReader r =_ new FileReader(f); char cs = new char ( int ) fength(); int length = r.read(cs);System

12、. out .println(cs);System. out.println( "-IV);int flag = 0;);StringBuilder sb =new StringBuilder();for ( int i = 0; i < cs.length ; i+) /如果是字母if ( isLetter (csi) if (csi+1 !=&& ! isOperator (csi+1) && !&&! isOperator (csi+1)&&! isDigit (csi+1)isSeparator (csi+

13、1)/如果后一個(gè)字符不是空格sb.append(csi); continue ;else sb.append(csi);if (isKeyWorc(sb)sb);writeFile ("3",sb = new StringBuilder();else writeFile ("1" , sb);sb = new StringBuilder(); continue else /如果是數(shù)字 if ( isDigit (csi) if ( isDigit (csi + 1) / 如果前后都是數(shù)字的話sb.append(csi); continue ; else

14、sb.append(csi);writeFile ("2" , sb);sb = new StringBuilder(); continue ;/如果是界符if ( isSeparator (csi) sb.append(csi);writeFile ("4" , sb);sb = new StringBuilder(); continue ;/如果是運(yùn)算符if ( isOperator (csi) if (isOperator (csi+1)sb.append(csi);continue ; else sb.append(csi); writeFile

15、 ("5" , sb); sb = new StringBuilder(); continue ;/判斷是否為數(shù)字public static boolean isDigit( char ch) boolean result = false ;if (ch <= 57 && ch >= 48) result = true ;return result;/判斷是否為字母boolean result = falseif (ch >= 65 && ch <= 90) | (ch >= 97 && ch &

16、lt;=122) result = true ;return result;/判斷是否為關(guān)鍵字public static boolean isKeyWord(StringBuilder str) boolean result = false ;String str1 = new String(str);for (int i = 0; i < keyWords length ; i+)if (keyWord$i.endsWith(str1)result = true ;return result;/判斷是否為運(yùn)算符boolean result = false ;for (int i = 0

17、; i < operators .length ; i+) if (operators i = ch)result = true ;return result;/判斷是否為界符public static boolean isSeparator( char ch) boolean result = false ;for ( int i = 0; i < Separators . length ; i+) if ( Separators i = ch) result = true ;return result;/按照二元式規(guī)則寫入文件StringBuilder number)throw

18、s lOException + "(" + str1 +"," +String str = number +"t"number +")"if(str1.endsWith("1" ) str = str +"t"+ "t"+ "標(biāo)識(shí)符"if(str1.endsWith("2" ) str = str +"t"+ "t"+ "常數(shù)"if(str1.endsWith("3" ) str = str +"t"+ "t"+"保留字"if(str1.endsWit

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論