Proposal for Google Summer of Code: Modular LilyPond Parser in C++ [...]

Thanks, Werner, for your quick reply.
Sorry for taking a bit longer — I didn’t want to give a hasty answer.

> * Would there be any direct benefit for LilyPond per se?

In short: LilyPond itself does not need the AST — but the LilyPond project benefits greatly, because the ecosystem (editors, analysis tools, or alternative implementations) becomes more modern, modular, and sustainable.

> * How do you ensure that your parser stays in sync with the one LilyPond uses?

The classic problem of double maintenance or parser drift cannot be fully avoided with an external parser. I follow the official syntax, test against real LilyPond files (e.g., the version‑parsing example shown in my video), and keep an eye on syntax changes in new releases, such as the simplified \break behavior in the middle of a measure. In the long run, I also plan to study changes in parser.yy to detect relevant developments early.

For editor tools, I also consider a certain degree of error tolerance important, so that incomplete or malformed LilyPond code can still be opened. In my previous voice parser, for example, cis128' was interpreted as cis'128 and automatically corrected after clicking on the graphical representation — something I find very convenient as a user. At the same time, too much tolerance can lead to misinterpretations in ambiguous situations. As a compromise, I plan to make such repair mechanisms optional (e.g., via a “repair flag”). I would be happy to discuss where such tolerance is helpful, and where it begins to blur the intended semantics.

> * There is a nice, new Emacs mode for LilyPond available at [...] Have you seen it? I know the Python parser mostly from a user perspective, since I have been using Frescobaldi for a long time. Thanks also for the hint about the new Emacs tree‑sitter integration — I haven’t looked at it yet, but I’d like to explore it as an additional reference.

Best regards,
Christian

Reply via email to