如何開發一個能夠運行在JAVA虛擬機上的編程語言?
01-02
有沒有大神能夠知道,想要開發一個編譯成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程序員 |