我正在尝试在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),
答案 0 :(得分:1)
解析器相对(!)简单:剥离C代码(你应该首先保持AST结构以了解它们是如何做到的),保持优先级(JISON在很大程度上理解Bison语法)并填写代码以填写AST。 Lexer相比之下非常复杂,我不知道JISON是否支持所有flex特性,但是不然:如上所述,解析器部分。
但它仍然会有很多工作,这是肯定的; - )
编辑: 在对Lilypond的语法进行了一些讨论并在网上搜索更多信息后,我偶然发现了以下引用:
LilyPond语法做了很多奇怪的事情......
由https://lwn.net/Articles/561990/
中名为“dakas”的Lilypond开发人员我同意。