我正在尝试用JavaScript为Lilypond语言的音乐表示法编写一个解析器。我的第一本手册尝试工作,但只能处理语言的一小部分。由于Lilypond使用bison文件来定义其语法[1],并且JISON声称能够从bison文件中工作,所以我的想法可能是使用这些定义来生成JavaScript中的解析器。
我在任何地方都找不到任何这样的例子,试图将这些文件直接提供给JISON只会引发错误。
解决这一问题的最佳方法是什么?
[1] :请参阅https://github.com/lilypond/lilypond/blob/master/lily/lexer.ll和https://github.com/lilypond/lilypond/blob/master/lily/parser.yy),
解析器相对(!)简单:去掉C代码(首先应该保留AST构造,看看它们是如何做到的),保持前面的内容(JISON对Bison语法有一定的理解),并填充代码来填充AST。相比之下,Lexer相当复杂,我不知道是否所有的flex特性都得到了JISON的支持,但除此之外:按照上面对解析器部分的描述进行。
但这仍然是一项艰巨的工作,这是肯定的;-)
编辑:在摆弄了Lilypond的语法并在网上搜索了更多信息后,我偶然发现了以下引文:
LilyPond语法做了很多奇怪的事情…
由Lilypond开发商命名为"dakas"https://lwn.net/Articles/561990/
我同意。