Синтаксический анализатор Scala является анализатором обратного отслеживания, поэтому он может работать практически с любым BNF или EBNF. Это также означает, однако, что существуют крайние случаи, когда ввод может быть мучительно медленным для чтения.
Если грамматику можно изменить на LL (1) грамматику , вы можете использовать ~! оператор, чтобы сохранить возврат к минимуму.
Грамматика, вероятно, МОЖЕТ быть превращена в LL (1), но, как написано, это не так. Посмотрите, например, что у выражений и операторов есть конфликты первый / первый (посмотрите в конце связанной статьи).
Во всяком случае, для академического проекта этого достаточно. Для реального компилятора вам понадобятся более быстрые парсеры.