可与闭包编译器一起使用的JavaScript解析器生成器

可与闭包编译器一起使用的JavaScript解析器生成器,javascript,parser-generator,Javascript,Parser Generator,我一直在研究Javascript的解析器生成器,发现了一些(即PEG.js) 不过,尚不清楚的是,谷歌闭包编译器(GoogleClosureComplier)之类的东西能在多大程度上发挥作用 例如,在PEG.js中,我可以给它代码作为规则的一部分执行,但是如何将函数(可能由编译器重命名)绑定到规则 此外,我不清楚哪些解析器支持传入符号表。例如,我想定义一个接受表达式“a或B”的语法,其中“a”和“B”的值在运行时定义,例如,作为用户正在查看的记录的属性 当然,PEG.js不是必需的,它只是搜索结

我一直在研究Javascript的解析器生成器,发现了一些(即PEG.js)

不过,尚不清楚的是,谷歌闭包编译器(GoogleClosureComplier)之类的东西能在多大程度上发挥作用

例如,在PEG.js中,我可以给它代码作为规则的一部分执行,但是如何将函数(可能由编译器重命名)绑定到规则

此外,我不清楚哪些解析器支持传入符号表。例如,我想定义一个接受表达式“a或B”的语法,其中“a”和“B”的值在运行时定义,例如,作为用户正在查看的记录的属性


当然,PEG.js不是必需的,它只是搜索结果中出现的唯一一个语法分析器生成器,看起来很有用

下面列出了一些使用Javascript作为输出语言的解析器。对于那些实际上是在Javascript中构建的,并且可以在浏览器中无需预编译就可以使用的解析器,似乎还有一些

还有其他方法,比如向服务器上的解析器生成器发送语法。为此,将有(该网站包括它的一个演示)使用Nodejs,可能上面列表中用其他语言编写的其他解析器也可以在您的服务器上运行。如果生成的文件与闭包编译器兼容,则可以在服务器上编译这些文件,然后再将生成的解析器的位置发送回站点。也许解析器已经优化了,编译器没有太多工作要做,这应该首先检查


服务器解决方案意味着符号不是在运行时真正定义的,而是语法是在运行时定义的,并且可以为该语法生成解析器。这是一个很大的不同,但可能正是你需要的。如果您只需要一个用于检查标识符是否存在或是否具有正确(静态)类型的符号表,那么分析生成的解析树并在该点抛出错误就足够了。

我的AGL解析器生成器是用Kotlin common编写的,因此它可以用于任何Kotlin目标(JVM、JavaScript、本机代码等)

有关详细信息,请参阅:


可以生成JavaScript源代码。我不知道它是否与谷歌闭包编译器配合使用。我知道ANTLR比PEG.js更有可能(我非常喜欢PEG.js,别误会!)。嗯,ANTLR需要构建/编译阶段吗?最好,我只想包含一个.js文件,在js中定义语法,然后就可以开始了。使用ANTLR,您需要在语法上调用(Java类)
org.ANTLR.Tool
,以生成解析器。
const agl_module = require('net.akehurst.language-agl-processor');
const Agl = agl_module.net.akehurst.language.agl.processor.Agl;
const grammarStr = ...
const sentence = ...
const proc = Agl.processorFromString(grammarStr);
const asm = proc.process(sentence).toArray();