Есть ли "забавные" способы узнать о языках, грамматиках, парсинге и компиляторах?

Я готовлюсь к экзамену по языкам, грамматике, парсингу и компиляторам. На самом деле это не моя чашка чая, и большинство ресурсов, которые я нахожу, используют математический язык, чтобы определить различные условия торговли и объяснить различные понятия, которые мне нужно знать, а не придерживаться английского или французского языка, который я бы очень предпочел. Поэтому у меня возникли проблемы как с поиском мотивации для продолжения обучения, так и с простым пониманием теории. Итак, вот мой вопрос: кто-нибудь из вас знает, где я могу найти "забавный" способ узнать все это? Или, по крайней мере, возможно, более "конкретный" и менее "математический" способ решения этого вопроса.

Мне нужно охватить следующее, поэтому все на эти темы можно только приветствовать!

  • Разбор (LR, LL, ...)
  • Грамматика (контекстно-зависимая, детерминированная,...)
  • Синтаксический анализ Статический анализ потока
  • Анализ воздействия на обслуживание программного обеспечения и зависимость от пользовательских интерфейсов
  • Динамический анализ

Вот некоторые ресурсы, которые можно считать "забавными" (с акцентом на кавычки) способами изучения технического предмета, просто чтобы получить представление о том, что я ищу.

2 ответа

Решение

Если вы хотите многому научиться за короткое время, изучите мета-компиляторы из статьи MetaII Вала Шорре 1964 года (да, вы все правильно прочитали) о том, как создавать самокомпилируемые мета-компиляторы. Как халява, они также могут собирать обычные языки! Статья состоит из 10 страниц, описывает мета-компиляторы (как виртуальная машина или нет), и содержит два полных компилятора.

Есть момент, когда вы в конце концов придете к умопомрачительному пониманию того, как компилятор может компилировать себя... Я изучил компиляторы таким образом еще в начале 70-х, и это самый запоминающийся урок компилятора, который я когда-либо получал. Это весело

Здесь есть онлайн-учебник, который реализует все идеи в JavaScript.,

Автор учебного пособия - доктор Джеймс Сосед, парень, который изобрел термин "анализ предметной области". Он использовал идеи MetaII для впечатляющего генератора кода для конкретной области под названием Draco. Драко был ключевым источником вдохновения для инструментов, подобных компилятору, которые я создавал последние 30 лет.

Как долго вы должны готовиться? "Лучший" способ выучить компиляторы - это покопаться в них, а лучший способ сделать это - использовать лучшую книгу о компиляторах. КОГДА-ЛИБО ПИСЬМО: Книга Дракона. Она старая, но потрясающая. Это не дешево, но, вполне возможно, самый конкретный и наименее математический способ узнать о магическом компиляторе.

У него нет мигающих огней, и он не будет отличным шрифтом, как руководство по Ruby, но он входит в топ-10 книг, которые должен прочитать каждый программист

Другие вопросы по тегам