實驗報告
課程名稱編譯原理
實驗名稱詞法分析實驗
班級學號姓名指導教師
實驗日期
一、實驗目的
1.了解詞法分析的主要任務。
2.熟悉編譯程式的編制
通過設計、除錯詞法分析程式,實現從源程式中分出各種單詞的方法;
熟悉詞法分析程式所用的工具自動機,進一步理解自動機理論;
掌握文法轉換成自動機的技術及有窮自動機實現的方法;
確定詞法分析器的輸出形式及識別符號與關鍵字的區分方法;
加深對課堂教學的理解;
提高詞法分析方法的實踐能力;
通過本實驗,應達到以下目標:
1、掌握從源程式檔案中讀取有效字元的方法和產生源程式的內部表示檔案的方法。
2、掌握詞法分析的實現方法。
3、上機除錯編出的詞法分析程式。
二、實驗原理
1、 詞法分析是編譯過程的第一階段。它的任務就是對輸入的字串形式的源程式按順序進行掃瞄,根據源程式的詞法規則識別具有獨立意義的單詞(符號),並輸出與其等價的token序列。
2、 有限自動機是描述程式語言單詞構成的工具,而狀態轉換圖是有限自動機的比較直觀的描述方法。我們使用確定的有限狀態自動機,簡記為dfa。
3、 根據語言的詞法規則構造出識別其單詞的確定有限自動機dfa, 僅僅是詞法分析程式的乙個形式模型,距離詞法分析程式的真正實現還有一定的距離。狀態轉換圖的實現通常有兩種方法,一種是用狀態轉換表t;另一種是直接轉向法。
4、 狀態轉換表法又稱資料中心法,是把狀態轉換圖看作一種資料結構(狀態轉換表),由控制程式控制字元在其上執行,從而完成詞法分析。用轉換表的優點是程式短,但佔儲存空間多,直接轉向法的優缺點正好與此相反。
5、 直接轉向法又稱程式中心法,是把狀態轉換圖看成乙個流程圖,從狀態轉換圖的初態開始,對它的每乙個狀態結點都編一段相應的程式。
三、 主要儀器裝置
pc機一台(安裝window7作業系統)
四、 主要內容和步驟
1. 建立工作資料夾
如 d:\lex
2. 將詞法分析工具 拷入到該資料夾
3. 建立lex原始檔
如:用文字編輯器建立原始檔
%digit [0-9]
alpha [a-z]
alnum [a-z0-9]
%%begin
end"*""+"*"="%%out(int c,char *val)
4. 建立簡單語言的源程式檔案
如:用文字編輯器建立檔案
begin
abcd=100
efg=200
gh123=300
if abcd >=efg then temp=100
else temp=temp+gh123
end5. 在dos執行flex 生成目標檔案 (d:進入d盤, cd d:\lex進入當前目錄)
flex lex源檔名
如:d:\lex\flex
6. 進入vc,對進行修改
(1) 增加或修改main()函式
增加開啟程式檔案的語句
int main(void)
yylex();
return 0;
}(2) 增加函式
int yywrap()
return 0;
} (3) 尾部上這二行遮蔽 // #if yy_main
endif
五、 設計與程式設計
%digit [0-9]
alpha [a-z]
alnum [a-za-z0-9]
%%begin
endifelse
"*""+"*"="%%out(int c,char *val)
六、測試結果
七、問題與建議
實驗1 詞法分析實驗報告
軟體學院 編譯原理 實驗報告 題目詞法 語法分析 專業軟體工程 班級rb軟體w101 學號201007104141 學生姓名田博 指導教師陸筱霞 日期2013 6 21 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。1 待分析的簡單語言的詞法 1 關鍵字 begin if then whil...
編譯原理詞法分析實驗報告
實驗1 詞法分析實驗報告 一 實驗目的 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。二 實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 所有關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正...
編譯原理詞法分析實驗報告
實驗一詞法分析器設計 實驗目的 1 熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。2 複習高階語言,進一步加強用高階語言來解決實際問題的能力。3 通過完成詞法分析程式,了解詞法分析的過程。實驗內容 用c語言編寫乙個pl 0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的...