Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование лекции.doc
Скачиваний:
49
Добавлен:
12.11.2019
Размер:
5.53 Mб
Скачать

21.3. Структура и организация работы транслятора

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

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

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

Фирма Borland традиционно реализует быстрые однопроходные трансляторы для языков Pascal и Delphi. Один из вариантов взаимодействия блоков компилятора при однопроходной организации представлено на Рис. 21 .80.

Рис. 21.80. Организация однопроходного транслятора.

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

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

22.Параллельные процессы

Как известно, Windows – многозадачная операционная система, обеспечивающая одновременное выполнение многих приложений. Одновременность эта на самом деле кажущаяся. В один момент времени процессор все равно может выполнять только одну команду (для настоящей многозадачности нужны многопроцессорные системы). Просто процессор очень быстро переключается между запущенными в системе задачами, создавая иллюзию их одновременной работы. Подобное псевдоодновременное выполнение процессов известно как "операционная система с разделением времени" (time-sharing).

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

Другой пример – программа тестирования знаний, которая дает студенту ограниченное время на выполнение тестов и по истечении этого времени выполняет какие-либо действия (обычно вывод сообщения "Зачета нет и не будет").

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