- •1 Общая модель компилятора. Блоки компилятора и их функции
- •2 Общее понятие синтаксиса и семантики языка. Бнф и др. Методы описания синтаксиса и семантики языка.
- •3 Понятие языка. Способы задания языка. Операции над языком
- •4 Регулярные выражения. Способы задания регулярных выражений. Операции над регулярными выражениями.
- •5.Конечные автоматы. Способы задания. Методы построения конечных автоматов. Преобразование конечных автоматов.
- •6 Лексический анализ. Методы и средства построения лексического анализатора.
- •7 Распознавание цепочек символов с помощью конечных автоматов.
- •8 Распознавание цепочек символов с помощью автоматов с магазинной памятью.
- •9 Грамматики языков. Классификация языков по Хомскому.
- •11 Методы представления грамматики в памяти.
- •12 Нисходящий синтаксический анализ. Метод рекурсивного разбора.
- •14 Нисходящий синтаксический анализ. Методы восстановления после ошибок.
- •16 Синтаксический анализ приоритета операторов. Функция приоритета
- •18 Slr-анализаторы. Построение таблиц для slr-анализатора.
- •19 Методы анализа ошибок. Восстановление после ошибок.
- •20 Семантика языка, методы описания и анализа.
- •21 Понятие атрибутивные грамматики
- •22 Синтаксически управляемая трансляция.
- •23 Таблица символов, таблица меток и др. Методы построения, доступа и анализа.
- •24 Генерация промежуточного кода.
- •25 Методы оптимизация промежуточного кода.
- •29 Имена, связывание, проверка типов.
- •30 Область видимости имен. Способы реализации.
- •31 Типы данных. Способы реализации.
- •32 Выражения и операторы присваивания. Способы реализации.
- •36. Абстрактные типы данных. Способы реализации.
- •37 Объектно-ориентированные языки программирования. Способы реализации.
- •38 Обработка исключительных ситуаций. Способы реализации.
- •39 Языки параллельного программирования. Способы реализации.
- •40 Императивные языки программирования. Способы реализации.
- •41 Функциональные языки программирования. Способы реализации.
- •42 Языки логического программирования. Способы реализации.
- •43 Графовые грамматики. Назначение и основные понятия.
- •44 Antlr. Tree grammars.
- •46 Case-средства. Назначение, классификация и основные понятия.
- •47 Case-средства. Направления интеллектуализации.
19 Методы анализа ошибок. Восстановление после ошибок.
Типы ошибок: лексическая (недопустимые символы)
синтаксическая (в синтаксическом анализаторе)
семантическая (происходит на этапе семантического анализа; пример – несоответствие типа операнда конкретной операции)
логическая (возникает во время выполнения; пример - зацикливание)
Обработчик ошибок должен:
Точно определить место и тип ошибки,быстро восстановиться после ошибки для продолжения анализа
эффективно работать при анализе корректных программ
Выделяют несколько стратегий действия после обнаружения ошибок:
режим паники транслятор пропускает символы из входной строки до обнаружения символа из синхронизирующего множества Недостатки:Пропускаемое множество символов может быть очень большим, Появление цепной реакции, позднее проявление ошибки
уровень фразы Недостатки:Для каждого случая необходимо писать свою процедуру ошибок
продукции ошибок Добавляется ошибочная ситуация, тогда синтаксический анализатор обнаруживает ошибку, локализует ее, восстанавливается и работает дальше. Недостатки:Описывает только ограниченные и ранее известные типы ошибок
глобальная коррекция необходимо минимально видоизменить программу, чтобы она преобразовалась в синтаксически корректную Недостатки:Сложность реализации
20 Семантика языка, методы описания и анализа.
Фаза контроля типов
Идентификация. Работа с таблицами
Идентификация. Работа с типами
Причины использования промежуточных языков в компиляторах
Различные формы представления промежуточных языков (ПЯ) в компиляторах:
Атрибутивные деревья разбора
Прямая и обратная польские записи
Триады/тетрады
RTL
На этапе семантического анализа можно:
Проверить соответствие типов
Проверить управление (различных переходов)
Проверить единственность (чтобы один раз объявлялась переменная или функция)
Проверить имена (чтобы имя встречалось определенное количество раз)
Сравнение может быть статическим (на этапе трансляции) и динамическим (во время выполнения).
Приведение типов
Расширяющее (short -> long)
Сужающее (long -> short)
Формализм атрибутных грамматик оказался очень удобным средством для описания семантики языков программирования
21 Понятие атрибутивные грамматики
входит в раздел синтаксически управляемые грамматики.
Для каждого символа грамматики вводится атрибут val
Вместе с правилами грамматики записываются семантические правила, которые вычисляют значение этих атрибутов.Процесс построения дерева разбора, а затем вычисления атрибутов (нетерминал к терминалу) и называется синтаксически управляемой трансляцией
Атрибутивная грамматика содержит:Синтаксические правила. Для каждого элемента грамматики – множество атрибутов.Для каждого правила – множество семантических правил
Атрибуты бывают:Синтезируемые.Наследуемые
Семантическая часть правила состоит из локальных объявлений и семантических действий. В качестве семантических действий допускаются как атрибутные присваивания, так и составные операторы.
Метка в семантической части правила привязывает выполнение оператора к обходу дерева разбора сверху-вниз слева направо. Конструкция i : оператор означает, что оператор должен быть выполнен сразу после обхода i-й компоненты правой части. Конструкция i E : оператор означает, что оператор должен быть выполнен, только если порождение i-й компоненты правой части пусто. Конструкция i A : оператор означает, что оператор должен быть выполнен после разбора каждого повторения i-й компоненты правой части (имеется в виду конструкция повторения).