編譯器的實現
學院(系
學生姓名
學號班級
同組人目錄
1 課設要求
1.1. 實現原理
1.2. 單詞符號及種別表
1.3. 語法結構的定義
2 執行環境
3 總體設計思想
4 詳細設計思想
4.1. 詞法分析主要演算法
4.2. 語法分析主要演算法
4.3. 語義分析主要演算法
5 流程框圖
6 函式相關說明
7 程式用例及執行結果
8 小組分工與合作
9 心得與體會
用c++語言對下述文法和單詞表定義的語言做乙個編譯器,實現了ll(1)詞法分析,語法分析,中間**生成功能。
編譯程式的工作過程一般可以分為五個階段:詞法分析、語法分析、語義分析與中間**產生、優化、目標**生成。每乙個階段在功能上是相對獨立的,它一方面從上乙個階段獲取分析的結果來進行分析,另一方面由將結果傳遞給下乙個階段。
由編譯程式的五個階段就對應了編譯系統的結構。
p →d →int id ;
s→if (b) then s [else s ] | while (b) do s | | id=e
l→sl』
l』 →; l |
b→t』
t』 →f』
f』 →id relop id | id
e→tt→f
f→ (e) | num | id
//紅顏色的{}是終極符.黑顏色的{}和[]不是終極符.
2 執行環境
windows 系統 visual c++ 6.0
採用遞迴下降子程式法和語法制導翻譯及回填拉鍊技術
詞法分析程式——》語義分析程式——》四元式
這部分對原始檔進行分析,允許/* */注釋。從原始檔依次讀取字元,對字元進行分析,組成字串、數字、關係符等固定含義的token符,並把它們新增到token鏈中,如果遇到非法字元報錯並退出程式。
4.2.語法分析主要演算法
這部分對token鏈進行分析,利用遞迴下降子程式法的分析方法。
4.3.語義分析主要演算法
這部分對語法樹從左到右進行遍歷,節點記錄了規約式的編號,遍歷到節點時就進行相應處理。語義分析主要檢查變數、函式是否被定義或重定義,同時產生四元式。
5 流程框圖
圖1 主函式程式流程圖
圖2 遞迴下降分析分析程式流程圖
6 函式相關說明
sym getsym(char now);
詞法分析函式。
void yuyi();
語義分析函式。
d(); 變數定義分析函式。
s(); 語句分析函式。(if then else while do 賦值復合)
b(); bool表示式分析函式。
l(); 復合語句分析函式。
ll(); 復合語句連線分析函式。
tt(); or 連線分析函式。
ff(); and 連線分析函式。
e(); 賦值語句分析函式。
t(); +,- 連線分析函式。
f(); *,/ 連線分析函式。
bool lookup(string a);
檢驗變數是否定義函式。
void check(sym a);
檢驗是否用沒定義變數函式。
string add(int stop,int ttop);
部分四元式生成函式。(一部分在分析函式中直接生成)。
成功樣例1
}#執行結果
成功樣例2
int e;
int f;
}#執行結果
錯誤樣例1:
#執行結果:
錯誤樣例2:
}#執行結果:
錯誤樣例3:
int b;
}#注:此處錯誤應為缺少; 但**是向下差錯,所以報錯缺少},但仍可根據錯誤行數改錯。
8 小組分工與合作
9心得與體會
編譯原理課程設計報告
課程設計報告 課程名稱編譯程式設計原理 課題名稱帶括號的四則混合運算 專業班級 學號姓名 指導教師 2014年 6 月 27日 湖南工程學院 課程設計任務書 課程名稱編譯程式設計原理 課題帶括號的四則混合運算 專業班級 學生姓名 學號指導老師 審批任務書下達日期 2014 年 6月 23日 任務完成...
編譯原理課程設計報告
小組成員 張快學號 2011014260 此次課設我完成的工作主要有兩大不分,乙個是完成了詞法分析模組的一部分內容,還有就是把各個模組整合在一起,設計乙個mfc對話方塊程式。下面詳細介紹一下我的工作 nfa轉化為dfa,dfa最小化 詞法分析模組 nfa轉成dfa的主要工作是找出每個節點的閉包,我用...
編譯原理課程設計報告 編譯器
編譯技術 課程設計實驗報告 實驗名稱 編譯器程式 姓名 學號 班級 年月日模仿上學期給定的程式,根據下面具體的內容,用c 語言對下述文法和單詞表定義的語言設計編制乙個編譯器。設計報告格式撰寫報告 1 單詞符號及種別表 2 語法結構定義 程式 main 語句塊 語句塊 程式用括號括起來 語句串 語句 ...