![C-Minus詞法分析四川大學(xué) 編譯原理_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/c33b10b6-35fb-428a-8370-a0e3ba4005b8/c33b10b6-35fb-428a-8370-a0e3ba4005b81.gif)
![C-Minus詞法分析四川大學(xué) 編譯原理_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/c33b10b6-35fb-428a-8370-a0e3ba4005b8/c33b10b6-35fb-428a-8370-a0e3ba4005b82.gif)
![C-Minus詞法分析四川大學(xué) 編譯原理_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/c33b10b6-35fb-428a-8370-a0e3ba4005b8/c33b10b6-35fb-428a-8370-a0e3ba4005b83.gif)
![C-Minus詞法分析四川大學(xué) 編譯原理_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/c33b10b6-35fb-428a-8370-a0e3ba4005b8/c33b10b6-35fb-428a-8370-a0e3ba4005b84.gif)
![C-Minus詞法分析四川大學(xué) 編譯原理_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/23/c33b10b6-35fb-428a-8370-a0e3ba4005b8/c33b10b6-35fb-428a-8370-a0e3ba4005b85.gif)
版權(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)算符,界符,單詞的輸出是二元式的形式,需要知道二元式的表示方法,把得到的二元式寫(xiě)入輸出文件。實(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 執(zhí)行案件代理合同(2篇)
- 八年級(jí)上冊(cè)道德與法治第二單元 遵守社會(huì)規(guī)則 復(fù)習(xí)聽(tīng)課評(píng)課記錄
- 冀教版歷史九年級(jí)上冊(cè)第2課《古代印度文明》聽(tīng)課評(píng)課記錄
- 新版(修訂版)北師大版小學(xué)五年級(jí)數(shù)學(xué)下冊(cè)聽(tīng)評(píng)課記錄精寫(xiě)
- 蘇科版數(shù)學(xué)八年級(jí)上冊(cè)4.3《實(shí)數(shù)》聽(tīng)評(píng)課記錄2
- 湘教版數(shù)學(xué)七年級(jí)上冊(cè)《2.5整式的加法和減法(1)》聽(tīng)評(píng)課記錄5
- 蘇教版數(shù)學(xué)九年級(jí)上冊(cè)聽(tīng)評(píng)課記錄《2-1圓(2)》
- 蘇科版數(shù)學(xué)八年級(jí)上冊(cè)《4.2 立方根》聽(tīng)評(píng)課記錄
- 華師大版歷史九年級(jí)上冊(cè)第6課《古希臘羅馬文化》聽(tīng)課評(píng)課記錄
- 人民版道德與法治七年級(jí)上冊(cè)5.1《心中有他人》聽(tīng)課評(píng)課記錄
- 農(nóng)業(yè)行政執(zhí)法現(xiàn)狀及相關(guān)法律法規(guī)課件
- 班組月度考核評(píng)分表
- 部編版一年級(jí)下冊(cè)《道德與法治》教學(xué)工作計(jì)劃及全冊(cè)教案
- 三重一大事項(xiàng)決策流程
- 精密配電列頭柜介紹講義
- 廣東部分地區(qū)的暴雨強(qiáng)度公式
- 授居家二眾三皈、五戒儀規(guī)
- 裝修工程竣工驗(yàn)收?qǐng)?bào)告模板
- 簡(jiǎn)單娛樂(lè)yy頻道設(shè)計(jì)模板
- 防止機(jī)組非計(jì)劃停運(yùn)措施(鍋爐專業(yè))
- 最常用漢字個(gè)
評(píng)論
0/150
提交評(píng)論