Как называется программа которая переводит в машинные коды тексты программ и исполняет их

Транслятор — программа или техническое средство, выполняющее трансляцию программы.

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

Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком.

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

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

Существует несколько видов трансляторов.

  • Диалоговый транслятор — транслятор, обеспечивающий использование языка программирования в режиме разделения времени.
  • Синтаксически-ориентированный (синтаксически-управляемый) транслятор — транслятор, получающий на вход описание синтаксиса и семантики языка, текст на описанном языке и выполняющий трансляцию в соответствии с заданным описанием.
  • Однопроходной транслятор — транслятор, преобразующий исходный код при его однократном последовательном чтении (за один проход).
  • Многопроходной транслятор — транслятор, преобразующий исходный код после его нескольких чтений (за несколько проходов).
  • Оптимизирующий транслятор — транслятор, выполняющий оптимизацию создаваемого кода. См. оптимизирующий компилятор.
  • Тестовый транслятор — транслятор, получающий на вход исходный код и выдающий на выходе изменённый исходный код. Запускается перед основным транслятором для добавления в исходный код отладочных процедур. Например, транслятор с языка ассемблера может выполнять замену макрокоманд на код.
  • Обратный транслятор — транслятор, выполняющий преобразование машинного кода в текст на каком-либо языке программирования. См. дизассемблер, декомпилятор.

Реализации

Цель трансляции — преобразование текста с одного языка на язык, понятный адресату. При трансляции компьютерной программы адресатом может быть:

ИИ научили писать код | Copilot от GitHub и OpenAI

  • устройство — процессор (трансляция называется компиляцией);
  • программа — интерпретатор (трансляция называется интерпретацией).
  • компиляция;
  • в исполняемый код
  • в машинный код
  • в байт-код

Компиляция

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

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

Процесс компиляции, как правило, состоит из нескольких этапов:

Классификация языков программирования по поколениям и уровням. Что такое машинный код и ассемблер

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

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

  • по запросу пользователя в ядре операционной системы создаётся объект «процесс»;
  • загрузчик программ операционной системы выполняет следующие действия:
  • читает исполняемый файл;
  • загружает его в память;
  • загружает в память динамические библиотеки;
  • выполняет связывание машинного кода программы с динамическими библиотеками (динамическое связывание);
  • передаёт управление программе.
  • компиляция программы выполняется один раз;
  • наличие компилятора на устройстве, для которого компилируется программа, не требуется.
  • компиляция — медленный процесс;
  • при внесении изменений в исходный код, требуется повторная компиляция.

Ассемблер — компилятор, преобразующий текст с языка ассемблера на машинный язык. Язык ассемблера — язык, близкий к машинному языку, язык низкого уровня.

Интерпретация

Интерпретация — процесс чтения и выполнения исходного кода. Реализуется программой — интерпретатором.

Интерпретатор может работать двумя способами:

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

Этапы работы интерпретатора:

  • лексический анализ;
  • синтаксический анализ;
  • семантический анализ;
  • создание промежуточного представления кода (при чистой интерпретации не выполняется);
  • исполнение.

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

Чистая интерпретация применяется, обычно, для языков с простой структурой, например, языков сценариев, языков APL и Лисп.

Примеры интерпретаторов, создающих байт-код: Perl, PHP, Python, Erlang.

Достоинства интерпретаторов по сравнению с компиляторами:

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

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

  • низкая производительность (машинный код исполняется процессором, а интерпретируемый код — интерпретатором; машинный код самого интерпретатора исполняется процессором);
  • необходимость наличия интерпретатора на устройстве, на котором планируется интерпретация программы;
  • обнаружение ошибок синтаксиса на этапе выполнения (актуально для чистых интерпретаторов).

Сравнение чистого интерпретатора и интерпретатора, создающего байт-код:

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

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

Динамическая или JIT компиляция — трансляция, при которой исходный или промежуточный код преобразуется (компилируется) в машинный код непосредственно во время исполнения, «на лету» (англ. just in time, JIT). Компиляция каждого участка кода выполняется только один раз; скомпилированный код сохраняется в кеше и при необходимости используется повторно.

Достоинства динамической компиляции по сравнению с компиляцией:

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

Недостатки динамической компиляции по сравнению с компиляцией и чистой интерпретацией:

  • большая сложность реализации;
  • большие требования к ресурсам.

Динамическая компиляция хорошо подходит для веб-приложений.

Динамическая компиляция появилась и поддерживается в той или иной мере в реализациях Java, .NET Framework, Perl, Python.

Смешение понятий трансляции и интерпретации

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

Так как целью трансляции является, обычно, подготовка к интерпретации, эти процессы рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые» в зависимости от того, что преобладает при использовании языка: компиляция или интерпретация. Причём, практически все языки низкого уровня и третьего поколения, вроде ассемблера, Си или Модулы-2, являются компилируемыми, а более высокоуровневые языки, вроде Python или SQL — интерпретируемыми.

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

Более того, один и тот же язык программирования может и транслироваться, и интерпретироваться, и в обоих случаях должны присутствовать общие этапы анализа и распознавания конструкций и директив исходного языка. Это относится и к программным реализациям, и к аппаратным — так, процессоры семейства x86 перед исполнением инструкций машинного языка выполняют их декодирование, выделяя в опкодах поля операндов (указание регистров, адресов в памяти, констант), разрядности и т. п., а в процессорах Pentium с архитектурой NetBurst тот же самый машинный код перед сохранением во внутреннем кэше дополнительно транслируется в последовательность микроопераций.

    • Элеонора Мария Австрийская
    • Короткевич, Виктор Иванович
    • Коэн, Леонтина Тереза
    • Муравьёв, Павел Игнатьевич
    • 1255 год
    • Гротеск (Секретные материалы)
    • Республика Риу-Гранди
    • Бронированный грузовик Guinness
    • Перемотай это!
    • Лакоста, Ян

    Источник: stroi-archive.ru

    Трансляция — процесс перевода программы, из алгоритмического языка на машинный язык (в коды компьютера). Транслятор — программа-переводчик. ТРАНСЛЯЦИЯ. — презентация

    Презентация на тему: » Трансляция — процесс перевода программы, из алгоритмического языка на машинный язык (в коды компьютера). Транслятор — программа-переводчик. ТРАНСЛЯЦИЯ.» — Транскрипт:

    1 Трансляция — процесс перевода программы, из алгоритмического языка на машинный язык (в коды компьютера). Транслятор — программа-переводчик. ТРАНСЛЯЦИЯ КОМПИЛЯЦИЯИНТЕРПРЕТАЦИЯ

    Читайте также:
    Как запустить программу на нужном мониторе

    2 Program A1; var a, b, s: integer; Begin Write (введите а); Read (a); Write (введите b); Read (b); S:=a+b; Write (S=, S); End Транслятор – программа, которая преобразует программу, написанную на языке высокого уровня в программу, состоящую из машинных команд. Интерпретатор – переводит и выполняет программу построчно Компилятор – читает программу целиком, переводит и создает законченный вариант программы на машинном языке, который затем и выполняется

    3 Этапы трансляции КОМПИЛЯЦИЯ КОМПОНОВКА И ЗАГРУЗКА ВЫПОЛНЕНИЕ исходный модуль (*.c *.cpp *.pas) объектный модуль (*.obj) загрузочный модуль (*.exe) исходные данные результаты ошибки компоновка редактирование связей

    4 КОМПИЛЯЦИЯ И ИНТЕРПРЕТАЦИЯ Во время компиляции процесс трансляции и выполнения программы четко разделены во времени. В процессе интерпретации последовательно чередуются перевод инструкций языка в коды и их выполнение.

    5 КОМПИЛЯЦИЯ И ИНТЕРПРЕТАЦИЯ Сравнение: Компиляция выгодней по времени выполнения и расходуемой памяти. Интерпретация удобней для организации диалоговых программ и отладки.

    6 Что такое компилятор Компилятор – это программа, которая считывает текст программы, написанной на одном языке – исходном и переводит его в текст эквивалентной программы на другом языке – целевом. Если в исходном тексте программы имеются ошибки, компилятор сообщает о них пользователю.

    7 Место компилятора в программном обеспечении Компиляторы составляют существенную часть программного обеспечения ЭВМ. Это связано с тем, что языки высокого уровня стали основным средством разработки программ. Сегодня только очень малая часть программного обеспечения, требующая особой эффективности, разрабатывается с помощью ассемблеров. В настоящее время имеет применение довольно много языков программирования. Наряду с традиционными языками, такими, например, как Фортран, широкое распространение получили так называемые «универсальные» языки (Паскаль, Си, Модула-2, Ада и другие), а также некоторые специализированные (например, язык обработки списочных структур Лисп).

    8 Место компилятора в программном обеспечении Кроме того, большое распространение получили языки, связанные с узкими предметными областями, такие, как входные языки пакетов прикладных программ. Для ряда названных языков имеется довольно много реализаций. Так, на рынке программного обеспечения представлены десятки реализаций языков Паскаля, Модулы-2 или Си для ЭВМ типа IBM PC.

    9 Место компилятора в программном обеспечении С другой стороны, постоянно растущая потребность в новых компиляторах связана с бурным развитием архитектур ЭВМ. Это развитие идет по различным направлениям. Наряду с возникновением новых архитектур, совершенствуются старые архитектуры как в концептуальном отношении, так и по отдельным, конкретным параметрам.

    Это можно проиллюстрировать на примере микропроцессора Intel-80X86. Последовательные версии этого микропроцессора 8086, 80186, 80286, 80386, 80486, отличаются не только техническими характеристиками, но и, что более важно, новыми возможностями и, значит, изменением (расширением) системы команд. Естественно, это требует новых компиляторов (или модификации старых).

    10 Место компилятора в программном обеспечении В рамках традиционных последовательных машин развивается большое число различных направлений архитектур. Примерами могут служить архитектуры CISC, RISC. Такие ведущие фирмы, как Intel, Motorola, Sun, начинают переходить на выпуск машин с RISC- архитектурами.

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

    11 Место компилятора в программном обеспечении На рынке уже имеются десятки типов ЭВМ с параллельной архитектурой, начиная от супер-ЭВМ (Cray, CDC и другие), через рабочие станции (например, IBM RS/6000) и кончая персональными компьютерами (например, на основе микропроцессора I-860). Естественно, для каждой из новых машин создаются новые компиляторы для многих языков программирования. Здесь необходимо также отметить, что новые архитектуры требуют разработки совершенно новых подходов к созданию компиляторов, так что наряду с собственно разработкой компиляторов ведется и большая научная работа по созданию новых методов.

    12 Фазы компиляции Промежуточное представление Исходная программа Целевая программа Фаза анализа Фаза синтеза Компиляция состоит из двух этапов: анализ и синтез. На этапе анализа программа разбивается на составные части и создается ее промежуточное представление. На этапе синтеза по построенному внутреннему представлению генерируется исполняемый код.

    13 Структура компилятора Обобщенная структура компилятора и основные фазы компиляции показаны на рисунке. На начальной фазе лексического анализа входная программа, представляющая собой поток литер, разбивается на лексемы — слова в соответствии с определениями языка. Основными формализмами, лежащим в основе реализации лексических анализаторов, являются конечные автоматы и регулярные выражения. Лексический анализатор может работать в двух основных режимах: либо как подпрограмма, вызываемая синтаксическим анализатором для получения очередной лексемы, либо как полный проход, результатом которого является файл лексем.

    14 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа

    15 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа На этапе лексического анализа из входной строки выделяются лексемы – единицы исходного языка. ‘m’, ‘y’, ‘v’, ‘a’, ‘r’ myvar (идентификатор)

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

    17 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа На фазе синтаксического анализа и синтаксически управляемой трансляции анализируется иерархическая структура программы Если A, B – выражения, то A+B – выражение.

    18 Синтаксический анализатор Центральная задача синтаксического анализа — разбор структуры программы. Как правило, под структурой понимается дерево, соответствующее разбору в контекстно-свободной грамматике языка. В настоящее время чаще всего используется либо LL(1)-анализ (и его вариант — рекурсивный спуск), либо LR(1)-анализ и его варианты (LR(0), SLR(1), LALR(1) и другие). Рекурсивный спуск чаще используется при ручном программировании синтаксического анализатора, LR(1) — при использовании систем автоматического построения синтаксических анализаторов.

    19 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа На фазе синтаксического анализа и синтаксически управляемой трансляции анализируется иерархическая структура программы Если A, B – выражения, то A+B – выражение.

    20 Синтаксический анализатор Результатом синтаксического анализа является синтаксическое дерево со ссылками на таблицы объектов. Ошибки, связанные со структурой программы, также обнаруживаются в процессе синтаксического анализа. На этапе контекстного анализа выявляются зависимости между частями программы, которые не могут быть описаны контекстно-свободным синтаксисом. Это, в основном, связи «описание-использование», в частности, анализ типов объектов, анализ областей видимости, соответствие параметров, метки и другие. В процессе контекстного анализа таблицы объектов пополняются информацией об описаниях (свойствах) объектов.

    21 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа На фазе семантического анализа проверяется наличие семантических (смысловых) ошибок в исходной программе и накапливается информация о типах для следующей стадии – генерации промежуточного кода

    22 Семантический анализатор Основным формализмом, используемым при контекстном анализе, является аппарат атрибутных грамматик. Результатом контекстного анализа является атрибутированное дерево программы. Информация об объектах может быть как рассредоточена в самом дереве, так и сосредоточена в отдельных таблицах объектов. В процессе контекстного анализа также могут быть обнаружены ошибки, связанные с неправильным использованием объектов.

    23 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа Таблица символов представляет собой структуру данных, содержащую записи о каждом идентификаторе с полями для его атрибутов. Эта структура позволяет быстро найти, изменить или добавить информацию о любом идентификаторе

    24 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа На каждой фазе компиляции могут встретиться ошибки. Но, после их обнаружения, необходимо предпринять какие-то действия, чтобы продолжить компиляцию и выявить остальные ошибки

    25 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа После синтаксического и семантического анализа некоторые компиляторы генерируют явное промежуточное представление исходной программы, которое можно рассматривать как программу для абстрактной машины

    Читайте также:
    Самый сложный код программы

    26 Генератор промежуточного кода Затем программа может быть переведена во внутреннее представление. Это делается для целей оптимизации и/или удобства генерации кода. Еще одной целью преобразования программы во внутреннее представление является желание иметь переносимый компилятор. Тогда только последняя фаза (генерация кода) является машинно-зависимой. В качестве внутреннего представления может использоваться префиксная или постфиксная запись, ориентированный граф, тройки, четверки и другие способы.

    27 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа При оптимизации кода производятся попытки улучшить промежуточный код, чтобы получить более эффективный машинный код.

    28 Оптимизатор кода Оптимизации обычно делят на машинно-зависимые и машинно-независимые, локальные и глобальные. Определенная часть машинно-зависимой оптимизации выполняется на фазе генерации кода. Глобальная оптимизация пытается принять во внимание структуру всей программы, локальная — только небольших ее фрагментов. Глобальная оптимизация основывается на глобальном потоковом анализе, который выполняется на графе программы и представляет по существу преобразование этого графа. При этом могут учитываться такие свойства программы, как межпроцедурный анализ, межмодульный анализ, анализ областей жизни переменных и так далее.

    29 Устройство компилятора Лексический анализатор Синтаксический анализатор Семантический анализатор Генератор промежуточного кода Оптимизатор кода Генератор кода Диспетчер таблицы символов Обработчик ошибок Исходная программа Целевая программа Последняя фаза компиляции состоит в генерации целевого кода, обычно перемещаемого машинного кода или ассемблерного кода

    30 Генератор кода Наконец, генерация кода — последняя фаза трансляции. Результатом ее является либо ассемблерный модуль, либо объектный (или загрузочный) модуль. Для генерации кода разработаны различные методы, такие как таблицы решений, сопоставление образцов, включающее динамическое программирование, различные синтаксические методы. Конечно, те или иные фазы транслятора могут либо отсутствовать совсем, либо объединяться. В простейшем случае однопроходного транслятора нет явной фазы генерации промежуточного представления и оптимизации, остальные фазы объединены в одну, причем нет и явно построенного синтаксического дерева.

    32 В программировании, байт-код или байткод (англ. bytecode, иногда также используется термин псевдокод и p-code) это промежуточное представление, в которое может быть переведена компьютерная программа. По сравнению с исходным кодом, удобным для создания и чтения человеком, байт-код это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и т. п. С технической точки зрения, байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода. Многие современные языки программирования, особенно интерпретируемые, используют байт-код для облегчения и ускорения работы интерпретатора. Трансляция в байт-код является методом, промежуточным по эффективности между прямой интерпретацией и компиляцией в машинный код.

    34 По форме байт-код похож на машинный код, но предназначен для исполнения не реальным процессором, а виртуальной машиной. В качестве виртуальной машины обычно выступает интерпретатор соответствующего языка программирования. Байт-код называется так, потому что длина каждого кода операции традиционно составляет один байт. Каждая инструкция обычно представляет собой однобайтовый код операции (от 0 до 255), за которым могут следовать различные параметры, например, номер регистра или адрес в памяти.

    35 Распространены платформы, использующие байт-коды Байт-код Java (стековая виртуальная машина), исполняемый различными виртуальными машинами Java (англ. Java Virtual Machine, JVM). Платформа была создана компанией Sun для языка Java, но стала использоваться и для других языков; существуют десятки высокопроизводительных реализаций JVM, использующих JIT- компиляторы.

    Платформа Microsoft.NET использует стековый байт-код Intermediate Language (CIL, MSIL, исполняемый с помощью Common Language Runtime (CLR). Данная платформа была создана Microsoft для языков C# и других. Скриптовый язык JavaScript выполняется различными высокопроизводительными движками, в основном, встроенными в веб- браузеры, часто с возможностью JIT-оптимизации. Многие движки построены с применением байт-кода, однако программы на Javascript распространяются в виде исходных кодов. Скриптовый язык ActionScript транслируется в стековый байт-код, распространяется в составе swf и pdf файлов, и выполняется виртуальными машинами в Adobe Flash и Adobe Acrobat.

    Источник: www.myshared.ru

    Машинный код. Трансляторы, компиляторы, интерпретаторы.

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

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

    Трансляторы бывают двух типов — Интерпретаторы и Компиляторы.

    Интерпретатор переводит Вашу программу с языка высокого уровня (например, БЕЙСИКа) в машинный код последовательно строку за строкой. Он работает примерно так: прочитал строку, проверил, нет ли в ней ошибок, перевел ее в машинный код, выполнил команды машинного кода, запомнил, где нужно результат и перешел к следующей строке. Чтобы сделать, например, операцию

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

    Если же Вам позже придется вернуться к этой строке (например, с помощью GO TO 10), то все эти действия будут повторены.

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

    Таким образом, интерпретатор работает крайне медленно. Зато имеется возможность работы в диалоговом режиме. Так, на Бейсике, когда Вы набираете программу, каждая строка сразу же и проверяется на правильность синтаксиса и, если Вы сделаете ошибку, то строка не будет введена в программу нажатием клавиши ENTER до тех пор, пока Вы эту ошибку не устраните.

    Вы всегда можете прервать работу программы, внести изменения и стартовать опять, причем с той строки, с какой хотите. Работать с интерпретатором БЕЙСИКа настолько удобно для начинающих, что на многих моделях персональных ЭВМ, в том числе и на «ZX-Spectrum`е», он уже «зашит» в постоянное запоминающее устройство (ПЗУ) и служит не только языком программирования, но и выполняет функции операционной системы компьютера. При включении компьютера в сеть он сразу готов к выполнению команд БЕЙСИКа.

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

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

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

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

    Итак, программирование в машинном коде (на Ассемблере) позволяет повысить скорость работы программы по сравнению с работой через интерпретатор в 50…200 раз и в 1,5…3 раза по сравнению с кодом, прошедшим компиляцию. Это бывает чрезвычайно важно, если в программе есть многочисленные вложенные друг в друга циклы, если многократно выполняются поиск и выбор данных из обширных областей памяти. Много времени занимают операции, связанные с обработкой графических изображений на экране. Эффект плавного и быстрого перемещения (и изменения формы) объектов в компьютерных видеоиграх практически всегда создается программированием в машинном коде.

    Читайте также:
    Как самостоятельно изучить программу 1с торговля и склад

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

    Под транслятором понимают программу, переводящую текст на языке программирования (исходный текст) в форму, пригодную для исполнения, то есть на другой язык. Как правило (но далеко не всегда!), такой формой является последовательность машинных команд компьютера. Различают несколько типов трансляторов.

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

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

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

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

    Основные задачи компиляторов Задача транслятора (translator) сделать программу, написанную на некотором языке программирования, понятной компьютеру. Этого можно добиться одним из двух способов: компиляцией (compilation) или интерпретацией (interpretation). Программу, являющуюся входными данными транслятора, будем называть исходной программой (source program).

    Обычно язык, на котором написана исходная программа, — это язык высокого уровня (high-level language). Компилятор (compiler) переводит исходную программу в эквивалентную программу на языке, понятном компьютеру, то есть на машинном языке. Мы будем называть программу, получающуюся в результате работы компилятора, целевой программой (target program).

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

    Язык, на котором написан компилятор, будем называть языком реализации. Если мы обозначим язык, на котором написана исходная программа, то есть исходный язык (source language), L1, язык целевой программы (целевой язык – target language) L2, а язык реализации (implementation language) L3, то мы можем представить компилятор, как отображение множества L1 в множество L2 , т.е.

    1 2 : 3 KL L → L . Процесс компиляции состоит из двух частей: анализа (analysis) и синтеза (synthesis). Анализирующая часть компилятора разбивает исходную программу на составляющие ее элементы (конструкции языка – language constructions) и создает промежуточное представление исходной программы. Синтезирующая часть из промежуточного представления создает новую, целевую, программу.

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

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

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

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

    Практически во всех трансляторах (и в компиляторах, и в интерпретаторах) в том или ином виде присутствует большая часть перечисленных ниже процессов: лексический анализ; синтаксический анализ; семантический анализ; генерация внутреннего представления программы; оптимизация; генерация объектной программы. Транслятор — это программа, которая переводит входную программу на исход­ном (входном) языке в эквивалентную ей выходную программу на результирую­щем (выходном) языке.

    В работе транслятора уча­ствуют всегда три программы: 1) сам транслятор является программой обычно он входит в состав системного по вычислительной системы. То есть транс­лятор — это часть по. Он представляет собой на­бор машинных команд и данных и выполняется компьютером, как и все прочие программы в рамках ос.

    2)исходными данными для работы транслятора служит текст входной программы — некоторая последовательность предложений входного языка про­граммирования. Этот файл должен содержать текст программы, удовлетворяющий синтаксическим и семантическим требова­ниям входного языка. 3)выходными данными транслятора является текст результирующей программы.

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

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

    Результатом работы транслятора будет результирующая программа в том случае, если текст исходной программы является правильным — не со­держит ошибок с точки зрения синтаксиса и семантики входного языка. Если исходная программа неправильная, то резуль­татом работы транслятора будет сообщение об ошибке.

    Кроме понятия«транслятор» широко употребляется также близкое ему по смыс­лу понятие «компилятор». Компилятор — это транслятор, который осуществляет перевод исходной програм­мы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.т.о.

    Компилятор отличается от транслятора лишь тем, что его ре­зультирующая программа всегда должна быть написана на языке машинных ко­дов или на языке ассемблера. Результирующая программа компилятора называется «объектной программой» или «объектным кодом». Файл, в который она записана, обычно называется «объ­ектным файлом».

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

    Сейчас в современных системах программирования стали появляться компиляторы, в которых результирующая программа создается не на языке машинных команд и не на языке ассемблера, а на некотором промежуточном языке. Он не может непосредственно исполняться на компьюте­ре, а требует специального промежуточного интерпретатора, для выполнения написан­ных на нем программ.интерпретатор — это программа, которая воспринимает входную программу на исходном языке и выполняет ее.в отличие от трансляторов интерпретаторы не порождают результирующую про­грамму — и в этом принципиаль­ная разница между ними.

    Интерпретатор, так же как и транслятор, анализирует текст исходной программы. Но он не порождает результирующей программы, а сразу же выполняет исходную в соответствии с ее смыслом, заданным семанти­кой входного языка. Т.о, результатом работы интерпретатора будет некоторый желаемый рез-т(если программа правильна) или сообщение об ошибке.

    Чтобы исполнить исходную программу, интерпретатор должен преобразовать ее в язык машинных кодов. Полученные ма­шинные коды не доступны пользователю. Они порождаются интер-ом, исполняются и уничтожаются по мере надобности. Пользователь видит результат выполнения этих кодов — т.е результат выполнения исходной программы.

    Прокрутить вверх

    Не нашли, что искали? Воспользуйтесь поиском по сайту:

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

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