2009-12-01 99 views
27

我有一個項目,用戶需要爲完全用javascript編寫的用戶界面定義一組指令。我需要有能力解析一串指令,然後將它們轉換成指令。有沒有任何圖書館解析,是100%的JavaScript?或者一個將在JavaScript中生成的生成器?謝謝!Lexer用Javascript編寫?

+0

Opps,重讀您的問題......用戶正在編寫自然語言指令(不是JavaScript)?但你想要把他們寫的東西變成javascript? – Mottie 2009-12-01 03:22:32

+0

我有一個項目和你有類似的需求:需要一個JavaScript解析器和代碼生成器。你決定使用任何一個? – Paul 2010-06-03 06:39:33

+2

我用過:http://jscc.jmksf.com/工作完美適合我。 – Phobis 2011-02-10 03:58:13

回答

22

有點像http://jscc.phorward-software.com/,也許?

JS/CC是第一個可用的解析器開發系統JavaScript and ECMAScript -derivates。爲了構建高效的編譯器開發系統,並打算爲感興趣的人們創建一個易於使用的學術環境,我們已經開發了這兩種解析表格生成方法,這些解析表格生成過程在底層解析中進行。

的獨立於平臺的軟件工會兩者:甲基於正則表達式-lexical analyzer發生器匹配個體從輸入字符流中的記號和一個LALR(1)解析器生成,計算對於給定的context-free grammar規範解析表和建立一個獨立 - 單獨工作的解析器。基於Backus-Naur-Form的元語言定義了饋給JS/CC的上下文無關語法,並允許插入單個語義代碼,以便根據規則的減少進行評估。

JS/CC本身已經完全寫在ECMAScript中,因此可以在許多不同的方式來執行:嵌入在網站上的獨立於平臺的,基於瀏覽器的JavaScript,作爲Windows腳本宿主應用程序,作爲編譯JScript.NET可執行文件,作爲Mozilla/Rhino或Mozilla/Spidermonkey解釋的應用程序,或Windows,* nix,Linux和Mac OSX上的V8 shell腳本。但是,爲了高效執行,建議使用命令行版本。這些版本能夠從JS/CC解析器規範中組裝完整的編譯器,然後將其存儲到.js JavaScript源文件中。

+1

這已經移動到這裏:http://jscc.phorward-software.com/ – KnowHowSolutions 2013-08-16 14:47:39

1

根據「指令集」的設計,您可以使用Javascript內置的eval函數,該函數解析Javascript源代碼;你可能會寫一個簡單的翻譯器來將指令轉換爲Javascript代碼。

順便說一句,要非常小心XSS洞。

+0

這是最有可能是一個語法,更簡單和無關的JavaScript。它正在與我正在合作的另一個小組進行定義。 – Phobis 2009-12-01 02:25:11

+0

如果它是一個非常簡單的語法,您可能可以輕鬆地將其轉換爲Javascript,可能帶有一組幫助函數供轉換的源調用。 – SLaks 2009-12-01 02:29:32

4

對於簡單的解析任務,我非常喜歡使用Pratt的Top Down Operator Precedence parser變體。雖然普拉特用原來的Lisp方言編寫了原始論文,但大多數任何語言都可以輕鬆使用相同的概念。事實上,道格拉斯克羅克福德寫了一篇關於Top Down Operator Precedence parsing in JavaScript的優秀文章,這可能正是你需要的。

+0

解析器是否可用於下載?我嘗試閱讀PDF,但它需要登錄:( – Mottie 2009-12-01 03:14:42

+0

對不起,我編輯了我的答案,用我找到的免費PDF鏈接替換原始鏈接。我個人發現克羅克福德的文章比紙本身,我主要把它作爲一個歷史利益的問題,如果你說Lisp,這裏有一些基於這篇論文的代碼:http://bit.ly/dFdrl,這裏也有基於Python的實現:http:/ /bit.ly/12HNkV。 – bcat 2009-12-01 03:33:27

0

我正在尋找類似的東西,不會有任何安全漏洞,我遇到了兩個資源。他們不解析腳本,而是實際在「安全」環境中運行它 - 使用eval函數時不能保證的東西。所以,我不知道這是否是你在尋找什麼,但看看:

  1. jsandbox - 使用Javascript沙箱
  2. Google Caja - 虛擬IFRAME。
13

如果您想要構建JavaScript解析器和代碼生成器,請查閱 中的MetaII實現。

一個MetaII編譯器教程將引導您構建一個完全獨立的編譯器系統,可以翻譯本身和其他語言:

MetaII Compiler Tutorial

這一切都是基於一個驚人的小10頁的技術文件通過Val Schorre:META II:一種面向語法的編譯器寫作語言,來自誠實至神的1964年.Metadata II編譯器完成自我描述,大約有30行!我學會了如何從1970年開始編譯編譯器。當您最終了解編譯器如何重新生成自己時,有一個令人興奮的時刻......

本教程解釋了MetaII,它是如何工作的,並且實現了MetaII編譯MetaII到JavaScript中。您可以輕鬆修改此編譯器來解析其他語言,並生成不同的Javascript。

我知道我大學時代的網站作者,但與網站無關。

1

如果您確實只是在尋找一個詞法分析器,請嘗試prettify

1

如果你想有一個詞法分析器和只不過是一個詞法再看看這個:https://github.com/aaditmshah/lexer

這是一個純JavaScript詞法分析器,有很多寫在短短的幾行代碼的強大功能。

1

這裏是一個解析器的一個示例爲將其在的JavaScript實現與Chevrotain解析DSL一個「僞」指令自然語言, :

https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

此示例甚至包括支持多個自然語言(英語&德語)使用語法繼承。

鼷鹿科的類別下瀑布「文庫了那裏解析是100%的javascript」,因爲它執行沒有代碼生成。使用鼷鹿科類似於「手各具特色」的遞歸體面解析器,只有沒有大部分頭痛如:

  • 先行創建函數(決定採取哪一種選擇)
  • 自動錯誤恢復。
  • 左遞歸檢測
  • 歧義檢測。
  • 位置信息。
  • ...

爲鼷鹿科自動處理。