Структура Многопроходных Компиляторов

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

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

Основное внимание в работе уделяется управляющей части компилятора, в частности — структурами данных, предоставля­емых управляющей частью компилятора остальным компонен­там (базовым структурам данных). В качестве примеров реализации описанной схемы обсуждаются кросс-компилятор ПЛ/1, прямой компилятор Фортрана для векторно-конвейерной ЭВМ (ВК ЭВМ) и Паскаль-компилятор для ВК ЭВМ. Поскольку выбранная схема оказалась достаточно общей, ее удалось применить также для реализации имитационного комп­лекса специализированного микропроцессора (транслятор с ав­токода, загрузчик, интерпретатор).

Программные модули, входящие в компилятор, разделяются на два класса:
1) базовые модули (управляющий модуль, мо­дуль начального пуска, итоговая печать сообщений);
2) функци­ональные модули, реализующие конкретные алгоритмы обра­ботки информации. Базовые программные модули составляют незначительную часть от общего объема компилятора. Именно базовые модули являются предметом дальнейшего рассмотре­ния.

Метки: , , ,

Связанные записи