編譯原理實(shí)驗(yàn)-詞法分析器_第1頁
編譯原理實(shí)驗(yàn)-詞法分析器_第2頁
編譯原理實(shí)驗(yàn)-詞法分析器_第3頁
編譯原理實(shí)驗(yàn)-詞法分析器_第4頁
編譯原理實(shí)驗(yàn)-詞法分析器_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

編譯原理實(shí)驗(yàn)-詞法分析器編譯原理實(shí)驗(yàn)-詞法分析器編譯原理實(shí)驗(yàn)-詞法分析器資料僅供參考文件編號:2022年4月編譯原理實(shí)驗(yàn)-詞法分析器版本號:A修改號:1頁次:1.0審核:批準(zhǔn):發(fā)布日期:洛陽理工學(xué)院實(shí)驗(yàn)報告院部計(jì)算機(jī)系班級B150402學(xué)號姓名課程名稱編譯原理實(shí)驗(yàn)日期實(shí)驗(yàn)名稱詞法分析器成績實(shí)驗(yàn)?zāi)康模杭由顚υ~法分析過程的理解;加強(qiáng)對詞法分析方法的掌握;能夠采用一種編程語言實(shí)現(xiàn)簡單的詞法分析;能夠使自己編寫的程序?qū)唵蔚某绦蚱芜M(jìn)行詞法分析。實(shí)驗(yàn)條件:裝有Windows操作系統(tǒng),MicrosoftVisualC++。實(shí)驗(yàn)內(nèi)容:自定義一種程序設(shè)計(jì)語言,或選擇已有的一種高級語言(C語言),編制它的詞法分析程序。實(shí)驗(yàn)要求:1.對單詞的構(gòu)成規(guī)則有明確的定義2.編寫的程序能夠正確識別源程序中的單詞符號3.識別出的單詞以<種別碼,值>的形式保存在符號表中4.詞法分析中源程序和分析后的符號表均保存在.txt文件中5.有一定的檢查錯誤的能力。遇到錯誤時可顯示“Error”,然后跳過錯誤部分繼續(xù)顯示。6.實(shí)驗(yàn)報告包括以下內(nèi)容(1)編程思路、流程圖、源代碼(2)上機(jī)調(diào)試時發(fā)現(xiàn)的問題,以及解決的過程(3)所使用的測試數(shù)據(jù)及結(jié)果(4)心得體會實(shí)驗(yàn)步驟1.給出目標(biāo)語言的所有單詞符號及種別編碼、單詞符號的狀態(tài)轉(zhuǎn)換圖。2.依次讀入源程序,對源程序進(jìn)行單詞切分和識別,直到源程序結(jié)束。3.對正確的單詞,按照它的種別以<種別碼,值>的形式保存在符號表中。4.對不正確的單詞,做出錯誤處理。實(shí)驗(yàn)內(nèi)容:1.編程思路:、實(shí)現(xiàn)預(yù)處理功能源程序中可能包含有對程序執(zhí)行無意義的符號,要求將其剔除。首先編制一個源程序的輸入過程,從鍵盤、文件或文本框輸入若干行語句,依次存入輸入緩沖區(qū)(字符型數(shù)據(jù));然后編制一個預(yù)處理子程序,去掉輸入串中的回車符、換行符和跳格符等編輯性文字;把多個空白符合并為一個;去掉注釋。、實(shí)現(xiàn)詞法分析功能輸入:所給文法的源程序字符串。輸出:將每個單詞或數(shù)字以及他對應(yīng)的種別碼和類型輸出到文件中。具體實(shí)現(xiàn)時,可以將單詞的二元組用結(jié)構(gòu)進(jìn)行處理。、待分析的C語言子集的詞法1)關(guān)鍵字"char","int","if","else","var","return","break","do","while","for","double","float","short"2)運(yùn)算符和界符+-*/<<><=>>==;()[]\|&{}\\#3)空格由空白、制表符和換行符組成空格一般用來分隔ID、NUM、專用符號和關(guān)鍵字,詞法分析階段通常被忽略。、各種單詞符號對應(yīng)的種別碼表1各種單詞符號的種別碼單詞符號種別碼char1int2if3else4var5return6break7do8while9for10double11float12short13標(biāo)識符14數(shù)字15符號16-40、詞法分析程序的主要算法思想算法的基本任務(wù)是從文件中讀出字符串表示的源程序中識別出具有獨(dú)立意義的單詞符號,其基本思想是根據(jù)掃描到的單詞符號的第一個字符的種類,拼出相應(yīng)的單詞符號,并輸出到文件中。2.流程圖:主程序流程圖是是否輸入串結(jié)束輸入編譯后的文件名調(diào)用分析子程序結(jié)束開始輸入打開的文件名關(guān)閉文件文件為空是輸入串結(jié)束是主函數(shù)流程圖分析函數(shù)流程圖否否否是否是符號字母數(shù)字否是返回0變量初始化忽略空格是否文件結(jié)束獲取一個單詞獲取數(shù)字在文件中寫入當(dāng)前單詞以及對應(yīng)的關(guān)鍵字種別碼獲取一個完整符號返回開始在文件中寫入當(dāng)前單詞以及對應(yīng)的符號種別碼在文件中寫入當(dāng)前單詞以及對應(yīng)的符號種別碼在文件中寫入當(dāng)前單詞以及標(biāo)識符種別碼12將當(dāng)前單詞添加到標(biāo)識符表中存在于數(shù)字表存在于標(biāo)識符表存在于符號表存在于關(guān)鍵字表是將當(dāng)前數(shù)字添加到數(shù)字表中將當(dāng)前符號添加到符號表中是分析函數(shù)流程圖3.源代碼:#include<>#include<>#include<>#include<>#include<>inti,row=0,line=0;chara[1000];機(jī)調(diào)試時發(fā)現(xiàn)的問題,以及解決的過程:1)文件讀取錯誤。運(yùn)行程序后,輸入文件路徑后,顯示“打開詞法分析輸入文件有錯”。解決:我看了下程序,沒發(fā)現(xiàn)什么明顯錯誤,然后看了文件名,也是對的,點(diǎn)開文件屬性,發(fā)現(xiàn)文件名顯示的是,意識到機(jī)房電腦默認(rèn)沒顯示后綴,自己起名字的時候多加了一個.txt;2)運(yùn)行過程中強(qiáng)行停止。解決:檢查了一下程序,發(fā)現(xiàn)關(guān)鍵字表數(shù)組下標(biāo)溢出,后來改了循環(huán)的條件。3)運(yùn)行不能正常停止。解決:MS-DOS命令窗口未關(guān)閉的時候,檢查輸出文件是否存在,發(fā)現(xiàn)存在但是打開為空,然后關(guān)閉運(yùn)行窗口后再打開發(fā)現(xiàn)輸出結(jié)果已經(jīng)寫入了文件,只是沒有執(zhí)行fclose()所以打開后看不到內(nèi)容。4)某些關(guān)鍵字被作為標(biāo)識符輸出。解決:檢查程序發(fā)現(xiàn)關(guān)鍵字表不夠完整,所以不能輸出不存在于關(guān)鍵字表中的種別碼,然后完善了關(guān)鍵字表。5)單詞、數(shù)字、符號重復(fù)出現(xiàn)時,序號不一致。解決:增加了一個標(biāo)識符表、數(shù)字表以及符號表,判斷過詞性時,先判斷一下是否存在于其詞性表中,然后在輸出。5.所使用的測試數(shù)據(jù)及結(jié)果:測試數(shù)據(jù):運(yùn)行效果輸出結(jié)果實(shí)驗(yàn)總結(jié):通過這次實(shí)驗(yàn),我利用C語言做出了詞性分析的程序,理解了該知識點(diǎn)以及學(xué)科之間的融合滲透,全面系

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論