Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры [4747 вопросов].doc
Скачиваний:
83
Добавлен:
15.06.2014
Размер:
407.04 Кб
Скачать

19 Методы анализа ошибок. Восстановление после ошибок.

Типы ошибок: лексическая (недопустимые символы)

синтаксическая (в синтаксическом анализаторе)

семантическая (происходит на этапе семантического анализа; пример – несоответствие типа операнда конкретной операции)

логическая (возникает во время выполнения; пример - зацикливание)

Обработчик ошибок должен:

Точно определить место и тип ошибки,быстро восстановиться после ошибки для продолжения анализа

эффективно работать при анализе корректных программ

Выделяют несколько стратегий действия после обнаружения ошибок:

режим паники транслятор пропускает символы из входной строки до обнаружения символа из синхронизирующего множества Недостатки:Пропускаемое множество символов может быть очень большим, Появление цепной реакции, позднее проявление ошибки

уровень фразы Недостатки:Для каждого случая необходимо писать свою процедуру ошибок

продукции ошибок Добавляется ошибочная ситуация, тогда синтаксический анализатор обнаруживает ошибку, локализует ее, восстанавливается и работает дальше. Недостатки:Описывает только ограниченные и ранее известные типы ошибок

глобальная коррекция необходимо минимально видоизменить программу, чтобы она преобразовалась в синтаксически корректную Недостатки:Сложность реализации

20 Семантика языка, методы описания и анализа.

  • Фаза контроля типов

  • Идентификация. Работа с таблицами

  • Идентификация. Работа с типами

  • Причины использования промежуточных языков в компиляторах

  • Различные формы представления промежуточных языков (ПЯ) в компиляторах:

    • Атрибутивные деревья разбора

    • Прямая и обратная польские записи

    • Триады/тетрады

    • RTL

На этапе семантического анализа можно:

Проверить соответствие типов

Проверить управление (различных переходов)

Проверить единственность (чтобы один раз объявлялась переменная или функция)

Проверить имена (чтобы имя встречалось определенное количество раз)

Сравнение может быть статическим (на этапе трансляции) и динамическим (во время выполнения).

Приведение типов

Расширяющее (short -> long)

Сужающее (long -> short)

Формализм атрибутных грамматик оказался очень удобным средством для описания семантики языков программирования

21 Понятие атрибутивные грамматики

входит в раздел синтаксически управляемые грамматики.

Для каждого символа грамматики вводится атрибут val

Вместе с правилами грамматики записываются семантические правила, которые вычисляют значение этих атрибутов.Процесс построения дерева разбора, а затем вычисления атрибутов (нетерминал к терминалу) и называется синтаксически управляемой трансляцией

Атрибутивная грамматика содержит:Синтаксические правила. Для каждого элемента грамматики – множество атрибутов.Для каждого правила – множество семантических правил

Атрибуты бывают:Синтезируемые.Наследуемые

Семантическая часть правила состоит из локальных объявлений и семантических действий. В качестве семантических действий допускаются как атрибутные присваивания, так и составные операторы.

Метка в семантической части правила привязывает выполнение оператора к обходу дерева разбора сверху-вниз слева направо. Конструкция i : оператор означает, что оператор должен быть выполнен сразу после обхода i-й компоненты правой части. Конструкция i E : оператор означает, что оператор должен быть выполнен, только если порождение i-й компоненты правой части пусто. Конструкция i A : оператор означает, что оператор должен быть выполнен после разбора каждого повторения i-й компоненты правой части (имеется в виду конструкция повторения).