Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 38-20 СПО.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
934.36 Кб
Скачать

34. Фаза семантического анализа.

Входными данными для семантического анализатора являются:

1)ТИ

2)Результаты разбора синтаксических конструкций входного языка.

Результаты выполнения синтаксического анализатора могут быть представлены в какой-либо форме внутреннего представления программы (различные варианты синтаксических деревьев, т.к. с точки зрения семантического анализа основой является структура исходной программы).

Если семантический анализ выполняется на этапе синтаксического разбора, то каждый раз после завершения очередной конструкции выполняется семантическая проверка на основе имеющихся в ТИ данных.

Если семантический анализ выполняется на этапе подготовки к генерации кода после завершения всей фазы синтаксического анализа, выполняется полный семантический анализ (например, поиск неописанных идентификаторов).

Семантический анализ выполняется следующие основные действия:

1)Проверка соблюдения во входной программе семантических соглашений входного языка.

2)Дополнение внутреннего представления программы в компиляторе операторами и действиями, неявно предусмотренными семантикой входного языка.

3)Проверка элементарных смысловых норм языков программирования, напрямую не связанных с входным языком.

Проверка соблюдения во входной программе семантических соглашений входного языка:

Заключается в сопоставлении входных цепочек исходной программы с требованиями семантики входного языка программирования.

Каждый ЯП имеет четко заданные и специфицированные семантические соглашения, которые проверяются на этапе синтаксического разбора.

Например:

1)Каждая метка, на которую есть ссылка, должна хотя бы 1 раз присутствовать в программе.

2)Каждый идентификатор должен быть описан 1 раз и ни 1 идентификатор не может быть описан > 1 раза.

3)Типы переменных в выражениях должны быть согласованы между собой.

4)При вызове процедур и функций число и типы фактических параметров должны быть согласованы с числом и типами формальных параметров.

Проверка смысловых норм ЯП:

Напрямую не связана с входным языком – это сервисная функция, включенная практически во все современные компиляторы; она обеспечивает проверку компилятором соглашений, выполнение которых связано со смыслом либо всей программы в целом, либо е отдельных фрагментов.

Пример:

1)Каждая переменная или константа должна хотя бы 1 раз использоваться в программе.

2)Каждая переменная должна быть определена до ее первого использования, при любом ходе выполнения программы.

3)Результат функции должен быть определен при любом ходе ее выполнения.

4)Каждый оператор в исходной программе должен хотя бы 1 раз выполниться.

5)Операторы условия и выбора должны предусматривать возможность хода выполнения программы по каждой из своих ветвей.

6)Операторы цикла должны предусматривать возможность завершения цикла.

35. Фаза генерации кода.

Задача фазы генерации кода – это построение для программы на входном языке эквивалентной ей машинной программы.

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

1)Распределение памяти (распределение регистров).

2)Выбор команд.

3)Генерация объектного или загрузочного модуля.

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

В любой ситуации фаза генерации кода из префиксной записи отличается от генерации кода из ориентированного графа.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]