用Javascript编写的Lexer?

用Javascript编写的Lexer?,javascript,parsing,generator,lexer,Javascript,Parsing,Generator,Lexer,我有一个项目,用户需要为完全用javascript编写的ui定义一组指令。我需要有能力解析一系列指令,然后将它们转换为指令。有没有用于解析的库是100%javascript的?还是将以javascript生成的生成器?谢谢 大概是吧 JS/CC是第一个可用于派生的解析器开发系统。它的开发目的既在于构建一个高效的编译器开发系统,也在于为那些对如何生成解析表感兴趣的人创造一个易于使用的学术环境 自下而上的解析 独立于平台的软件将两者结合起来:一个基于正则表达式的生成器,匹配来自输入字符流的单个标记;

我有一个项目,用户需要为完全用javascript编写的ui定义一组指令。我需要有能力解析一系列指令,然后将它们转换为指令。有没有用于解析的库是100%javascript的?还是将以javascript生成的生成器?谢谢

大概是吧

JS/CC是第一个可用于派生的解析器开发系统。它的开发目的既在于构建一个高效的编译器开发系统,也在于为那些对如何生成解析表感兴趣的人创造一个易于使用的学术环境 自下而上的解析

独立于平台的软件将两者结合起来:一个基于正则表达式的生成器,匹配来自输入字符流的单个标记;一个解析器生成器,计算给定规范的解析表,并构建一个独立的工作解析器。提供给JS/CC的上下文无关语法是在基于元语言的基础上定义的,它允许在规则简化的基础上评估单个语义代码的插入


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

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


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

对于简单的解析任务,我非常喜欢使用Pratt的变体。虽然Pratt使用一种古老的Lisp方言撰写了最初的论文,但在大多数语言中都可以轻松地使用相同的概念。事实上,道格拉斯·克罗克福德(Douglas Crockford)在上写了一篇优秀的文章,这可能正是您所需要的。

我正在寻找类似的东西,不会有任何安全漏洞,我遇到了两个参考资料。它们不解析脚本,但实际上是在“安全”的环境中运行它——这是在使用
eval
函数时无法保证的。所以,我不知道这是否正是您想要的,但请看一看:

  • -Javascript沙盒
  • -虚拟iframe

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

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

    这一切都是基于Val Schorre的一篇长达10页的技术论文:META II:一种面向语法的编译器编写语言,出自诚实对上帝1964年。MetaII编译器的完整自我描述大约有30行!早在1970年,我就从中学会了如何构建编译器。当你最终探索编译器如何重新生成自己时,有一个激动人心的时刻

    本教程解释了MetaII及其工作原理,并实现了将MetaII编译成JavaScript的MetaII。您可以轻松地修改此编译器以解析其他语言,并生成不同的Javascript


    我在大学时代就认识这个网站的作者,但与网站无关。

    如果你真的只想找一个lexer,试试。

    如果你想要一个lexer,除了lexer什么都不要,那么看看这个:


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

    Jison可能是JavaScript最好、最活跃的词法分析器和解析器生成器。它模仿野牛和野牛

    吉森:


    如果您只需要一个轻量级的lexer(~100 sloc),您可以查看Lexed.js:

    现在有一个。

    这里是一个用于“伪”自然指令语言的解析器示例, 它是通过解析DSL在纯JavaScript中实现的:

    这个例子甚至包括对使用语法继承的多个自然语言(英语和德语)的支持

    Chevrotain属于“100%javascript解析库”类别,因为它执行无代码生成。使用Chevrotain类似于“手工制作”一个递归的体面解析器,只有没有最头痛的问题,例如:

    • 前瞻函数创建(决定采用哪种替代方案)
    • 自动错误恢复
    • 左递归检测
    • 歧义检测
    • 位置信息

    正如Chevrotain自动处理的那样。

    这很可能是一种更简单且与javascript无关的语法。它是由我正在使用的另一个小组定义的。如果它是一个非常简单的语法,您可以轻松地将其转换为Javascript,可能有一组帮助函数供转换后的源代码调用。解析器是否可以下载?我试图阅读PDF,但需要登录:(很抱歉。我已经编辑了我的答案,用我找到的免费PDF链接替换了原来的链接。就我个人而言,我实际上发现Crockford的文章比论文本身更有用,我主要是出于历史兴趣而将其包括在内。如果你说Lisp,这里有一些基于论文的代码:,还有基于Python的imple。)这里的心理状态:。哎呀,从重读你的问题开始……美国