用 golang 寫一個語言(編譯器,虛擬機器)
gitbub: https://github.com/elvin-du/tinyscript
整個專案包括三個東西:
- 建立了一個自己的語言
- 編譯器
- 虛擬機器
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,單元測試真香~
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 機器語言編寫helloworld
- 我寫了一個TypeScript虛擬機器。TypeScript虛擬機
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- C語言編譯器手機版C語言編譯
- [譯] 用javascript實現一門程式語言-寫一個解析器JavaScript
- Golang實現JAVA虛擬機器-指令集和直譯器GolangJava虛擬機
- 在ubuntun虛擬機器裡安裝goLang語言程式設計環境Ubuntu虛擬機Golang程式設計
- 前端與編譯原理——用JS寫一個JS直譯器前端編譯原理JS
- 前端與編譯原理——用 JS 寫一個 JS 直譯器前端編譯原理JS
- 使用KVM的API編寫一個簡易的AArch64虛擬機器API虛擬機
- [譯]用Golang編寫一個簡易聊天室Golang
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- 深入理解Java虛擬機器之自己編譯JDKJava虛擬機編譯JDK
- 憑什麼別的虛擬機器叫虛擬機器,Python的叫直譯器?虛擬機Python
- 使用Golang語言編寫Hello World Web應用GolangWeb
- Ubuntu 18.04(虛擬機器)環境下編譯Android 原始碼Ubuntu虛擬機編譯Android原始碼
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- Java 虛擬機器之二:Java語言的執行機制Java虛擬機
- 實現一個終端文字編輯器來學習golang語言:序言Golang
- 用java寫一個lisp 直譯器JavaLisp
- 用Java寫編譯器(1)- 詞法和語法分析Java編譯語法分析
- 虛擬機器-Linux開發板交叉編譯問題記錄虛擬機Linux編譯
- 群暉下虛擬機器編譯部署WOW服務端TrinityCore虛擬機編譯服務端
- 編譯warp,d語言寫的c/c++前處理器.編譯C++
- C語言編譯器開發之旅(一):詞法分析掃描器C語言編譯詞法分析
- ABAP report的遞迴submit和在虛擬機器裡再次啟動另一個虛擬機器遞迴MIT虛擬機
- 虛擬機器網路啟用虛擬機
- 虛擬機器(三)虛擬機器配置靜態Ip虛擬機
- C語言編譯器開發之旅(二):解析器C語言編譯
- VMware 虛擬機器一鍵去虛擬化工具虛擬機
- 深入理解Java虛擬機器(程式編譯與程式碼優化)Java虛擬機編譯優化
- 用 C 語言編寫多程式 Web 伺服器【粗暴版】Web伺服器
- 用python語言寫程式有什麼好用的編輯器?Python
- PD虛擬機器 18 for Mac(Mac虛擬機器軟體)虛擬機Mac
- 一、虛擬機器環境配置虛擬機
- 幽默:Go語言的編譯器 - programmerjoke9Go編譯
- Podman中如何執行一個 Linux 虛擬機器?Linux虛擬機