我有一個項目,用戶需要爲完全用javascript編寫的用戶界面定義一組指令。我需要有能力解析一串指令,然後將它們轉換成指令。有沒有任何圖書館解析,是100%的JavaScript?或者一個將在JavaScript中生成的生成器?謝謝!Lexer用Javascript編寫?
回答
有點像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源文件中。
這已經移動到這裏:http://jscc.phorward-software.com/ – KnowHowSolutions 2013-08-16 14:47:39
對於簡單的解析任務,我非常喜歡使用Pratt的Top Down Operator Precedence parser變體。雖然普拉特用原來的Lisp方言編寫了原始論文,但大多數任何語言都可以輕鬆使用相同的概念。事實上,道格拉斯克羅克福德寫了一篇關於Top Down Operator Precedence parsing in JavaScript的優秀文章,這可能正是你需要的。
我正在尋找類似的東西,不會有任何安全漏洞,我遇到了兩個資源。他們不解析腳本,而是實際在「安全」環境中運行它 - 使用eval
函數時不能保證的東西。所以,我不知道這是否是你在尋找什麼,但看看:
- jsandbox - 使用Javascript沙箱
- Google Caja - 虛擬IFRAME。
如果您想要構建JavaScript解析器和代碼生成器,請查閱 中的MetaII實現。
一個MetaII編譯器教程將引導您構建一個完全獨立的編譯器系統,可以翻譯本身和其他語言:
這一切都是基於一個驚人的小10頁的技術文件通過Val Schorre:META II:一種面向語法的編譯器寫作語言,來自誠實至神的1964年.Metadata II編譯器完成自我描述,大約有30行!我學會了如何從1970年開始編譯編譯器。當您最終了解編譯器如何重新生成自己時,有一個令人興奮的時刻......
本教程解釋了MetaII,它是如何工作的,並且實現了MetaII編譯MetaII到JavaScript中。您可以輕鬆修改此編譯器來解析其他語言,並生成不同的Javascript。
我知道我大學時代的網站作者,但與網站無關。
如果您確實只是在尋找一個詞法分析器,請嘗試prettify。
如果你想有一個詞法分析器和只不過是一個詞法再看看這個:https://github.com/aaditmshah/lexer
這是一個純JavaScript詞法分析器,有很多寫在短短的幾行代碼的強大功能。
Jison可能是最好和最活躍的詞法分析器&用於Javascript的解析器生成器。它模仿了Bison和Yacc。
Jison:http://zaach.github.io/jison/
如果你想只是一個重量輕詞法分析器(〜100 SLOC),你可以在Lexed.js看一看:https://github.com/tantaman/lexed.js
這裏是一個解析器的一個示例爲將其在純的JavaScript實現與Chevrotain解析DSL一個「僞」指令自然語言, :
https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js
此示例甚至包括支持多個自然語言(英語&德語)使用語法繼承。
鼷鹿科的類別下瀑布「文庫了那裏解析是100%的javascript」,因爲它執行沒有代碼生成。使用鼷鹿科類似於「手各具特色」的遞歸體面解析器,只有沒有大部分頭痛如:
- 先行創建函數(決定採取哪一種選擇)
- 自動錯誤恢復。
- 左遞歸檢測
- 歧義檢測。
- 位置信息。
- ...
爲鼷鹿科自動處理。
- 1. Javascript編譯器/ Lexer
- 2. 用Java編寫的正則表達式的基本Lexer
- 3. 使用JavaScript編寫
- 4. 編寫JavaScript庫
- 5. 用jQuery或javascript編寫Ajax
- 6. 用javascript編寫圖案
- 7. 用javascript編寫XML文件
- 8. 如何用document.write編寫JavaScript?
- 9. 用JavaScript編寫文本
- 10. 用JavaScript編寫函數
- 11. 用JavaScript編寫xml的庫
- 12. ANTLR String LEXER token
- 13. Lexer/filter for comments
- 14. Lexer和Parser
- 15. ANTLR @members and lexer
- 16. 用JavaScript編寫的JavaScript解析器
- 17. 用Javascript編寫的可編輯表格
- 18. 如何用antlr 2.7寫一個簡單的Lexer/Parser?
- 19. 在JavaScript中編寫JavaScript代碼,全部在PHP中編寫?
- 20. Lexer優先空間
- 21. Flex Lexer優化器
- 22. PHP Lexer和Parser Generator?
- 23. 用Javascript編寫用戶名和密碼
- 24. 使用javascript編寫另一個文件
- 25. 我如何使用JavaScript編寫
- 26. 用於編寫javascript代碼的工具
- 27. 使用文檔編寫的Javascript
- 28. 使用HTML,CSS和JavaScript編寫PDF
- 29. 如何使用JavaScript編寫HTML?
- 30. 使用JavaScript編寫圖像元數據
Opps,重讀您的問題......用戶正在編寫自然語言指令(不是JavaScript)?但你想要把他們寫的東西變成javascript? – Mottie 2009-12-01 03:22:32
我有一個項目和你有類似的需求:需要一個JavaScript解析器和代碼生成器。你決定使用任何一個? – Paul 2010-06-03 06:39:33
我用過:http://jscc.jmksf.com/工作完美適合我。 – Phobis 2011-02-10 03:58:13