В этой статье речь пойдет о концепциях и типах компиляторов.

Концепции компиляторов

Компьютеры знают только 0 и 1. Но человеку очень и очень сложно закодировать как 00110101. Поэтому создал язык программирования и разработал его таким образом, чтобы люди могли его понять.

Мы обычно называем языки программирования высокого уровня такими, как Python, Java, JavaScript и т. д., очень похожими на английский. Поэтому они позволяют людям кодировать.

Но смогут ли компьютеры сразу понять эти продвинутые языки?

Нет. Я упоминал, что компьютер понимает только 0 и 1. Затем нам нужно преобразовать то, что мы пишем на языках высокого уровня, в 0, 1 (машинный код).

Это компилятор, действующий как переводчик.

Другими словами, компилятор — это транслятор, преобразующий языки высокого уровня в машинный код.

Типы компиляторов

Теперь мы знаем, что компилятор — это транслятор. Существуют разные типы переводчиков, например, корейский -> английский переводчик, английский -> испанский переводчик. Компиляторы также имеют несколько типов.

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

Препроцессор

Вы могли удивиться, когда увидели препроцессор. Входное значение — язык высокого уровня, а выходное значение — язык высокого уровня.

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

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

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

Таким образом, язык C поступает в качестве входных данных, но вывод также является языком C (заголовочный файл, макрос и т. д. заменены фактическим кодом).

Устный переводчик

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

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

const a = 1; => execute, result : create a variable and assign 1 to a variable
const b = 2; => execite, result : create b variable and assign 2 to b variable
console.log(a + b); => execute, result : prints result of a + b

Языки, которые используют интерпретатор: Ruby, Python, JavaScript и т. д.

Компилятор

Компилятор компилирует (переводит) язык высокого уровня на язык низкого уровня (язык ассемблера). Под языком низкого уровня здесь понимается язык ассемблера.

Если мы собираемся использовать языки высокого уровня для реализации сложения, мы будем использовать 1 + 2. При выражении на языке ассемблера это преобразуется, как показано ниже (например, код, а не фактическое значение):

actual code(high-level language)
1 + 2
assembly language
MOV num1 1
MOV num2 2
ADD NUM1, NUM2

Таким образом, компилятор отвечает за преобразование языков высокого уровня в языки низкого уровня.

Ассемблер

Ассемблер отвечает за преобразование ранее введенного языка ассемблера в машинный код (0, 1).

Компилятор, который преобразует эти MOV, ADD, переменные и т. д., используемые на языке ассемблера, в 0 и 1, чтобы реальный компьютер мог их понять.

Например, если перевести ADD NUM1 и NUM2 на машинный язык, получится 000011110101001110101 (это просто пример).

Заключение

Я кратко изложил концепции и типы компиляторов. Поскольку компилятор является транслятором, происходит процесс анализа кода.

В следующей статье рассмотрим, как работает компилятор и как он транслирует исходный код.