編譯原理實驗報告1_第1頁
編譯原理實驗報告1_第2頁
編譯原理實驗報告1_第3頁
編譯原理實驗報告1_第4頁
編譯原理實驗報告1_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、編譯原理實驗報告103091337 李璐03091339 宗婷婷一、上機題目:實現(xiàn)一個簡單語言(CPL)的編譯器(解釋器)二、功能要求:接 收以CPL編寫的程序,對其進行詞法分析、語法分析、語法制導翻譯等,然后能夠正確的執(zhí)行程序。三、試驗目的.加深編譯原理基礎知識的理解:詞法分析、語法分析、語法制導翻譯等.加深相關基礎知識的理解:數(shù)據(jù)結構、操作系統(tǒng)等3.提高編程能力.鍛煉獨立思考和解決問題的能力四、題目說明1.數(shù)據(jù)類型:整型變量(常量),布爾變量(常量)取值范圍?, 2, -1, 0, 1, 2, ?, true, false)2、運算表達式:簡單的代數(shù)運算,布爾運算3、程序語句:賦值表達式,

2、順序語句,if-else語句,while語句五、環(huán)境配置1. 安裝 Parser Generator Visual C+;2.分別配置 Parser Generator Visual C+;3.使用 Parser Generator 創(chuàng)建一個工程編寫1文件my lexer. 1:編譯 mylexer. 1, 生成 mylexer. h 與 mylexer. c:4.使用 VC+創(chuàng)建 Win32 Console Application 工程并配置該項目:執(zhí)行標識符數(shù)字識別器;加入mylexer. h與mylexer. c,編譯工程;注意:每次修改1文件后,需要重新編譯1文件,再重新編譯VC工程六

3、、設計思路及過程9 *設計流程:YACC預定義文法BNF遞歸文法擴展實現(xiàn)函數(shù)?詞法分析LEX的此法分析部分主要利用有限狀態(tài)機進行單詞的識別,在分析該部分之前,首先 應該對YACC的預定義文法進行解釋。在YACC中用舟union擴充了 yystype的內容,使其可 以處理char型,int型,node型,其中Node即為定義的樹形結點,其定義如下: typedef enum TYPE_CONTENT, TYPE.INDEX, TYPE_OP NodeEnum;/* 操作符 */ typedef struct int name; /*操作符名稱*/ int num; /*操作元個數(shù)*/struct

4、 NodeTag * node Cl; /* 操作元地址可擴展 */ OpNode;typedef struct NodeTag NodeEnum type; /*樹結點類型*/* Union必須是最后一個成員*/ union int content; /* 內容*/ int index; /* 索引 */OpNode op; /*操作符對象*/); Node;extern int Var26;結點可以是三種類型(CONTENT, INDEX, OP)。結點如果是操作符對象(OpNode)的話,結 點可繼續(xù)遞歸結點。操作符結點包括了名稱,個數(shù)和子結點三個要素,其中子結點可以為 多個。在YACC

5、定義的文法中將與INTEGER,與VARIABLE綁定,表示對lex返回的值自動進 行類型轉換。? YACC的語法分析和語義制導在YACC中首先定義了與函數(shù)相關的文法和與運算相關的文法,其中函數(shù)定義的文法 中可以處理if-else, if, while, print, x二exp;類型,在與運算相關的文法中可以處理+, 一, *, /,二,| |運算。在語義制導翻譯部分主要目的是在內存建立一顆語法樹來 實現(xiàn)剛才所說的函數(shù)。擴展了 set_index,set_value兩個賦值語句,其操作實質是在內存 空間分配index和value的兩種樹結點。opr這個擴展函數(shù)很重要,而且使用了動態(tài)參數(shù), 主

6、要考慮操作符的操作元個數(shù)是可變的,這個也與頭文件“struct NodeTag * nodel;” 的定義思想一致。opr主要在內存空間中分配操作符相關的樹結點。Set_index, set_value, opr從概念上是完全一致的,目的就是在內存中構造一顆可以遞歸 的語法樹。程序代碼my lexer. 1文件如下:%(#include #include #include void yyerror(char *);%)%; return WHILE; return IF; return ELSE;return PRINT; yylval.iValue = 0; )return INTEGER;

7、 return INTEGER; La_z yylval. slndex = *yytext - a ; return VARIABLE; 0-9+yylval. iValue = atoi(yytext); yylval. iValue = 1;return INTEGER; -()=+*/%;). return *yytext;return GE; return LE; return EQ; return NE; return NE; return AND; return OR; return NOT;tn+ ; /*去除空格,回車*/ .%printf(int yywrap(void)

8、return 1; myparser. y文件如下:%(#include rtinclude #include include /*屬性操作類型*/Node *opr(int name, int num, );Node *set_index(int value); Node *set_content(int value);void freeNode(Node *p); int exeNode(Node *p); int yylexeNode(void); void yyerror(char *s);int Var26; /* 變量數(shù)組 */ %)%union int iValue; /* 變量值 */ char sIndex; /* 變量數(shù)組索引 */ Node*nPtr; /*結點地址*/ %token VARIABLE %token INTEGER %token WHILE IF PRINT %nonassoc IFX %nonassoc ELSE%left AND OR

溫馨提示

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

最新文檔

評論

0/150

提交評論