2011-05-03 54 views
32

我見過使用Javascript構建的幾種語言(即CoffeeScriptLessCSS)。使用Javascript編寫解析器的教程

是否有任何地方用Javascript編寫語言/解析器的教程?

+0

CoffeeScript不是基於Node.js(「核心編譯器,但不依賴於節點」),它不是DSL。 – Andrey 2011-05-03 19:37:53

+0

感謝您的澄清。 – exupero 2011-05-03 20:09:41

+2

http://zaach.github.com/jison/ – Andrey 2011-05-03 20:16:33

回答

14

Jison仿照GNU Bison語法分析器生成器。它採用類似Bison或JSON格式的語言語法,並輸出該語言的JavaScript解析器。如果你想製作基於另一種着名語言的解釋器,那麼可以在某處可以調整Jison的地方使用Bison語法。 我發現從頭開始使用DSL非常簡單。

13

爲什麼你會認爲實現JavaScript語言的基本概念從根本上依賴於JavaScript?大多數情況下,它只是一種編程語言和類似標準編譯器的方法;一個「僅僅」編譯成JavaScript而不是機器指令。

下面是使用非常簡單的元編譯方法編寫編譯器的教程。它恰巧將JavaScript作爲開始的地方,但它也不是致力於JavaScript。本教程基於Val Schorre撰寫的關於「MetaII」的論文,這是一種編譯器...,日期爲(是的,你讀得對)。我學會了如何從本文建立我的第一個編譯器(但不使用JavaScript :),它仍然是一個有價值的技術:

Meta II Compiler Tutorial targeting JavaScript

如果你想要的東西更直接,考慮writing a recursive descent parser by hand.。在你寫了一些這些之後,你會非常欣賞MetaII的天才。

+4

Downvoter:建議性的反饋將是首選,而不是你的顯性「旗」。我沒有看到這個迴應是什麼,它沒有直接解決OP對於用JavaScript來「構建語言」的方法的要求,因爲這正是引用的教程所做的。 – 2011-05-20 23:47:53

+0

我認爲這非常相關。解析器是將語言解釋爲機器級理解的東西。如果OP想要對解析器有任何實際的權力,他將需要知道如何編寫一個編譯器;否則,他將無法獨立完成他的項目。他將在教程請求後發佈教程請求,並繼續使用文檔不完整的意大利麪條代碼進行緩慢爬取。如果他編寫了一個編譯器,他可以在睡夢中編寫代碼。 – 2012-08-02 13:44:27

1

我會先看看更多編譯爲javascript的語言,然後看看他們做了什麼。這裏有一個列表:https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS

查看該頁面底部的解析器生成器列表,使事情變得更容易一些,比如jison和peg.js.

編寫替代語言編譯爲JavaScript時有一定的限制或障礙,因爲JavaScript不是爲其他語言設計的「字節碼」或運行庫。沒有靜態類型或類系統,例如,像在java和C#中一樣。如果你只是做一些小的修改來修復JavaScript的問題,比如coffeescript和其他鏈接,那麼類似這樣的東西不是問題,但是更大的問題是爲什麼不僅僅是爲了咖啡或類似的語言。