Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы СПО-2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
184.83 Кб
Скачать

7. Трансляторы с языка ассемблера («ассемблеры»).

Язык ассемблера — это язык низкого уровня. Структура и взаимосвязь цепочек

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

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

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

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

8. Лексические анализаторы (сканеры). Принципы построения сканеров. Назначение лексического анализатора.

Прежде чем перейти к рассмотрению лексических анализаторов, необходимо дать четкое определение того, что же такое лексема.

Лексема (лексическая единица языка) — это структурная единица языка, которая состоит из элементарных символов языка и не содержит в своем составе других структурных единиц языка.

Лексемами языков программирования являются идентификаторы, константы, ключевые слова языка, знаки операций и т. п. Состав возможных лексем каждого конкретного языка программирования определяется синтаксисом этого языка.

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

Принципы построения лексических анализаторов

Лексический анализатор имеет дело с такими объектами, как различного рода

константы и идентификаторы (к последним относятся и ключевые слова). Язык

констант и идентификаторов является регулярным — то есть может быть описан

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

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

Конечный автомат для каждой входной цепочки языка дает ответ на вопрос о том,

принадлежит или нет цепочка языку, заданному автоматом. Однако в общем

случае задача лексического анализатора несколько шире, чем просто проверка

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

должен выполнить следующие действия:

1) определить границы лексем, которые в тексте исходной программы явно не

указаны;

2) выполнить действия для сохранения информации об обнаруженной лексеме (или выдать сообщение об ошибке, если лексема неверна).

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

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

Этот перечень лексем можно представить в виде таблицы, называемой таблицей

лексем. Каждой лексеме в таблице лексем соответствует некий уникальный условный код.

9. Генератор кода. Семантический анализ и подготовка к генерации кода. Этапы семантического анализа.

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