2009-12-01 62 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”,因为它执行没有代码生成。使用鼷鹿科类似于“手各具特色”的递归体面解析器,只有没有大部分头痛如:

  • 先行创建函数(决定采取哪一种选择)
  • 自动错误恢复。
  • 左递归检测
  • 歧义检测。
  • 位置信息。
  • ...

为鼷鹿科自动处理。