




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上中 國(guó) 海 洋 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告 姓名:鄧匯星 專業(yè)年級(jí):2012級(jí)計(jì)算機(jī) 學(xué)號(hào): 同組人: 竇猛 專業(yè)年級(jí):2012級(jí)計(jì)算機(jī) 學(xué)號(hào):&
2、#160; 編譯原理課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告【實(shí)驗(yàn)題目】:實(shí)驗(yàn)1:用Lex設(shè)計(jì)詞法分析器1【實(shí)驗(yàn)?zāi)康摹浚簩W(xué)會(huì)用lex設(shè)計(jì)一個(gè)詞法分析器?!緦?shí)驗(yàn)內(nèi)容】:使用lex為下述文法語言寫一個(gè)詞法分析器。語言文法:<程序>à PROGRAM <標(biāo)識(shí)符> ; <分程序><分程序>à <變量說明> BEGIN <語句表> END.<變量說明> à VAR <變量說明表><變量說明表>à<變量表>: <類型> | <變量表>:
3、<類型> <變量說明表><類型>à INTEGER | REAL<變量表>à <變量> | <變量>, <變量表><語句表>à <語句> | <語句> <語句表><語句>à <賦值語句> | <條件語句> | <WHILE語句> | <復(fù)合語句><賦值語句>à<變量> := <算術(shù)表達(dá)式><條件語句>
4、4; IF <關(guān)系表達(dá)式> THEN <語句> ELSE <語句><WHILE語句>à WHILE <關(guān)系表達(dá)式> DO <語句><復(fù)合語句> à BEGIN <語句表> END<算術(shù)表達(dá)式> à <項(xiàng)> | <算術(shù)表達(dá)式> + <項(xiàng)> | <算術(shù)表達(dá)式> - <項(xiàng)><項(xiàng)> à <因式> | <項(xiàng)> * <因式> | <項(xiàng)> /
5、<因式><因式>à <變量> | <常數(shù)> | (<算術(shù)表達(dá)式>)<關(guān)系表達(dá)式>à <算術(shù)表達(dá)式> <關(guān)系符> <算術(shù)表達(dá)式><變量>à <標(biāo)識(shí)符><標(biāo)識(shí)符>à <標(biāo)識(shí)符><字母> | <標(biāo)識(shí)符><數(shù)字> | <字母><常數(shù)>à <整數(shù)> | <浮點(diǎn)數(shù)><整數(shù)>à <數(shù)字>
6、| <數(shù)字> <整數(shù)><浮點(diǎn)數(shù)>à .<整數(shù)> | <整數(shù)>.<整數(shù)><關(guān)系符>à < | <= | = | > | >=| <><字母>à A | B | | X | Y | Z | a | b | | x | y | z<數(shù)字>à0|1|2|9【實(shí)驗(yàn)要求】:輸入為用該語言所寫的源程序文件;輸出為記號(hào)序列,每個(gè)記號(hào)顯示為二元組(記號(hào)名,記號(hào)屬性值)的形式。輸出可以在屏幕上,也可以輸出到文件中。不要求建立符號(hào)表。
7、在cygwin下用flex和gcc工具將實(shí)驗(yàn)調(diào)試通過,并能通過例子parser0中testcases目錄下的test1.p測(cè)試?yán)臏y(cè)試?!緦?shí)驗(yàn)參考】:exam1.l和exam2.l。請(qǐng)認(rèn)真閱讀例子,發(fā)現(xiàn)錯(cuò)誤及時(shí)提出?!緦?shí)驗(yàn)過程】:根據(jù)編譯原理實(shí)驗(yàn)的exam1.l和exam2.l的代碼進(jìn)行修改,添加對(duì)一些符號(hào)的定義,設(shè)計(jì)成為一個(gè)新的此法分析器,使得改詞法分析器能夠?qū)?shí)驗(yàn)要求的記號(hào)進(jìn)行識(shí)別,識(shí)別效果如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k<=1
8、00 DO BEGIN IF j <20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【實(shí)驗(yàn)結(jié)果截圖】;程序用flex和gcc編譯調(diào)試通過后,以test1.p中的內(nèi)容座位輸入進(jìn)行詞法分析得到以下結(jié)果:test1.p的內(nèi)容如下:PROGRAM test;VAR i, j, k: INTEGER; f0: REAL;BEGIN i := 1; j := 1; k := 0; f0 := 3.2; WHILE k<=100 DO BEGI
9、N IF j <20 THEN BEGIN j := i; k := k+1; f0 := f0*0.2 END ELSE BEGIN j := k; k := k-2; f0 := f0/.2 END ENDEND.【實(shí)驗(yàn)程序代碼】/* 把討厭的注釋去掉 */%#include <stdio.h> #define LT1#defineLE2#define GT3#defineGE4#defineEQ5#define NE6#define WHILE18#defineDO19#define ID 20#define NUMBER 21#define RELOP 22#defi
10、ne NEWLINE 23#define ERRORCHAR 24#define _PROGRAM 25#define _VAR 26#define _INTEGER 27#define _REAL 28#define _END 29#define _THEN 30#define fenhao 31#define maohao 32#define douhao 33#define jiahao 34#define chuhao 35#define dian 36#define chenghao 37#define jianhao 38#define _BEGIN 39#define _ELSE
11、 40% delim t nwsdelim+letterA-Za-zdigit0-9idletter(letter|digit)*numberdigit+(.digit+)?(E+-?digit+)?/* 狀態(tài)(或條件)定義可以定義在這里 * INITIAL是一個(gè)默認(rèn)的狀態(tài),不需要定義 */%s COMMENT%<INITIAL>"/*"BEGIN COMMENT;ECHO;<COMMENT>"*/"BEGIN INITIAL;ECHO;<COMMENT>.|nECHO; /* ECHO是一個(gè)宏,相當(dāng)于 fprintf
12、(yyout, "%s", yytext)*/<INITIAL>ws ;<INITIAL>whilereturn (WHILE);<INITIAL>"WHILE"return(WHILE);<INITIAL>do return (DO);<INITIAL>"ELSE"return(_ELSE);<INITIAL>"PROGRAM" return (_PROGRAM);<INITIAL>"BEGIN"return
13、(_BEGIN);<INITIAL>"VAR" return (_VAR);<INITIAL>"INTEGER" return (_INTEGER);<INITIAL>"END" return (_END);<INITIAL>"REAL" return (_REAL);<INITIAL>"THEN" return (_THEN);<INITIAL>number return (NUMBER);<INITIAL>i
14、d return (ID);<INITIAL>"<" return (RELOP);<INITIAL>"<=" return (RELOP);<INITIAL>"=" return (RELOP);<INITIAL>"<>" return (RELOP);<INITIAL>">" return (RELOP);<INITIAL>">=" return (RELOP);&
15、lt;INITIAL>":=" return (RELOP);<INITIAL>""return (fenhao);<INITIAL>"," return (douhao);<INITIAL>":" return (maohao);<INITIAL>"+" return (jiahao);<INITIAL>"-" return (jianhao);<INITIAL>"*" ret
16、urn (chenghao);<INITIAL>"/" return (chuhao);<INITIAL>"." return (dian);<INITIAL>. return ERRORCHAR; %int yywrap () return 1;void writeout(int c) switch(c) case ERRORCHAR: fprintf(yyout, "(ERRORCHAR, "%s") ", yytext);break; case RELOP: fprintf
17、(yyout, "(RELOP, "%s") ", yytext);break; case WHILE: fprintf(yyout, "(WHILE, "%s") ", yytext);break; case DO: fprintf(yyout, "(DO, "%s") ", yytext);break; case NUMBER: fprintf(yyout, "(NUM, "%s") ", yytext);break; case I
18、D: fprintf(yyout, "(ID, "%s") ", yytext);break; case NEWLINE: fprintf(yyout, "n");break;case _PROGRAM: fprintf(yyout,"(PROGRAM)");break; case _BEGIN: fprintf(yyout,"(BEGIN)");break;case _VAR: fprintf(yyout, "(VAR)", yytext); break;case _INT
19、EGER: fprintf(yyout, "(INTEGER)", yytext); break;case _REAL: fprintf(yyout, "(REAL)", yytext); break;case _END: fprintf(yyout, "(END)", yytext); break;case _THEN: fprintf(yyout, "(THEN)", yytext); break;case maohao:fprintf(yyout, "(maohao)", yytext);
20、 break;case fenhao: fprintf(yyout, "(fenhao)", yytext); break;case douhao: fprintf(yyout, "(douhao)", yytext); break;case jiahao: fprintf(yyout, "(jiahao)", yytext); break;case chuhao: fprintf(yyout, "(chuhao)", yytext); break;case dian: fprintf(yyout, "(dian)", yytext); break;case chenghao: fprintf(yyout, "(chenghao)", yytext); br
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村集體設(shè)備租賃合同范本
- 代理全轉(zhuǎn)讓合同范本
- 臨時(shí)材料購(gòu)買合同范本
- 包人工電纜合同范本
- 第二單元第11課《while循環(huán)的應(yīng)用實(shí)例》教學(xué)設(shè)計(jì) 2023-2024學(xué)年浙教版(2020)初中信息技術(shù)八年級(jí)上冊(cè)
- 農(nóng)村閑置小學(xué)出租合同范本
- 出口尿素銷售合同范本
- 企業(yè)團(tuán)隊(duì)建設(shè)合同范本
- 出售舊材料合同范本
- 人事調(diào)動(dòng)合同范本
- 專項(xiàng)施工方案專家論證意見回復(fù)表
- 印象主義、后印象主義課件
- 隊(duì)列訓(xùn)練教程ppt課件(PPT 86頁)
- 第三章-農(nóng)村公共管理組織課件
- 《醫(yī)古文》教學(xué)全套課件580頁
- 水電廠計(jì)算機(jī)監(jiān)控系統(tǒng)改造技術(shù)要求
- 勝利油田壓驅(qū)技術(shù)工藝研究進(jìn)展及下步工作方向
- 依戀理論之母嬰依戀
- 電氣CAD-電氣圖基本知識(shí)
- 電氣成套設(shè)備及元件知識(shí)匯總.
- 鋸齒形螺紋強(qiáng)度計(jì)算公式
評(píng)論
0/150
提交評(píng)論