2019年詞法分析器設(shè)計(jì).doc_第1頁
2019年詞法分析器設(shè)計(jì).doc_第2頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1、實(shí)驗(yàn)?zāi)康?、為初等函數(shù)運(yùn)算語言構(gòu)造語法分析器。2、掌握生成詞法分析器的方法,加深對(duì)詞法分析原理的理解。3、掌握設(shè)計(jì)、編制并調(diào)試詞法分析程序的思想和方法。2、實(shí)驗(yàn)內(nèi)容2.1 詞法模式設(shè)計(jì) /正則式1、 初等函數(shù)運(yùn)算語言的常量為實(shí)數(shù)類型,其定義方式為實(shí)數(shù)的最一般書寫方式,如:123.321 。具體要求: 不支持整數(shù)部分大于 0 時(shí)首數(shù)字為 0;不支持小數(shù)點(diǎn)后結(jié)尾為 0; 不支持科學(xué)記數(shù)法 ;不支持僅為整數(shù)時(shí)有小數(shù)點(diǎn)。人1-90-9*(.0-9*1-9+)?$2、 初等函數(shù)運(yùn)算語言的變量采用與C 語言的標(biāo)識(shí)符定義一樣的方式: 首字符為字母或下劃線;其他的為字母、數(shù)字及下劃線的混合串;區(qū)分大小寫;

2、變量長(zhǎng)度不超過 32 個(gè)字符。Aa-zA-Z_A-Za-z0-90,31$3、 初等函數(shù)運(yùn)算語言需要處理的函數(shù)僅為表一中所列舉的內(nèi)容。4、 初等函數(shù)運(yùn)算語言支持四則運(yùn)算,其計(jì)算的符號(hào)與C 語言相同,為:+-*/。人+-*/$5、 初等函數(shù)運(yùn)算語言的合法的分隔符包括: 空格、 制表符、分行符圓括號(hào) (左、 右)、 分號(hào)。其中空格、 制表符、分行符可以出現(xiàn)在任何兩個(gè)不同的單詞中間; 圓括號(hào)(左、 右)用于表達(dá)式中,用于改變運(yùn)算的優(yōu)先級(jí),以及標(biāo)識(shí)函數(shù)的參數(shù);分號(hào)用于標(biāo)識(shí) 一個(gè)語句的結(jié)束。Aftn();$6、 初等函數(shù)運(yùn)算語言支持的常量還包括: PI,E 。API|E$2.2DFABOW數(shù)字2.3 狀

3、態(tài)轉(zhuǎn)換表字符數(shù)字運(yùn)算符小數(shù)點(diǎn)0012、40101102003300304004032.4 記號(hào)表2、實(shí)驗(yàn)程序清單function, cppmai ns.cppn ame.hwordID.txt3、調(diào)試過程和運(yùn)行結(jié)果4、x = 0.5*PI;y = E;?1/3*(l n(y)+5*si n(x)+(7+zf2;里值宇字字宇宇字宇字字符苻符符符符S符符符變數(shù)龍建漣鍵縫龍鍵建龍隔福隔隔算算算算直算關(guān)關(guān)關(guān)關(guān)關(guān)關(guān)關(guān)關(guān)關(guān)分分分分運(yùn)運(yùn)運(yùn)運(yùn)運(yùn)運(yùn)20210123456789-PF一_gu3Mmi|H4nssS里值slco覽Ct.mg珂E?+ -*/-:卄兌敎C:U5erslclocumentsvisuat s

4、tudio 2010Projects法分坯器D呂bug詞法分折器啟XE*_J,13,13,13請(qǐng)按任意鍵繼續(xù) -5、程序的主要部分及其功能說明函數(shù)聲明- n ame.h -#inelude #inelude using namespaeestd;const int Max=1000;con st stri ng Fun eti onN ame = sin “,cos , tg , etg , log , Ig , l n , PI , E ;/關(guān)鍵字elass Operateprivatestring str;/輸入的字符串string wordMax;/輸出的結(jié)果int numMax;/輸出

5、的類型public :int startPostion; /字符開始位置int nowPostion;/字符當(dāng)前位置int length;/結(jié)果個(gè)數(shù)Operate(string s); void getWordAndNum(); bool isNumber( char c); bool isChar( char c);/ bool isChar(char c); intisOperaters( char c);bool isblank( char c);void addWords(string s, int n); ;int isKey(string str);void work(string

6、 str);function.cpp函數(shù)定義function.cpp#include #include #include #include name.husing namespacestd;/Operate類定義Operate:Operate(string s) str=s;startPostion=0;nowPostion=0;length=0;void Operate:getWordAndNum()for (int i=0;i=(length-1);i+)cout setw(10)wordi , setw(3)numinbool Operate:isNumber( char c)if (c

7、 = 0 & c = a & c = A & c = Z )|c = _ ) return true ;return false ;int Operate:isOperaters( char c)switch (c)case?: return10;case ; :return11;case ( :return12;case ) :return13;case + :return14;case - :return15;case * :return16;case / :return17;case =:return18case s:return19;default : retu

8、rn 0; ;boolOperate:isblank(char c)switch (c)case :case t:case n :return true ;return false ;void Operate:addWords(string s, int n)wordlength=s;numlength=n; length+=1;/其他函數(shù)/是否是關(guān)鍵字,是返回序號(hào),否返回0int isKey(string str)for (int i=0;i=longs) break ;elsec=strop.nowPostion;switch (state)case 0: /初始狀態(tài)if (c=$ )br

9、eak ;/如果是運(yùn)算符/保存當(dāng)前運(yùn)算符,startPostion=nowPostion=+1 number=op.isOperaters(c);if (number0)op.addWords(str.substr(op.startPostion,1),number);op.nowPostion+;op.startPostion=op.nowPostion;break ;if (op.isblank(c)op.nowPostion+;op.startPostion=op.nowPostion;break ;/如果是字符if (op.isChar(c)state=1;op.nowPostion+

10、;break ;if (c=1 &c0)number=isKey(aword);op.addWords(aword,number);op.startPostion=op.nowPostion;state=0;break ;case 2:/識(shí)別0,若下一個(gè)字符不是小數(shù)點(diǎn).則顯示輸入錯(cuò)誤,跳過0,讀取下一個(gè)字 符if (c=. )state=3;op.nowPostion+;break ;if (op.isOperaters(c)0)state=0;break ;op.addWords( 0開頭,輸入錯(cuò)誤!跳過,0);op.startPostion=op.nowPostion;state=

11、0;break ;case 3: /識(shí)別0-9if (op.isNumber(c)op.nowPostion+;break ;op.addWords(str.substr(op.startPostion,op.nowPostion-op.startPostion),21);op.startPostion=op.nowPostion;state=0;break ;case 4: /識(shí)別1-9if (op.isNumber(c) /識(shí)別整數(shù)op.nowPostion+;casebreak ;if (c=. ) /識(shí)別小數(shù)state=3;op.nowPostion+;break ;7、op.addWords(str.substr(op.startPostion,op.nowPostion-op.startPostion),21);op.startPostion=op.nowPostion;state=0;break ;op.getWordAndNum();mains.cpp主函數(shù)輸入測(cè)試數(shù)據(jù)!mains.cpp#include #include #include name.husing namespacestd;voi

溫馨提示

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

評(píng)論

0/150

提交評(píng)論