Формальные грамматики в кастомном языке: пишем компилятор без боли

Как заставить компьютер понимать ваш собственный язык — без магии и колдовства.
Вы когда-нибудь хотели создать свой язык программирования, но пугались слов «формальные грамматики» и «LL(1)»? Спешим обрадовать: это не страшнее, чем разобраться, почему CI упал на пустом коммите.
На самом деле формальные грамматики — это просто набор правил, описывающих, как строить корректные предложения. Представьте, что вы учите робота говорить: «дай cookie» — правильно, «cookie дай» — нет. Аналог из жизни: правила дорожного движения — если их не соблюдать, будет не компиляция, а авария.
В видео разбирают, как применить BNF (Backus-Naur Form) и EBNF для описания синтаксиса, а затем с помощью генератора парсеров (например, ANTLR или PEG) превратить эти правила в рабочий код. Спойлер: без левой рекурсии и конфликтов FIRST/FOLLOW не обойдётся, но это же веселее, чем фиксить баги в проде.
Конечно, можно пойти по пути «напишу свой парсер с нуля на коленке». Но когда проект вырастет до сотен правил, вспомните добрым словом формальные грамматики. Как говорится, «один раз увидеть BNF — лучше, чем сто раз переписывать регулярки».
Комментарий студии METABYTE
Формальные грамматики — это база для любого языка, будь то Python или ваш внутренний DSL. Если вы решитесь написать свой язык, помните: хороший парсер — как хороший кофе, сэкономишь на ингредиентах — получишь горький осадок в рантайме.