Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiProshkina / Архитектура вычислительных систем - лекции_последний.docx
Скачиваний:
154
Добавлен:
18.05.2015
Размер:
1.63 Mб
Скачать

Варианты взаимодействия двух трансляторов

Организация процесса трансляции может осуществляться двумя способами:

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

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

Многопроходная трансляция

Рисунок 47 Многопроходная трансляция

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

Достоинства:

  • Обособленность отдельных фаз, что позволяет обеспечить их независимую реализацию и использование;

  • Возможность хранения данных, получаемых в результате работы каждой из фаз на одном из внешнего ЗУ;

  • Возможность уменьшения объема ОЗУ, требуемого для работы, за счет последующего вызова фаз;

Недостатки:

  • Большие объемы промежуточной информации;

  • Замедление скорости трансляции последовательного выполнения фаз;

  • Подход неудобен при построении трансляторов с языков, обладающих простой синтаксической и семантической структурой;

Однопроходная трансляция

Рисунок 48 однопроходная трансляция

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

Достоинства:

  • Отсутствие больших объемов;

  • Высокая скорость обработки;

  • Отсутствие обращений к внешним ЗУ;

Недостатки:

  • Невозможность реализации для сложных по структуре языков;

  • Отсутствие промежуточных данных, которые можно использовать для анализа и оптимизации;