編譯原理課程設(shè)計試驗報告1_第1頁
編譯原理課程設(shè)計試驗報告1_第2頁
編譯原理課程設(shè)計試驗報告1_第3頁
編譯原理課程設(shè)計試驗報告1_第4頁
編譯原理課程設(shè)計試驗報告1_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國海洋大學(xué)實驗報告姓名:鄧匯星專業(yè)年級:2012級計算機學(xué)號:_同組人: 竇猛專業(yè)年級:2012級計算機學(xué)號:編譯原理課程設(shè)計實驗報告【實驗題目】:實驗1:用Lex設(shè)計詞法分析器1【實驗?zāi)康摹?學(xué)會用lex設(shè)計一個詞法分析器?!緦嶒瀮?nèi)容】:使用lex為下述文法語言寫一個詞法分析器。語言文法:程序 PROGRAM *標識符 ; 分程序分程序 變量說明 BEGIN齬句表 END.變量說明VAR 變量說明表;變量說明表 變量表 : 類型 | 變量表 : 類型 ; 變量說明表類型 INTEGER | REAL變量表 變量 | 變量 , 變量表V語句表 V語句 | 語句;V語句表語句 V賦值語句 |

2、V條件語句 | V WHILE語句 | 復(fù)合語句V賦值語句 V變量 :=V算術(shù)表達式V條件語句 IF V關(guān)系表達式 THEN V語句 ELSE語句VWHILE語句 WHILE V關(guān)系表達式 DO V語句V復(fù)合語句BEGIN V語句表 ENDV算術(shù)表達式V項 | V算術(shù)表達式 + V項 | V算術(shù)表達式 -V項V項 V因式 | V項 * V因式 | V項 / V因式V因式 V變量 | V常數(shù) | (V算術(shù)表達式)V關(guān)系表達式 V算術(shù)表達式 V關(guān)系符 V算術(shù)表達式V變量 V標識符V標識符 V標識符 X字母 | V標識符v數(shù)字 | V字母V常數(shù) V整數(shù) | V浮點數(shù)V整數(shù) V數(shù)字 I V數(shù)字 V整數(shù)

3、V浮點數(shù) .V整數(shù) I V整數(shù).V整數(shù)V關(guān)系符 V | v= | = | | =| vV字母 A I B I -X I Y I Z I a | b | x | y | zV數(shù)字 0I1I2I 9【實驗要求】:輸入為用該語言所寫的源程序文件;輸出為記號序列,每個記號顯示為二元組 (記號名,記號屬性值)的形式。輸出可以在屏幕上,也可以輸出到文件中。不要求建立符號表。在 cygwin 下用 flex禾口 gcc工具將實驗調(diào)試通過,并能通過例子 parser。中testcases目錄下的testl.p 測試例的測試?!緦嶒瀰⒖肌浚篹xaml.l和exam2.l。請認真閱讀例子,發(fā)現(xiàn)錯誤及時提出。【實驗

4、過程】:根據(jù)編譯原理實驗的examl.l和exam2.l的代碼進行修改,添加對一些符號的定義,設(shè)計成為一個新的此法分析器,使得改詞法分析器能夠?qū)嶒炓蟮挠浱栠M行識別,識別效果如下:PROGRAM test;VAR i, j, k: INTEGER;fO: REAL;BEGINi := 1;j := 1;k := 0;f0 := 3.2;WHILE k<=100 DOBEGINIF j <20 THENBEGINj := i;k := k+1;f0 := f0*0.2ENDELSEBEGINj := k;k := k-2;f0 := f0/.2ENDENDEND.【實驗結(jié)果截圖】;

5、程序用flex和gcc編譯調(diào)試通過后,以testl.p中的內(nèi)容座位輸入進行詞法分析得到以下結(jié)果:a-戸|回丨療ngXunn-PC *S flex sjexaal. 1匯ngXiiflr-PC z1 gc匚 lex.yy.c匯i ngXudti-PC 2I 7?良疋転 testl.pCanTt open file testl.p,<1X1 ngXuan-C z S .丿己.亡Kt testl.p (PRUbliAM(ID. "Leif) (fenhan)CVAR1(douhao)(douhan) ID. ,rkHz|匚|叵1 |療(INTEGER ffcnhao) (IDt &q

6、uot;FO") (maohan) (REAL)(fmhao) CBLGIN) (iDf T (ftCLOP .:二") (NUM.仃”)(fenhan) (ID. ” (RELOP r : (NUM. S') (fcnhao)(Tn, %") <RELOP. ":=3Q-|二|回公(ID. Trk 3 (RELOPr ":-) 和UM. "O")(tenhao) (ID, Hf0()(RELOP,(NUM,(fenhao)(WHILE . NHILE*')<ID+ V)(RE LOP, (NUM

7、, '100" (ID, "tX/J (BEGIN) (.10, HIF")(ID.沖 <RELOPp "<") (NUMt ' ?0,+) (THENJ(BLGIN(ID,"(RELOP p ;-,r> UDf(fenhao)<IDt "k5(RELOPp r: (ID, t jiahao) 0UM.(fnhao)(tdt ”f)c RL_ur : =r' J(ID. "f0"7 (RELOP,,:-,> (to, 'in") (c

8、henghac)(END)(EL5E) (BFGTNJ (ID, ikr)< RELOP.九="(IDt 9 (fenhno) tIDT "k")<RELOP, *:=" (ID. "k")(janhan) NUM. "2”)(.RELOP 3 兀刃(ID, Trk 3anhao) UM,(Tenhda) (ID. ,rf0") (RELOP.(ID, "fO") (chuhao) (d*ianD(NUMr "2h) (end)ieNDj(di anngXuifir-PC

9、*testl.p的內(nèi)容如下:PROGRAM test;VAR i, j, k: INTEGER; fO: REAL;BEGINi := 1;j := 1;k := 0;f0 := 3.2;WHILE k<=100 DOBEGINIF j <20 THENBEGINj := i;k := k+1;f0 := f0*0.2ENDELSEBEGINj := k;k := k-2;f0 := f0/.2ENDENDEND.實驗程序代碼】/* 把討厭的注釋去掉*/%#include <stdio.h>#define LT1#define LE2#define GT3#define

10、 GE4#define EQ5#define NE6#define WHILE18#define DO19#define ID20#define NUMBER21#define RELOP22#define NEWLINE23#define ERRORCHAR 24#define _PROGRAM25#define _VAR 26#define _INTEGER27#define _REAL28#define _END29#define _THEN30#define fenhao31#define maohao32#define douhao33#define jiahao34#define

11、chuhao35#define dian36#define chenghao37#define jianhao38#define _BEGIN39#define _ELSE40%delim t nwsdelim+letterA-Za-zdigit 0-9idletter(letter|digit)*numberdigit+(.digit+)?(E+-?digit+)?/* 狀態(tài)(或條件)定義可以定義在這里* INITIAL 是一個默認的狀態(tài),不需要定義*/%s COMMENT%<INITIAL>"/*" BEGIN COMMENT;ECHO; <COMME

12、NT>"*/"BEGIN INITIAL;ECHO;<COMMENT>.|nECHO;/* ECHO 是一個宏,相當于 fprintf(yyout, "%s", yytext)*/<INITIAL>ws <INITIAL>while;<INITIAL>"WHILE"<INITIAL>do<INITIAL>"ELSE"<INITIAL>"PROGRAM"return (WHILE); return(WHILE

13、);return (DO);return(_ELSE);return (_PROGRAM);<INITIAL>"BEGIN" return (_BEGIN); <INITIAL>"VAR" <INITIAL>"INTEGER"<INITIAL>"END"<INITIAL>"REAL"<INITIAL>"THEN" <INITIAL>number <INITIAL>id <IN

14、ITIAL>"<" <INITIAL>"<="<INITIAL>"="<INITIAL>"<>"<INITIAL>">"<INITIAL>">="<INITIAL>":="<INITIAL>""<INITIAL>","<INITIAL>":"<

15、INITIAL>"+"<INITIAL>"-"<INITIAL>"*"<INITIAL>"/"<INITIAL>"."<INITIAL>.return (_VAR);return (_INTEGER);return (_END);return (_REAL); return (_THEN); return (NUMBER); return (ID); return (RELOP); return (RELOP); return (

16、RELOP); return (RELOP); return (RELOP); return (RELOP); return (RELOP); return (fenhao);return (douhao); return (maohao); return (jiahao); return (jianhao); return (chenghao); return (chuhao); return (dian); return ERRORCHAR;%int yywrap () return 1; void writeout(int c)switch(c)case ERRORCHAR: fprin

17、tf(yyout, "(ERRORCHAR, "%s") ", yytext);break; case RELOP: fprintf(yyout, "(RELOP, "%s") ", yytext);break;case WHILE: fprintf(yyout, "(WHILE, "%s") ", yytext);break; case DO: fprintf(yyout, "(DO, "%s") ", yytext);break;c

18、ase NUMBER: fprintf(yyout, "(NUM, "%s") ", yytext);break;case ID: fprintf(yyout, "(ID, "%s") ", yytext);break; case NEWLINE: fprintf(yyout, "n");break;case _PROGRAM: fprintf(yyout,"(PROGRAM)");break;case _BEGIN: fprintf(yyout,"(BEGIN)&

19、quot;);break;case _VAR: fprintf(yyout, "(VAR)", yytext); break;case _INTEGER: fprintf(yyout, "(INTEGER)", yytext); break;case _REAL: fprintf(yyout, "(REAL)", yytext); break; case _END: fprintf(yyout, "(END)", yytext); break;case _THEN: fprintf(yyout, "(TH

20、EN)", yytext); break; case maohao:fprintf(yyout, "(maohao)", yytext); 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)"

溫馨提示

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

評論

0/150

提交評論