Главная arrow Программирование С++ arrow Интерпретаторы в сравнении с компиляторами

Интерпретаторы в сравнении с компиляторами

Прежде всего следует объяснить, что такое интерпретатор и чем он отличайся от компилятора. Несмотря на то, что и компиляторы, и интерпретаторы получают на входе исходный код программы, способы обработки кода у Них существенно отличаются.
Компилятор преобразует исходный код в выполняемое представление, состоящее из фактических команд центрального процессора, которые непосредственно выполняются компьютером. В некоторых случаях на выходе транслятора создается переносимое промежуточное представление, которое выполняется исполняющей системой. Например, код на языке Java компилируется в промежуточное представление, именуемое байт-код (bytecode) и выполняемое виртуальной машиной Java.
Интерпретатор действует совершенно иначе. Он читает исходный код программы и выполняет каждый встретившийся оператор. Таким образом, интерпретатор не транслирует исходный код в выполняемый. Вместо этого он непосредственно выполняет программу. Главный недостаток интерпретации — потеря скорости выполнения. Интерпретируемая программа выполняется гораздо медленнее, чем ее скомпилированное представление.
Иногда термин "интерпретатор" применяется в ситуациях, отличных от только что описанной. Например, базовая виртуальная машина Java называется интерпретатором байт-кода (bytecode interpreter). Это не тот тип интерпретатора, который разрабатывается в данной главе. В ней создается интерпретатор исходного кода, который просто выполняет программу, читая исходный код.
Несмотря на то, что скомпилированные программы работают быстрее, чем интерпретируемые, интерпретаторы все еще широко используются в программировании по следующим причинам. Во-первых, они создают действительно интерактивную среду исполнения, в которой выполнение программы может быть приостановлено и возобновлено по желанию пользователя. Подобная среда хорошо подходит, к примеру, для робототехники. Во-вторых, природа интерпретаторов языка делает их очень удобными для интерактивной отладки программ. В-третьих, интерпретаторы предпочтительней для языков сценариев (script language), таких как язык запросов для баз данных. В-четвертых, они позволяют выполнять программу на разных платформах. Только исполняющий пакет интерпретатора (interpreter's runtime package) может быть встроен в любое новое окружение.
Есть и другая причина интереса к интерпретаторам: их легко корректировать, переделывать и улучшать. Если вы хотите создать собственный язык программирования, экспериментировать с ним и контролировать его, легче это делать с помощью интерпретатора, а не компилятора. Интерпретаторы становятся замечательными средствами создания прототипов, поскольку вы можете изменять элементы языка и сразу видеть результаты. В нашем случае главнейшее преимущество интерпретатора заключается в том, что он позволяет непосредственно увидеть внутреннюю обработку в языке С++.
Обзор Mini С++
Интерпретатор Mini С++ содержит большой объем кода. Прежде всего полезно разобраться, как вообще организован интерпретатор. Mini С++ содержит три основные подсистемы: синтаксический анализатор (parser) выражений, обрабатывающий числовые выражения, интерпретатор, выполняющий программу, и набор библиотечных функций.
Анализатор выражений вычисляет числовое выражение и возвращает ре-. зультат. Выражение может содержать константы, такие как 10 или 88, переменные, вызовы функций и, конечно, знаки операций. Примером выражения может быть:
 
Модуль интерпретатора выполняет программу на языке С++. Интерпретатор считывает исходный код лексему за лексемой. Если он встречает ключевое слово, то выполняет требуемые действия. Например, когда интерпретатор считывает if, он обрабатывает условие, заданное оператором if. Если условное выражение истинно, интерпретатор выполняет блок кода, связанный с оператором if. Интерпретация продолжается до достижения конца программы.
Библиотечная подсистема определяет функции, встроенные в Mini С++. Они составляют стандартную библиотеку интерпретатора Mini С++. Только небольшой набор библиотечных функций включен в эту главу, но вы можете легко добавить к нему столько функций, сколько вам нужно. В основном, библиотечные функции Mini С++ служат для той же цели, что и библиотечные функции реального языка С++.
В табл. 9.1 перечислены файлы, содержащие названные подсистемы интерпретатора Mini С++.
 
евро- 4- Диваны-еврокнижки .