編譯原理之整體理解

最近因爲項目的需要用到編譯原理,需要對java編譯器進行一定的改動,當然前期的工作不至於太過複雜,還是需要很多編譯原理的基礎知識,所以去買了龍書虎書的中英文版好好的看了一段時間,有些學習心得過來總結一下。

編譯器,本質上是一種將某一種語言(源語言)編寫的程序轉化爲等價的以另一種語言(目標語言)實現的程序。這裏要注意編譯器和解釋器的區別:解釋器並不通過翻譯的方式生成目標程序,而是直接對源程序進行解釋執行,邊解釋邊執行。而對於java,其將兩種方式綜合,一方面需要使用編譯器將java代碼編譯成字節碼,然後使用java虛擬機解釋執行。

一、針對《編譯原理》第一張導論的知識,對語言處理系統(包括不僅僅是編譯器)的整體框架進行了總結,如下圖(手畫):


而且在第一章中對一些會影響編譯的名字進行了說明,其實瞭解這些對於理解程序也是很有好處的,其中有兩點覺着有必要提一下:

1、變量名字 內存位置 和值的關係, 這三者之間的關係我也畫了張小圖來解釋


2、靜態作用於和動態作用域的區分,舉一個典型裏的例子就是在java語言中,由於子類的實例可以複製給父類的變量,而在父類和子類之間的方法是可以重寫的,所以就會出現具體的調用的方法在運行時纔可以確認,而無法在編譯時確認。

二、除了第一章之外, 之後便是專注於編譯器本身的講解

從第一張圖的右側部分可以看出,編譯器可以劃分爲前端和後端兩大部分,其中前端主要集中於根據對語言的預知對代碼進行分析,後端則是利用分析結果綜合成目標語言(通常是彙編語言或者機器碼)。

由於項目需要和時間問題,所以精力主要放在了前端上面,而對於整個前端來說,其核心在於語法分析器,或者說,整個前端的分析過程是由語法制導的,通過對第二章(一個簡單的語法制導翻譯器)的學習和復現,大體上花了一張前端組件關係和工作模式的圖,如下:



發佈了38 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章