今天開始想寫一個腳本語言編譯器。在這個領域,我還是知道的太少了,寫的這個過程肯定是艱辛的,因為之前從來沒有接觸過這類的東西。寫在自己的博客里,算是記錄自己的學習歷程吧。相信將來自己有幸再回過頭來看到自己寫的這個東西,一定會感覺當時的自己很有意思吧。哈哈。
首先要做的事情是先明白一些基礎性的知識。分清楚幾個概念。搞明白自己要做的是什么。
1、程序設計語言(Java,C,C++等)這些在設計程序時用的語言就是程序設計語言。程序寫完了,就需要有相應額軟件來執行。這種軟件就是語言處理器。
2.語言處理器是什么?
語言處理器可以分為解釋器和編譯器。
解釋器:解釋器根據程序中的算法執行運算。他就是一種用來執行程序的軟件。程序輸入的同時會立即執行。執行速度較慢。
虛擬機:解釋器如果執行的程序由虛擬機器語言或者類似於機器語言的語言寫成,那這種軟件也叫虛擬機。
編譯器:編譯器能將一種語言寫的程序轉換成另外一語言寫的程序。一般就是把源程序轉換成機器語言程序。(C語言用的就是編譯器,直接把C程序編譯成機器語言程序。C語言也提供了解釋器,但是很少用,編譯后的機器語言會暫時存在磁盤的某個文件中,然后借助操作系統【操作系統也是一個軟件】讀取機器語言的二進制文件再Copy到內存里,進而執行)
狹義的編譯器會以文件的形式把編譯后的程序存儲在磁盤上。所以只要源程序不變,那編譯就只需要一次就ok,執行時間也會縮短。(有些解釋器內部的編譯器不會保存轉換后的程序文件)編譯過程費時,執行過程較快。
編譯:轉換的這個動作就叫編譯
源碼轉換器:如果編譯器么有把源代碼直接轉換為機器語言,那這個軟件就要源碼轉換器。
Java程序編譯執行的整個流程。
第一步:Java源代碼通過編譯器被編譯成Java二進制代碼(字節碼)
第二步:Java二進制代碼一部分通過Java虛擬機的解釋器執行,另一部分通過動態編譯(JIT編譯)來編譯成二進制的機器語言代碼。
有了一定的基礎,現在就是要開始逐步設計語言了。在具體實現之前,先設計語言的基本語法。如果想要從零開始設計一種新穎實用的語言,結果往往爛尾。所以,先設計設計一下語言的簡單語法,實現相應的語言處理器,一點點的完成。
功能1:四則運算
功能2:處理字符串
功能3:支持變量
功能4:一些簡單的基本控制語句