Компилятор
Материал из Википедии — свободной энциклопедии
![]() |
Эта статья или раздел нуждается в переработке. Пожалуйста, улучшите её в соответствии с правилами написания статей. |
Компиля́тор — транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд или на языке ассемблера. Другой разновидностью трансляторов являются интерпретаторы, осуществляющие анализ и перевод текста программы в машинный код пошагово, непосредственно перед выполнением, и сразу же исполняющие получившийся машинный код.
Содержание |
[править] Основы
Большинство компиляторов переводят программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен компьютером, то есть в набор инструкций для центрального процессора. Компьютер, для которого производится компиляция, называется целевой машиной.
Некоторые компиляторы (например, Java) переводят программу не в машинный код, а в программу на некотором специально созданном низкоуровневом языке. Например, для языка Java это язык Java Virtual Machine, JVM — язык виртуальной машины Java, или так называемый байт-код Java. Для языков программирования на платформе .NET Framework (C#, Managed C++, Visual Basic .NET и другие) это так называемый MSIL (Microsoft Intermediate Language), или «Промежуточный язык фирмы Майкрософт». Но, в отличии от Java, MSIL код всегда компилируется в код целевой машины и не подлежит интерпретации. Далее программа на этом промежуточном языке подлежит интерпретации либо ещё одной компиляции в код целевой машины непосредственно перед исполнением (для Java это делает «Just-In-Time compiler» (JIT)).
Для каждой целевой машины (IBM, Apple и т. д.) и каждой операционной системы или семейства операционных систем, работающих на целевой машине, требуется написание своего компилятора. Существуют также так называемые «кросс-компиляторы», позволяющие на одной машине и в среде одной ОС получать код, предназначенный для выполнения на другой целевой машине или в среде другой ОС. Кроме того, компиляторы для одной и той же целевой машины могут быть оптимизированы под разные процессоры. Например, компилятор, оптимизированный под процессоры фирмы Intel, создаёт машинный код, который быстрее всего выполняется на компьютерах с этими процессорами.
Существуют программы, которые решают обратную задачу — перевод программы с низкоуровневого языка на высокоуровневый. Этот процесс называют декомпиляцией, а программы — декомпиляторами. Можно считать, что декомпиляторы восстанавливают исходный текст программы, однако качество этого восстановления, как правило, невысокое.
[править] Структура компилятора
Процесс компиляции состоит из следующих этапов:
- Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.
- Грамматический анализ. Последовательность лексем преобразуется в дерево разбора.
- Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) - напр. привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т.д. Результат обычно называется "промежуточным представлением/кодом", и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то еще, удобным для дальнейшей обработки.
- Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах, напр. над промежуточным кодом или над конечным машинным кодом.
- Генерация кода. Из промежуточного представления выдается код на целевом языке.
В конкретных реализациях компиляторов, эти этапы могут быть раздельны или совмещены в том или ином виде.
[править] Примеры компиляторов
GCC, Free Pascal Compiler, Преобразователь Глагола.
[править] См. также
- Интерпретатор
- Транслятор
- CORC
- «Книга дракона» - классический учебник о построении компиляторов
- Синтаксический анализ
[править] Ссылки
- Компиляторы: принципы, методы и средства разработки
- Ахо, Альфред В., Сети, Рави, Ульман, Джеффри Д. Компиляторы: принципы, технологии и инструменты : Пер. с англ.— М. Издательский дом «Вильямс», 2001 .— 768 с.: ил.— Парал. тит. англ. ISBN 5-8459-0189-8 (рус.)
- Хантер Р. Проектирование и конструирование компиляторов : Пер. с англ. С. М. Круговой — М. Финансы и статистика, 1984 - 232 с. ил. 24 см