標籤(空格分隔): 未分類前端
簡單的說,一個編譯器就是一個程序,它能夠閱讀以某一種語言(源語言)編寫的程序,並把該程序翻譯稱爲一個等價的,用另外一種(目標語言)編寫的程序。正則表達式
編譯器的重要任務之一是報告它在翻譯過程當中發現的錯誤。數據庫
解釋器(interpreter)
是另外一種常見的語言處理器。直接利用源代碼和輸入來產生輸出。後端
Java 結合了編譯和解釋過程。緩存
- Java源代碼首先被編譯成一個稱爲
字節碼(bytecode)
的中間表現形式。- 而後
JVM
對獲得的字節碼加以解釋和執行。
爲了更快地完成輸入和輸出的處理,有些被稱爲
即便(just in time,JIT)
編譯器的JAVA編譯器在運行中間程序處理輸入的那一刻,首先把字節碼翻譯爲機器語言,而不用解釋器,這樣能加快速度。安全
出了編譯器以外,建立一個可執行的目標程序還須要一些其餘程序。數據結構
預處理器(preprocessor)
的程序獨立完成。
編譯器
可能產生一個彙編語言做爲輸出。
彙編器(assembler)
的程序進行處理,生成可重定位的機器代碼。連接器(linker)
解決外部內存地址的問題。加載器(loader)
把全部的可執行目標文件加載進內存執行。編譯器由兩部分組成:分析部分和綜合部分架構
分析(analysis)
部分把源程序分解爲多個組成要素,並在這些要素之上加入語法結構。而後,它使用這個結構來建立該源程序的一個中間表示。前後端分離
符號表(symbol table)
的數據結構中。符號表和中間表現形式一塊兒傳送給綜合部分。函數
綜合(synthesis)
部分根據中間表示和符號表中的信息構造用戶期待的目標程序。
分析部分
常常被稱爲編譯器的前端
,而綜合部分
被稱爲後端
。編譯器的第一個步驟稱爲詞法分析(lexical analysis)
或掃描(scanning)
。
詞法分析器讀入組成源程序的字符流
,而且將它們組織成爲有意義的詞素(lexeme)
的序列
詞素
,詞法分析器產生以下形式的詞法單元(token)
<token-name,attribute-value>
例子: position = initial + rate * 60
通過詞法分析後轉變爲<id,1> <=> <id,2> <+> <id,3> <*> <60>
從技術上講,60應該被描述爲
<number,4>
,4指向符號表中對應於60的條目。
語法分析(syntax analysis)
或解析(parsing)
。
根據詞法分析的結果,進行語法分析,結果通常是一顆語法樹
等語法結構,如圖1-7。
編譯器的後續步驟使用這個語法結構來幫助分析源程序,並生成目標程序。在第四章,咱們將使用上下文無關文法來描述程序設計語言的語法結構,
語義分析器(semantic analyzer)
使用語法樹和符號表中的信息來檢查源程序是否和語言定義的語義一致。同時收集類型信息,並把信息存放在語法樹或符號表中,以便在隨後的中間代碼中使用。
這就是語義分析中一個十分重要的功能,具體例子就是圖中的inttofloat
。
咱們將在第六章詳細介紹。
將語法樹等中間形式翻譯爲三地址代碼
的中間形式。
第六章咱們將將詳細介紹。
機器無關的代碼優化步驟試圖改進中間代碼,以便生成更好的目標代碼。
如下是個簡單的例子
優化爲
第八章咱們將詳細討論。
生成類彙編語言
的目標語言,
在第八章中詳細討論
上面代碼忽略了對源程序中的標示符進行存儲分配的重要問題。
咱們將在第七章看到,編譯器在中間代碼生成或代碼生成階段對有關存儲器分配的決定,和運行時刻的存儲組織方式依賴於被編譯的語言。
符號表管理記錄源程序變量過程的各類信息
相似與平衡樹紅黑樹之類的數據結構,便於查詢。
(其實就是所謂的先後端分離的意思)
前端步驟能夠當作一趟,根據中間代碼生成目標代碼的後端也能夠看作一趟。
前端趟和後端趟根據目標自由搭配。
NOMAD
,用於數據庫查詢的SQL
第五代語言:基於邏輯與約束語言:Prolog
和OPS5
聲明式語言:函數式語言
,約束邏輯式語言
屬於此類。
複雜多變的程序設計語言,對編譯器及編譯器設計人員也提出了極大的考驗。
本書將會告訴咱們編譯器設計的根本思想和方法論。
接收一個問題,抓住問題的關鍵特性的數學抽象表示,並用數學方法解決他。
基本的幾個模型
二進制翻譯
編譯器技術能夠用於把一個機器的二進制代碼翻譯成另外一個機器的二進制代碼,使得能夠在一個機器上運行本來爲另外一個指令集編譯的程序。
硬件合成
不只僅大部分軟件是用高級語言描述。大部分硬件設計也是使用高級硬件描述語言描述的。這些語言有Verilog
和VHDL
. 硬件設計一般一般是在寄存器傳輸層(Register Transfer Level,RTL)
描述.
數據查詢解釋器
編譯而後模擬
public
,private
,protecte
Algol 60
使用