設計實現類高階語言的詞法分析器,基本功能如下:
(1) 能識別以下幾類單詞:
識別符號(由大小寫字母、數字以及下劃線組成,但必須以字母或者下劃線開頭)
關鍵字(①型別關鍵字:整型、浮點型、布林型、記錄型;②分支結構中的if和else;③迴圈結構中的do和while;④過程宣告和呼叫中的關鍵字)
運算子(①算術運算子;②關係運算子;③邏輯運算)
界符(①用於賦值語句的界符,如「=」;②用於句子結尾的界符,如「;」;③用於陣列表示的界符,如「[」和「]」;④用於浮點數表示的界符「.」)
常數(無符號整數和浮點數,包括指數形式)
注釋(/*……*/形式)
(2)能夠進行詞法錯誤處理。識別出輸入程式中的詞法錯誤,準確給出錯誤所在位置,並採用可行的錯誤恢復策略。輸出的錯誤提示資訊格式如下:
error at line [行號]:[說明文字]
(3)系統的輸入形式:要求能夠通過檔案匯入測試用例。測試用例要涵蓋第(1)條中列出的各類單詞,幷包含各種單詞拼寫錯誤。
這裡採用的token字串識別方法是基於dfa狀態轉移
![](https://pic.w3help.cc/3d0/31ec4b87091a6f912126ca1d7ef15.jpeg)
與之對應可以建立乙個二維陣列進行狀態判斷
//dfa of digit
public static string digitdfa = ;
//判斷輸入符號是否符合狀態機
public static int in_digitdfa(char ch, char test)
else
}
//初始化進入1狀態
int state = 1;
//宣告計數變數
int k;
boolean isfloat = false;
while ( (ch != '\0') && (isdigit(ch) || ch == '.' || ch == 'e' || ch == '-'))
}if (k > 6) break;
//遍歷符號先前移動
全部工程源**:
哈工大2015秋 編譯原理課程實驗1 詞法分析
經過一年的c 的歷練,確實算是挺喜歡c 的了,這次的編譯原理尤為用心。既已提交作業,便拿出來共享一下,或許某學弟學妹能看到呢 偷笑 圖1 專案資源管理器截圖 工程 class.cs 主要是record errorrecord data類的定義,儲存詞法分析的結果 form1.cs winform窗體...
語法分析 哈工大編譯原理實驗二
1 鞏固對語法分析的基本功能和原理的認識。2 通過對語法分析表的自動生成加深語法分析表的認識。3 理解並處理語法分析中的異常和錯誤。在詞法分析器的基礎上設計實現類高階語言的語法分析器,基本功能如下 1 能識別以下幾類語句 宣告語句 包括變數宣告 陣列宣告 記錄宣告和過程宣告 表示式及賦值語句 包括陣...
編譯原理 詞法分析實驗
實驗一 詞法分析 一 實驗目的 通過設計編制除錯乙個具體的詞法分析程式,加深對詞法分析原理的理解。並掌握在對程式語言源程式進行掃瞄過程中將其分解為各類單詞的詞法分析方法。編制乙個讀單詞過程,從輸入的源程式中,識別出各個具有獨立意義的單詞,即基本保留字 識別符號 常數 運算子 分隔符五大類。並依次輸出...