Транслятор в информатике и программировании¶
Транслятор — это программа или техническое средство, преобразующее исходный текст, записанный на одном языке, в эквивалентную по смыслу конструкцию на другом языке. В информатике под транслятором понимают прежде всего инструмент перевода программы с языка программирования высокого уровня в машинный код или в промежуточное представление, пригодное для исполнения вычислительной системой. Транслятор является центральным звеном цепочки подготовки программного обеспечения: он связывает записанный человеком алгоритм с аппаратными возможностями процессора.
¶Общее понятие
Термин «трансляция» означает перенос, преобразование. В вычислительной технике трансляция — это автоматическое преобразование описания задачи с одного формального языка на другой при сохранении смысла. Транслятор получает на входе исходный код (на входном языке) и выдаёт на выходе объектный код (на выходном языке). Входным языком обычно служит язык программирования высокого уровня — C, Python, Паскаль, Java, а выходным — машинные команды конкретного процессора, байт-код виртуальной машины или код другого языка.
Транслятор не следует путать с интерпретатором: интерпретатор выполняет программу по шагам, не создавая отдельного объектного файла, тогда как транслятор формирует результат преобразования как самостоятельный артефакт.
¶Классификация
По способу и назначению преобразования выделяют несколько основных типов.
- Компилятор — транслятор, который переводит всю программу целиком в машинный или промежуточный код до её выполнения. Результат компиляции — объектный модуль, который затем компонуется в исполняемый файл.
- Ассемблер — транслятор с языка ассемблера, где команды записаны мнемониками, в машинные коды. Ассемблер выполняет почти однозначное соответствие между инструкциями.
- Препроцессор — промежуточный транслятор, обрабатывающий директивы и макросы до основной компиляции.
- Кросс-транслятор — инструмент, работающий на одной платформе, но порождающий код для другой (например, компиляция под мобильное устройство на настольном компьютере).
- Транспайлер — транслятор между языками одного уровня абстракции, например из TypeScript в JavaScript.
- Декомпилятор — обратный транслятор, восстанавливающий код высокого уровня из машинного.
По числу проходов различают однопроходные и многопроходные трансляторы; по способу анализа — трансляторы с рекурсивным спуском, табличные, с использованием автоматов.
¶Устройство и этапы работы
Классический транслятор выполняет преобразование в несколько последовательных фаз.
- Лексический анализ — исходный текст разбивается на элементарные единицы (лексемы): идентификаторы, ключевые слова, числа, операторы.
- Синтаксический анализ — из лексем строится дерево разбора, проверяется соответствие грамматике языка.
- Семантический анализ — проверяются типы, области видимости, корректность объявлений.
- Генерация промежуточного кода — строится внутреннее представление, часто в виде трехадресного кода или байт-кода.
- Оптимизация — устраняются избыточные вычисления, сокращается объём и время исполнения.
- Генерация объектного кода — формируются машинные команды целевой платформы.
На каждом этапе транслятор формирует сообщения об ошибках, указывая место и характер нарушения. Качество диагностики — важная характеристика инструмента.
¶История развития
Идея автоматического перевода программ возникла в 1950-х годах вместе с первыми языками высокого уровня. Первый компилятор языка Фортран был создан в корпорации IBM под руководством Джона Бэкуса в 1957 году. В СССР работы по трансляции велись в Институте точной механики и вычислительной техники; в 1950–1960-е годы были разработаны трансляторы для машин серии БЭСМ и Минск, а также система ППС (пусковая программа-система). Язык Алгол-60 стимулировал создание формальных методов описания грамматик, что привело к появлению теории формальных языков и автоматов. В дальнейшем появились оптимизирующие компиляторы, а с 1990-х — среды, объединяющие транслятор с редактором, отладчиком и сборщиком.
¶Применение
Трансляторы используются повсеместно в разработке программного обеспечения. Компиляторы языков C, C++, Rust, Go применяются для создания системных и прикладных программ. Трансляторы в байт-код лежат в основе платформ Java и .NET. Транспайлеры обеспечивают совместимость веб-технологий. Кросс-трансляторы необходимы при разработке встраиваемых систем, микроконтроллеров и мобильных приложений. Отдельное направление — трансляция между языками описания аппаратуры, применяемая при проектировании микросхем.
¶Значение и особенности
Транслятор повышает производительность труда программиста, освобождая его от ручного кодирования машинными командами, и снижает число ошибок. Эффективность транслятора оценивают по скорости компиляции, качеству оптимизации и объёму порождаемого кода. Современные компиляторы способны оптимизировать программы сложнее, чем это сделал бы человек вручную. Развитие технологий трансляции связано с созданием новых архитектур процессоров, параллельных вычислений и языков программирования.
Источники: учебники по системному программированию и теории компиляции, материалы по истории вычислительной техники, документация языков программирования.