一、 實驗內容
設計、編制並除錯乙個詞法分析程式,加深對詞法分析原理的理解。
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...