C-Minus詞法分析四川大學(xué) 編譯原理_第1頁(yè)
C-Minus詞法分析四川大學(xué) 編譯原理_第2頁(yè)
C-Minus詞法分析四川大學(xué) 編譯原理_第3頁(yè)
C-Minus詞法分析四川大學(xué) 編譯原理_第4頁(yè)
C-Minus詞法分析四川大學(xué) 編譯原理_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論