資源描述:
《詞法分析實驗報告》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、編譯原理實驗名稱:詞法分析器班級:計科0705姓名:鄭磊學(xué)號:040711752010年4月29日詞法分析器一.實驗?zāi)康囊笥肅語言編寫一個詞法分析器,使之能識別輸入串,并把分析結(jié)果(單詞符號,標識符,關(guān)鍵字等等)輸出。輸入源程序,輸出單詞符號,本詞法分析器可以辨別關(guān)鍵字,標識符,常數(shù),運算符號,邏輯符號和某些界符,運用了文件讀入來獲取源程序代碼,再對該源程序代碼進行詞法分析,逐個識別出其中的單詞,并將其轉(zhuǎn)換為內(nèi)部編碼形式的單詞符號串作確為輸出。通常,可采用二元式(value,class)來表示一個單詞符號的內(nèi)部編碼,其中:class為一類型碼,用于表示該單詞的類別;value則是該單詞之值
2、。二.單詞分類表將單詞分為五類:1.:保留字2:標識符3:數(shù)字符4:運算符5:界符1.對給定的程序通過詞法分析器弄夠識別一個個單詞符號,并以二元式(單詞種別碼,單詞符號的屬性值)顯示。而本程序則是通過對給定路徑的文件的分析后以單詞符號和文字提示顯示。2.本程序我們自行規(guī)定(即單詞分類表):(1)關(guān)鍵字:"auto","double","union","int","struct","break","else","long","switch","case","enum","register","typedef","char","extern","return","const","float","
3、short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","while","static","if"};運算符:"+","-","*","/","="界符:",",";","{","}","(",")","[","]",".","#"(4)其他標記如字符串,表示以字母開頭的標識符。(5)空格、回車、換行符過濾。在屏幕上顯示如下:=>1保留字=>2標識符=>3數(shù)字符=>4運算符=>5界符三.單詞狀態(tài)圖標識符不存在時存入空白字母或數(shù)字OO字母保留字已存在開始O數(shù)字數(shù)字非
4、數(shù)字字母小數(shù)點小數(shù)點報錯O數(shù)字O小數(shù)點數(shù)字非數(shù)字字母小數(shù)點O=號字母報錯字母報錯OOO=號非=號(*/狀態(tài)與=相同)=號OO+號非+號=號/號O(-狀態(tài)與+相同)O,等界符+號*號*號/號OOO/號非/或*非/號非t,n,r,fOO號t或n或r或f(號O(號計數(shù)匹配O)號)號計數(shù)不匹配出錯(中括號大括號狀態(tài)與小括號相同)O四.算法描述由主程序main()先調(diào)入index()函數(shù)進入主界面,用戶根據(jù)提示輸入要進行詞法分析的文件,然后進入analysis()函數(shù)調(diào)入用戶輸入的文件進行分析。當所讀入的文件不為空時開始分析,1:進行注釋判斷,將注釋消除2:過濾空格及判斷出的注釋符3:判斷標識符和保
5、留字4:判斷數(shù)字5:判斷運算符和界符(同時進行括號匹配)6:在各部分中增加相對的錯誤提示7:將結(jié)果輸出到界面以及相應(yīng)的out.txt。五.程序結(jié)構(gòu)#defineBaoliuzi1#defineBiaoshifu2#defineShuzifu3#defineYunsuanfu4#defineJiefu5intmain()intanalysis()/*用來實現(xiàn):讀寫文件,判斷注釋,對空格進行過濾,判斷注釋符,判斷標識符和保留字,判斷是數(shù)字,判斷是運算符或者是界符,判斷括號匹配。*/intletterjudge(charch)//判斷一個字符是否是字母intnumberjudge(charch)/
6、/判斷一個字符是否是數(shù)字六.運行調(diào)試結(jié)果通過運行調(diào)試,初步實現(xiàn)所需功能,報錯功能仍有較大空間提高七.個人在詞法分析器中的任務(wù)我在里面負責(zé)判斷標識符,保留字,數(shù)字。intletterjudge(charch);intnumberjudge(charch);并且參與程序整體的維護和構(gòu)架,以及幾大模塊之間的銜接。在標識符和保留字中,充分利用文件的一些操作和程序。在數(shù)字判斷方面考慮到數(shù)字的類型,分類進行處理,最后的判斷輸出到文件out.txt中。八.設(shè)計技巧及體會進行詞法分析器之前,現(xiàn)在網(wǎng)上參考了一些分析器的設(shè)計思路,從而確定了自己的設(shè)計方向,開始設(shè)計完成后僅僅是不到二百行的一個簡易程序,通過觀察老
7、師檢查別的設(shè)計小組時提出的問題,發(fā)現(xiàn)自己的程序仍存在很大的缺陷,例如:沒有報錯,無法消除注釋和注釋符,相同的標識符在輸出文件中重復(fù)出現(xiàn)。通過全組人員不斷的修改調(diào)試以及運行結(jié)果檢測,程序的應(yīng)用性有了很大的提高。通過這次程序設(shè)計,加強了我與人配合共同完成一個程序的合作經(jīng)驗,并且更加清楚明白了許多程序設(shè)計時需要注意到的細節(jié)問題,熟悉了程序語言及構(gòu)造詞法分析器的原理,總之,這次試驗讓我受益匪淺。(注:源程序清單請見電