《兩週自制指令碼語言》——第一天(來,我們一起做些什麼吧)
機器語言與組合語言
有些程式設計語言無需藉助軟體執行,這些語言稱為機器語言。機器語言可以由硬體直接解釋執行,理論上不必使用軟體
機器語言寫成的程式本質上是一個位數很長的二進位制數字。由於它不易閱讀,人們通過組合語言程式來表述這個巨大的數字。因此,如果要執行組合語言寫成的程式,使用者通常需要使用軟體將其轉換為機器語言,這種軟體稱為彙編程式(assembler)。彙編程式可以說是一種最基本的語言處理器
直譯器與編譯器
直譯器
直譯器根據程式中的演算法執行運算。簡單地說,它是一種 用於執行程式的軟體 。
編譯器
編譯器能 將某種語言寫成的程式轉換為另一種語言的程式 。通常它會將源程式轉換為機器語言程式。編譯器轉換程式的行為稱為編譯,轉換前的程式稱為源程式。
有些語言混用直譯器與編譯器。通常,Java語言首先會通過編譯器把原始碼轉換為Java二進位制程式碼,並將這種虛擬的機器語言儲存在檔案中。之後,Java虛擬機器的直譯器將執行這段程式碼。
大多數Java虛擬機器為了提高效能,會在執行過程中通過編譯器將一部分Java二進位制程式碼直接轉換為機器語言使用。
過去人們題到編譯器時,首先會聯想到費時的編譯過程。不過由於編譯後實際執行的是機器語言,因此執行速度很快。而對於直譯器,人們通常認為它會在程式輸入的同時立即執行,執行速度較慢。這就是兩者的基本區別。現代的直譯器內部常採用各種型別的編譯器,已經越來越沒必要將直譯器與編譯器區分看待
開發語言處理器
由於開發的是指令碼語言,所以該處理器屬於直譯器,不過,該直譯器內部將採用編譯器來提高效能。
書中將設計的語言命名為Stone語言。實現該語言的開發語言是Java語言。因此,Stone語言也是一種運行於Java虛擬機器的語言(它稱不上是寶石,頂多算是小石子,因此取名為Stone)
語言處理器的結構
無論是直譯器還是編譯器,語言處理器前半部分的程式結構都大同小異。如下圖所示,原始碼首先將進行詞法分析,由一長串字串細分為多個更小的字串單元。分割後的字串稱為單詞。之後處理器將執行語法分析處理,把單詞的排列轉換為抽象語法樹。至此,直譯器與編譯器的處理方式相同。之後,編譯器會把抽象語法樹轉換為其他語言,而直譯器將會一邊分析抽象語法樹一邊執行運算
