閱讀屋>工作彙報> 編譯原理語法分析上機實驗讀書工程彙報

編譯原理語法分析上機實驗讀書工程彙報

編譯原理語法分析上機實驗讀書工程彙報

  一、開發環境簡介

  此次編譯原理課程設計的編譯器的實現是基於VC++6.0編譯環境下實現的。

  對於VC++6.0,它是Microsoft公司推出的開發Win32環境程式,面向物件的視覺化整合程式設計系統。它不僅具有程式框架自動生成、靈活方便的類管理、程式碼編寫和介面設計整合互動操作、可開發多種程式等優點。

  VC++6.0不僅是一個C++ 編譯器,而且是一個基於Windows作業系統的視覺化整合開發環境。Visual C++6.0明顯縮短程式編輯、編譯及連結花費的時間,在大型軟體計劃上尤其顯著。

  二、基本理論闡述、當前理論

  1.什麼是編譯程式

  語言翻譯程式把一種語言(稱作源語言)書寫的程式翻譯成另一種語言(稱作目標語言)的等價程式。

  2.高階語言程式的處理過程

  3.編譯過程

  三、小型編譯器系統架構(最重要)

  1).詞法分析:

  詞法分析是編譯過程的第一個階段。這個階段的任務是從左到右一個字元一個字元地讀入源程式,對構成源程式的字元流進行掃描和分解,從而識別出一個個單詞(也稱單詞符號或符號)。這裡所謂的單詞是指邏輯上緊密相連的一組字元,這些字元具有集體含義。比如識別符號是由字母字元開頭,後跟字母、數字字元的字元序列組成的一種單詞。保留字(關鍵字或基本字)是一種單詞,此外還有算符、界符等等。

  2).語法分析:

  語法分析是編譯過程的第二過程。語法分析的任務是在詞法分析的基礎上將單詞序列分解成各類語法短語;如“程式”、“語句”、“表示式”等。一般這種語法短語,也稱語法單位,可表示成語法樹。

  詞法分析和語法分析本質上都是對源程式的結構進行分析。但詞法分析的

  任務僅對源程式進行線性掃描即可完成,比如識別識別符號,因為識別符號的結構是字母打頭的字母和數字串,這隻要順序掃描輸入流,遇到既不是字母又不是數字字元時,將前面所發現的所有字母和數字組合在一起而構成單詞識別符號。但這種線性掃描則不能用於識別遞迴定義的語法成分,比如就不能用此辦法去匹配表示式中的括號。

  目前,已存在許多語法分析的方法。但就產生語法樹的方向而言,可大致把他們分為自底向上和自頂向下兩大類。

  3)中間程式碼生成:

  在進行了上述的語法分析和語義分析階段的工作之後,有的編譯程式將源程式變成一種內部表示形式,這種內部表示形式叫做中間語言或中間程式碼。所謂“中間程式碼”是一種結構簡單、含義明確的記號系統可以設計為多種多樣的形式,重要的`設計原則為兩點:一是容易生成;二是容易將它翻譯成目的碼。很多編譯程式採用了一種近似‘三地址指令’的“四元式”中間程式碼,這種四元式的形式為:(運算子,運算物件1,運算物件2,結果);

  4).目的碼生成:

  這一階段的任務是把中間程式碼變換成特定機器上的絕對指令程式碼或可重定位的指令或彙編指令程式碼。這是編譯的最後階段,它的工作與硬體系統結構和指令含義有關,這個階段的工作很複雜,涉及到硬體系統功能部件的應用、機器指令的選擇、各種資料型別變數的儲存空間分配以及暫存器和後援暫存器的排程等。

  此外,本程式不涉及語義分析,程式碼最佳化等程式碼最佳化階段。

  本次課程設計設計出的小型編譯器,適用範圍比較小,侷限性較高,綜合度不算強。語言不是很嚴謹,有待改進。

  四、小型編譯器主要功能模組與實現

  第一部分:語法分析程式;

  (1).功能介紹

  輸入LL(1)文法的字串,LL(1)程式可以分析其匹配過程。輸入一個字串,算符優先程式可以分析其規約移進的過程。

  (2).相關理論

  語法分析對輸入串的處理(進棧與出棧,歸約和接受)是獨立於語法分析之外單獨的一部分,但是其只能分析有限的輸入串,無法完全任意識別。 相關理論

  將表示式文法的預測分析表用二維陣列儲存,然後當分析符號串依次掃描符號串中的字元,進行匹配輸出即可。

  (3)程式流程圖

  LL(1)模擬程式實現流程:

【編譯原理語法分析上機實驗讀書工程彙報】相關文章: