詞法分析器實驗報告

2022-12-02 02:12:02 字數 1555 閱讀 4723

一、 實驗內容

設計、編制並除錯乙個詞法分析程式,加深對詞法分析原理的理解。

1.待分析的簡單詞法

(1)關鍵字:所有的關鍵字都是小寫

begin if then while do end

(2)運算子和界符

< <= <> > >

(3)其他單詞是識別符號(id)和整型常數(num),通過以下正規式定義:

id = letter (letter | digit)*

num = digit digit*

(4)空格有空白、製表符和換行符組成。空格一般用來分隔id、num、運算子、界符和關鍵字,詞法分析階段通常被忽略。

2. 各種單詞符號對應的種別碼:

表1 各種單詞符號對應的種別碼

3. 詞法分析程式的功能:

輸入:所給文法的源程式字串。

輸出:二元組(syn,token或num)構成的序列。

其中:syn為單詞種別碼;

token為存放的單詞自身字串;

num為整型常數。

例如:對源程式begin x:=9: if x>9 then x:=2*x+1/3; end #的原始檔,經過詞法分析後輸出如下序列:

(1,begin) (10,x) (18,:=) (11,9) (26,;) (2,if)……

2、實驗設計和實現

關鍵字:

定義全域性字串型陣列key[6]=,字串與關鍵字匹配成功即為關鍵字。

判斷關鍵字的函式及**如下:

bool iskey(string str,int &syn)

}return false;

}判斷字母函式:

bool isletter(char c)

else

}判斷數字函式:

bool isdigit(char c)

else

}詞法判斷流程簡略圖:

繼續②、③、④↑空格

↑①num(數字)←讀入字元不為空→字母→包括普通字母構成的字串,id以及關鍵字

運算子和界符

3、實驗結果與分析

判斷詞法的具體**:

void analyse(file *filep)

}主函式部分:

int main()

cout< cout<<"output the result:"< analyse(filep);

fclose(filep);

return 0;

}結果:

測試資料1:

begin x:=9; if x>9 then x:=2*x+1/3; end #

測試資料2:

begin 9xy:=+9; if x>9 then x:=2*x+1/3; end #

4、實驗總結和體會

通過此次實驗,讓我了解到如何設計、編制並除錯詞法分析程式,加深對詞法分析原理的理解;熟悉了構造詞法分析程式的手工方式的相關原理,根據識別語言單詞的狀態轉換圖,使用某種高階語言(例如c++語言)直接編寫此法分析程式。另外,也讓我重新熟悉了c++語言的相關內容,加深了對c++語言的用途的理解。

編譯原理詞法分析器實驗報告

北華航天工業學院 編譯原理 課程實驗報告 課程實驗題目 詞法分析器實驗 作者所在系部 電腦科學與工程系 作者所在專業 電腦科學與技術 作者所在班級 b08512 作者學號18 作者姓名 李桂丁 指導教師姓名 李建義 完成時間 2010年3月26日 一 實驗目的 了解詞法分析程式的兩種設計方法 1.根...

詞法分析器實驗

姓名 孫曉龍 學號 220800320 日期 2011 5 10 實驗目的 詞法分析的目的是將輸入的源程式進行劃分,給出基本符號 token 的序列,並掠過註解和空格等分隔符號。基本符號是與輸入的語言定義的詞法所規定的終結符。設計 編制 除錯乙個詞法分析子程式 識別單詞,加深對詞法分析原理的理解。功...

詞法分析器

為給定程式語言設計詞法分析器 1 單詞結構 注釋 以 開頭到該行尾部為注釋 關鍵字 共6個 int real if then else while 識別符號 以字母開頭,後跟字母或數字的符號串,最長為64個字元。注意 關鍵字不是識別符號 操作符 共11個 分隔符 共5個 數字 用正規式描述 digi...