Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы.doc
Скачиваний:
99
Добавлен:
04.11.2018
Размер:
5.13 Mб
Скачать

Введение

Транслятор – это программа перевода текста (программы) с одного языка (исходного) на другой (объектный).

Если исходный язык является языком программирования высокого уровня, например, таким как ФОРТРАН, АЛГОЛ, АДА, ПАСКАЛЬ, СИ или МОДУЛА – 2 и, если объектный язык автокод (язык ассемблера) или машинный язык, то транслятор называют компилятором. Машинный язык иногда называют кодом машины, и поэтому объектная программа зачастую называется объектным кодом. Трансляция исходной программы в объектную выполняется во время компиляции, а фактическое выполнение объектной программы во время выполнения готовой программы.

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

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

В процессе изложения материала мы будем рассматривать синтаксически управляемые методы компиляции. Почти половина курса будет посвящена автоматическому распознаванию синтаксиса языков, что в свою очередь основывается на теории формальных языков, которую мы рассматривали в первой части курса и учебном пособии “Теория формальных языков. Грамматики и автоматы”. Вам необходимо вспомнить азы этого курса и, в первую очередь, автоматные и контекстно–свободные языки и грамматики, конечные автоматы и автоматы с магазинной памятью. Знание теории формальных языков позволяет глубже понять процессы компиляции, поможет систематически и эффективно проводить проектирование и реализацию компилятора.