0

我正在尝试用 JavaScript 为 Lilypond 音乐符号语言编写一个解析器。我的第一次手动尝试有效,但只能处理非常小的语言子集。由于 Lilypond 使用 bison 文件来定义其语法 [1] 并且 JISON 声称能够从 bison 文件中工作,我的想法可能是使用这些定义在 JavaScript 中生成解析器。

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

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

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

4

1 回答 1

1

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

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

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

LilyPond 语法做了很多奇怪的事情……

由https://lwn.net/Articles/561990/中名为“dakas”的 Lilypond 开发人员提供

我同意。

于 2015-11-07T22:39:54.403 回答