編譯原理實驗三

2022-12-12 16:24:05 字數 2879 閱讀 3887

實驗報告

第 2 組

專業__軟體工程__ 班級____3____ 學號_123012012095、94、101、103______

_ 姓名吳藝萍、陳璐、崔旻、劉超群

實驗日期: 2014 年 3 月 20 **告退發 (訂正 、 重做

課程實驗名稱遞迴下降的**分析

一、實驗目的

1. 學會用語法圖來形式化地描述一門簡單的語言;

2. 掌握遞迴下降的**分析;

3. 掌握詞法分析。

二、實驗環境

visual studio 或 gcc 或eclipse

三、實驗內容、步驟和結果分析

實驗內容:

請基於遞迴下降的分析方法(教材p55頁),編寫乙個「語法圖.doc」所對應語言的語法分析器。該語法分析器能讀入乙個源**檔案(如「檔案所示),並判斷其中的源**是否符合「語法圖.

doc」的規定。如果符合,列印出yes;如果不符合,列印出no。(所用程式語言不限)

四、討論

(說明實驗過程中遇到的問題及解決辦法;未解決/需進一步研討的問題或建議新實驗方法等)

#include <>

#include <>

#include <>

//變數名的最大長度

#define max_id_len 20

//記號

struct token;

static bool real = true判斷是否合法

extern token token; //當前記號

char fromfile從file中提取字元

//記號型別¨

enum tokentype

;enum addtype;

//enum multype;

//識別符號型別

enum idtype;

token gettoken();

void match(int t);

//expression

void expr();

void term();

void factor();

void syntaxerror(char * info);

//statement

void statement();

void ifstatement();

void whilestatement();

void printstatement();

void lpstatement();

void idstatement();

//program

void definition();

void program();

#include

#include

#include""

using namespace std;

//從字串讀入源**

char * filename = "d:\\";

//從檔案讀入源**

file * infile = fopen(filename,"r");

char fromfile()

void parse

token = gettoken詞法分析

program語法分析

}void main()

}#include""

#define keywords_count 5keyword的總個數

#define boolvaluecount 2

token token = ;

//關鍵字對應類別

static int keytype[keywords_count] = ;

static char * boolvalue[boolvaluecount]=;

static int boolvaluetype[boolvaluecount]=;

bool isdigit(char c)

bool isletter(char c)

static int getkeyword(char * str)

}return undefined;

}int getboolvalue(char* strbool的true和false

for(int i=0;i if(strcmp(str,boolvalue[i])==0)

return undefined;

}//取下乙個token

token gettoken()

ch = fromfile();

}if( ch == '+')

else if(ch == '-')

else if(ch == '*')

else if(ch == '/')

else if(ch == '(')

else if(ch == ')')

else if(ch == '

else if(ch == '}')

else if(ch == ',')

else if(ch == ';')

else if(ch == '=')

else if(ch

}else if(ch

}else if(isdigit(ch))

value = num

}else if(isletter(ch

int index = 0;

= ch;

ch = fromfile();

while(isletter(ch) || isdigit(ch)){

if(index < max_id_len){

= ch;

ch = fromfile();

else{

printf("identifier is too long.");

編譯原理實驗

實驗三中間的 優化 一 實驗目的 掌握區域性優化方法 提高機器的執行速度 二 相關知識 某些編譯程式在中間 或目標 生產之後要對其進行優化,所謂優化就是對 進行等價的變換。而變換後的 執行結果與變換前的 執行結果相同。而執行速度加快或占用記憶體空間減少。中間的 優化就是對中間 進行等價的變換。基本塊...

編譯原理實驗

第一篇高階程式語言到中間語言 第一章編譯概論及程式語言規定 1 1 編譯程式概論 計算機執行乙個高階語言程式一般要分為兩步 第一步,用乙個編譯程式把高階語言翻譯成機器語言程式 第二步,執行所得的機器語言程式,求得計算結果。編譯程式的工作貫穿於從輸入源程式開始到輸出目標程式為止的整個過程,是非常複雜的...

編譯原理實驗一

編譯原理課程 2015 2016年度第2學期 實驗題目 詞法分析程式設計 院系 計算機學院 班級130808 學號 3113003906 姓名 王峰 任課教師 白明成績評定 完成日期 2016年 5 月 21 日 一 程式設計題目與說明 設計乙個關於某種高階語言子集的詞法分析程式 功能包括 輸入源程...