Компиляция


Методы реализации программ

Программы, написанные на каком-либо языке программирования (кроме машинных языков), не могут быть непосредственно выполнены. Их нужно как-то «обработать» и выполнить. Каждый такой способ обработки называется метод реализации программ. Языки программирования могут реализовываться тремя методами.

Программа может переводиться на машинный язык и выполняться непосредственно компьютером. Такая реализация называется компиляцией. Преимущество этого метода – очень быстрое выполнение программы после завершения процесса компиляции. Программы на большинстве языков, таких как C++ и Delphi, реализуются с помощью компилятора.

 

Рассмотрим, основные этапы процесса компиляции.

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

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

Синтаксический анализатор получает от лексического анализатора лексемы и проверяет правильность их следования. Например, последовательность лексем «x», «=», «5» будет правильной, а вот «=», «x», «5» ­– нет. Результатом работы синтаксического анализатора являются деревья синтаксического анализа, которые представляют собой иерархические структуры данных с информацией о программе и её операторах.

Расписать дерево выражения (2+2)*2

Аналогия орфографии в русском языке.

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

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

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

Оптимизатор позволяет улучшить программу путём уменьшения её размеров или скорости выполнения или того и другого одновременно. Оптимизация часто является дополнительным этапом процесса компиляции.

Генератор машинного кода переводит программу с промежуточного кода в машинный код.

Машинный код, созданный генератором кода, может непосредственно выполняться аппаратным обеспечением. Однако для выполнения большинства пользовательских программ необходимы также программы и функции операционной системы (например, функции ввода-вывода). Для связки программы с функциями операционной системы и программами других разработчиков предназначен редактор связей.

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