如何使用 JISON 从 bison 文件生成解析器

How to generate a parser with JISON from a bison file

我正在尝试为 JavaScript 中的 Lilypond 乐谱语言编写解析器。我的第一次手动尝试有效,但只能处理该语言的一小部分。由于 Lilypond 使用 bison 文件来定义其语法 [1] 并且 JISON 声称能够从 bison 文件工作,我的想法是也许使用这些定义在 JavaScript.

中生成解析器

我在任何地方都找不到这方面的任何示例,尝试将这些文件直接输入 JISON 只会引发错误。

解决这个问题的最佳方法是什么?

[1]:见https://github.com/lilypond/lilypond/blob/master/lily/lexer.ll and https://github.com/lilypond/lilypond/blob/master/lily/parser.yy),

解析器相对(!)简单:剥离 C 代码(你应该首先保留 AST 结构,看看他们是如何做到的),保持优先级不变(JISON 理解 Bison 语法到一定程度extend) 并填写代码以填充 AST。相比之下,Lexer 相当复杂,我不知道 JISON 是否支持所有 flex-specialities,但除此之外:按照上面对解析器部分的描述。

但仍然会有很多工作,这是肯定的;-)

编辑: 在研究了 Lilypond 的语法并在网上搜索了更多信息后,我偶然发现了以下引述:

The LilyPond grammar does a lot of weird things…

由名为 "dakas" 的 Lilypond 开发者在 https://lwn.net/Articles/561990/

我同意。