回答
Jison仿照GNU Bison語法分析器生成器。它採用類似Bison或JSON格式的語言語法,並輸出該語言的JavaScript解析器。如果你想製作基於另一種着名語言的解釋器,那麼可以在某處可以調整Jison的地方使用Bison語法。 我發現從頭開始使用DSL非常簡單。
爲什麼你會認爲實現JavaScript語言的基本概念從根本上依賴於JavaScript?大多數情況下,它只是一種編程語言和類似標準編譯器的方法;一個「僅僅」編譯成JavaScript而不是機器指令。
下面是使用非常簡單的元編譯方法編寫編譯器的教程。它恰巧將JavaScript作爲開始的地方,但它也不是致力於JavaScript。本教程基於Val Schorre撰寫的關於「MetaII」的論文,這是一種編譯器...,日期爲(是的,你讀得對)。我學會了如何從本文建立我的第一個編譯器(但不使用JavaScript :),它仍然是一個有價值的技術:
Meta II Compiler Tutorial targeting JavaScript
如果你想要的東西更直接,考慮writing a recursive descent parser by hand.。在你寫了一些這些之後,你會非常欣賞MetaII的天才。
Downvoter:建議性的反饋將是首選,而不是你的顯性「旗」。我沒有看到這個迴應是什麼,它沒有直接解決OP對於用JavaScript來「構建語言」的方法的要求,因爲這正是引用的教程所做的。 – 2011-05-20 23:47:53
我認爲這非常相關。解析器是將語言解釋爲機器級理解的東西。如果OP想要對解析器有任何實際的權力,他將需要知道如何編寫一個編譯器;否則,他將無法獨立完成他的項目。他將在教程請求後發佈教程請求,並繼續使用文檔不完整的意大利麪條代碼進行緩慢爬取。如果他編寫了一個編譯器,他可以在睡夢中編寫代碼。 – 2012-08-02 13:44:27
我會先看看更多編譯爲javascript的語言,然後看看他們做了什麼。這裏有一個列表:https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
查看該頁面底部的解析器生成器列表,使事情變得更容易一些,比如jison和peg.js.
編寫替代語言編譯爲JavaScript時有一定的限制或障礙,因爲JavaScript不是爲其他語言設計的「字節碼」或運行庫。沒有靜態類型或類系統,例如,像在java和C#中一樣。如果你只是做一些小的修改來修復JavaScript的問題,比如coffeescript和其他鏈接,那麼類似這樣的東西不是問題,但是更大的問題是爲什麼不僅僅是爲了咖啡或類似的語言。
- 1. 用JavaScript編寫的JavaScript解析器
- 2. 用JavaScript編寫的Java解析器
- 3. 用Wisent編寫解析器
- 4. 爲javascript代碼編寫解析器
- 5. 使用Text.ParserCombinators編寫解析器
- 6. 在Haskell中使用解析器組合器庫編寫的分析解析器
- 7. 編寫序言解析器
- 8. 試圖編寫解析器
- 9. 用PHP編寫的SSI解析器?
- 10. 用Prolog編寫的RegEx解析器
- 11. 用JAVA編寫的COBOL解析器
- 12. 是否有任何用Javascript編寫的開源JSDoc解析器?
- 13. 用javascript編寫的搜索表達式解析器
- 14. Python解析器模塊教程
- 15. 用pyparsing編寫遞歸解析器
- 16. 編寫通用XML解析器
- 17. 技術用於在JavaScript編寫XML解析器
- 18. Bada 2.0 JSON解析教程
- 19. Xml解析在iOS教程
- 20. 爲GUI調試器編寫解析器
- 21. 用於PhoneGap應用程序的JavaScript解析JSON解析器
- 22. 編寫我自己的float解析器
- 23. 編寫一個簡單的解析器
- 24. 爲haskell中的人編寫解析器
- 25. 使用DOM分析器解析和編輯HTML解析器
- 26. 使用Ant解析和編寫JSON
- 27. 使用Boost Spirit X3編寫解析器的前景如何?
- 28. 編寫解析器和編譯器的最佳編程語言是什麼?
- 29. 使用Javascript的解析器XML數據
- 30. 編寫詞法分析器Vs解析器規則的指南
CoffeeScript不是基於Node.js(「核心編譯器,但不依賴於節點」),它不是DSL。 – Andrey 2011-05-03 19:37:53
感謝您的澄清。 – exupero 2011-05-03 20:09:41
http://zaach.github.com/jison/ – Andrey 2011-05-03 20:16:33