用 golang 寫一個語言(編譯器,虛擬機器)

elvin5發表於2020-05-08

gitbub: https://github.com/elvin-du/tinyscript

整個專案包括三個東西:

  1. 建立了一個自己的語言
  2. 編譯器
  3. 虛擬機器

golang 實現的一個編譯器,用來編譯一個自己建立的語言(用來玩的),最後寫了一個自定義虛擬機器用來執行自定義語言。

語言介紹

為了跨平臺(其實是為了方便開發 ^ ^),所以這個語言沒有靜態編譯成硬體指令集,最後的機器碼是我自己的定義的,和 MIPS 類似的(其實就是一個 mips 子集)虛擬指令集。為了執行這些指令集,我寫了一個虛擬機器。

語言和 golang 和 javascript 類似,實現了函式,型別宣告,函式呼叫等最基本的一些語言元素,沒有實現類,結構體,介面等複雜資料結構。 下面是用這個語言程式設計的例子:

func fact(int n)  int {
    if(n == 0) {
        return 1
    }
    return fact(n-1) * n
}
func main() void {
    return fact(2)
}

每個函式都實現了相應的 UnitTest,單元測試真香~

更多原創文章乾貨分享,請關注公眾號
  • 用 golang 寫一個語言(編譯器,虛擬機器)
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章