Парсинг или синтаксический анализ - один из первых этапов проектирования и реализации компилятора. Хорошо продуманный синтаксис вашего языка программирования - большая мотивация, по которой пользователи предпочтут и выберут именно ваш язык.
Проблема с «теорией синтаксических анализаторов» в классических школах и книгах по компиляторам состоит в том, что эта теория часто рассматривается как «слишком продвинутая», переходя прямо в сложные формальные описания из теории вычислений и формальных грамматик. В результате студенты могут потерять интерес к построению компилятора уже на этапе синтаксического анализа.
Противоположная проблема, часто встречающаяся при описании синтаксического анализатора, - это поверхностный подход, описывающий только ручной (обычно рекурсивный спуск) синтаксический анализ, в результате чего студенты сталкиваются с проблемами понимания фактических методов, лежащих в основе автоматизированных синтаксических анализаторов.
Я считаю, что это глубокое погружение в теорию синтаксического анализа следует сочетать с практическим подходом, который идет параллельно и позволяет увидеть весь изученный теоретический материал на практике.
В этом курсе мы углубляемся в различные аспекты теории синтаксического анализа, подробно описывая парсеры LL и LR. Однако в то же время, чтобы сделать процесс обучения и понимания простым и увлекательным, мы параллельно создаем автоматический анализатор для полного языка программирования, подобного JavaScript или Python, с нуля.
После этого курса вы не только сможете использовать генератор парсеров для создания парсеров для языков программирования, но также поймете, как сами генераторы парсеров работают под капотом.
Реализация парсера для языка программирования также сделает ваше практическое использование других языков программирования более профессиональным.
Для кого предназначен этот Курс?
Этот курс предназначен для любого любопытного инженера, который хотел бы получить навыки построения сложных систем (а создание синтаксического анализатора для языка программирования - довольно сложная инженерная задача!) И получить передаваемые знания для построения таких систем.
Если вас особенно интересуют компиляторы, интерпретаторы и инструменты преобразования исходного кода, то этот курс также для вас.
Единственное предварительное условие для этого курса - базовые структуры данных и алгоритмы: деревья, списки, обход.
Что используется для реализации?
Поскольку мы создаем язык, очень похожий по семантике на JavaScript или Python (два самых популярных языка программирования на сегодняшний день), мы используем именно JavaScript - его элегантная многопарадигмальная структура, сочетающая функциональное программирование, ООП на основе классов и на основе прототипов, идеально подходит для этого.
Многие инженеры знакомы с JavaScript, поэтому сразу приступить к программированию будет проще. Для создания автоматического парсера мы используем инструмент Syntax, который является независимым от языка генератором парсеров и поддерживает плагины для Python, Ruby, C #, PHP, Java, Rust и т. д. То есть, реализация этого парсера может быть легко перенесена на любой другой язык по вашему выбору и вкусу.
Примечание: мы хотим, чтобы наши ученики действительно следовали, понимали и реализовывали каждую деталь самого парсера, а не просто копировали из окончательного решения. Полный исходный код языка доступен в видеолекциях, в которых показано, как структурировать определенные модули.
Can you please add it https://www.dmitrysoshnikov.education/p/virtual-machine