繁体   English   中英

用Javascript编写的Lexer?

[英]Lexer written in Javascript?

我有一个项目,用户需要为ui定义一组完全用javascript编写的指令。 我需要能够解析一串指令然后将它们转换成指令。 是否有任何库可用于解析100%javascript? 或者将在javascript中生成的生成器? 谢谢!

http://jscc.phorward-software.com/这样的东西,也许吧?

JS / CC是第一个可用于JavaScript和ECMAScript -derivates的解析器开发系统。 它的开发目的是为了构建一个高效的编译器开发系统,并打算为那些对自下而上解析中如何完成解析表生成感兴趣的人们创建一个易于使用的学术环境。

独立于平台的软件工具包括: 基于正则表达式的词法分析器生成器,用于匹配来自输入字符流的单个令牌和LALR(1)解析器生成器 ,为给定​​的无上下文语法规范计算解析表并构建支架 -独自工作的解析器。 提供给JS / CC的无上下文语法是在基于Backus-Naur-Form的元语言中定义的,并且允许插入单个语义代码以在规则的减少上进行评估。

JS / CC本身完全用ECMAScript编写,因此可以通过多种不同的方式执行:作为独立于平台的,嵌入在网站上的基于浏览器的JavaScript,作为Windows脚本宿主应用程序,作为编译的JScript.NET可执行文件,如Mozilla / Rhino或Mozilla / Spidermonkey解释应用程序,或Windows,* nix,Linux和Mac OSX上的V8 shell脚本。 但是,为了高效执行,建议使用命令行版本。 这些版本能够从JS / CC解析器规范组装完整的编译器,然后将其存储到.js JavaScript源文件中。

如果您想构建JavaScript解析器和代码生成器,请查看Javascript中的MetaII实现。

MetaII编译器教程将指导您构建一个完全独立的编译器系统,该系统可以自我翻译和其他语言:

MetaII编译器教程

这完全基于Val Schorre撰写的一篇精彩的10页技术论文:META II:面向语法的编译器编写语言,从诚实到神的1964年.MetaII编译器完全自我描述大约30行! 我在1970年学会了如何构建编译器。当你最终了解编译器如何重新生成时,这是一个令人兴奋的时刻....

该教程解释了MetaII,它是如何工作的,并实现MetaII将MetaII编译成JavaScript。 您可以轻松修改此编译器以解析其他语言,并生成不同的Javascript。

我从大学时代就知道网站作者,但与网站无关。

Jison可能是Javascript中最好,最活跃的词法分析器和解析器生成器。 它模仿Bison和Yacc。

杰森:http: //zaach.github.io/jison/

如果你只想要一个轻量级词法分析器(~100 sloc),你可以看看Lexed.js: https//github.com/tantaman/lexed.js

对于简单的解析任务,我非常喜欢使用Pratt的Top Down Operator Precedence解析器的变体。 虽然Pratt使用旧的Lisp方言撰写了原始论文,但在大多数语言中都可以轻松使用相同的概念。 实际上,Douglas Crockford 在JavaScript中编写了一篇关于Top Down Operator Precedence解析的优秀文章,这可能正是您所需要的。

下面是一个用于“伪”自然语言指令的解析器示例,它是使用Chevrotain Parsing DSL JavaScript中实现的:

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

此示例甚至包括使用语法继承支持多种自然语言(英语和德语)。

Chevrotain属于“用于解析100%javascript的库”的类别,因为它不执行代码生成 使用Chevrotain类似于“手工制作”一个递归的正确解析器,只有没有大多数头痛 ,如:

  • 前瞻功能创建(决定采取哪种替代方案)
  • 自动错误恢复。
  • 左递归检测
  • 模糊检测。
  • 职位信息。
  • ...

正如Chevrotain自动处理的那样。

如果你想要一个词法分析器,只需要一个词法分析器,那么请看一下: https//github.com/aaditmshah/lexer

它是一个纯粹的JavaScript词法分析器,只需几行代码即可编写许多强大的功能。

根据“指令集”的设计,您可以使用Javascript的内置eval函数来解析Javascript源; 您可以编写一个简单的翻译器将指令转换为Javascript代码。

顺便说一下,要非常小心XSS漏洞。

如果你真的只想找个词法分析器,试试美化

Antlr 4.5版现在有一个Javascript目标

我正在寻找类似的东西,没有任何安全漏洞,我遇到了两个资源。 它们不解析脚本,但实际上是在“安全”环境中运行它 - 在使用eval函数时无法保证。 所以,我不知道它是不是你正在寻找的,但看看:

  1. jsandbox - Javascript沙箱
  2. Google Caja - 虚拟iframe。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM