我正在尝试用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相当复杂,我不知道JISON是否支持所有的flex特殊功能,但否则:像上面解析器部分所述。
但这仍然是很多工作,这是肯定的;-)
编辑:
在仔细研究了Lilypond的语法并在网上搜索更多信息后,我偶然发现了以下引文:
LilyPond语法做了很多奇怪的事情……
由Lilypond开发人员在https://lwn.net/Articles/561990/中命名为“ dakas”
我同意。