詞法分析器的設計與實現 編譯原理試驗報告_第1頁
詞法分析器的設計與實現 編譯原理試驗報告_第2頁
詞法分析器的設計與實現 編譯原理試驗報告_第3頁
詞法分析器的設計與實現 編譯原理試驗報告_第4頁
詞法分析器的設計與實現 編譯原理試驗報告_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——詞法分析器的設計與實現編譯原理試驗報告

中北大學軟件學院

實驗報告

專業(yè)軟件工程課程名稱編譯原理學號姓名

輔導教師張靜成績

試驗日期2023.5.19試驗時間14:00~16:001試驗名稱:詞法分析器的設計與實現2、試驗目的(1)把握C語言單詞符號的劃分、正規(guī)式、狀態(tài)轉換圖及詞法分析器的實現。(2)把握詞法分析程序的作用。3、試驗要求(1)對任給的一個C語言源程序,能夠濾掉空格、回車換行符、tab鍵及解釋。(2)識別各類單詞符號,如關鍵字、標識符、運算符、常數、界符,結果以二元式形式輸出,并構造符號表。(3)輸出有詞法錯誤的單詞及所在行號。(在此階段只能識別有限的詞法錯誤)4、試驗原理根據掃描到的單詞符號的第一個字符的種類,分別轉到相應的程序進行處理。這些程序的功能就是識別以相應字符開頭的各類單詞符號。5、試驗步驟(1)根據C語言各類單詞的正規(guī)式,構造能識別各類單詞的狀態(tài)轉換圖。(2)根據狀態(tài)轉換圖,構造識別各類單詞的詞法分析器。6、狀態(tài)轉換圖及詞法分析程序

開始輸入源文件路徑否路徑是否有效是開啟源文件初始化文件指針識別指針內容文件終止?否是空格,空白或換行嗎是跳過該字符是終止否是字母嗎是將字符參與字符數組Word[]否是數字嗎否是界符嗎否將字符參與字符數組Word[]是將字符參與字符數組Word[]是指向下一字符識別指針內容是輸出word為界符輸出Word內容為不可識別將字符參與字符數組Word[]將字符參與字符數組Word[]指向下一字符指向下一字符是字母惑數字嗎回退否將word與關鍵字表key進行匹配輸出word為普通標示符是數字嗎否輸出word為常數指向下一字符否匹配?是輸出word為關鍵字//詞法分析程序.cpp#include#include#include#include//定義關鍵字char*Key[10]={\charWord[20],ch;//存儲識別出的單詞流intIsAlpha(charc){//判斷是否為字母

if(((c='0'elsereturn0;}intIsKey(char*Word){//識別關鍵字函數intm,i;for(i=0;i

}else{fseek(fp,-1,1);printf(\運算符\\n\\n\判斷結果為\}break;case'*':case'/':case'!':case'=':ch=fgetc(fp);if(ch=='='){printf(\運算符\\n\\n\}else{fseek(fp,-1,1);printf(\運算符\\n\\n\}break;case'':ch=fgetc(fp);Word[1]=ch;if(ch=='=')printf(\運算符\\n\\n\else{fseek(fp,-1,1);printf(\運算符\\n\\n\}break;case'%':ch=fgetc(fp);Word[1]=ch;if(ch=='='){printf(\運算符\\n\\n\if(IsAlpha(ch))printf(\類型標識符\\n\\n\else{

fseek(fp,-1,1);printf(\取余運算符\\n\\n\}break;default:printf(\無法識別字符!\\n\\n\}}}main(){charin_fn[30];//文件路徑FILE*fp;printf(\請輸入源文件路徑及后綴名(源文件需以‘$’結尾):\while(1){gets(in_fn);//scanf(\if((fp=fopen(in_fn,\break;//讀取文件內容,并返回文件指針,該指針指向文件的第一個字符elseprintf(\文件路徑錯誤!請重新輸入:\}printf(\詞法分析結果如下:\\n\do{ch=fgetc(fp);if(ch=='$')break;//文件以#結尾,作為掃描終止條件elseif(ch==''||ch=='\\t'||ch=='\\n'){}//忽略空格,空白,和換行else{fseek(fp,-1,1);//回退一個字節(jié)開始識別單詞流scanner(fp);}}while(ch!='$');system(\return(0);}//test.cpp測試程序路徑:D:\\test.cppmain(){intscore;chargrade;printf(\scanf(\grade=score>=90?'A':(scoregt;=60?'B':'C');printf(\}$

7、測試及結果1、登陸界面:2、出錯異常處理:3、結果分析:

8、心得在本次試驗中,我改正了一個一直以來的概念錯誤:main不是關鍵字,它定義為程序的入口,是主函數!在本試驗中,雖然我把main初始化在關鍵字表(字符指針類型數組)*Key[10]中,當與該數組中字符串進行比較時,若與main匹配成功,則返回2,若為其他關鍵字則返回1,以此來把main從關鍵字中區(qū)別出來。在本試驗中的關鍵字表只初始化了幾個常用

溫馨提示

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

評論

0/150

提交評論