Tiny語言的詞法分析器_第1頁
Tiny語言的詞法分析器_第2頁
Tiny語言的詞法分析器_第3頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、學號:姓名:專業(yè):計算機科學與技術(shù)課程編譯原理課程設(shè)計實驗報告班級:2班第9周實驗課時名稱實驗手工構(gòu)造Tiny語言的詞法分析器實驗時間7-10周實驗?zāi)康氖煜iny語言詞法;構(gòu)造曰的詞法分析命DFA設(shè)計數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu);用C+實現(xiàn)Tiny語實驗Windows10專業(yè)版環(huán)境MicrosoftVisualStudio2013實驗一、Tiny語言記號內(nèi)容(算ReservedwordsSpecialSymbolsOther法、if+程then-序、else*number(1ormoredigits)步驟end9(NOTATIONj)YASSIGNjDONEother三、根據(jù)DFA編寫詞法分析器#in

2、elude#inelude#ineludeusingnamespaeestd;staticintrowCounter=1;/靜態(tài)變量,用于存儲行數(shù)staticboolbraeketExist=false;/判斷注釋存在與否,false為不存在classLexpublie:ofstreamoutput;stringline=;Lex(stringinputLine)line=inputLine;sean(Trim(line);rowCounter+;stringTrim(string&str)/函數(shù)用于去除每行前后空格ints=(t);inte=(t);str=(s,e-s+1);str+=0;

3、returnstr;voidscan(stringinputLine)ofstreamoutput;(,ios:app);stringline=inputLine;inti=0;stringstr=;inttemp;stringtoken=”;outputrowCounter:lineendl;輸出每行while(linei!=0)/根據(jù)DFAm描并判斷if(linei=)/注釋(/不處理,直接輸出if(linei+1!=NULLelsebracketExist=true;if(bracketExist=true)(outputrowCounter”:;while(linei!=t)break

4、;if(linei=)/注釋結(jié)束(outputlineiendl;bracketExist=false;if(bracketExist=false)數(shù)字while(isdigit(linei)(temp=temp*10+linei;if(!isdigit(linei+1)outputtrowCounter”:NUM,va匚temp-0=a&linei=_A&lineiv=N)-|linei=lllinei=lllinei=)lZ)if(linei+1!=NULLelsetoken=;i+;break;while(linei=a&linei=A&linei=字母A&linei+1=a&linei

5、+1=outputtrowCounter”:ReversedWord:strendl;break;elseID,name=outputtrowCounter:strendl;break;if(linei+1!=NULLi+;str=;if(linei+1!=NULLi+;elsebreak;outputtrowCounter”:linei;break;if(linei+1=NULI)if(linei=;)|一CZI/清空,以備下一行讀取line=;str=;temp=0;token=;outputendl;();boolisResearvedWord(strings)存儲保留字,并判斷stri

6、ngreservedWord8=if”,then”,else”,end”,repeat”,until”,readwrite、booljudge=false;for(inti=0;i8;i+)if(s=reservedWordi)judge=true;break;returnjudge;boolisToken(strings)存儲符號,并判斷(stringtoken10=+,-,*”,/,=”,”,(,)”,;,:=;booljudge=false;for(inti=0;i10;i+)if(s=tokeni)judge=true;break;|returnjudge;intmain()rifst

7、reaminput;stringline50;inti=0;while(getline(input,linei)/coutlineiendl;i+;coutendlendli+;coutendlendlcoutendlendlcoutendlendlReadingsourcefilecompleted!endl;intj=0;remove();for(j=0;ji;j+)endlendlendl;for(j=0;ji;j+)endlendlendl;endlendlendl;endlendlendl;Lexlex(linej);coutendlendlWritingfilecompleted!

8、return0;四、重要數(shù)據(jù)結(jié)構(gòu)stringline:用于存儲每一彳亍的字符,并逐個讀取分析。stringtoken:用于存儲TINY語言的符號,并調(diào)用遍歷進行判斷untilx=0;stringreservedWord:用于存儲TINY語言的保留字,遍歷進彳亍判斷,若為真,則輸出Reservedword。staticintrowCounter:靜態(tài)變量,存儲仃號,每創(chuàng)建一個類的頭例便加一。inttemp:用于存儲數(shù)子,并輸出。staticintbracketExist:靜態(tài)變量,標記注釋是否存在。stringtoken,str分別用于臨時存儲讀取的符號的子母串。五、算法總結(jié)建立Lexclass

9、,并讀取每一仃,創(chuàng)建Lex的頭例,在Lex中處理。先判斷是否在注釋范圍內(nèi),若是,則輸出注釋內(nèi)容,直土產(chǎn)生字符。若不在注釋區(qū)內(nèi),則讀取單個字符,根據(jù)DFA進行判斷。若為符號,則當下一個字符不是符號時輸出;若為數(shù)字,則繼續(xù)往下讀,直至下一個字符不是數(shù)字為止,輸出。若為字母,繼續(xù)讀取,直至下一個字符不是字母,把這一串字母和預(yù)先定義的保留字比對,若是,則輸出Reservedword,若不是,則輸出ID,name-字樣。一行處理完畢,便開始創(chuàng)建下一行實例,直至文件尾。Tiny測試程序數(shù)據(jù)|SampleprograminTINYlanguage-corriputesiactorial記錄和計ready,i

10、nputanintegerif0xthendontcomputeif;c0Jiact:=1;算repeat珀ct:=fact*x;X.X11ofx)writetact(outputfacendQtg-D-*to耐Tir?rp?MM-iHt-MlnOGradxtsimuipc?hbfiffMIMmimI|.LULE-C5OI.IiytIv4LIC-kID?AX&kAUASJL.IjxuUA.JIl|1LucLleVeebU.l+DHiTf-lprofran1:l血m誕財審尊rm2CBniTLinp-kfa-.SiLnTEW1汕y-iHrtarialE|斗i3W1:HMi,(lAiucm3hl?4

11、iffI5sxwKM-1WarcJnid&血Mkf-gC*Lfiiliiiii.jHngMiIMfiQ忖叩.rwrt?itd,CtterilIradnj!wnrwilvtiff.vtid11-1Bnd-cG-S-BLh-LXUlMl(Wln皓3f100)3UsaHiAiiiqlc:Liftri血r-MsPCX?vrcxd1arc2Uun1E活I(lǐng)HXA)!Hl1:(Sampleprogram結(jié),1:(Sampleprogram果)2:inTINYlanguage-2:inTINYIanguage-3:computesfactorial3:computesfactorial4:5:readx;(i

12、nputaninteger5:ReversedWord:read5:ID,name=x5:5:(inputaninteger6:if0xthen(dontcomputeifx=06:ReversedWord:if6:NUM,val=06:6:ID,name=x6:ReversedWord:then6:(dontcomputeifx=07:fact:=1;7:ID,name=fact7:=7:NUM,val=17-8:repeat8:ReversedWord:repeat9:fact:=fact*x;9:ID,name=fact9:=9:ID,name=fact9:*9:ID,name=x9:;10:x:=x-1;10:ID,name=x10:=10:ID,name=x10:10:NUM,val=110:;11:untilx=0;11:ReversedWord:until11:ID,name=x11:=11:NUM,val=011:;12:writefactoutputfactorialofx12:Reverse

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論