Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Напоследок упомяну про LL-анализ (рекурсивный спуск). Исторически он появился раньше, чем LR, более или менее общим мнением является то, что LL-анализаторы сравнительно просто писать вручнуюПо-моему, их куда проще написать и понять, чем приведённый Вами код. Я как-то написал в экспериментальных целях вычислитель схожих выражений expression-parser на Go. Сравните, стоило ли обращаться к «пузырьковому вычислителю» вместо рекурсивного спуска?
грамматика, которую вы нарисуете «из головы», с некоторой вероятностью окажется пригодна для LRПолагаю, что если рисовать действительно из головы без согласования с ограничениями методов разбора, то и под LR она не подойдёт. Всё-таки прагматический подход к создание языков состоит в том, чтобы рисовать не от балды, а с оглядкой на выбранный метод разбора, и сознательного отказа от излишеств.
А что до рекурсивного спуска, кстати, то LL (да и LR) строятся по грамматике полностью автоматически, а если рекурсивный спуск ручками писать — вы не гарантированы от ошибокРекурсивный спуск — это метод разбора текста по LL грамматике, но это не означает, что его обязательно писать вручную. Впрочем, в ручном создании парсера тоже есть смысл по совокупным качествам.
Пузырьковый вычислитель выражений: простейший синтаксический LR-анализатор вручную