詞法分析程序實驗報告_第1頁
詞法分析程序實驗報告_第2頁
詞法分析程序實驗報告_第3頁
詞法分析程序實驗報告_第4頁
詞法分析程序實驗報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

1、詞法分析程序實驗報告 班級:xxxx211305姓名:戈策學號:xxxx211221詞法分析程序實驗報告實驗內容設計并實現(xiàn)C語言的詞法分析程序,要求如下:可以識別C語言編寫的源程序中的每個單詞符號,并以記號的形式輸出每個單詞??梢越y(tǒng)計并讀取源程序中的注釋。可以統(tǒng)計源程序中的語句行數(shù)、單詞個數(shù)和字符個數(shù),并輸出統(tǒng)計結果。其中回車換行不計入字符個數(shù),空格不計算為單詞。檢查源程序中存在的錯誤,并可以報告錯誤所在的行列位置。發(fā)現(xiàn)源程序中存在錯誤后,進行適當?shù)幕謴停乖~法分析可以繼續(xù)進行,通過一次詞法分析處理,可以檢查并報告源程序中存在的所有錯誤。程序特色全部實現(xiàn)上述實驗要求標識符規(guī)則符合標準C語言要求

2、,允許以下劃線開頭,并包含下劃線可識別C語言允許的所有無符號實數(shù)形式,包括整數(shù)和浮點數(shù)。其中浮點數(shù)可包含指數(shù)e或E,并遵循C語言允許省略整數(shù)部分(如.5表示0.5)或省略小數(shù)部分(如2.E2表示2.0*102)可識別幾乎C語言所有標點符號和運算符,共計50個可正確識別字符和字符串中的轉義字符,如和“abcd”均可識別為單詞不完整,并指出錯誤的行和列可識別C語言的兩種注釋,/和/*/,其中/*/按照C語言要求允許跨越多行語言說明標識符:以字母或下劃線開頭,后跟字母、數(shù)字或下劃線組成的字符串關鍵字:C語言所有32個關鍵字無符號數(shù):C語言所允許的所有十進制實數(shù)形式,包括整數(shù)和浮點數(shù)。其中浮點數(shù)包括C

3、語言允許的省略整數(shù)部分(如.5表示0.5)和省略小數(shù)部分(如2.E2表示2.0*102)算數(shù)運算符:+、+、-、-、*、/、%賦值運算符:=、+=、-=、*=、/=、%=、&=輸入形式命令行界面,指定C語言源文件作為輸入輸出形式所有標識符寫入指定的符號表文件分離出一個單詞后,對識別出的記號以二元式的形式輸出到用戶指定文件,其形式為記號屬性記號屬性IDkeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeynumarith-oparith-oparith-opa

4、rith-oparith-oparith-oparith-op符號表序號autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifstaticwhile實數(shù)值+-*/%asgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-oprel-oprel-oprel-oprel-oprel

5、-oprel-oplog-oplog-oplog-opbit-opbit-opbit-opbit-opbit-opbit-opothersothersothersothersothersothersothersothers others othersothers others others others charstringcomments=+=-=*=/=string token; /字符串,存放當前單詞string:iterator forward; /字符串buffer的迭代器,向前掃描字符核心算法識別無符號數(shù)的有限狀態(tài)自動機ss0s23starts1s4s5s6Errordigite/

6、Edigitdigitothers.digitothersdigitdigitdigit+/-/* 由上圖構造相應的無符號數(shù)識別子程序 */void get_digits() while(forward != buffer.end() & notEnd) switch(state) case 1: if(*forward = .) state = 23; else if(*forward = E|e) state = 4; else if(isdigit(*forward) state = 1; else notEnd = fasle; break; case 23: if(*forward

7、= E|e) state = 4; else if(isdigit(*forward) state =23; else notEnd = false; break; case 4: if(*forward = +|-) state = 6; else if(isdigit(*forward) state = 5; else Error;notEnd = false; break; case 5: if(isdigit(*forward) state = 5; else notEnd = false; break; case 6: if(isdigit(*forward) state = 5;

8、elseError;notEnd = false; break; default:break; /* 讀取一個字符后,如果是語言所定義的單詞符號的開始字符,則轉移到相應的識別識別過程,否則進入錯誤處理狀態(tài) */int main() init; open infile, outfile, tablefile; while (true) if (getline(infile, buffer, n) = true) +line; cnt_char += column; column = 0;forward = buffer.begin(); else cnt_char += column; writ

9、e table to tablefile; close infile, outfile, tablefile; output to console; get_nbc; switch (C) case a.z,A.Z,_: token.append; while(digit | letter | _) token.append; if(iskey) table_insert(); outfile : token.append; +forward; if(*forward = =) token.append; outfile rel-op; else if(*forward = *(forward

10、-1) token.append; outfile bit-op; else outfile rel-op; break; case =: token.append; +forward; if(*forward = =) outfile rel-op; else outfile asgn-op; break; case !: token.append; +forward; if(*forward = =) outfile rel-op; else outfile log-op; break; case : token.append; +forward; while(*forward != )

11、token.append; +forward; if(*(forward-1) = ) token.append; +forward; if(forward = buffer.end() Error; else outfile string; break; case : token.append; +forward; while(*forward != ) token.append; +forward; if(*(forward-1) = ) token.append; +forward; if(forward = buffer.end() Error; else outfile char; break; case .: token.append; +forward; if(isdigit) get_digits(); outfile num; break

溫馨提示

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

評論

0/150

提交評論