




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、四 川 大 學(xué) 計(jì) 算 機(jī) 學(xué) 院、軟 件 學(xué) 院實(shí) 驗(yàn) 報(bào) 告 學(xué)號(hào) 姓名: 專業(yè): 課程名稱 編譯原理課程設(shè)計(jì)實(shí)驗(yàn)課時(shí)4實(shí)驗(yàn)項(xiàng)目手工構(gòu)造C-Minus語(yǔ)言的詞法分析器實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)?zāi)康?、意義1. 熟悉C-Minus語(yǔ)言的詞法特點(diǎn),構(gòu)造C-Minus的DFA;2. 設(shè)計(jì)數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)3. 通過(guò)完成詞法分析程序,鞏固詞法分析知識(shí)語(yǔ)言特點(diǎn)正則表達(dá)式注釋:/*注釋*/關(guān)鍵字:if else int return void while專用符號(hào):+ - * / < <= > >= = != = ; , ( ) ID = letter+NUM = digit+letter =
2、a-z,A-Zdigit = 0-9DFA數(shù)據(jù)類型數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)/定義數(shù)據(jù)類型TokenTypetypedef enum ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE,ID,NUM, ASSIGN,EQ,LT,LE,GT,GE,NEQ,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,LBRACKET,RBRACKET,LBRACE,RBRACE,COMMA,SEMI TokenType;/定義狀態(tài)類型typedef enum START,LBUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE
3、,INGE,INNEQ,DONE StateType;/結(jié)構(gòu)定義static struct char *str; TokenType tok; reservedWordsMAXRESERVED ="if",IF,"else",ELSE,"int",INT,"return",RETURN,"void",VOID,"while",WHILE;DFA代碼映射方法雙層CASE實(shí)現(xiàn)代碼映射,外層CASE關(guān)注狀態(tài)變換,內(nèi)層CASE關(guān)注輸入字符。外層CASE一共有12個(gè)狀態(tài):START,L
4、BUFFER,RBUFFER,INCOMMENT,INNUM,INID,INEQ,INLE,INGE,INNEQ,DONE, default;內(nèi)層CASE判斷getNextChar()獲取的下一個(gè)字符使當(dāng)前狀態(tài)轉(zhuǎn)換為其他狀態(tài)。關(guān)鍵代碼分析TokenType getToken(void) int tokenStringIndex=0;TokenType currentToken;StateType state=START;int save; /是否保存到tokenString while(state!=DONE)int c=getNextChar();save=TRUE;switch(state
5、) case START:if(isdigit(c) state=INNUM;else if(isalpha(c) state=INID;else if(c=' ') | (c='t') | (c='n') save=FALSE;else if(c='=') state=INEQ;else if(c='<')state=INLE;else if(c='>')state=INGE;else if(c='!')state=INNEQ;else if(c='/'
6、)state=LBUFFER;elsestate=DONE;switch(c)case EOF:save=FALSE;currentToken=ENDFILE;break;case '+':currentToken=PLUS;break;case '-':currentToken=MINUS;break;case '*':currentToken=TIMES;break;case '(':currentToken=LPAREN;break;case ')':currentToken=RPAREN;break;cas
7、e '':currentToken=LBRACKET;break;case '':currentToken=RBRACKET;break;case '':currentToken=LBRACE;break;case '':currentToken=RBRACE;break;case '':currentToken=SEMI;break;case ',':currentToken=COMMA;break;default:currentToken=ERROR;break;break;case LBUFF
8、ER:if(c='*')tokenStringIndex=0;save=FALSE;state=INCOMMENT;else if(c=EOF)state=DONE;currentToken=ENDFILE;elsecurrentToken=OVER;state=DONE;break;case INCOMMENT:save=FALSE;if(c='*')state=RBUFFER;else if(c=EOF)state=DONE;currentToken=ENDFILE;break;case RBUFFER:save=FALSE;if(c='/'
9、)state=START;else if(c='*');else if(c=EOF)state=DONE;currentToken=ENDFILE;else state=INCOMMENT;break;case INNUM:if(!isdigit(c)ungetNextChar();save=FALSE;state=DONE;currentToken=NUM;break;case INID:if(!isalpha(c)ungetNextChar();save =FALSE;state=DONE;currentToken=ID;break;case INEQ:if(c='
10、=')state=DONE;currentToken=EQ;elseungetNextChar();save =FALSE;state=DONE;currentToken=ASSIGN;break;case INLE:if(c='=')state=DONE;currentToken=LE;elseungetNextChar();save =FALSE;state=DONE;currentToken=LT;break;case INGE:if(c='=')state=DONE;currentToken=GE;elseungetNextChar();save
11、 =FALSE;state=DONE;currentToken=GT;break;case INNEQ:if(c='=')state=DONE;currentToken=NEQ;elseungetNextChar();save =FALSE;state=DONE;currentToken=ERROR;break;case DONE:break;default:fprintf(listing,"Scanner Bug:state=%dn",state);state=DONE;currentToken=ERROR;break; if(save) &&am
12、p; (tokenStringIndex<=MAXTOKENLEN) tokenStringtokenStringIndex+=(char)c; if(state=DONE) tokenStringtokenStringIndex='0' if(currentToken=ID) currentToken=reservedLookup(tokenString); if(TraceScan)fprintf(listing,"t%d: ",lineno);printToken(currentToken,tokenString); return currentToken;實(shí)驗(yàn)結(jié)果截圖總結(jié)詞法分析程序的輸出和輸入:詞法分析程序的功能是讀入源程序,輸出單詞符號(hào)。單詞符號(hào)是程序設(shè)計(jì)語(yǔ)言的本語(yǔ)法符號(hào),程序設(shè)計(jì)語(yǔ)言的單詞符號(hào)一般分為如下幾種:關(guān)鍵字,標(biāo)示符,常數(shù),運(yùn)算符,界符,單詞的輸出是二元式的形式,需要知道二元式的表示方法,把得到的二元式寫入輸出文件。實(shí)驗(yàn)注意事項(xiàng):1. 試驗(yàn)中在設(shè)計(jì)注釋部分的解析時(shí),因?yàn)镃-Minus的注釋符是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地流轉(zhuǎn) 合同范本
- 廣州房屋合同范本
- 貨運(yùn)中介合同范本
- 潔具工程合同范本
- 2025年智能焊接生產(chǎn)線項(xiàng)目合作計(jì)劃書
- 房產(chǎn)購(gòu)入合同范本
- Ce3+摻雜高密度閃爍玻璃制備和性能優(yōu)化研究
- 明代名臣彭澤研究
- 全暴露PtW-Mo電催化材料的設(shè)計(jì)合成及原位電鏡研究
- 西瓜黃化基因ClBCM的功能驗(yàn)證及調(diào)控機(jī)理解析
- 三年級(jí)下冊(cè)數(shù)學(xué)應(yīng)用題100題及答案
- 繼電保護(hù)課后習(xí)題答案第二版張保會(huì)尹項(xiàng)根
- 統(tǒng)編版高中歷史必修中外歷史綱要下冊(cè)第4課中古時(shí)期的亞洲課件(共18張PPT)
- 成人住院患者跌倒風(fēng)險(xiǎn)評(píng)估及預(yù)防,中華護(hù)理學(xué)會(huì)團(tuán)體標(biāo)準(zhǔn)
- 陰式子宮全切術(shù)-手術(shù)室護(hù)理查房
- 職業(yè)健康檢查流程圖
- 提高電費(fèi)回收率(QC)
- EIM Book 1 Unit 7 Learning languages單元知識(shí)要點(diǎn)
- 呼吸系統(tǒng)疾病與麻醉(薛張剛)
- WOMAC骨性關(guān)節(jié)炎指數(shù)評(píng)分表
- CRPS電源設(shè)計(jì)向?qū)?CRPS Design Guide r-2017
評(píng)論
0/150
提交評(píng)論