
udemy
Udemy - одна из самых больших площадок в мире по доставке обучающего контента от разных авторов всего мира. Присутсвуют курсы практически на любую тему.
Разбор или синтаксический анализ - один из первых этапов проектирования и реализации компилятора. Хорошо продуманный синтаксис вашего языка программирования - это большая мотивация, по которой пользователи предпочтут и выберут именно ваш язык. Примечание: это практическое занятие по созданию парсера с рекурсивным спуском вручную.
Парсеры рекурсивного спуска - это группа парсеров, широко используемых на практике во многих рабочих языках программирования. В отличие от автоматических алгоритмов синтаксического анализа, ручная реализация позволяет полностью контролировать процесс синтаксического анализа и обрабатывать сложные конструкции, что может быть невозможно в автоматических синтаксических анализаторах.
Кроме того, реализация полностью ручного парсера с нуля позволяет понять и увидеть этот процесс изнутри, демистифицировать внутренние структуры и превратить построение парсеров в интересную инженерную задачу.
В курсе «Создание парсера с нуля» мы погружаемся в чистую практическую реализацию, создание и изучение различных аспектов парсеров.
В этом курсе вы изучите концепцию синтаксического анализа рекурсивного спуска, поймете, что такое Tokenizer и как он взаимодействует с модулем Parser, узнаете, что такое абстрактное синтаксическое дерево (AST), и как иметь разные форматы этих AST, что такое «упреждающий просмотр» и прогнозирующий синтаксический анализ и, в конечном итоге, создание синтаксического анализатора для полноценного языка программирования, подобного Java или JavaScript.
Реализация синтаксического анализатора также сделает ваше практическое использование других языков программирования более профессиональным.
Для кого этот курс?
Этот класс предназначен для любого любознательного инженера, который хотел бы получить навыки построения сложных систем (а создание парсера для языка программирования — довольно сложная инженерная задача!), а также получить применимые знания для построения таких систем.
Если вас интересуют именно компиляторы, интерпретаторы и средства преобразования исходного кода, то этот курс также для вас.
Предпосылками для этого курса являются основные структуры данных и алгоритмы: деревья, списки, обход и регулярные выражения.
Что используется для реализации?
Поскольку мы создаем язык, очень похожий по синтаксису на JavaScript или Java, мы используем именно JavaScript - его элегантная мультипарадигмальная структура, которая сочетает в себе функциональное программирование, ООП на основе классов и прототипов, идеально подходит для этого.
Многие инженеры знакомы с JavaScript, поэтому сразу начать программировать будет проще. Однако мы не используем очень специфичные для JS конструкции, поэтому реализацию парсера можно легко перенести на любой другой язык по вашему выбору.
Примечание: мы хотим, чтобы наши ученики сами следовали, понимали и реализовывали каждую деталь парсера, а не просто копировали и вставляли окончательное решение. Полный исходный код языка доступен в видеолекциях, в которых показано, как структурировать определенные модули.
Что особенного в этом курсе?
Основные особенности этих лекций:
Что в курсе?
Курс разделен на четыре части, всего 18 лекций и множество подтем в каждой лекции. Ниже приведено содержание и учебная программа.
Часть 1: Основные выражения и Tokenizer
В этой части мы описываем базовые выражения, такие как числа и строки, а также создаем модули Tokenizer, работающие с регулярными выражениями.
Часть 2: Структура программы
В этой части мы поговорим о структурах программы, таких как операторы и списки операторов, блоки и правила рекурсивного производства. Кроме того, мы обсуждаем различные форматы AST и начинаем строить более сложные выражения.
Часть 3. Поток управления и функции
В этой части мы реализуем переменные, присваивание, работаем с приоритетом операторов и вводим абстракцию функций. Кроме того, мы определяем управляющие структуры, такие как оператор If и итерационные циклы.
Часть 4: Объектно-ориентированное программирование
В заключительной части курса мы реализуем классы и объекты, говорим о доступе к свойствам и массивам. Кроме того, мы реализуем универсальные вызовы функций и методов и создаем окончательный исполняемый файл синтаксического анализатора.
Udemy - одна из самых больших площадок в мире по доставке обучающего контента от разных авторов всего мира. Присутсвуют курсы практически на любую тему.
Дмитрий Сошников - инженер-программист, читает лекции по различным темам информатики. Он увлечен образованием и уделяет особое внимание высококачественному образовательному контенту: кратким и понятным анимированным лекциям с заметками в реальном времени.
Парсинг или синтаксический анализ - один из первых этапов проектирования и реализации компилятора. Хорошо продуманный синтаксис вашего языка программирования - большая мотивация, по которой пользователи предпочтут и выберут именно ваш язык.
Семантика языков программирования. Как языки программирования работают под капотом? В чем разница между компилятором и интерпретатором? Что такое виртуальная машина и JIT-компилятор? А как насчет разницы между функциональным и императивным программированием?
Утечки памяти и висячие указатели являются основными проблемами ручного управления памятью. Вы удаляете родительский узел в связанном списке, забывая сначала удалить все его дочерние узлы - и ваша память просачивается. Вы удаляете цепочку объектов в правильном порядке - но вдруг ваша программа падает, так как вы забыли о втором владельце этого ресурса, который теперь пытается разыменовать нулевой указатель.
Курс поможет понять и решить все вопросы, связанные с экзаменом GATE. Компиляторы предоставляют вам теоретические и практические знания, необходимые для реализации языка программирования. Как только вы научитесь компиляторовать, вы в значительной степени узнаете внутренности многих языков программирования. Кроме того, вам станет легко судить о языке программирования по его основным функциям.
Нетипизированные программы часто подвержены ошибкам, исключениям времени выполнения и могут затруднить процесс отладки. Именно поэтому многие языки программирования в производственной среде реализуют статический типизатор - дополнительный модуль, цель которого - повысить безопасность программ и упростить разработку.Проверка типов или вывод типов? Что такое теория типов и типовые суждения? Слабо или сильно типизированный мой язык? И как мне на сам