Сегодня библиотечную рубрику начинаем с вопроса. Как вы думаете, сколько строчек кода вам понадобится, чтобы написать синтаксический анализатор языка С? А сколько строчек будет занимать синтаксический анализатор языка Kotlin? А любого другого языка - на ваш выбор?
На все эти вопросы есть очень простой ответ: это будет одна и та же программа - и занимать она будет не более 100 строк кода.
А вот как ее разработать вы узнаете из книги, которую мы обсуждаем в этом обзоре.
Знакомьтесь, книга Робина Хантера “Проектирование и конструирование компиляторов”, издана в 1984 году*, но на сегодняшний день более чем актуальна. Сейчас расскажем, почему.
Для кого эта книга?
Во-первых, для тех, кто хочет знать, как пишутся компиляторы, но при этом не хочет разбираться в математической стороне вопроса. Здесь описано простое введение в область разработки компиляторов, без особых теоретических изысков, в минимально необходимом наборе, который нужен для написания кода. Это не самая популярная книга по компиляторам, но зато наиболее удобоваримая для чтения.
Важно! Эта книга абсолютно точно, на сто процентов, НЕ ТОЛЬКО для тех, кого интересуют компиляторы. Кому же еще мы ее рекомендуем?
Да всем, кто интересуется программированием! Кто хочет понять, как происходит синтаксический разбор в структурах данных, научиться писать DSL-языки в конфигурационных файлах, разобраться с детерминированными конечными автоматами.
Студентам эта книга тоже очень зайдет, потому что можно читать ее и про компиляторы, а можно - про детерминированные конечные автоматы и их применение в отношении различных задач. Здесь на примере компиляторов показываются интереснейшие примеры решений.
Также в этой книге приведены практические приемы построения LL(1)- и LR(1)-анализаторов, которые являются наиболее удобными и простыми, рассматриваются контекстно-свободные грамматики.
Зачем читать ее сегодня?
Поразительно то, что изданная в 1984 году книга актуальна на сегодняшний день. Несмотря на то, что в ней нет современных методов семантического анализа кода, лексический и синтаксический анализ описаны на очень высоком уровне. При этом автор не загружает нам мозг тяжелой для понимания математикой, а, напротив, рассказывает как реализовать все примеры программно.
Эту книгу мы рекомендуем всем нашим подписчикам, а не только тем, кто собирается писать компиляторы - потому что технологии, о которых идет речь, можно использовать во многих других областях. Помимо того, что мы уже описали, создать свой DSL-язык, например! Круто? Несомненно!
Или - то, о чем мы упоминали в самом начале - построить синтаксический анализатор любого языка программирования. Эта книга интересна и с точки зрения повторного использования кода: здесь рассказывается, как построить один и тот же алгоритм, который будет разбирать разные языки программирования. Такой подход называется Data-Driven Development и очень активно используется в машинном обучении.
Личные впечатления
Тюменцев Евгений Александрович, CEO Hello World! Technologies (HWdTech):
__________________________________________________________ *В настоящее время вышло второе издание этой книги, которое вы тоже можете прочитать, но рекомендуем вам обратить внимание на версию 1984 года, если вы хотите получить наиболее простое практическое введение в синтаксический анализ, которое можно использовать сразу для написания кода.
Ссылка на доклад “DSL на коленке: или как писать языки программирования своими руками”: https://www.youtube.com/watch?v=dhktPF6NeEI