Плохая новость заключается в том, что большинство настоящих компьютерных языков не являются "LALR (1)", что означает, что вам приходится прибегать к значительным хакерским атакам, чтобы YACC анализировал настоящие языки.
Если вы разрабатываете DSL, вы можете использовать любые генераторы синтаксического анализатора LALR без особых проблем именно потому, что вы можете изменить грамматику своего DSL, когда генератор анализатора закричит. Генераторы парсера LL в основном работают и здесь по той же причине, но отсутствие левой рекурсии может быть настоящей болью.
Если вам не нравится то, как вам нравится ваш синтаксис, парсеры GLR - победители. Мы используем их в DMS Software Reengineering Toolkit и создали парсеры производственного качества для более чем 30 языков, включая C ++, в котором есть народная теорема о том, что ее практически невозможно проанализировать. Народная теорема была начата людьми, использующими парсеры LL и LALR, чтобы попробовать C ++. GLR делает это легко.