版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、北郵編譯原理-詞法分析文檔和程序?qū)嶒瀳蟾姘嗉墸?4姓名: oneseven學號:一題目:詞法分析程序設(shè)計與實現(xiàn)二實驗內(nèi)容:設(shè)計并實現(xiàn) c 語言的詞法分析程序,要求如下。(1) 可以識別出用c語言編寫的源程序中的每個單詞符號,并以記號的形式輸出每個單詞符號。(2) 可以識別并讀取源程序中的注釋。(3) 可以統(tǒng)計源程序中的語句行數(shù)、單詞個數(shù)和字符個數(shù),其中標點和空格不計算為單詞,并輸出統(tǒng)計結(jié)果。(4) 檢查源程序中存在的非法字符錯誤,并可以報告錯誤所在的行列位置。三實現(xiàn)要求:采用c/c+作為實現(xiàn)語言,手工編寫詞法分析程序。四實現(xiàn)功能:基本完成了實驗內(nèi)容中要求的所有功能。(1)識別出源程序中的每個單
2、詞符號,并以記號的形式輸出每個單詞符號(2)識別并讀取源程序中的注釋(3) 統(tǒng)計源程序中的語句行數(shù)、單詞個數(shù)和字符個數(shù)(4) 檢查源程序中存在的非法字符錯誤,并可以報告錯誤所在的行列位置。注:本程序未把注釋中的單詞符號,“”中的單詞符號統(tǒng)計在單詞個數(shù)中。單詞個數(shù)只包括了標示符,關(guān)鍵字,無符號數(shù)。五實驗原理:1.詞法分析程序的功能: 輸入源程序,輸出單詞符號的記號形式,如圖所示:詞法分析器 源程序à詞法分析器 à單詞符號的記號形式2.處理過程:每次調(diào)用詞法分析程序,它均能自動繼續(xù)掃描下去,形成下一個單詞,直至整個源程序全部掃描完畢,并形成相應(yīng)的單詞串形式的源程序。&
3、#160;六代碼#include<iostream> #include<fstream>#include<string>#include <iomanip>using namespace std;string keyword32="auto","break","case","char","const", .'z': case 'a'.'z': case '_': word+; whil
4、e(isalpha(c)|isdigit(c)|c='_') str+=c; get(); if(c=''|c=''|c='$'|c='#') int tag=column; while(isalpha(c)|isdigit(c)|c='_'|c=''|c=''|c='$'|c='#') str+=c; get(); outf<<setw(10)<<str<<setw(30)<<"
5、;error"<<setw(30)<<"錯誤在第"<<row<<"行第"<<tag<<"列"<<endl; str="" break; if(find_key(str) outf<<setw(10)<<str<<setw(30)<<str<<setw(30)<<"關(guān)鍵字"<<endl; str=""
6、else outf<<setw(10)<<str<<setw(30)<<"id"<<setw(30)<<"標示符"<<endl; str="" break; case '0'.'9': word+; while(isdigit(c)|c='.'|c='e'|c='e') str+=c; if(c='e'|c='e') get(); str+=
7、c; get(); if(isalpha(c) int tag=column; while(isalpha(c)|c='_'|isdigit(c)|c=''|c=''|c='$'|c='#') str+=c; get(); outf<<setw(10)<<str<<setw(30)<<"error"<<setw(30)<<"錯誤在第"<<row<<"行第"<
8、;<tag<<"列"<<endl; str="" break; outf<<setw(10)<<str<<setw(30)<<"num"<<setw(30)<<"無符號數(shù)"<<endl; str="" break; case'>': get(); if(c='=') outf<<setw(10)<<">=&
9、quot;<<setw(30)<<"relop"<<setw(30)<<"關(guān)系運算符"<<endl; else if(c='>') outf<<setw(10)<<">>"<<setw(30)<<"bit_op"<<setw(30)<<"位運算符"<<endl; else outf<<setw(10)<
10、<">"<<setw(30)<<"relop"<<setw(30)<<"關(guān)系運算符"<<endl; break; get(); break; case'<': get(); if(c='=') outf<<setw(10)<<"<="<<setw(30)<<"relop"<<setw(30)<<"關(guān)系
11、運算符"<<endl; else if(c='<') outf<<setw(10)<<"<<"<<setw(30)<<"bit_op"<<setw(30)<<"位運算符"<<endl; else outf<<setw(10)<<"<"<<setw(30)<<"relop"<<setw(30)&
12、lt;<"關(guān)系運算符"<<endl; break; get(); break; case'=': get(); if(c='=') outf<<setw(10)<<"="<<setw(30)<<"relop"<<setw(30)<<"關(guān)系運算符"<<endl; else outf<<setw(10)<<"="<<setw(30)
13、<<"assign_op"<<setw(30)<<"賦值符"<<endl; break; get(); break; case'!': get(); if(c='=') outf<<setw(10)<<"!="<<setw(30)<<"relop"<<setw(30)<<"關(guān)系運算符"<<endl; else outf<<
14、setw(10)<<"!"<<setw(30)<<"logic_op"<<setw(30)<<"邏輯運算符"<<endl; break; get(); break; case'|': get(); if(c='|') outf<<setw(10)<<"|"<<setw(30)<<"relop"<<setw(30)<<&qu
15、ot;邏輯運算符"<<endl; else outf<<setw(10)<<"|"<<setw(30)<<"logic_op"<<setw(30)<<"位運算符"<<endl; break; get(); break; case'&': get(); if(c='&') outf<<setw(10)<<"&&"<<
16、;setw(30)<<"relop"<<setw(30)<<"邏輯運算符"<<endl; else outf<<setw(10)<<"&"<<setw(30)<<"logic_op"<<setw(30)<<"位運算符"<<endl; break; get(); break; case'+': get(); if(c='+')
17、outf<<setw(10)<<"+"<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; else if(c='=') outf<<setw(10)<<"+="<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; else
18、 outf<<setw(10)<<"+"<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; break; get(); break; case'-': get(); if(c='-') outf<<setw(10)<<"-"<<setw(30)<<"alg_op"<<setw(30)&
19、lt;<"運算符"<<endl; else if(c='=') outf<<setw(10)<<"-="<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; else outf<<setw(10)<<"-"<<setw(30)<<"alg_op"<<setw(30)
20、<<"運算符"<<endl; break; get(); break; case'*': get(); if(c='=') outf<<setw(10)<<"*="<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; else outf<<setw(10)<<"*"<<setw(30)&
21、lt;<"alg_op"<<setw(30)<<"運算符"<<endl; break; get(); break; case '"': str+=c; get(); while(c!='"') str+=c; get(); if(c=' '|c='t') character-; str+='"' outf<<setw(10)<<str<<setw(30)<<
22、"literal"<<setw(30)<<"字符串"<<endl; str="" get(); break; case'/': str+=c; get(); if(c='=') outf<<setw(10)<<"/="<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; else if(c=
23、'/') str+=c; get(); while(c!='n'&&c!=eof) str+=c; get(); character-; outf<<setw(10)<<str<<setw(30)<<"annotation"<<setw(30)<<"注釋"<<endl; else if(c='*') str+=c; get(); char tag=c; while(tag!='*'&&
24、amp;c!='/'&&c!=eof) str+=c; tag=c; choice(); get(); str+=c; outf<<setw(10)<<str<<setw(30)<<"annotation"<<setw(30)<<"注釋"<<endl; else outf<<setw(10)<<"/"<<setw(30)<<"alg_op"<<setw(30)<<"運算符"<<endl; str="" break; str
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人貸款協(xié)議樣本(2024年度版)版
- 2025年度電商客服外包服務(wù)滿意度調(diào)查合同4篇
- 二零二五年度充值卡充值業(yè)務(wù)合作伙伴協(xié)議4篇
- 2025年度船舶船員聘用及船舶動力系統(tǒng)維護合同4篇
- 二零二五年度工業(yè)地產(chǎn)承包招商合作協(xié)議書3篇
- 23-24年項目部治理人員安全培訓考試題附下載答案可打印
- 2023年-2024年新員工入職前安全教育培訓試題附完整答案(奪冠)
- 二零二五年度電力設(shè)備安裝工程師勞動合同范本3篇
- 2023年員工三級安全培訓考試題及參考答案一套
- 二零二五年度畜牧機械租賃及售后服務(wù)合同4篇
- 2024-2030年中國光電干擾一體設(shè)備行業(yè)發(fā)展現(xiàn)狀與前景預(yù)測分析研究報告
- 小學三年級下冊奧數(shù)題100道附答案
- 湖南省岳陽市岳陽樓區(qū)2023-2024學年七年級下學期期末數(shù)學試題(解析版)
- 農(nóng)村自建房安全合同協(xié)議書
- 杜仲葉藥理作用及臨床應(yīng)用研究進展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語言溝通發(fā)展量表(長表)-詞匯及手勢(8-16月齡)
- 高速公路相關(guān)知識講座
- 兒科關(guān)于抗生素使用的PDCA
評論
0/150
提交評論