Рекомендуем, 2020

Выбор редакции

Разница между компилятором и интерпретатором

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

Очевидно, восприятие человека и электронного устройства, такого как компьютер, отличается. Люди могут понимать что угодно через естественные языки, но компьютер не понимает. Компьютер нуждается в переводчике для преобразования языков, написанных в читаемой человеком форме, в читаемую компьютером форму.

Компилятор и интерпретатор являются типами языкового переводчика. Что такое языковой переводчик? Этот вопрос может возникнуть у вас в голове.

Языковой переводчик - это программное обеспечение, которое переводит программы из исходного языка в удобочитаемой для человека форме в эквивалентную программу на объектном языке. Исходный язык обычно является языком программирования высокого уровня, а объектный язык обычно является машинным языком реального компьютера.

Сравнительная таблица

Основа для сравнениясоставительпереводчик
входЭто занимает всю программу за раз.
Это занимает одну строку кода или инструкции за один раз.
ВыходОн генерирует промежуточный объектный код.Он не производит никакого промежуточного объектного кода.
Рабочий механизм
Компиляция выполняется перед выполнением.Компиляция и исполнение происходят одновременно.
скорость
Сравнительно быстрееПомедленнее
объем памяти
Требование к памяти больше из-за создания объектного кода.Это требует меньше памяти, поскольку не создает промежуточный объектный код.
ошибки
Показать все ошибки после компиляции, все одновременно.Отображает ошибку каждой строки одну за другой.
Обнаружение ошибокСложноПроще сравнительно
Относящиеся языки программирования
C, C ++, C #, Scala, машинопись использует компилятор.Java, PHP, Perl, Python, Ruby использует интерпретатор.

Определение компилятора

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

Компилятор работает по фазам; Различные этапы можно сгруппировать в две части:

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

Фазы компилятора

Теперь давайте разберемся с работой каждого этапа в деталях.

  1. Лексический анализатор : он сканирует код в виде потока символов, группирует последовательность символов в лексемы и выводит последовательность токенов со ссылкой на язык программирования.
  2. Синтаксический анализатор : на этом этапе токены, сгенерированные на предыдущем этапе, проверяются на соответствие грамматике языка программирования, независимо от того, являются ли выражения синтаксически правильными или нет. Это делает разбор деревьев для этого.
  3. Семантический анализатор : он проверяет, соответствуют ли выражения и операторы, сгенерированные на предыдущем этапе, правилу языка программирования, и создает аннотированные деревья разбора.
  4. Генератор промежуточного кода : генерирует эквивалентный промежуточный код исходного кода. Существует много представлений промежуточного кода, но TAC (трехадресный код) используется наиболее широко.
  5. Оптимизатор кода : улучшает требования к времени и пространству программы. Для этого он устраняет избыточный код, присутствующий в программе.
  6. Генератор кода : это последняя фаза компилятора, в которой генерируется целевой код для конкретной машины. Он выполняет такие операции, как управление памятью, назначение регистров и оптимизация конкретных машин.

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

Определение переводчика

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

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

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

Использование переводчика выгодно при разработке программы, где наиболее важной частью является возможность быстрого тестирования модификации программы, а не ее эффективного выполнения.

Ключевые различия между компилятором и интерпретатором

Давайте посмотрим на основные различия между компилятором и интерпретатором.

  1. Компилятор берет программу целиком и переводит ее, а интерпретатор переводит оператор программы в оператор.
  2. Промежуточный код или целевой код генерируется в случае компилятора. В отличие от интерпретатора не создает промежуточный код.
  3. Компилятор сравнительно быстрее, чем Interpreter, поскольку компилятор берет всю программу за один раз, тогда как интерпретаторы компилируют каждую строку кода за другой.
  4. Компилятору требуется больше памяти, чем интерпретатору из-за генерации объектного кода.
  5. Компилятор представляет все ошибки одновременно, и трудно обнаружить ошибки в контрастном интерпретаторе, отображая ошибки каждого оператора одну за другой, и легче обнаружить ошибки.
  6. В компиляторе, когда в программе возникает ошибка, он останавливает ее перевод, и после устранения ошибки вся программа переводится снова. Напротив, когда в интерпретаторе возникает ошибка, она препятствует ее переводу, а после устранения ошибки перевод возобновляется.
  7. В компиляторе процесс требует двух шагов, в которых сначала выполняется перевод исходного кода в целевую программу, а затем выполнение. Находясь в интерпретаторе Это один шаг процесса, в котором исходный код компилируется и выполняется одновременно.
  8. Компилятор используется в таких языках программирования, как C, C ++, C #, Scala и т. Д. С другой стороны, Интерпретатор используется в таких языках, как Java, PHP, Ruby, Python и т. Д.

Заключение

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

Хотя и компилятор, и интерпретатор имеют определенные преимущества и недостатки, такие как интерпретируемые языки рассматриваются как кроссплатформенные, то есть код переносимый. Он также не должен компилировать инструкции ранее, в отличие от компилятора, который экономит время. Скомпилированные языки быстрее в отношении процесса компиляции.

Top