版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)詞法分析程序?qū)嶒?yàn)報(bào)告實(shí)驗(yàn)內(nèi)容設(shè)計(jì)并實(shí)現(xiàn)C語(yǔ)言的詞法分析程序,要求如下:可以識(shí)別C語(yǔ)言編寫(xiě)的源程序中的每個(gè)單詞符號(hào),并以記號(hào)的形式輸出每個(gè)單詞??梢越y(tǒng)計(jì)并讀取源程序中的注釋。可以統(tǒng)計(jì)源程序中的語(yǔ)句行數(shù)、單詞個(gè)數(shù)和字符個(gè)數(shù),并輸出統(tǒng)計(jì)結(jié)果。其中回車(chē)換行不計(jì)入字符個(gè)數(shù),空格不計(jì)算為單詞。檢查源程序中存在的錯(cuò)誤,并可以報(bào)告錯(cuò)誤所在的行列位置。發(fā)現(xiàn)源程序中存在錯(cuò)誤后,進(jìn)行適當(dāng)?shù)幕謴?fù),使詞法分析可以繼續(xù)進(jìn)行,通過(guò)一次詞法分析處理,可以檢查并報(bào)告源程序中存在的所有錯(cuò)誤。程序特色全部實(shí)
2、現(xiàn)上述實(shí)驗(yàn)要求標(biāo)識(shí)符規(guī)則符合標(biāo)準(zhǔn)C語(yǔ)言要求,允許以下劃線開(kāi)頭,并包含下劃線可識(shí)別C語(yǔ)言允許的所有無(wú)符號(hào)實(shí)數(shù)形式,包括整數(shù)和浮點(diǎn)數(shù)。其中浮點(diǎn)數(shù)可包含指數(shù)e或E,并遵循C語(yǔ)言允許省略整數(shù)部分(如.5表示0.5)或省略小數(shù)部分(如2.E2表示2.0*102)可識(shí)別幾乎C語(yǔ)言所有標(biāo)點(diǎn)符號(hào)和運(yùn)算符,共計(jì)50個(gè)可正確識(shí)別字符和字符串中的轉(zhuǎn)義字符,如和“abcd”均可識(shí)別為單詞不完整,并指出錯(cuò)誤的行和列可識(shí)別C語(yǔ)言的兩種注釋?zhuān)?和/*/,其中/*/按照C語(yǔ)言要求允許跨越多行語(yǔ)言說(shuō)明標(biāo)識(shí)符:以字母或下劃線開(kāi)頭,后跟字母、數(shù)字或下劃線組成的字符串關(guān)鍵字:C語(yǔ)言所有32個(gè)關(guān)鍵字無(wú)符號(hào)數(shù):C語(yǔ)言所允許的所有十進(jìn)制實(shí)
3、數(shù)形式,包括整數(shù)和浮點(diǎn)數(shù)。其中浮點(diǎn)數(shù)包括C語(yǔ)言允許的省略整數(shù)部分(如.5表示0.5)和省略小數(shù)部分(如2.E2表示2.0*102)算數(shù)運(yùn)算符:+、+、-、-、*、/、%賦值運(yùn)算符:=、+=、-=、*=、/=、%=、&=、|=、=關(guān)系運(yùn)算符:、=、!=邏輯運(yùn)算符:&、|、!位運(yùn)算符:&、|、其他符號(hào):-、.、#、(、)、?、:、,、;、字符:以單引號(hào)開(kāi)始,以單引號(hào)結(jié)束,不能跨越多行字符串:以雙引號(hào)開(kāi)始,以雙引號(hào)結(jié)束,不能跨越多行注釋?zhuān)阂?開(kāi)始到行末,或者以/*開(kāi)始,以*/結(jié)束,可以跨越多行運(yùn)行環(huán)境CodeBlocks-13.12 with GCC compiler from TDM-GCC (4
4、.7.1, 32 bit)輸入形式命令行界面,指定C語(yǔ)言源文件作為輸入輸出形式所有標(biāo)識(shí)符寫(xiě)入指定的符號(hào)表文件分離出一個(gè)單詞后,對(duì)識(shí)別出的記號(hào)以二元式的形式輸出到用戶(hù)指定文件,其形式為記號(hào)屬性記號(hào)屬性IDkeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeykeynumarith-oparith-oparith-oparith-oparith-oparith-oparith-op符號(hào)表序號(hào)autodoubleintstructbreakelselongswitchc
5、aseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifstaticwhile實(shí)數(shù)值+-*/%asgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-opasgn-oprel-oprel-oprel-oprel-oprel-oprel-oplog-oplog-oplog-opbit-opbit-opbit-opbit-opbit-opbit-opothersothers
6、othersothersothersothersothersothers others othersothers others others others charstringcomments=+=-=*=/=%=&=|=!=&|!&|-.#()?:,;字符字面量字符串字面量-主要數(shù)據(jù)結(jié)構(gòu)vector table; /字符串向量,臨時(shí)存儲(chǔ)符號(hào)表set keywords; /字符串集合,存放所有關(guān)鍵字string buffer; /輸入緩沖區(qū),存放文件的一行string token; /字符串,存放當(dāng)前單詞string:iterator forward; /字符串buffer的迭代器,向前掃描字
7、符核心算法識(shí)別無(wú)符號(hào)數(shù)的有限狀態(tài)自動(dòng)機(jī)s0s23starts1s4s5s6Errordigite/Edigitdigitothers.digitothersdigitdigitdigit+/-/* 由上圖構(gòu)造相應(yīng)的無(wú)符號(hào)數(shù)識(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;
8、else notEnd = fasle; break; case 23: if(*forward = 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
9、; break; case 6: if(isdigit(*forward) state = 5; elseError;notEnd = false; break; default:break; /* 讀取一個(gè)字符后,如果是語(yǔ)言所定義的單詞符號(hào)的開(kāi)始字符,則轉(zhuǎn)移到相應(yīng)的識(shí)別識(shí)別過(guò)程,否則進(jìn)入錯(cuò)誤處理狀態(tài) */int main() init; open infile, outfile, tablefile; while (true) if (getline(infile, buffer, n) = true) +line; cnt_char += column; column = 0;forwar
10、d = buffer.begin(); else cnt_char += column; write 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 key; else outfile ID; break; case 0.9: token.append;
11、 state = 1; get_digits(); state = 0; outfile num; break; case +,-,*,%: token.append; +forward; if(*forward = =) outfile asgn-op; else outfile arith-op; break; case /: token.append; +forward; if(*forward = =) outfile asgn-op; else if(*forward = /) while(forward != buffer.end() read comments; outfile
12、comments; else if(*forward = *) if(get_comments() outfile comments; else close infile, outfile, tablefile; else outfile arith-op; break; case &,|,: token.append; +forward; if(*forward = =) outfile asgn-op; else if(*forward = *(forward-1) outfile log-op; else outfile bit-op; break; case : token.appen
13、d; +forward; outfile bit-op; break; case : token.append; +forward; if(*forward = =) token.append; outfile rel-op; else if(*forward = *(forward-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; ca
14、se !: token.append; +forward; if(*forward = =) outfile rel-op; else outfile log-op; break; case : token.append; +forward; while(*forward != ) 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; +
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版房地產(chǎn)反擔(dān)保抵押合同附件十3篇
- 二零二五年度綠色物流鋼材運(yùn)輸服務(wù)合同2篇
- 二零二五年度車(chē)輛租賃與車(chē)輛銷(xiāo)售服務(wù)合同2篇
- 二零二五年度高端商務(wù)汽車(chē)租賃服務(wù)合同協(xié)議2篇
- 二零二五版冷鏈物流訂餐服務(wù)合同范本與質(zhì)量保證2篇
- 二零二五年擔(dān)保合同范本修訂要點(diǎn)與執(zhí)行建議6篇
- 二零二五版房產(chǎn)抵押投資合作合同范本3篇
- 二零二五版物流運(yùn)輸企業(yè)勞動(dòng)合同范本與司機(jī)權(quán)益保障服務(wù)合同3篇
- 二零二五年度房地產(chǎn)經(jīng)紀(jì)服務(wù)合同補(bǔ)充協(xié)議2篇
- 二零二五版12333職業(yè)培訓(xùn)補(bǔ)貼政策合同3篇
- 上海紐約大學(xué)自主招生面試試題綜合素質(zhì)答案技巧
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 2022年物流服務(wù)師職業(yè)技能競(jìng)賽理論題庫(kù)(含答案)
- ?;钒踩僮饕?guī)程
- 連鎖遺傳和遺傳作圖
- DB63∕T 1885-2020 青海省城鎮(zhèn)老舊小區(qū)綜合改造技術(shù)規(guī)程
- 高邊坡施工危險(xiǎn)源辨識(shí)及分析
- 中海地產(chǎn)設(shè)計(jì)管理程序
- 簡(jiǎn)譜視唱15942
- 《城鎮(zhèn)燃?xì)庠O(shè)施運(yùn)行、維護(hù)和搶修安全技術(shù)規(guī)程》(CJJ51-2006)
- 項(xiàng)目付款審核流程(visio流程圖)
評(píng)論
0/150
提交評(píng)論