資源描述:
《【精品】編譯實(shí)習(xí)-詞法分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實(shí)習(xí)—-三四五六七八九十總評(píng)教師簽名成績(jī)《編譯原理》課程實(shí)習(xí)報(bào)告編號(hào):實(shí)習(xí)題冃:詞法分析器專業(yè)(班):學(xué)生學(xué)號(hào):學(xué)生姓名:任課教師:2010年12月29日1?問題定義和分析1.1實(shí)習(xí)口的1.2實(shí)習(xí)要求1.3要求分析2.程序設(shè)計(jì)2.1.數(shù)據(jù)結(jié)構(gòu)2.2.算法及程序流程圖2.3.界面程序運(yùn)行實(shí)例3.1實(shí)例13.2實(shí)例23.3實(shí)例33.4實(shí)例43.5非合法詞法輸入4.部分程序核心源代碼5?總結(jié)1?問題定義與分析1.1實(shí)習(xí)目的構(gòu)造一個(gè)小語言的詞法分析程序。1.2實(shí)習(xí)耍求(1)設(shè)計(jì)一個(gè)包含簡(jiǎn)單算術(shù)表達(dá)式、賦值語句、IF語句的小語言的文法。(2)
2、根據(jù)此文法,構(gòu)造一詞法分析程序。輸入以“#”為結(jié)束符的源程序,輸岀為各類單詞表和單詞串文件。(3)源程序和輸出的單詞串均以文件的形式存放。單詞的口身值均為其對(duì)應(yīng)的表的指針,如標(biāo)識(shí)符表的指針、常數(shù)表的指針等。(4)提交:實(shí)習(xí)報(bào)告、程序運(yùn)行結(jié)果。1.3要求分析1.3.1輸入部分輸入為文法源程序,定義CString類型變量m_EnterString,川于獲取編輯框1的輸入,將H轉(zhuǎn)換為char類型的數(shù)纟H.,用s保研,RPchar*s=m_EnterString.GetBuffer(),再將s中的內(nèi)容以文件形式保存于D盤test.Dd中,即
3、:ofstreamoutfile;intx=0;outfile.open("D:\test.txt");while(s[x]!='#'){outfile?s[x];x++;}outfile?s[x];outfilc.closcO;到此,以將輸入的內(nèi)容保存到D:\test.txtol.3.2輸出部分輸出為字符串與其的對(duì)應(yīng)的種別碼,對(duì)于不能識(shí)別的符號(hào),輸出為wrongsymbolo定義CString類型變量m_OutputString,用于輸出詞法分析結(jié)果到編輯框2,用如下函數(shù)給m.OutputString添加輸出內(nèi)容,如下即為當(dāng)所
4、識(shí)別的內(nèi)容為關(guān)鍵字begin時(shí)將begin與其種別碼添入的代碼:m_OutputString.Insert(m_OutputString.GetLength(),arr.c_str());m_OutputString.Insert(m_OutputString.GetLength(),Hlrn);1.3.3待分析的簡(jiǎn)單的詞法(1)關(guān)鍵字:beginendifthenelsewhiledointchar(2)標(biāo)識(shí)符和數(shù)字(3)運(yùn)算符+*/=:=<<=?<>>>=?(4)界限符{}[1();,(5)結(jié)束符#1.3.4各種單詞符號(hào)對(duì)
5、應(yīng)的類別碼單詞符號(hào)類別碼單詞符號(hào)類別碼begin1V18end2<=19if3?20then4<>21else5>22while6>=23do7?24int8(25char9)26標(biāo)識(shí)符10{27常數(shù)11}28+12I29-13■30*1431/15[32=16]33■?—17#02.設(shè)計(jì)2.1數(shù)據(jù)結(jié)構(gòu)定義了以下字符串類型數(shù)據(jù):CStringm_EnterString:用于接受編輯框1輸入的源程序CStringm_OutputString;:用于保存輸出到編輯框2的內(nèi)容,即單詞符號(hào)與其對(duì)應(yīng)的類別碼char*s=m_EnterStri
6、ng.GetBuffer():用于將輸入的Cstring類型轉(zhuǎn)換為字符數(shù)組類型,以存入文件屮ofstreamoutfile:用于將源程序?qū)懭胛募﨔ILE*fpin:用于讀取文件內(nèi)容,即源程序界面數(shù)據(jù)結(jié)構(gòu):IDC_STATIC1(Group-boxControl)放輸入框的框IDC_STATIC2(Group-boxControl)放輸出框的框IDC_EDIT1(EditControl)IDC_EDIT2(EditControl)IDOK(ButtonControl)IDCANCEL(ButtonControl)輸入編輯框輸出編輯框確
7、定按鈕取消按鈕界面如下圖所示:2.2.算法及程序流程圖2.2.1算法設(shè)計(jì):算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意思的單詞符號(hào),無獨(dú)立意義的字符視為錯(cuò)誤字符,基本思想是根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的各類,拉出相應(yīng)的單詞符號(hào),根據(jù)字符與類別碼對(duì)應(yīng)表,找到相應(yīng)的類別碼并輸出,具體見流程圖。2.2.1程序流程圖如下:2.3.界面3.程序運(yùn)行實(shí)例3.1實(shí)例13.2實(shí)例21I+In二一n=begintls:^3.3實(shí)例3輸入:(以#結(jié)束)輸出:begininti=0;intj=3;intk⑸;do{k[i]:=j;}while
8、(i<=j);end#K27k10[33j10]34?■17?J10■9}3128while6(25i10<=19二j10)26?fend3120確定取消3.4實(shí)例4血詞法分一計(jì)科六班段勇輸入:(以#結(jié)束)輸出:beginintk=1