我有一个项目,用户需要为一个完全用javascript编写的ui定义一组指令。我需要能够解析一串指令然后将它们转换成指令。是否有任何库可用于解析100%javascript?或者将在javascript中生成的生成器?谢谢!
答案 0 :(得分:23)
像http://jscc.phorward-software.com/这样的东西,也许?
JS / CC是JavaScript and ECMAScript衍生物的第一个可用的解析器开发系统。它的开发目的是为了构建一个高效的编译器开发系统,并打算为那些对如何完成解析表生成感兴趣的人创建一个易于使用的学术环境。 自下而上解析。独立于平台的软件工会:基于正则表达式的lexical analyzer生成器匹配输入字符流中的各个标记和 LALR(1)解析器生成器< / b>,计算给定context-free grammar规范的解析表,并构建一个独立的,有效的解析器。提供给JS / CC的无上下文语法是基于Backus-Naur-Form的元语言定义的,允许插入单个语义代码,以便根据规则的减少进行评估。
JS / CC本身完全用ECMAScript编写,因此可以通过多种不同的方式执行:作为Windows平台主机应用程序,作为Windows平台独立的基于浏览器的JavaScript嵌入在网站上,作为已编译的JScript.NET可执行文件,作为Mozilla / Rhino或Mozilla / Spidermonkey解释的应用程序,或Windows,* nix,Linux和Mac OSX上的V8 shell脚本。但是,为了高效执行,建议使用命令行版本。这些版本能够从JS / CC解析器规范组装完整的编译器,然后将其存储到.js JavaScript源文件中。
答案 1 :(得分:13)
如果要构建JavaScript解析器和代码生成器, 查看Javascript中的MetaII实现。
MetaII编译器教程将指导您构建一个完全独立的编译器系统,该系统可以自我翻译和其他语言:
这完全基于Val Schorre撰写的一篇精彩的10页技术论文:META II:面向语法的编译器编写语言,从诚实到神的1964年.MetaII编译器完全自我描述大约30行!我在1970年学会了如何构建编译器。当你最终了解编译器如何重新生成时,会有一个令人兴奋的时刻......
本教程解释了MetaII,它是如何工作的,并实现MetaII将MetaII编译成JavaScript。您可以轻松修改此编译器以解析其他语言,并生成不同的Javascript。
我从大学时代就知道网站作者,但与网站无关。
答案 2 :(得分:6)
Jison可能是最好,最活跃的词法分析者&amp;解析器生成器用于Javascript。它模仿Bison和Yacc。
Jison:http://zaach.github.io/jison/
如果你只想要一个轻量级词法分析器(~100 sloc),你可以看看Lexed.js:https://github.com/tantaman/lexed.js
答案 3 :(得分:4)
对于简单的解析任务,我非常喜欢使用Pratt Top Down Operator Precedence parser的变体。虽然Pratt使用旧的Lisp方言撰写了原始论文,但在大多数语言中都可以轻松使用相同的概念。事实上,道格拉斯·克罗克福德写了一篇关于Top Down Operator Precedence parsing in JavaScript的精彩文章,这可能正是你所需要的。
答案 4 :(得分:2)
以下是“伪”自然语言指令的解析器示例, 使用 Chevrotain解析DSL 在纯 JavaScript中实现:
https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js
此示例甚至包括使用语法继承支持多种自然语言(英语和德语)。
Chevrotain属于“库的类别,用于解析100%javascript”,因为它执行无代码生成。使用Chevrotain类似于“手工制作”一个递归的正确解析器,只有没有大多数头痛,例如:
因为Chevrotain会自动处理。
答案 5 :(得分:1)
根据“指令集”的设计,您可以使用Javascript的内置eval
函数来解析Javascript源代码;您可以编写一个简单的翻译器将指令转换为Javascript代码。
顺便说一下,对XSS漏洞要非常小心。
答案 6 :(得分:1)
如果您真的只想找个词法分析器,请尝试prettify。
答案 7 :(得分:1)
如果你想要一个词法分析器而不是词法分析器,那么请看一下:https://github.com/aaditmshah/lexer
这是一个纯粹的JavaScript词法分析器,只需几行代码即可编写许多强大的功能。
答案 8 :(得分:1)
答案 9 :(得分:0)
我正在寻找类似的东西,没有任何安全漏洞,我遇到了两个资源。它们不解析脚本,但实际上是在“安全”环境中运行它 - 在使用eval
函数时无法保证。所以,我不知道它是不是你正在寻找的,但看看: