Процесс трансляции исходной программы, представленной синтаксическими структурами, в ее исполняемую форму – это основной процесс при реализации любого языка программирования. Он может оказаться достаточно простым, как в случае языков Perl, LISP или Prolog, но чаще всего он сложен.
Эффективность выполнения настолько важна, что большая часть усилий направлена на транслирование программы, чтобы добиться более эффективного выполнения.
Логически процесс трансляции можно разбить на две основные части:
- анализ исходной программы;
- синтез выполняемой объектной программы.
Часто нет четкой границы между этапами и они чередуются между собой даже на уровне операторов.
Трансляторы можно разделить на две группы:
- количество проходов исходной программы – два; это простой компилятор – первый проход: анализ и ее декомпозиция на составляющие, а также получение необходимой для второго прохода информации, например, имена переменных. Во время второго прохода – получение – генерация объектной программы;
- количество проходов – один; получение объектной программы.
Если скорость выполнения программы имеет большое значение – можно сделать 3- х и более проходной транслятор: 1- й проход – анализ исходной программы; 2-й проход – исходная программа переписывается в более эффективную форму с использованием различных алгоритмов оптимизации; 3-й проход – генерация объектного кода.
Наше познание технологии программирования приводит к пониманию того, что более важным фактором является сложность языка, чем количество проходов компилятором, совершаемых для анализа программы.
Рис. 3.2. Структура компилятора
Похожие статьи:
|