Очевидно, восприятие человека и электронного устройства, такого как компьютер, отличается. Люди могут понимать что угодно через естественные языки, но компьютер не понимает. Компьютер нуждается в переводчике для преобразования языков, написанных в читаемой человеком форме, в читаемую компьютером форму.
Компилятор и интерпретатор являются типами языкового переводчика. Что такое языковой переводчик? Этот вопрос может возникнуть у вас в голове.
Языковой переводчик - это программное обеспечение, которое переводит программы из исходного языка в удобочитаемой для человека форме в эквивалентную программу на объектном языке. Исходный язык обычно является языком программирования высокого уровня, а объектный язык обычно является машинным языком реального компьютера.
Сравнительная таблица
Основа для сравнения | составитель | переводчик |
---|---|---|
вход | Это занимает всю программу за раз. | Это занимает одну строку кода или инструкции за один раз. |
Выход | Он генерирует промежуточный объектный код. | Он не производит никакого промежуточного объектного кода. |
Рабочий механизм | Компиляция выполняется перед выполнением. | Компиляция и исполнение происходят одновременно. |
скорость | Сравнительно быстрее | Помедленнее |
объем памяти | Требование к памяти больше из-за создания объектного кода. | Это требует меньше памяти, поскольку не создает промежуточный объектный код. |
ошибки | Показать все ошибки после компиляции, все одновременно. | Отображает ошибку каждой строки одну за другой. |
Обнаружение ошибок | Сложно | Проще сравнительно |
Относящиеся языки программирования | C, C ++, C #, Scala, машинопись использует компилятор. | Java, PHP, Perl, Python, Ruby использует интерпретатор. |
Определение компилятора
Компилятор - это программа, которая читает программу, написанную на языке высокого уровня, преобразует ее в машинный или язык низкого уровня и сообщает об ошибках, присутствующих в программе. Он конвертирует весь исходный код за один раз или может сделать это за несколько проходов, но, наконец, пользователь получает скомпилированный код, который готов к выполнению.
Компилятор работает по фазам; Различные этапы можно сгруппировать в две части:
- Этап анализа компилятора также называется внешним интерфейсом, в котором программа делится на фундаментальные составные части и проверяет грамматику, семантику и синтаксис кода, после чего генерируется промежуточный код. Этап анализа включает в себя лексический анализатор, семантический анализатор и синтаксический анализатор.
- Этап синтеза компилятора также известен как серверная часть, в которой оптимизируется промежуточный код и генерируется целевой код. Этап синтеза включает в себя оптимизатор кода и генератор кода.
Фазы компилятора
Теперь давайте разберемся с работой каждого этапа в деталях.
- Лексический анализатор : он сканирует код в виде потока символов, группирует последовательность символов в лексемы и выводит последовательность токенов со ссылкой на язык программирования.
- Синтаксический анализатор : на этом этапе токены, сгенерированные на предыдущем этапе, проверяются на соответствие грамматике языка программирования, независимо от того, являются ли выражения синтаксически правильными или нет. Это делает разбор деревьев для этого.
- Семантический анализатор : он проверяет, соответствуют ли выражения и операторы, сгенерированные на предыдущем этапе, правилу языка программирования, и создает аннотированные деревья разбора.
- Генератор промежуточного кода : генерирует эквивалентный промежуточный код исходного кода. Существует много представлений промежуточного кода, но TAC (трехадресный код) используется наиболее широко.
- Оптимизатор кода : улучшает требования к времени и пространству программы. Для этого он устраняет избыточный код, присутствующий в программе.
- Генератор кода : это последняя фаза компилятора, в которой генерируется целевой код для конкретной машины. Он выполняет такие операции, как управление памятью, назначение регистров и оптимизация конкретных машин.
Таблица символов в некоторой степени представляет собой структуру данных, которая управляет идентификаторами вместе с соответствующими типами данных, которые она хранит. Обработчик ошибок обнаруживает, сообщает, исправляет ошибки, возникающие между различными фазами компилятора.
Определение переводчика
Интерпретатор является альтернативой для реализации языка программирования и выполняет ту же работу, что и компилятор. Интерпретатор выполняет лексирование, синтаксический анализ и проверку типов аналогично компилятору. Но интерпретатор обрабатывает синтаксическое дерево напрямую для доступа к выражениям и выполнения оператора, а не генерирует код из синтаксического дерева.
Интерпретатору может потребоваться обработка одного и того же синтаксического дерева более одного раза, поэтому интерпретация сравнительно медленнее, чем выполнение скомпилированной программы.
Компиляция и интерпретация, вероятно, объединены для реализации языка программирования. В котором компилятор генерирует код промежуточного уровня, тогда код интерпретируется, а не компилируется в машинный код.
Использование переводчика выгодно при разработке программы, где наиболее важной частью является возможность быстрого тестирования модификации программы, а не ее эффективного выполнения.
Ключевые различия между компилятором и интерпретатором
Давайте посмотрим на основные различия между компилятором и интерпретатором.
- Компилятор берет программу целиком и переводит ее, а интерпретатор переводит оператор программы в оператор.
- Промежуточный код или целевой код генерируется в случае компилятора. В отличие от интерпретатора не создает промежуточный код.
- Компилятор сравнительно быстрее, чем Interpreter, поскольку компилятор берет всю программу за один раз, тогда как интерпретаторы компилируют каждую строку кода за другой.
- Компилятору требуется больше памяти, чем интерпретатору из-за генерации объектного кода.
- Компилятор представляет все ошибки одновременно, и трудно обнаружить ошибки в контрастном интерпретаторе, отображая ошибки каждого оператора одну за другой, и легче обнаружить ошибки.
- В компиляторе, когда в программе возникает ошибка, он останавливает ее перевод, и после устранения ошибки вся программа переводится снова. Напротив, когда в интерпретаторе возникает ошибка, она препятствует ее переводу, а после устранения ошибки перевод возобновляется.
- В компиляторе процесс требует двух шагов, в которых сначала выполняется перевод исходного кода в целевую программу, а затем выполнение. Находясь в интерпретаторе Это один шаг процесса, в котором исходный код компилируется и выполняется одновременно.
- Компилятор используется в таких языках программирования, как C, C ++, C #, Scala и т. Д. С другой стороны, Интерпретатор используется в таких языках, как Java, PHP, Ruby, Python и т. Д.
Заключение
И компилятор, и интерпретатор предназначены для выполнения одной и той же работы, но различаются по операционной процедуре, компилятор получает исходный код агрегированным образом, тогда как интерпретатор принимает составные части исходного кода, то есть оператор за оператором.
Хотя и компилятор, и интерпретатор имеют определенные преимущества и недостатки, такие как интерпретируемые языки рассматриваются как кроссплатформенные, то есть код переносимый. Он также не должен компилировать инструкции ранее, в отличие от компилятора, который экономит время. Скомпилированные языки быстрее в отношении процесса компиляции.