Particle1Particle2Particle3Particle4Particle5
HWdTech / Блог /

“Проектирование

и конструирование

компиляторов”

Сегодня снимаем с полки нашей библиотеки интереснейшую книгу Робина Хантера “Проектирование и конструирование компиляторов” и рассказываем, зачем ее читать.

10 Июля 2022
#it_books #книги_для_программистов #книги #теория_компьютерных_наук #теория #обучение #программирование #SOLID #theory #Робин Хантер

Reading time: 3 min

Сегодня библиотечную рубрику начинаем с вопроса. Как вы думаете, сколько строчек кода вам понадобится, чтобы написать синтаксический анализатор языка С? А сколько строчек будет занимать синтаксический анализатор языка Kotlin? А любого другого языка - на ваш выбор? 
На все эти вопросы есть очень простой ответ: это будет одна и та же программа - и занимать она будет не более 100 строк кода. 
А вот как ее разработать вы узнаете из книги, которую мы обсуждаем в этом обзоре. 
Знакомьтесь, книга Робина Хантера “Проектирование и конструирование компиляторов”, издана в 1984 году*, но на сегодняшний день более чем актуальна. Сейчас расскажем, почему. 

Для кого эта книга? 

Во-первых, для тех, кто хочет знать, как пишутся компиляторы, но при этом не хочет разбираться в математической стороне вопроса. Здесь описано простое введение в область разработки компиляторов, без особых теоретических изысков, в минимально необходимом наборе, который нужен для написания кода. Это не самая популярная книга по компиляторам, но зато наиболее удобоваримая для чтения. 
Важно! Эта книга абсолютно точно, на сто процентов, НЕ ТОЛЬКО для тех, кого интересуют компиляторы. Кому же еще мы ее рекомендуем? 
Да всем, кто интересуется программированием! Кто хочет понять, как происходит синтаксический разбор в структурах данных, научиться писать DSL-языки в конфигурационных файлах, разобраться с детерминированными конечными автоматами. 
Студентам эта книга тоже очень зайдет, потому что можно читать ее и про компиляторы, а можно - про детерминированные конечные автоматы и их применение в отношении различных задач. Здесь на примере компиляторов показываются интереснейшие примеры решений.
Также в этой книге приведены практические приемы построения LL(1)- и LR(1)-анализаторов, которые являются наиболее удобными и простыми, рассматриваются контекстно-свободные грамматики. 

Зачем читать ее сегодня?

Поразительно то, что изданная в 1984 году книга актуальна на сегодняшний день. Несмотря на то, что в ней нет современных методов семантического анализа кода, лексический и синтаксический анализ описаны на очень высоком уровне. При этом автор не загружает нам мозг тяжелой для понимания математикой, а, напротив, рассказывает как реализовать все примеры программно. 
Эту книгу мы рекомендуем всем нашим подписчикам, а не только тем, кто собирается писать компиляторы - потому что технологии, о которых идет речь, можно использовать во многих других областях. Помимо того, что мы уже описали, создать свой DSL-язык, например! Круто? Несомненно! 
Или - то, о чем мы упоминали в самом начале - построить синтаксический анализатор любого языка программирования. Эта книга интересна и с точки зрения повторного использования кода: здесь рассказывается, как построить один и тот же алгоритм, который будет разбирать разные языки программирования. Такой подход называется Data-Driven Development  и очень активно используется в машинном обучении. 

Личные впечатления

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

Наши статьи!

Спросите нас

Мы ответим в течение суток

* - обязательное поле

Нажимая на эту кнопку, вы соглашаетесь с обработкой ваших персональных данных и принимаете нашу политику обработки конфиденциальных данных