Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 28 стр.

UptoLike

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