如何開發一個能夠運行在JAVA虛擬機上的編程語言?

有沒有大神能夠知道,想要開發一個編譯成class文件的編程語言需要學習哪些知識或者看哪些書籍?有沒有類似的指導書籍?


題主要入門學習的話先從《Language Implementation Patterns》開始吧。中文版叫做《編程語言實現模式》。

放個簡單的傳送門:如何實現一門基於 JVM 的程序語言? - RednaxelaFX 的回答


最簡單的辦法是寫一個monad,然後用ThoughtWorksInc/each的monadic套起來就變成一種新語言了。並不需要像別的答案說的那樣去寫解析器、解釋器、編譯器什麼的。

Binding.scala就是用這種辦法做的,是一門混合了Scala、HTML和數據綁定語法的新的領域特定語言。


如果只是玩玩,其實不是很難。語法設計的不要太複雜,用遞歸下降演算法手寫一個解析器,生成Java即可。Scala本身有解析器,不過我沒有仔細研究過。

高級一定的話,可能需要了解Java的class文件是怎麼生成的。

無論如何,解析器是避不過去的。


1. 編譯原理

2. 想編譯到的class版本的jvm specification

如果已經會寫編譯器或者解釋器了,那麼「1」可省略。

「2」主要是第四章class format和第六章instructions。


編譯原理


建議先看書,先入門。

寫編譯器,即使按書上,照本宣科,也不簡單。

推薦書單:

兩周自製腳本語言

自製編程語言

自製編譯器

目前,我也在看,還沒有完成一個編譯器的製作。


前端如何生成AST有蠻多資料的,code generation的話研究一下 Jasmin,一個JVM上的assembly語言。 和它對應還有一個叫做 javap 的disassembler。


推薦閱讀:

Apache和Apache Tomcat的區別是什麼?
為什麼計算機專業好多年了,就是學不會編程?
為什麼 .NET 就業市場不大?
25歲,如何職業規劃?

TAG:編程語言 | Java | Java虛擬機JVM | 編譯原理 | Java程序員 |