Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
20.06.2014
Размер:
523 Кб
Скачать
☆

Общая схема работы транслятора

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

Лексический анализ (сканер) не является обязательным этапом и разбивает входной текст на слова (лексемы). Это повышает скорость синтаксического разбора.

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

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

Понятие прохода

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

Пример:

I label 1: mov eax, ebx

jmp label 1:

II jmp label 1

mov eax, ebx

label 1: pop ebx

Во втором случае однопроходная компиляция невозможна в принципе, поскольку метка сначала используется, а потом определяется.

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

Чем меньше проходов делает компилятор, тем быстрее он работает, однако, нередко имеет смысл формирование на проходах удобных структур данных для внутреннего представления, которое делает накладные расходы несущественными.

Пример: замена идентификатора короткими цифровыми кодами, устранение комментариев и т.п.

Понятие JIT – компиляции

Just – in – time

Это компиляция по требованию, которая решает две основные задачи:

  1. Сокращение объемов использования продукции.

  2. Обеспечение кросс – платформенности.

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

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

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

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

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

Недостаток: более длительный старт программы, т.к. содержимое исполняемого образа заполняется постепенно.

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

Для затруднений анализа могут использоваться средства перемещение информации блоков в промежуточном представлении, а также переименование идентификаторов.

Соседние файлы в предмете Системное программное обеспечение