Компилятор - это программа, которая читает программу, написанную на одном языке (исходном языке), и переводит ее в другую эквивалентную программу на другом языке (целевом языке), главным образом на машинном языке.
Существуют разные фазы компилятора, через которые ваш исходный код языка сканируется построчно. Существует таблица символов, которая отслеживает все ключевые слова, которые сканируются в исходном коде языка.
Этап 1: Lexical Analyzer - читает все символы в исходной программе и формирует логическое разделение токенов (int, char, float, if-else, for, while и т. Д.)
Фаза 2: Syntax Analyzer - анализ структуры потока токенов. Иерархический разбор выражений, который включает постфикс / префикс и т. Д. (A = b + c * d)
Этап 3: Семантический анализатор - проверка типа токенов (целочисленного или действительного, с плавающей точкой и т. Д.) И многих других вещей, таких как приоритет операторов и т. Д.
Этап 4: Генератор промежуточного кода - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)
Этап 5: Оптимизация кода - Различный анализ (поток управления, поток данных, преобразования),
который включает в себя: код избыточности, распространение констант, частично мертвый код, общее подвыражение, инвариантный код цикла
Этап 6: Генерация кода - Генерация целевого кода (в основном языка ассемблера), помещение значений в регистры
Все эти фазы - не что иное, как хорошо написанные программы, и в этом может быть N недостатков.