




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、歡迎閱讀實(shí)驗(yàn)報(bào)告學(xué)號: 姓名: 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級:2班 第9周課程 名稱?編譯原理課程設(shè)計(jì)實(shí)驗(yàn)課時8實(shí)驗(yàn) 項(xiàng)目手工構(gòu)造Tiny語百的詞法分析器實(shí)驗(yàn)時間7-10 周實(shí)驗(yàn) 目的熟悉Tiny諦言詞法;構(gòu)造DFA;設(shè)計(jì)數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu);用 C+實(shí)現(xiàn)Tiny 諦言的詞法分析器實(shí)驗(yàn) 環(huán)境?Windows 10 專業(yè)版Microsoft Visual Studio 201311一、Tiny 語言記號Reserved wordsSpecial SymbolsOtherif+then-else*number(1 or more digits)end<repeat=實(shí)驗(yàn)until/內(nèi)容read(
2、 );identifier(1 or more(算write法、1 1.letters)程' |'T - - J-4 -" J'iI "序、步驟二、構(gòu)造Tiny語言和方DFA法)ID : letter(letter)*Number: digit(digit)*三、根據(jù)DFA編寫詞法分析器#include <fstream> #include <string>#include <iostream> using namespacestd;static int rowCounter = 1; 靜態(tài)變量,用于存儲行數(shù)sta
3、tic bool bracketExist = false ;/ 判斷注釋存在與否,false 為不存在 class Lex public :ofstream output;string line =""Lex( string inputLine )line = inputLine ;scan(Trim(line);rowCounter+;string Trim( string & str ) 函數(shù)用于去除每行前后空格 int s = str .find_first_not_of( " t" );int e = str .find_last_no
4、t_of( " t" );str = str .substr(s, e - s + 1);str += "0" return str ;-: nvoid scan( string inputLine )ofstream output;output.open( "SampleOutput.txt" , ios 二app);string line = inputLine ;int i = 0;string str =""int temp;string token =""output <<
5、 rowCounter<<":"<< line << endl; / 輸出每行while (linei !='0' )/根據(jù)DFAm描并判斷if (linei='' ) /注釋bracketExist = true ;if (bracketExist=true )一output << "t" << rowCounter <<while (linei !='')output << linei;/不處理,直接輸出if (line
6、i + 1 != NULLelseoutput << linei<<endl;bracketExist = false ;)if (bracketExist = false )/數(shù)字while (isdigit(linei)temp = temp * 10 + linei;if (!isdigit(linei + 1) j: :二 output << "t" << rowCounter << ": "<< "NUM, val= " << temp&qu
7、ot;"0" << endl;)if (linei + 1 !=NULI&&isdigit(linei + 1)i+;elsebreak;)temp = 0;/符號while (!(isdigit(linei) | (linei >="a" &&linei <="z" ) |(linei >="A" &&linei <="Z" ) | linei =" " | linei ="&qu
8、ot; | linei ="")token = token + linei;if (isdigit(linei + 1) | (linei + 1 >="a" &&linei + 1 <="z")| (linei + 1 >="A" &&linei + 1 <="Z" ) | linei + 1 =" " | linei + 1 ="" |linei + 1 ="" | line
9、i + 1 = NULLif (isToken(token)output << "t" << rowCounter <<": "<< token << endl;elseint j = 0;while (tokenj !="0")(output << "t" << rowCounter << ": "<< tokenj <<endl;j+;)i+;elsebreak;)toke
10、n =""/字母while (linei >="a' &&linei <="z" ) | (linei >="A' &&linei <= . ® J- 1 "Z")(str = str + linei;if (!(linei + 1 >="a" &&linei+ 1 <="z" ) | (linei + 1 >="A" &&l
11、inei + 1 <=Z")(if (isResearvedWord(str) /判斷是否是保留字(output << "t" << rowCounter <<": "<< "Reversed Word:<< str << endl;str << endl;break;) )if (linei + 1 != NULL i+;)str =""if (linei + 1 != NULL (i+; elsebreak;if (lin
12、ei='')output << "t" << rowCounter <<": "<< linei;break;清空,以備下一行讀取line =output << endl; output.close(); bool isResearvedWord( string s)/ 存儲保留字,并判斷 string reservedWord8 = "if" , "then" , "else" , "end", &
13、quot;repeat" , "until" , "read "write" ;bool judge = false ; for ( int i = 0; i < 8; i+) return judge;bool isToken( string s) / 存儲符號,并判斷string token10 = "+" , "-" , "*" , "/" , "=", "<", "(" , &
14、quot;)" , "" , ":=" ;bool judge = false ;for ( int i = 0; i < 10; i+)頁腳內(nèi)容return judge; ;int main()ifstream input;input.open( "SampleInput.tny" )string line50;int i = 0;while (getline(input, linei)/cout << linei << endl;i+;input.close();cout <<
15、endl << endl << "Reading source file completed!" << endl;int j = 0;remove( "SampleOutput.txt");for (j = 0; j < i; j+)Lex lex(linej);cout << endl << endl << "Writing file completed!" << endl << endl << endl;return
16、0;四、重要數(shù)據(jù)結(jié)構(gòu)string line:用于存儲每一行的字符,并逐個讀取分析。string token口:用于存儲TINY語言的符號,并調(diào)用遍歷進(jìn)行判斷。I - :string reservedWord口:用于存儲TINYghf的保留字,遍歷進(jìn)行判斷,若為真,則輸出 Reserved word。static int rowCounter:靜態(tài)變量,存儲行號,每創(chuàng)建一個類的實(shí)例便加一。int temp:用于存儲數(shù)字,并輸出。static int bracketExist:靜態(tài)變量,標(biāo)記注釋是否存在。string token, str分別用于臨時存儲讀取的符號的字母用。五、算法總結(jié)建立Lex
17、class ,并讀取每一行,創(chuàng)建Lex的實(shí)例,在Lex中處理。先判斷是否在注釋范圍內(nèi),若是,則輸出注釋內(nèi)容,直至產(chǎn)生“”字符。若不在注釋區(qū)內(nèi),則讀取單個字符,根據(jù)DFAS行判斷。若為符號,則當(dāng)下一個字符不是符號 時輸出;若為數(shù)字,則繼續(xù)往下讀,直至下一個字符不是數(shù)字為止,輸出。若為字母,繼續(xù)讀取,直至卜一個字符不是字母,把這一用字母和預(yù)先定義的保留字 比對,若是,則輸出 Reserved word ,若/、是,則輸出 ID, name=子樣。一行處理完畢,便開始創(chuàng)建卜一行實(shí)例,直至文件尾。1 X -1 1數(shù)據(jù) 記錄 和計(jì) 算Tiny測試程序jr結(jié) 論 (結(jié) 果)1: Sample progra
18、m,j 1."-f,1: Sample program2: in TINY language -2: in TINY language -3: computes factorial3: computes factorial4: 4: 5: read x; input an integer 5:5:5:5:Reversed Word: readID, name= x;input an integer 6: if 0 < x then don't compute if x <= 0 6: Reversed Word: if7: NUM, val= 08: <9: ID, name= x10: Reversed Word: then11: don't compute if x <= 0 7: fact := 1;7: ID, name= fact7:= r-""
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 拆除承重模板時混凝土強(qiáng)度要求一覽表
- Brand KPIs for neobanking Agibank in Brazil-英文培訓(xùn)課件2025.4
- T公司智能化檢測中心建設(shè)項(xiàng)目進(jìn)度管理研究
- 汽車傳感器與檢測技術(shù)電子教案:制動踏板位置傳感器
- 口腔教育設(shè)備管理制度
- 商業(yè)媒體宣傳管理制度
- 基層綜合文化管理制度
- 廚房七大細(xì)節(jié)管理制度
- 地鐵公司車輛管理制度
- 海南潤城投資有限公司五指山項(xiàng)目部管理手冊匯編82P
- 高中化學(xué)方程式大全
- 機(jī)械制圖知識培訓(xùn)課件
- “國資贛將”贛州旅游投資集團(tuán)2025年第一批社會公開招聘【46人】筆試參考題庫附帶答案詳解析
- 山東省濰坊市教科所2025屆物理高二下期末經(jīng)典試題含解析
- 業(yè)務(wù)員合同協(xié)議書范文
- 2025年商業(yè)模式創(chuàng)立與創(chuàng)新能力考研試卷及答案
- 2025年遙測遙控系統(tǒng)項(xiàng)目可行性研究報(bào)告
- 25春國家開放大學(xué)《形勢與政策》專題測驗(yàn)1-5+大作業(yè)參考答案
- 2024-2025人教版一年級下冊數(shù)學(xué)期末考試卷附答案 (三套)
- 2025屆高三押題信息卷(一)物理及答案
- 2025-2030中國飛機(jī)維修行業(yè)市場發(fā)展分析及發(fā)展前景與投資策略研究報(bào)告
評論
0/150
提交評論