我有一个项目,用户需要为完全用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. 使用JavaScript编写
- 3. 编写JavaScript库
- 4. 用JavaScript编写函数
- 5. 用javascript编写XML文件
- 6. 用JavaScript编写xml的库
- 7. 用jQuery或javascript编写Ajax
- 8. Lexer/filter for comments
- 9. ANTLR String LEXER token
- 10. ANTLR @members and lexer
- 11. 用JavaScript编写的JavaScript解析器
- 12. 用Javascript编写的可编辑表格
- 13. 如何用antlr 2.7写一个简单的Lexer/Parser?
- 14. PHP Lexer和Parser Generator?
- 15. 用Javascript编写用户名和密码
- 16. 用JavaScript编写西里尔字符串
- 17. 为什么npm是用JavaScript编写的?
- 18. 使用javascript编写另一个文件
- 19. 用纯JavaScript编写的Jade模板
- 20. 如何使用JavaScript编写NeoVim插件?
- 21. 调用和编写jQuery/javascript函数
- 22. 我如何使用JavaScript编写
- 23. 用JavaScript编写的Java解析器
- 24. 用Javascript编写包装器对象
- 25. 如何使用Javascript编写JSON
- 26. 可能用Javascript写一个编译器?
- 27. 如何用Zend Framework和netbeans编写JavaScript?
- 28. 使用JavaScript编写图像元数据
- 29. 在JavaScript中编写Facebook应用程序
- 30. 使用Vanilla脚本编写角形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