Транслятор это программа которая

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

Сущность понятия «транслятор». Виды трансляторов

Программу, которая написана на языке высокого уровня, перед применением необходимо преобразовать в программу на машинном языке, то есть в машинных кодах. Этот процесс носит название трансляции, или компиляции. По типу выходных данных существуют следующие основные виды трансляторов:

  1. Трансляторы, компилирующие окончательный исполняемый код.
  2. Трансляторы, компилирующие интерпретируемый код, для выполнения которого требуется дополнительное программное обеспечение.

Окончательным исполняемым кодом считаются приложения, которые реализованы как EXE-файлы, DLL-библиотеки, COM-компоненты. К интерпретируемому коду могут быть отнесены байт-коды JAVA-программ, исполняемых при посредстве виртуальной машины JVM.

Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

Урок 1. Часть 5. Что такое транслятор, компилятор, интерпретатор и байт-код

Языки, которые формируют окончательный исполняемый код, именуются компилируемыми языками. К ним относятся языки С, C++, FORTRAN, Pascal. Языки, которые реализуют интерпретируемый код, носят название интерпретируемых языков. К таким языкам могут быть отнесены языки Java, LISP, Perl, Prolog.

Практически всегда код, который получается в результате процесса трансляции, создаётся из набора программных модулей. Программным модулем является определенным образом сформированный код на языке высокого уровня. Процесс трансляции в таком случае может исполняться как единое целое, то есть как компиляция и редактирование связей, или как два раздельных этапа, а именно, вначале компиляция объектных модулей, а далее обращение к редактору связей, который создаёт итоговый код. Последний вариант считается более удобным для формирования программ. Его реализовали в трансляторах языков С и С++.

Объектный код, который создаётся компилятором, состоит из области данных и области машинных команд, обладающих адресами, далее согласуемых редактором связи (иногда именуемым). Редактор связи распределяет в едином адресном пространстве все, по отдельности, откомпилированные, объектные модули и разные, подключаемые статически, библиотеки. Исполняемой формой программы является код, получаемый в результате трансляции исходной программы.

«Трансляторы: определение, назначение, виды. Основные этапы трансляции программы»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

Процесс трансляции

Программа, которая написана на языке программирования высокого уровня, называется исходной программой, а каждая самостоятельная программная единица, входящая в состав данной программы, называется программным модулем. Для того чтобы преобразовать исходную программу в её исполняемую форму (исполняемый файл) транслятор должен выполнить определённую последовательность действий. Данная последовательность определяется как языком программирования, так конкретной реализацией самого транслятора. В процессе трансляции нужно не просто осуществить компиляцию программы, а сформировать при этом достаточно эффективный код.

5. Трансляторы

При реализации трансляции осуществляется анализ исходной программы, а затем синтез исполняемой формы этой программы. В зависимости от количества просмотров исходной программы, исполняемых компилятором, трансляторы подразделяются на следующие типы:

  1. Трансляторы однопроходного типа.
  2. Трансляторы двухпроходного типа.
  3. Трансляторы, выполняющие более двух проходов.

Основным достоинством однопроходного компилятора считается высокая скорость компиляции, а главным недостатком является формирование, как правило, не очень эффективного кода.

Широко распространены двухпроходные компиляторы, поскольку они дают возможность на первом проходе осуществить анализ программы и сформировать информационные таблицы, которые используются при втором проходе для создания объектного кода.

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

Рисунок 1. Этапы трансляции. Автор24 — интернет-биржа студенческих работ

Фаза анализа программы включает в свой состав следующие шаги:

  1. Лексический анализ.
  2. Синтаксический анализ.
  3. Семантический анализ.

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

На этапе лексического анализа реализуется выделение главных составных компонентов программы, называемых лексемами. Лексемами считаются ключевые слова, идентификаторы, символы операций, комментарии, пробелы и разделители. Лексический анализатор осуществляет выделение лексем, а также определение типа каждой лексемы. Причём на этапе лексического анализа формируется таблица символов, в которой все идентификаторы получают свои адреса. Это даёт возможность в ходе дальнейшего анализа вместо конкретного значения (строки символов) применять его адрес в таблице символов.

Читайте также:
Программа меркурий как в ней работать видео

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

При реализации семантического анализа осуществляется обработка синтаксических элементов (единиц) и формирование промежуточного кода. В зависимости от того, присутствует или отсутствует фаза оптимизации, итогом семантического анализа могут являться промежуточный код или уже окончательно сформированный объектный модуль.

Наиболее общими задачами, решаемыми семантическим анализатором, считаются следующие задачи:

  1. Нахождение ошибок времени компиляции.
  2. Заполнение таблицы символов, которая была создана на этапе лексического анализа, определёнными значениями, несущими дополнительные информационные данные о каждом элементе таблицы.
  3. Выполнение замены макросов их определениями.
  4. Реализация директив времени компиляции.

Источник: spravochnick.ru

Транслятор это программа которая

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

1) GCC
2) Free Pascal Compiler
3) Компиляторы C , C ++ и Fortran от Sun Microsystems Inc .
4) Watcom Fortran/C++ Compiler
5) Intel C++/Fortran compiler
6) ICC AVR.

Компилятор обеспечивает преобразование программы с одного языка на другой. Команды исходного языка сильно отличаются по организации и мощности, нежели команды машинного языка. Бывают такие, в которых одна команда исходного языка транслируется в 7-10 машинных команд.

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

Интерпретатор (англ. interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы.

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

Кроме того, отсутствие выходного машинного кода позволяет не «захламлять» внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.

Источник: www.sites.google.com

Транслятор – это. Виды трансляторов. Преобразование и трансляция программы

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

Основные понятия

Программа представляет собой лингвистическое представление вычислений: i → P → P(i). Интерпретатор представляет собой программу, на вход которой подается программа Р и некоторые входные данные x. Он выполняет P на х: I(P, x) = P(x). Тот факт, что существует единственный транслятор, способный выполнять все возможные программы (которые можно представить в формальной системе), является очень глубоким и значительным открытием Тьюринга.

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

Некоторые виды трансляторов имеют очень странные имена:

  • Ассемблер транслирует программы на ассемблере в машинный язык.
  • Компилятор транслирует с языка высокого уровня на язык более низкого.

Транслятор – это программа, которая принимает в качестве входных данных программу на некотором языке S и выдает программу на языке T таким образом, что обе они имеют ту же семантику: P → X → Q. То есть, ∀x. P(х) = Q(х).

Читайте также:
Что такое интерактивная программа мероприятия

транслятор это

Если транслировать всю программу в нечто интерпретируемое, то это называется компиляцией перед исполнением, или АОТ-компиляцией. АОТ-компиляторы могут использоваться последовательно, последний из которых часто является ассемблером, например:

Исходный код → Компилятор (транслятор) → Ассемблерный код → Ассемблер (транслятор) → Машинный код → ЦПУ (интерпретатор).

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

Многие языки позволяют выполнять код во время трансляции и компилировать новый код во время выполнения программы.

Этапы трансляции

Трансляция состоит из этапов анализа и синтеза:

Исходный код → Анализатор → Концептуальное представление → Генератор (синтезатор) → Целевой код.

Это обусловлено такими причинами:

  • Любой другой способ не подходит. Пословный перевод просто не работает.
  • Хорошее инженерное решение: если нужно написать трансляторы для M исходных языков и N целевых, потребуется написать только M + N простых программ (полукомпиляторов), а не M × N комплексных (полных трансляторов).

виды трансляторов

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

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

Запись транслятора

Транслятор – это программа или техническое средство, в котором задействованы три языка: исходный, целевой и базисный. Их можно записать в Т-форме, расположив исходный слева, целевой справа и базисный ниже.

Существует три вида компиляторов:

  • Транслятор – это самокомпилятор, если у него исходный язык соответствует базисному.
  • Компилятор, у которого целевой язык равен базисному, называется саморезидентным.
  • Транслятор – это кросс-компилятор, если у него целевой и базисный языки различные.

трансляция программы

Почему это важно?

Даже если вы никогда не сделаете настоящий компилятор, хорошо знать о технологии его создания, потому что используемые для этого концепции применяются повсеместно, например в:

  • форматировании текстов;
  • языках запросов к базам данных;
  • расширенных компьютерных архитектурах;
  • обобщенных задачах оптимизации;
  • графических интерфейсах;
  • языках сценариев;
  • контроллерах;
  • виртуальных машинах;
  • машинных переводах.

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

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

Всеобъемлющая технология

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

  • формальную теорию языка: грамматику, парсинг, вычислимость;
  • компьютерную архитектуру: наборы инструкций, RISC или CISC, конвейерную обработку, ядра, тактовые циклы и т.д.;
  • концепции языков программирования: например, управление последовательностью выполнения, условное выполнение, итерации, рекурсии, функциональное разложение, модульность, синхронизацию, метапрограммирование, область видимости, константы, подтипы, шаблоны, тип вывода, прототипы, аннотации, потоки, монады, почтовые ящики, продолжения, групповые символы, регулярные выражения, транзакционную память, наследование, полиморфизм, режимы параметров и т. д.;
  • абстрактные языки и виртуальные машины;
  • алгоритмы и структуры данных: регулярные выражения, алгоритмы парсинга, графические алгоритмы, динамическое программирование, обучение;
  • языки программирования: синтаксис, семантику (статическую и динамическую), поддержку парадигм (структурной, ООП, функциональной, логической, стековой, параллелизма, метапрограммирования);
  • создание ПО (компиляторы, как правило, крупные и сложные): локализацию, кэширование, компонентизацию, API-интерфейсы, повторное использование, синхронизацию.

преобразование программы

Проектирование компилятора

Некоторые проблемы, возникающие при разработке реального транслятора:

  • Проблемы с исходным языком. Легко ли его скомпилировать? Есть ли препроцессор? Как обрабатываются типы? Имеются ли библиотеки?
  • Группировка проходов компилятора: одно- или многоходовая?
  • Степень желательной оптимизации. Быстрая и нечистая трансляция программы практически без оптимизации может быть нормальной. Чрезмерная оптимизация будет тормозить компилятор, но лучший код во время выполнения может того стоить.
  • Требуемая степень обнаружения ошибок. Может ли транслятор просто остановиться на первой ошибке? Когда он должен остановиться? Доверить ли компилятору исправление ошибок?
  • Наличие инструментов. Если исходный язык не является очень маленьким, сканер и генератор анализаторов являются обязательными. Также существуют генераторы генераторов кода, но они не так распространены.
  • Вид целевого кода для генерации. Следует выбирать из чистого, дополненного или виртуального машинного кода. Или просто написать входную часть, создающую популярные промежуточные представления, такие как LLVM, RTL или JVM. Или сделать трансляцию от исходного в исходный код на C или JavaScript.
  • Формат целевого кода. Можно выбрать язык ассемблера, переносимый машинный код, машинный код образа памяти.
  • Перенацеливание. При множестве генераторов хорошо иметь общую входную часть. По этой же причине лучше иметь один генератор для многих входных частей.
Читайте также:
Программа как взломать wow

динамическая компиляция

Архитектура компилятора: компоненты

Это главные функциональные компоненты транслятора, генерирующего машинный код (если выходной программой является программа на С или виртуальная машина, то потребуется не так много этапов):

  • Входная программа (поток знаков) поступает в сканер (лексический анализатор), который преобразует ее в поток токенов.
  • Парсер (синтаксический анализатор) строит из них абстрактное синтаксическое дерево.
  • Семантический анализатор раскладывает семантическую информацию и проверяет узлы дерева на ошибки. В результате строится семантический граф – абстрактное синтаксическое дерево с дополнительными свойствами и установленными ссылками.
  • Генератор промежуточного кода строит граф потока (кортежи группируются в основные блоки).
  • Машинонезависимый оптимизатор кода проводит как локальную (внутри базового блока), так и глобальную (по всем блокам) оптимизацию, в основном оставаясь в рамках подпрограмм. Сокращает избыточный код и упрощает вычисления. В результате получается модифицированный граф потока.
  • Генератор целевого кода связывает базовые блоки в прямолинейный код с передачей управления, создавая объектный файл на ассемблере с виртуальными регистрами (возможно, неэффективными).
  • Машинозависимый оптимизатор-компоновщик распределяет память между регистрами и производит планирование команд. Осуществляет преобразование программы на ассемблере в настоящий ассемблер с хорошим использованием конвейерной обработки.

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

объектный файл

Лексический анализ (сканирование)

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

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

Ошибки, которые могут встретиться при сканировании, называются лексическими и включают:

  • символы, отсутствующие в алфавите;
  • превышение числа знаков в слове или строке;
  • не закрытый знак или строковый литерал;
  • конец файла в комментарии.

Синтаксический анализ (парсинг)

Парсер преобразует последовательность токенов в абстрактное синтаксическое дерево. Каждый узел дерева сохраняется как объект с именованными полями, многие из которых сами являются узлами дерева. На этом этапе циклы отсутствуют. При создании парсера необходимо обратить внимание на уровень сложности грамматики (LL или LR) и выяснить, есть ли какие-либо правила снятия неоднозначности. Некоторые языки действительно требуют проведения семантического анализа.

Ошибки, встречающиеся на этом этапе, называются синтаксическими. Например:

  • k = 5 * (7 – y;
  • j = /5;
  • 56 = x * 4.

Семантический анализ

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

Очевидно, что набор правил допустимости у разных языков различный. Если компилируются Java-подобные языки, трансляторы могут найти:

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

входная программа

Генерация

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

Генерация кода производит реальный машинный код. В традиционных компиляторах для RISC-машин на первом этапе создается ассемблер с бесконечным числом виртуальных регистров. Для CISC-машин, вероятно, этого не произойдет.

Источник: fb.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru