транслятор — это… Что такое транслятор?
Транслятор — в широком смысле программа, преобразующая текст, написанный на одном языке, в текст на другом языке. Транслятор в узком смысле программа, преобразующая: программу, написанную на одном (входном) языке в программу, представленную на другом… … Финансовый словарь
ТРАНСЛЯТОР — [англ. translators Словарь иностранных слов русского языка
транслятор — преобразователь, транслирующая программа; телетранслятор, компилятор Словарь русских синонимов. транслятор сущ., кол во синонимов: 6 • компилятор (5) • … Словарь синонимов
транслятор — Программа или техническое средство, выполняющие трансляцию программы. Примечание На транслятор обычно возлагаются функции диагностики ошибок, формирования словарей идентификаторов, выдачи для печати текстов программ и т.д. [ГОСТ 19781 90]… … Справочник технического переводчика
ТРАНСЛЯТОР
ТРАНСЛЯТОР — в информатике (компилятор) программа ЭВМ, предназначенная для автоматического перевода описания алгоритма с одного языка программирования на другой, в частности на машинный язык … Большой Энциклопедический словарь
транслятор — транслятор; отрасл. программирующая программа; компилятор Программа перевода записи алгоритма с одного алгоритмического языка на другой (в частности, на язык вычислительной машины) … Политехнический терминологический толковый словарь
Транслятор — в информатике (компилятор), программа ЭВМ, предназначенная для автоматического перевода описания алгоритма с одного языка программирования на другой, в частности на машинный язык. Является частью базового программного обеспечения ЭВМ, одно из… … Иллюстрированный энциклопедический словарь
ТРАНСЛЯТОР — программа ЭВМ, предназначенная для автоматического перевода текста программы с одного формального языка (см.) на др. или с конкретного языка программирования на машинный язык. Первый из этих языков называют входным, второй выходным. Т. является… … Большая политехническая энциклопедия
Транслятор — Эта статья о языках программирования; о естественных языках см.: Перевод. Эта статья включает описание термина «Трансляция»; см. также другие значения. Транслятор программа или техническое средство, выполняющее трансляцию программы.[1][2]… … Википедия
Транслятор — 38. Транслятор Translator Программа или техническое средство, выполняющие трансляцию программы. Примечание. На транслятор обычно возлагаются функции диагностики ошибок, формирования словарей идентификаторов, выдачи для печати текстов программ и т … Словарь-справочник терминов нормативно-технической документации
6.10. Что такое транслятор, компилятор, интерпретатор?
Транслятор (англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд.
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
Компилятор (англ. compiler — составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
Интерпретатор (англ. interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.
После того, как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном запуске программы.
Откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и изменять. |
Каждый
конкретный язык ориентирован либо на компиляцию, либо на интерпретацию
— в зависимости от того, для каких целей он создавался. Например, Паскаль
обычно используется для решения довольно сложных задач, в которых важна
скорость работы программ. Поэтому данный язык обычно реализуется с
помощью
С другой стороны, Бейсик создавался как язык для начинающих программистов, для которых построчное выполнение программы имеет неоспоримые преимущества.
Иногда для одного языка имеется и компилятор, и интерпретатор. В этом случае для разработки и тестирования программы можно воспользоваться интерпретатором, а затем откомпилировать отлаженную программу, чтобы повысить скорость ее выполнения.
Использование трансляторов и интерпретаторов на разных уровнях
Исходный код программы – код, написанный на языке программирования.
Объектный модуль – код программы после трансляции, преобразованный в машинные коды.
Трансляция – получение объектного кода из исходного.
При программировании на языке высокого уровня обычно реализуется одна из процедур.
1. Сначала с помощью программы-редактора создается текстовый файл, представляющий собой исходную программу на языке высокого уровня. После этого вызывается программа-компилятор, которая преобразует исходную программу в файл машинного кода, т.е. образуется еще один файл. При выполнении программы действует файл машинного кода.
2. Программист вводит текстовый файл в память машины и вызывает программу-интерпретатор, которая преобразует каждый оператор программы в машинный код и сразу выполняет его. Отдельный файл машинного кода не создается. Следовательно, при каждом выполнении программы она преобразуется в машинный код. Реализация интерпретируемой программы длится гораздо дольше, чем компилированной, так как формирование машинного кода производится при каждом выполнении программы.
Компилятор – программа, обеспечивающая перевод с языка высокого уровня на машинный без одновременного выполнения получаемой программы.
Интерпретатор – программа, обеспечивающая перевод с языка высокого уровня на машинный с одновременным выполнением операторов программы.
Компилятор и интерпретатор обычно являются довольно сложными программами, которые воспринимают программу на исходном языке в форме текста, устанавливают внутреннюю структуру заданной программы, проверяя при этом ее синтаксическую корректность (синтаксический анализ), и переводят программу на другой (объектный) язык или выполняют эту программу путем соответствующих действий.
При синтаксическом анализе исходная программа проверяется на грамматическую корректность, и из исходной программы строится ее древовидное внутреннее представление. Это дерево проверяется на соблюдение ряда дополнительных правил, называемых контекстными условиями, и снабжается при этом атрибутами.
Компилятор в ходе семантической обработки из атрибутированного дерева (обычно за несколько промежуточных шагов и снова с применением техники атрибутирования) строит объектную программу. Структура части компилятора для семантического анализа исходя из синтаксического дерева представлена на рис. 5.1.
Рис. 5.1. Фазовая модель для компиляции
Фаза оптимизации при этом может быть опущена.
Структура части интерпретатора для семантической обработки исходной программы представлена на рис. 5.2.
Компилятор и интерпретатор могут быть структурированы и совсем иначе, чем это описано выше, из-за того, что отдельные фазы синтаксического анализа и, соответственно, компиляции и интерпретации могут быть объединены. Компиляция и интерпретация могут также комбинироваться: если, например, программа компилируется на промежуточный язык, а полученная программа далее интерпретируется.
Рис. 5.2. Фазовая модель для интерпретации
Корректность компиляторов и интерпретаторов имеет фундаментальное значение: для верифицированной, корректной программы, которая переводится неверифицированным, некорректным компилятором или выполняется некорректным интерпретатором, ее надежность, достигнутая при верификации, снова теряется.
В трансляторах, создаваемых для практического использования, существенное место занимают диагностика ошибок и их анализ. Специальная методика позволяет исправлять простые синтаксические ошибки и при обнаружении ошибки не прекращать процесс синтаксического анализа, а продолжать обработку остальных частей программы. Большие программы целесообразно не компилировать целиком, а независимо друг от друга переводить как отдельные составные части (раздельная трансляция). Оттранслированные части (объекты связывания, объекты монтажа) с помощью специальной программы (компоновщик) объединяются в единую выполняемую программу.
Эффективность программы, порожденной компилятором, зависит от эффективности исходной программы и качества кода, сгенерированного компилятором. Код, непосредственно порождаемый компилятором, в силу ряда обстоятельств не очень эффективен. Это, в частности, имеет место, когда исходный и объектный языки существенно отличаются друг от друга. Это может также быть следствием некачественного составления исходной программы. На практике эффективность порождаемой программы может быть улучшена непосредственно в процессе компиляции с помощью специальной фазы оптимизации.
Процессор
Под архитектурой процессора понимается его программная модель, то есть программно-видимые свойства.
Программная модель процессора — это функциональная модель, используемая программистом при разработке программ в кодах ЭВМ или на языке ассемблера. В такой модели игнорируются многие аппаратные особенности в работе процессора.
Под микроархитектурой понимается аппаратная реализация этой программной модели. Для одной и той же архитектуры разными фирмами и в разных поколениях применяются существенно различные микроархитектурные реализации, при этом, естественно, стремятся к максимальному повышению производительности (скорости исполнения программ).
В состав микропроцессора (МП) входят арифметико-логическое устройство (АЛУ), устройство управления (УУ) и группа регистров (рис. 1).
Рис. 1. Состав микропроцессора
Статьи к прочтению:
посылка из китая,фм транслятор
Похожие статьи:
SoftCraft: разработка трансляторов (конспект лекций)
[ содержание | следующая тема ]
Содержание темы
Цели и задачи дисциплины. Основные понятия и определения. Общие особенности языков программирования и трансляторов. Обобщенная структура транслятора. Варианты взаимодействия блоков транслятора.
Цели и задачи дисциплины
В настоящее время искусственные языки, использующие для описания предметной области текстовое представление, широко применяются не только в программировании, но и в других областях. С их помощью описывается структура всевозможных документов, трехмерных виртуальных миров, графических интерфейсов пользователя и многих других объектов, используемых в моделях и в реальном мире. Для того, чтобы эти текстовые описания были корректно составлены, а затем правильно распознаны и интерпретированы, используются специальные методы их анализа и преобразования. В основе методов лежит теория языков и формальных грамматик, а также теория автоматов. Программные системы, предназначенные для анализа и интерпретации текстов, называются трансляторами.
Несмотря на то, что к настоящему времени разработаны тысячи различных языков и их трансляторов, процесс создания новых приложений в этой области не прекращается. Это связно как с развитием технологии производства вычислительных систем, так и с необходимостью решения все более сложных прикладных задач. Кроме того, элементы теории языков и формальных грамматик применимы и в других разнообразных областях, например, при описании структур данных, файлов, изображений, представленных не в текстовом, а двоичном формате. Эти методы полезны и при разработке своих трансляторов даже там, где уже имеются соответствующие аналоги. Такая разработка может быть обусловлена различными причинами, в частности, функциональными ограничениями, отсутствием локализации, низкой эффективностью. Например, одной из последних разработок компании Microsoft является язык программирования C#, а одной из причин его создания является стремление к снижению популярности языка программирования Java. Можно привести множество других примеров, когда разработка своего транслятора может оказаться актуальной. Поэтому, основы теории языков и формальных грамматик, а также практические методы разработки трансляторов лежат в фундаменте инженерного образования по информатике и вычислительной технике.
Предлагаемый материал затрагивает основы методов разработки трансляторов и содержит сведения, необходимые для изучения логики их функционирования, используемого математического аппарата (теории формальных языков и формальных грамматик, метаязыков). Он используется в рамках семестровых лекционных курсов, читаемых для различных специальностей, на факультете информатики и вычислительной техники Красноярского государственного технического университета. В ходе лабораторных работ осуществляется непосредственное знакомство с отдельными методами создания трансляторов.
Цель дисциплины: предоставить знания по основам теории языков и формальных грамматик, теории автоматов, методам разработки трансляторов.
Для достижения поставленной цели в ходе преподавания дисциплины решаются следующие задачи:
- В ходе лекционного курса рассматриваются общие принципы организации процесса трансляции и структуры трансляторов. Изучаются основы теории построения трансляторов.
- На лабораторных занятиях и в ходе самостоятельной работы осуществляется практическое закрепление полученных теоретических знаний: разрабатывается транслятор для простого языка программирования.
Основные понятия и определения
Большинство рассматриваемых определений заимствовано из [АРНФТСАнгло-русско-немецко-французский толковый словарь по вычислительной технике и обработке данных, 4132 термина. Под. ред. А.А. Дородницына. М.: 1978. 416 с.)].
Транслятор — обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.
Приведенное определение относится ко всем разновидностям транслирующих программ. Однако у каждой из таких программ могут иметься свои особенности по организации процесса трансляции. В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы.
Ассемблер — системная обслуживающая программа, которая преобразует символические конструкции в команды машинного языка. Специфической чертой ассемблеров является то, что они осуществляют дословную трансляцию одной символической команды в одну машинную. Таким образом, язык ассемблера (еще называется автокодом) предназначен для облегчения восприятия системы команд компьютера и ускорения программирования в этой системе команд. Программисту гораздо легче запомнить мнемоническое обозначение машинных команд, чем их двоичный код. Поэтому, основной выигрыш достигается не за счет увеличения мощности отдельных команд, а за счет повышения эффективности их восприятия.
Компилятор — это обслуживающая программа, выполняющая трансляцию на машинный язык программы, записанной на исходном языке программирования. Также как и ассемблер, компилятор обеспечивает преобразование программы с одного языка на другой (чаще всего, в язык конкретного компьютера). Вместе с тем, команды исходного языка значительно отличаются по организации и мощности от команд машинного языка. Существуют языки, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Однако есть и такие языки, в которых каждой команде может соответствовать 100 и более машинных команд (например, Пролог). Кроме того, в исходных языках достаточно часто используется строгая типизация данных, осуществляемая через их предварительное описание. Программирование может опираться не на кодирование алгоритма, а на тщательное обдумывание структур данных или классов. Процесс трансляции с таких языков обычно называется компиляцией, а исходные языки обычно относятся к языкам программирования высокого уровня (или высокоуровневым языкам). Абстрагирование языка программирования от системы команд компьютера привело к независимому созданию самых разнообразных языков, ориентированных на решение конкретных задач. Появились языки для научных расчетов, экономических расчетов, доступа к базам данных и другие.
Интерпретатор — программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы. Но интерпретатор позволяет начать обработку данных после написания даже одной команды. Это делает процесс разработки и отладки программ более гибким. Кроме того, отсутствие выходного машинного кода позволяет не «захламлять» внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.
Эмулятор — программа или программно-техническое средство, обеспечивающее возможность без перепрограммирования выполнять на данной ЭВМ программу, использующую коды или способы выполнения операция, отличные от данной ЭВМ. Эмулятор похож на интерпретатор тем, что непосредственно исполняет программу, написанную на некотором языке. Однако, чаще всего это машинный язык или промежуточный код. И тот и другой представляют команды в двоичном коде, которые могут сразу исполняться после распознавания кода операций. В отличие от текстовых программ, не требуется распознавать структуру программы, выделять операнды.
Эмуляторы используются достаточно часто в самых различных целях. Например, при разработке новых вычислительных систем, сначала создается эмулятор, выполняющий программы, разрабатываемые для еще несуществующих компьютеров. Это позволяет оценить систему команд и наработать базовое программное обеспечение еще до того, как будет создано соответствующее оборудование.
Очень часто эмулятор используется для выполнения старых программ на новых вычислительных машинах. Обычно новые компьютеры обладают более высоким быстродействием и имеют более качественное периферийное оборудование. Это позволяет эмулировать старые программы более эффективно по сравнению с их выполнением на старых компьютерах. Примером такого подхода является разработка эмуляторов домашнего компьютера ZX Spectrum с микропроцессором Z80. До сих пор находятся любители поиграть на эмуляторе в устаревшие, но все еще не утратившие былой привлекательности, игровые программы. Эмулятор может также использоваться как более дешевый аналог современных компьютерных систем, обеспечивая при этом приемлемую производительность, эквивалентную младшим моделям некоторого семейства архитектур. В качестве примера можно привести эмуляторы IBM PC совместимых компьютеров, реализованные на более мощных компьютерах фирмы Apple. Ряд эмуляторов, написанных для IBM PC, с успехом заменяют различные игровые приставки.
Эмулятор промежуточного представления, как и интерпретатор, могут легко переноситься с одной компьютерной архитектуры на другую, что позволяет создавать мобильное программное обеспечение. Именно это свойство предопределило успех языка программирования Java, с которого программа транслируется в промежуточный код. Исполняющая этот код виртуальная Java машина, является ни чем иным как эмулятором, работающим под управлением любой современной операционной системы.
Перекодировщик — программа или программное устройство, переводящие программы, написанные на машинном языке одной ЭВМ в программы на машинном языке другой ЭВМ. Если эмулятор является менее интеллектуальным аналогом интерпретатора, то перекодировщик выступает в том же качестве по отношению к компилятору. Точно также исходный (и обычно двоичный) машинный код или промежуточное представление преобразуются в другой аналогичный код по одной команде и без какого-либо общего анализа структуры исходной программы. Перекодировщики бывают полезны при переносе программ с одних компьютерных архитектур на другие. Они могут также использоваться для восстановления текста программы на языке высокого уровня по имеющемуся двоичному коду.
Макропроцессор — программа, обеспечивающая замену одной последовательности символов другой [Браун]. Это разновидность компилятора. Он осуществляет генерацию выходного текста путем обработки специальных вставок, располагаемых в исходном тексте. Эти вставки оформляются специальным образом и принадлежат конструкциям языка, называемого макроязыком. Макропроцессоры часто используются как надстройки над языками программирования, увеличивая функциональные возможности систем программирования. Практически любой ассемблер содержит макропроцессор, что повышает эффективность разработки машинных программ. Такие системы программирования обычно называются макроассемблерами.
Макропроцессоры используются и с языками высокого уровня. Они увеличивают функциональные возможности таких языков как PL/1, C, C++. Особенно широко макропроцессоры применяются в C и C++, позволяя упростить написание программ. Примером широкого использования макропроцессоров является библиотека классов Microsoft Foundation Classes (MFC). Через макровставки в ней реализованы карты сообщений и другие программные объекты. При этом, макропроцессоры повышают эффективность программирования без изменения синтаксиса и семантики языка.
Синтаксис — совокупность правил некоторого языка, определяющих формирование его элементов. Иначе говоря, это совокупность правил образования семантически значимых последовательностей символов в данном языке. Синтаксис задается с помощью правил, которые описывают понятия некоторого языка. Примерами понятий являются: переменная, выражение, оператор, процедура. Последовательность понятий и их допустимое использование в правилах определяет синтаксически правильные структуры, образующие программы. Именно иерархия объектов, а не то, как они взаимодействуют между собой, определяются через синтаксис. Например, оператор может встречаться только в процедуре, а выражение в операторе, переменная может состоять из имени и необязательных индексов и т.д. Синтаксис не связан с такими явлениями в программе как «переход на несуществующую метку» или «переменная с данным именем не определена». Этим занимается семантика.
Семантика — правила и условия, определяющие соотношения между элементами языка и их смысловыми значениями, а также интерпретацию содержательного значения синтаксических конструкций языка. Объекты языка программирования не только размещаются в тексте в соответствии с некоторой иерархией, но и дополнительно связаны между собой посредством других понятий, образующих разнообразные ассоциации. Например, переменная, для которой синтаксис определяет допустимое местоположение только в описаниях и некоторых операторах, обладает определенным типом, может использоваться с ограниченным множеством операций, имеет адрес, размер и должна быть описана до того, как будет использоваться в программе.
Синтаксический анализатор — компонента компилятора, осуществляющая проверку исходных операторов на соответствие синтаксическим правилам и семантике данного языка программирования. Несмотря на название, анализатор занимается проверкой и синтаксиса, и семантики. Он состоит из нескольких блоков, каждый из которых решает свои задачи. Более подробно будет рассмотрен при описании структуры транслятора.
Общие особенности языков программирования и трансляторов
Языки программирования достаточно сильно отличаются друг от друга по назначению, структуре, семантической сложности, методам реализации. Это накладывает свои специфические особенности на разработку конкретных трансляторов.
Языки программирования являются инструментами для решения задач в разных предметных областях, что определяет специфику их организации и различия по назначению. В качестве примера можно привести такие языки как Фортран, ориентированный на научные расчеты, C, предназначенный для системного программирования, Пролог, эффективно описывающий задачи логического вывода, Лисп, используемый для рекурсивной обработки списков. Эти примеры можно продолжить. Каждая из предметных областей предъявляет свои требования к организации самого языка. Поэтому можно отметить разнообразие форм представления операторов и выражений, различие в наборе базовых операций, снижение эффективности программирования при решении задач, не связанных с предметной областью. Языковые различия отражаются и в структуре трансляторов. Лисп и Пролог чаще всего выполняются в режиме интерпретации из-за того, что используют динамическое формирование типов данных в ходе вычислений. Для трансляторов с языка Фортран характерна агрессивная оптимизация результирующего машинного кода, которая становится возможной благодаря относительно простой семантике конструкций языка — в частности, благодаря отсутствию механизмов альтернативного именования переменных через указатели или ссылки. Наличие же указателей в языке C предъявляет специфические требования к динамическому распределению памяти.
Структура языка характеризует иерархические отношения между его понятиями, которые описываются синтаксическими правилами. Языки программирования могут сильно отличаться друг от друга по организации отдельных понятий и по отношениям между ними. Язык программирования PL/1 допускает произвольное вложение процедур и функций, тогда как в C все функции должны находиться на внешнем уровне вложенности. Язык C++ допускает описание переменных в любой точке программы перед первым ее использованием, а в Паскале переменные должны быть определены в специальной области описания. Еще дальше в этом вопросе идет PL/1, который допускает описание переменной после ее использования. Или описание можно вообще опустить и руководствоваться правилами, принятыми по умолчанию. В зависимости от принятого решения, транслятор может анализировать программу за один или несколько проходов, что влияет на скорость трансляции.
Семантика языков программирования изменяется в очень широких пределах. Они отличаются не только по особенностям реализации отдельных операций, но и по парадигмам программирования, определяющим принципиальные различия в методах разработки программ. Специфика реализации операций может касаться как структуры обрабатываемых данных, так и правил обработки одних и тех же типов данных. Такие языки, как PL/1 и APL поддерживают выполнение матричных и векторных операций. Большинство же языков работают в основном со скалярами, предоставляя для обработки массивов процедуры и функции, написанные программистами. Но даже при выполнении операции сложения двух целых чисел такие языки, как C и Паскаль могут вести себя по-разному.
Наряду с традиционным процедурным программированием, называемым также императивным, существуют такие парадигмы как функциональное программирование, логическое программирование и объектно-ориентированное программирование. Надеюсь, что в этом ряду займет свое место и предложенная мною процедурно-параметрическая парадигма программирования [Легалов2000]. Структура понятий и объектов языков сильно зависит от избранной парадигмы, что также влияет на реализацию транслятора.
Даже один и тот же язык может быть реализован нескольким способами. Это связано с тем, что теория формальных грамматик допускает различные методы разбора одних и тех же предложений. В соответствии с этим трансляторы разными способами могут получать один и тот же результат (объектную программу) по первоначальному исходному тексту.
Вместе с тем, все языки программирования обладают рядом общих характеристик и параметров. Эта общность определяет и схожие для всех языков принципы организации трансляторов.
- Языки программирования предназначены для облегчения программирования. Поэтому их операторы и структуры данных более мощные, чем в машинных языках.
- Для повышения наглядности программ вместо числовых кодов используются символические или графические представления конструкций языка, более удобные для их восприятия человеком.
- Для любого языка определяется:
- Множество символов, которые можно использовать для записи правильных программ (алфавит), основные элементы.
- Множество правильных программ (синтаксис).
- «Смысл» каждой правильной программы (семантика).
Независимо от специфики языка любой транслятор можно считать функциональным преобразователем F, обеспечивающим однозначное отображение X в Y, где X — программа на исходном языке, Y — программа на выходном языке. Поэтому сам процесс трансляции формально можно представить достаточно просто и понятно:
Y = F(X)
Формально каждая правильная программа X — это цепочка символов из некоторого алфавита A, преобразуемая в соответствующую ей цепочку Y, составленную из символов алфавита B.
Язык программирования, как и любая сложная система, определяется через иерархию понятий, задающую взаимосвязи между его элементами. Эти понятия связаны между собой в соответствии с синтаксическими правилами. Каждая из программ, построенная по этим правилам, имеет соответствующую иерархическую структуру.
В связи с этим для всех языков и их программ можно дополнительно выделить следующие общие черты: каждый язык должен содержать правила, позволяющие порождать программы, соответствующие этому языку или распознавать соответствие между написанными программами и заданным языком.
Связь структуры программы с языком программирования называется синтаксическим отображением.
В качестве примера рассмотрим зависимость между иерархической структурой и цепочкой символов, определяющей следующее арифметическое выражение:
a + (b + c) * d
В большинстве языков программирования данное выражение определяет иерархию программных объектов, которую можно отобразить в виде дерева (рис. 1.1.):
В кружках представлены символы, используемые в качестве элементарных конструкций, а в прямоугольниках задаются составные понятия, имеющие иерархическую и, возможно, рекурсивную структуру. Эта иерархия определяется с помощь синтаксических правил, записанных на специальном языке, который называется метаязыком (подробнее метаязыки будут рассмотрены при изучении формальных грамматик):
<выражение> ::= <слагаемое> | <выражение> + <слагаемое>
<слагаемое> ::= <множитель> | <слагаемое> * <множитель>
<множитель> ::= <буква> | ( <выражение> )
<буква> ::= a | b | c | d | i | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
Примечание. Знак «::=» читается как «это есть». Вертикальная черта «|» читается как «или».
Если правила будут записаны иначе, то изменится и иерархическая структура. В качестве примера можно привести следующие способ записи правил:
<выражение> ::= <операнд> | <выражение> + < операнд > | <выражение> * < операнд >
<операнд> ::= <буква> | ( <выражение> )
<буква> ::= a | b | c | d | i | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
В результате синтаксического разбора того же арифметического выражения будет построена иерархическая структура, представленная на рис. 1.2.
Следует отметить, что иерархическая структура в общем случае может быть никоим образом не связана с семантикой выражения. И в том и другом случае приоритет выполнения операций может быть реализован в соответствии с общепринятыми правилами, когда умножение предшествует сложению (или наоборот, все операции могут иметь одинаковый приоритет при любом наборе правил). Однако первая структура явно поддерживает дальнейшую реализацию общепринятого приоритета, тогда как вторая больше подходит для реализации операций с одинаковым приоритетом и их выполнению справа налево.
Процесс нахождения синтаксической структуры заданной программы называется синтаксическим разбором.
Синтаксическая структура, правильная для одного языка, может быть ошибочной для другого. Например, в языке Форт приведенной выражение не будет распознано. Однако для этого языка корректным будет являться постфиксное выражение:
a b c + d * +
Его синтаксическая структура описывается правилами:
<выражение> ::= <буква> | <операнд> <операнд> <операция>
< операнд > ::= < буква > | < выражение >
< операция > ::= + | *
<буква> ::= a | b | c | d | i | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
Иерархическое дерево, определяющее синтаксическую структуру, представлено на рис. 1.3.
Другой характерной особенностью всех языков является их семантика. Она определяет смысл операций языка, корректность операндов. Цепочки, имеющие одинаковую синтаксическую структуру в различных языках программирования, могут различаться по семантике (что, например, наблюдается в C++, Pascal, Basic для приведенного выше фрагмента арифметического выражения).
Знание семантики языка позволяет отделить ее от его синтаксиса и использовать для преобразования в другой язык (осуществить генерацию кода).
Описание семантики и распознавание ее корректности обычно является самой трудоемкой и объемной частью транслятора, так как необходимо осуществить перебор и анализ множества вариантов допустимых комбинаций операций и операндов.
Обобщенная структура транслятора
Общие свойства и закономерности присущи как различным языкам программирования, так и трансляторам с этих языков. В них протекают схожие процессы преобразования исходного текста. Не смотря на то, что взаимодействие этих процессов может быть организовано различным путем, можно выделить функции, выполнение которых приводит к одинаковым результатам. Назовем такие функции фазами процесса трансляции.
Учитывая схожесть компилятора и интерпретатора, рассмотрим фазы, существующие в компиляторе. В нем выделяются:
- Фаза лексического анализа.
- Фаза синтаксического анализа, состоящая из:
- распознавания синтаксической структуры;
- семантического разбора, в процессе которого осуществляется работа с таблицами, порождение промежуточного семантического представления или объектной модели языка.
- семантический анализ компонент промежуточного представления или объектной модели языка;
- перевод промежуточного представления или объектной модели в объектный код.
Наряду с основными фазами процесса трансляции возможны также дополнительные фазы:
- 2а. Фаза исследования и оптимизации промежуточного представления, состоящая из:
2а.2. оптимизации промежуточного представления.
- 3а. Фаза оптимизации объектного кода.
Интерпретатор отличается тем, что фаза генерации кода обычно заменяется фазой эмуляции элементов промежуточного представления или объектной модели языка. Кроме того, в интерпретаторе обычно не проводится оптимизация промежуточного представления, а сразу же осуществляется его эмуляция.
Кроме этого можно выделить единый для всех фаз процесс анализа и исправление ошибок, существующих в обрабатываемом исходном тексте программы.
Обобщенная структура компилятора, учитывающая существующие в нем фазы, представлена на рис. 1.4.
Он состоит из лексического анализатора, синтаксического анализатора, генератора кода, анализатора ошибок. В интерпретаторе вместо генератора кода используется эмулятор (рис. 1.5), в который, кроме элементов промежуточного представления, передаются исходные данные. На выход эмулятора выдается результат вычислений.
Лексический анализатор (известен также как сканер) осуществляет чтение входной цепочки символов и их группировку в элементарные конструкции, называемые лексемами. Каждая лексема имеет класс и значение. Обычно претендентами на роль лексем выступают элементарные конструкции языка, например, идентификатор, действительное число, комментарий. Полученные лексемы передаются синтаксическому анализатору. Сканер не является обязательной частью транслятора. Однако, он позволяет повысить эффективность процесса трансляции. Подробнее лексический анализ рассмотрен в теме: «Организация лексического анализа».
Синтаксический анализатор осуществляет разбор исходной программы, используя поступающие лексемы, построение синтаксической структуры программы и семантический анализ с формированием объектной модели языка. Объектная модель представляет синтаксическую структуру, дополненную семантическими связями между существующими понятиями. Этими связями могут быть:
- ссылки на переменные, типы данных и имена процедур, размещаемые в таблицах имен;
- связи, определяющие последовательность выполнения команд;
- связи, определяющие вложенность элементов объектной модели языка и другие.
Таким образом, синтаксический анализатор является достаточно сложным блоком транслятора. Поэтому его можно разбить на следующие составляющие:
- распознаватель;
- блок семантического анализа;
- объектную модель, или промежуточное представление, состоящие из таблицы имен и синтаксической структуры.
Обобщенная структура синтаксического анализатора приведена на рис. 1.6.
Распознаватель получает цепочку лексем и на ее основе осуществляет разбор в соответствии с используемыми правилами. Лексемы, при успешном разборе правил, передаются семантическому анализатору, который строит таблицу имен и фиксирует фрагменты синтаксической структуры. Кроме этого, между таблицей имен и синтаксической структурой фиксируются дополнительные семантические связи. В результате формируется объектная модель программы, освобожденная от привязки к синтаксису языка программирования. Достаточно часто вместо синтаксической структуры, полностью копирующей иерархию объектов языка, создается ее упрощенный аналог, который называется промежуточным представлением.
Анализатор ошибок получает информацию об ошибках, возникающих в различных блоках транслятора. Используя полученную информацию, он формирует сообщения пользователю. Кроме этого, данный блок может попытаться исправить ошибку, чтобы продолжить разбор дальше. На него также возлагаются действия, связанные с корректным завершением программы в случае, когда дальнейшую трансляцию продолжать невозможно.
Генератор кода строит код объектной машины на основе анализа объектной модели или промежуточного представления. Построение кода сопровождается дополнительным семантическим анализом, связанным с необходимостью преобразования обобщенных команд в коды конкретной вычислительной машины. На этапе такого анализа окончательно определяется возможность преобразования, и выбираются эффективные варианты. Сама генерация кода является перекодировкой одних команд в другие.
Варианты взаимодействия блоков транслятора
Организация процессов трансляции, определяющая реализацию основных фаз, может осуществляться различным образом. Это определяется различными вариантами взаимодействия блоков транслятора: лексического анализатора, синтаксического анализатора и генератора кода. Несмотря на одинаковый конечный результат, различные варианты взаимодействия блоков транслятора обеспечивают различные варианты хранения промежуточных данных. Можно выделить два основных варианта взаимодействия блоков транслятора:
- многопроходную организацию, при которой каждая из фаз является независимым процессом, передающим управление следующей фазе только после окончания полной обработки своих данных;
- однопроходную организацию, при которой все фазы представляют единый процесс и передают друг другу данные небольшими фрагментами.
На основе двух основных вариантов можно также создавать их разнообразные сочетания.
Многопроходная организация взаимодействия блоков транслятора
Данный вариант взаимодействия блоков, на примере компилятора, представлен на рис 1.7.
Лексический анализатор полностью обрабатывает исходный текст, формируя на выходе цепочку, состоящую из всех полученных лексем. Только после этого управление передается синтаксическому анализатору. Синтаксический анализатор получает сформированную цепочку лексем и на ее основе формирует промежуточное представление или объектную модель. После получения всей объектной модели он передает управление генератору кода. Генератор кода, на основе объектной модели языка, строит требуемый машинный код
К достоинствам такого подхода можно отнести:
- Обособленность отдельных фаз, что позволяет обеспечить их независимую друг от друга реализацию и использование.
- Возможность хранения данных, получаемых в результате работы каждой из фаз, на внешних запоминающих устройствах и их использования по мере надобности.
- Возможность уменьшения объема оперативной памяти, требуемой для работы транслятора, за счет последовательного вызова фаз.
К недостаткам следует отнести.
- Наличие больших объемов промежуточной информации, из которой в данный момент времени требуется только небольшая часть.
- Замедление скорости трансляции из-за последовательного выполнения фаз и использования для экономии оперативной памяти внешних запоминающих устройств.
Данный подход может оказаться удобным при построении трансляторов с языков программирования, обладающей сложной синтаксической и семантической структурой (например, PL/I). В таких ситуациях трансляцию сложно осуществить за один проход, поэтому результаты предыдущих проходов проще представлять в виде дополнительных промежуточных данных. Следует отметить, что сложные семантическая и синтаксическая структуры языка могут привести к дополнительным проходам, необходимым для установления требуемых зависимостей. Общее количество проходов может оказаться более десяти. На число проходов может также влиять использование в программе конкретных возможностей языка, таких как объявление переменных и процедур после их использования, применение правил объявления по умолчанию и т. д.
Однопроходная организация взаимодействия блоков транслятора
Один из вариантов взаимодействия блоков компилятора при однопроходной организации представлено на рис. 1.8.
В этом случае процесс трансляции протекает следующим образом. Лексический анализатор читает фрагмент исходного текста, необходимый для получения одной лексемы. После формирования лексемы им осуществляется вызов синтаксического анализатора и передача ему созданной лексемы в качестве параметра. Если синтаксический анализатор может построить очередной элемент промежуточного представления, то он делает это и передает построенный фрагмент генератору кода. В противном случае синтаксический анализатор возвращает управление сканеру, давая, тем самым, понять, что очередная лексема обработана и нужны новые данные.
Генератор кода функционирует аналогичным образом. По полученному фрагменту промежуточного представления он создает соответствующий фрагмент объектного кода. После этого управление возвращается синтаксическому анализатору.
По окончании исходного текста и завершении обработки всех промежуточных данных каждым из блоков лексический анализатор инициирует процесс завершения программы.
Чаще всего в однопроходных трансляторах используется другая схема управления, в которой роль основного блока играет синтаксический анализатор (рис. 1.9).
Лексический анализатор и генератор кода выступают в роли вызываемых им подпрограмм. Как только синтаксическому анализатору нужна очередная лексема, он вызывает сканер. При получении фрагмента промежуточного представления осуществляется обращение к генератору кода. Завершение процесса трансляции происходит после получения и обработки последней лексемы и инициируется синтаксическим анализатором.
К достоинствам однопроходной схемы следует отнести отсутствие больших объемов промежуточных данных, высокую скорость обработки из-за совмещении фаз в едином процессе и отсутствие обращений в внешним запоминающим устройствам.
К недостаткам относятся: невозможность реализации такой схемы трансляции для сложных по структуре языков и отсутствие промежуточных данных, которые можно использовать для комплексного анализа и оптимизации.
Такая схема часто применяется для простых по семантической и синтаксической структурам языков программирования, как в компиляторах, так и в интерпретаторах. Примерами таких языков могут служить Basic и Pascal. Классический интерпретатор обычно строится по однопроходной схеме, так как непосредственное исполнение осуществляется на уровне отдельных фрагментов промежуточного представления. Организация взаимодействия блоков такого интерпретатора представлена на рис. 1.10.
Комбинированные взаимодействия блоков транслятора
Сочетания многопроходной и однопроходной схем трансляции порождают разнообразные комбинированные варианты, многие из которых успешно используются. В качестве примера можно рассмотреть некоторые из них.
На рис. 1.11 представлена схема взаимодействия блоков транслятора, разбивающая весь процесс на два прохода. На первом проходе порождается полное промежуточное представление программы, а на втором осуществляется генерация кода. Использование такой схемы позволяет легко переносить транслятор с одной вычислительной системы на другую путем переписывания генератора кода.
Кроме этого, вместо генератора кода легко подключить эмулятор промежуточного представления, что достаточно просто позволяет разработать систему программирования на некотором языке, ориентированную на различные среды исполнения. Пример подобной организации взаимодействия блоков транслятора представлен на рис. 1.12.
Наряду со схемами, предполагающими замену генератора кода на эмулятор, существуют трансляторы, допускающие их совместное использование. Одна из таких схем представлена на рис. 1.13.
Процесс трансляции, включая и генерацию кода, может быть выполнен за любое число проходов (в примере используется однопроходная трансляция, представленная ранее на рис 1.9). Однако сформированный объектный код не исполняется на соответствующей ему вычислительной системе, а эмулируется на компьютере с другой архитектурой. Такая схема применяется в среде построенной вокруг языка программировании Java. Сам транслятор генерирует код виртуальной Java-машины, эмуляция которого осуществляется специальными средствами как автономно, так и в среде Internet браузера.Представленная схема может иметь и более широкое толкование применительно к любому компилятору, порождающему машинный код. Все дело в том, что большинство современных вычислительных машин реализованы с использованием микропрограммного управления. А микропрограммное устройство управления можно рассматривать как программу, эмулирующую машинный код. Это позволяет говорить о повсеместном использовании последней представленной схемы.
Контрольные вопросы и задания
- Назовите отличия:
- интерпретатора от компилятора;
- компилятора от ассемблера;
- перекодировщика от транслятора;
- эмулятора от интерпретатора;
- синтаксиса от семантики.
- Расскажите об известных Вам последних разработках языков программирования. Приведите основные характеристики названных языков.
- Приведите конкретные примеры использования методов трансляции в областях, не связанных с языками программирования.
- Приведите конкретные примеры компилируемых языков программирования.
- Приведите конкретные примеры интерпретируемых языков программирования.
- Приведите конкретные примеры языков программирования, для которых имеются как компиляторы, так и интерпретаторы.
- Основные достоинства и недостатки компиляторов.
- Основные достоинства и недостатки интерпретаторов.
- Опишите основные различия в синтаксисе двух известных Вам языков программирования.
- Опишите основные различия в семантике двух известных Вам языков программирования.
- Назовите основные фазы процесса трансляции и их назначение.
- Назовите специфические особенности однопроходной трансляции.
- Назовите специфические особенности многопроходной трансляции.
- Приведите примеры возможных комбинаций однопроходной и многопроходной трансляции. Расскажите о практическом использовании этих схем.
[ содержание | следующая тема ]
Презентация по информатике на тему: «Понятие транслятора»
Описание слайда:ОСНОВНЫЕ ГРУППЫ В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы. Ассемблер — системная обслуживающая программа, которая преобразует символические конструкции в команды машинного языка. Специфической чертой ассемблеров является то, что они осуществляют дословную трансляцию одной символической команды в одну машинную. Таким образом, язык ассемблера (еще называется автокодом) предназначен для облегчения восприятия системы команд компьютера и ускорения программирования в этой системе команд. Программисту гораздо легче запомнить мнемоническое обозначение машинных команд, чем их двоичный код. Вместе с тем, язык ассемблера, кроме аналогов машинных команд, содержит множество дополнительных директив, облегчающих, в частности, управление ресурсами компьютера, написание повторяющихся фрагментов, построение многомодульных программ. Поэтому выразительность языка намного богаче, чем просто языка символического кодирования, что значительно повышает эффективность программирования. Компилятор — это обслуживающая программа, выполняющая трансляцию на машинный язык программы, записанной на исходном языке программирования. Также как и ассемблер, компилятор обеспечивает преобразование программы с одного языка на другой (чаще всего, в язык конкретного компьютера). Вместе с тем, команды исходного языка значительно отличаются по организации и мощности от команд машинного языка. Существуют языки, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Однако есть и такие языки, в которых каждой команде может соответствовать 100 и более машинных команд (например, Пролог). Кроме того, в исходных языках достаточно часто используется строгая типизация данных, осуществляемая через их предварительное описание. Программирование может опираться не на кодирование алгоритма, а на тщательное обдумывание структур данных или классов. Процесс трансляции с таких языков обычно называется компиляцией, а исходные языки обычно относятся к языкам программирования высокого уровня (или высокоуровневым языкам). Абстрагирование языка программирования от системы команд компьютера привело к независимому созданию самых разнообразных языков, ориентированных на решение конкретных задач. Появились языки для научных расчетов, экономических расчетов, доступа к базам данных и другие. Интерпретатор — программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы. Но интерпретатор позволяет начать обработку данных после написания даже одной команды. Это делает процесс разработки и отладки программ более гибким. Кроме того, отсутствие выходного машинного кода позволяет не «захламлять» внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.
Введение в программирование
в данном пособии используется язык программирования С (произно сится «Си» — английское название латинской буквы «С»), по своим возмож ностям близкий к языку Pascal. С++ является развитием языка С. Он вклю чает усовершенствованный вариант языка С и ряд дополнительных средств. Перечисленные языки являются машинно-независимьши языками высо кого уровня. Машинная независимость означает возможность использовать язык для ЭВМ разных типов. Уровень языка определяется степенью его бли зости к машинному языку, непосредственно воспринимаемому компьюте ром. Чем большее число машинных команд требуется в среднем для вы полнения одной команды некоторого языка, тем выше уровень языка, К машинно-зависимым (машинно-ориентированнъш) языкам относятся в основном языки ассемблера — для программирования на уровне машин ных команд компьютеров определенного типа. Их называют языками уровня 1:1 («один к одному»), так как команда такого языка обычно соот ветствует одной машинной команде. Для использования языка программирования на ЭВМ его нужно реа лизовать на этой ЭВМ, т.е. разработать для него транслятор. Транслятор — это программа для перевода программ с одного языка на другой. Виды трансляторов: компилятор, интерпретатор, ассемблер, редактор связей, загрузчик и др. Компилятор — это транслятор для перевода программ с языка высокого уровня на язык, близкий к машинному (без ее непосредственного выполнения). Последующее исполнение полученной машинной программы происходит без участия компилятора. Текст программы на языке программирования называют исходным модулем, а результат его трансляции (компиляции) — объектным модулем (от английского слова object — цель). Необходимо отметить, что в информатике и программировании ши роко используются англоязычные термины, сокращения и целые фразы. Для их лучшего понимания в пособии приводятся наиболее важные для программирования и работы на компьютере английские слова. Интерпретатор — это такой вид транслятора, который обрабатывает и немедленно выполняет каждую команду исходной программы (без полу чения объектного модуля). В этом случае перевод программы и ее выпол нение происходят параллельно. Компилятор и интерпретатор представляют собой два крайних под хода к реализации языка программирования. В любом реальном трансля торе сочетаются элементы компиляции и интерпретации. 5
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYyТрансляция, компиляция, интерпретация, линкование (Курсовая работа)
Санкт-Петербургский государственный университет
телекоммуникаций имени профессора М.А. Бонч-Бруевича
Курсовая работа
по дисциплине Информатика
на тему:
Трансляция, линкование, компиляция, интерпретация
Выполнила: студентка 1 курса
Царыгина К.О.
Преподаватель: Левчук Ю.П.
2009 год
Содержание
Введение
Трансляция, компиляция, интерпретация, линкование
1. Трансляция. Компиляция. Интерпретация
2. Линкование
Заключение
Используемая литература
Введение
Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Различные языки программирования поддерживают различные стили программирования. Единственный язык, напрямую выполняемый процессором — это машинный язык (также называемый машинным кодом). Изначально все программисты прорабатывали программы в машинном коде, но сейчас эта трудная работа уже не делается. Вместо этого программисты пишут исходный код на языке программирования высокого уровня, и компьютер (используя компилятор, интерпретатор или ассемблер) транслирует его, в один или несколько этапов, уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре. Запись исходных текстов программ при помощи языков программирования облегчает понимание и редактирование человеком. Этому, в частности, помогают комментарии, допустимые в синтаксисе большинства языков. Для выполнения на компьютере готовый текст программы преобразуется (компилируется) в машинный код. Некоторые языки программирования позволяют обходиться без предварительной компиляции программы и переводят её в инструкции машинного кода непосредственно во время исполнения. Этот процесс называется динамической компиляцией, и он позволяет добиться большей переносимости программ между разными аппаратными и программными платформами при сохранении многих плюсов компиляции.
Интерпретируемые программы, для которых, как правило, не применяется процесс компиляции и которые интерпретируются операционный системой или специальными программами-интерпретаторами, называются скриптами или «сценариями».
Технология программирования задач различается для операторных и функциональных языков программирования. Ограничимся рассмотрением вопроса для операторных языков. Тогда этот этап разбивается на два последовательных шага – разработку алгоритма и отладку программы.
Отладка программы – это самый трудоемкий этап. Его цель – проверка синтаксической и логической правильности программы, а также определение того, что программа функционирует на всем диапазоне допустимых данных.
В процессе отладки программы выделяются этапы:
трансляция исходного текста программы;
компоновка программы;
выполнение программы с целью определения логических ошибок;
тестирование программы
Трансляция, компиляция, интерпретация, линкование
1. Трансляция. Компиляция. Интерпретация
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. При трансляции выполняется перевод программы, понятной человеку, на язык, понятный компьютеру. Выполняется специальными программными средствами (транслятором).
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются. Если цель трансляции – преобразование всего исходного текста на внутренний язык компьютера (т.е. получение некоторого нового кода) и только, то такая трансляция называется также компиляцией. Исходный текст называется также исходной программой или исходным модулем, а результат компиляции – объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходных текстов и при этом полученные коды сразу выполняются, такая трансляция называется интерпретацией. Поскольку трансляция выполняется специальными программными средствами (трансляторами), последние носят название компилятора или интерпретатора, соответственно.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Виды трансляторов
Трансляторы подразделяют на:
Адресный. Функциональное устройство, преобразующее виртуальный адрес в реальный адрес
Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
Обратный. То же, что детранслятор (декомпилятор, дизассемблер).
Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера
Компиляция — преобразование программой-компилятором исходного текста программы, написанного на языке высокого уровня в машинный язык, в язык, близкий к машинному, или в объектный модуль. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика.
Компилятор читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
Виды компиляции
Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
Построчная. То же, что и интерпретация.
Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
Рисунок 1. Компиляция размеченного документа
Интерпретация — процесс непосредственного покомандного выполнения программы без предварительной компиляции, «на лету»; в большинстве случаев интерпретация намного медленнее работы уже скомпилированной программы, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность.
Типы интерпретаторов
Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Его достоинство — мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.
Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Его достоинство – большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода.
Алгоритм работы простого интерпретатора
прочитать инструкцию;
проанализировать инструкцию и определить соответствующие действия;
выполнить соответствующие действия;
если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.
Рисунок 2. Схема интерпретации текста Ю. Лотмана
2. Линкование
Линкование (компоновка) — это процесс, при котором все «недокомпилированные» части программы доводятся до конца и связываются между собой в исполняемый файл (или файлы) формата, понятного данной операционной системе. В итоге, мы получаем исполняемую программу.
Линкование важно, так как при разработке больших проектов код обычно вырастает настолько, что приходится его для повышения надежности раскидывать по разным файлам.
Для связывания модулей компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:
Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям
Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя
Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.
Рисунок 3. Наглядная схема линкования
Существует два способа создания линкования:
Рисунок 4. Схема «Кольцо»
Рисунок 5. Схема «Елочка»
Заключение
Упрощая, можно сказать, что при компилировании перевод программы в понятную для машины форму осуществляется сразу же после её создания. То есть из исходного текста на языке высокого уровня получается машинный код, пригодный для исполнения на данном процессоре. Если необходимо выполнить программу на другом типе процессора с несовместимой системой команд, то необходима перекомпиляция исходной программы на языке высокого уровня для данного типа процессора.
Программа же на интерпретируемом языке транслируется в машинные коды лишь при её выполнении. Делается это, по мере поступления команд, следующим образом. Каждой команде интерпретируемого языка в коде интерпретатора соответствует подпрограмма, созданная с использованием поддерживаемых аппаратной частью компьютера средств. Когда эта команда встречается в коде, связанная с ней подпрограмма запускается, и необходимые действия выполняются. Так как особенности реализации интерпретируемых языков скрыты, кажется, что имеющиеся в них команды проделываются напрямую компьютером. Поэтому соответствующие интерпретаторы называют виртуальными компьютерами (или, чаще, виртуальными машинами). Для переноса программы на другую аппаратную базу (другой процессор) необходимо лишь наличие интерпретатора данного языка программирования для данного типа процессора.
Используемая литература
Роберт У. Себеста. Основные концепции языков программирования
Вольфенгаген В. Э. Конструкции языков программирования.
Translators — Computer Science GCSE GURU
Компьютеры понимают только машинный код (двоичный), это проблема, потому что программисты предпочитают вместо этого использовать различные языки программирования высокого и низкого уровня.
Чтобы обойти проблему, программный код высокого и низкого уровня (исходный код) должен пройти через транслятор.
Переводчик преобразует исходный код в машинный код (объектный код).
Существует несколько типов программ-переводчиков, каждая из которых может выполнять разные задачи.
Компилятор
Компиляторы используются для перевода программы, написанной на языке высокого уровня, в машинный код (объектный код).
После компиляции (все за один раз) переведенный программный файл может быть напрямую использован компьютером и является независимо исполняемым.
Компиляция может занять некоторое время, но переведенную программу можно использовать снова и снова без необходимости перекомпиляции.
Отчет об ошибке часто создается после того, как полная программа была переведена.Ошибки в программном коде могут привести к сбою компьютера. Эти ошибки можно исправить только путем изменения исходного исходного кода и повторной компиляции программы.
Если вам нужно узнать больше о языках высокого уровня, посетите нашу страницу языков.
Интерпретатор
Программы интерпретатора могут читать, переводить и выполнять по одному оператору за раз из программы на языке высокого уровня.
Интерпретатор останавливается, когда достигается строка кода, содержащая ошибку.
Переводчики часто используются при разработке программы. Они упрощают отладку, поскольку каждая строка кода анализируется и проверяется перед выполнением.
Интерпретируемые программы запускаются немедленно, но ваша программа может работать медленнее, чем согласованный файл.
Исполняемый файл не создается. Программа интерпретируется заново с нуля каждый раз, когда вы ее запускаете.
Если вам нужно узнать больше о языках высокого уровня, посетите нашу страницу языков.
Ассемблер
Ассемблер используются для перевода программы, написанной на низкоуровневом языке ассемблера, в файл машинного кода (объектного кода), чтобы ее можно было использовать и выполнять на компьютере.
После сборки файл программы можно использовать снова и снова без повторной сборки.
Если вам нужно узнать больше о языках низкого уровня, посетите нашу страницу языков.
Сводка переводчиков
Компилятор | Интерпретатор | Ассемблер |
---|---|---|
Переводит языки высокого уровня в машинный код | Временно выполняет языки высокого уровня, по одной инструкции за раз | Переводит низкоуровневую сборку код в машинный код |
Создается исполняемый файл машинного кода (объектный код) | Не создается исполняемый файл машинного кода (нет объектного кода) | Создается исполняемый файл машинного кода (объектный код) |
Скомпилированные программы больше не нуждаются в компиляторе | Интерпретированные программы не могут использоваться без интерпретатора | Собранные программы больше не нуждаются в ассемблере |
Отчет об ошибке создается после компиляции всей программы.Эти ошибки могут привести к сбою вашей программы. | Сообщение об ошибке создается немедленно (и программа останавливается в этой точке) | Одна инструкция низкоуровневого языка обычно переводится в одну инструкцию машинного кода |
Компиляция может быть медленной, но в результате программный код будет выполняться быстро (непосредственно на процессоре) | Интерпретируемый код запускается через интерпретатор (IDE), поэтому он может быть медленным, например для выполнения программных циклов | |
Один оператор языка высокого уровня может представлять собой несколько строк машинного кода при компиляции |
Переводчики — Переводчики и средства языков — OCR — GCSE Computer Science Revision — OCR
Любая программа, написанная на языке высокого уровня, называется исходным кодом.Однако компьютеры не могут понять исходный код. Перед запуском исходный код необходимо сначала перевести в форму, понятную компьютеру — эта форма называется объектным кодом.
Транслятор — это программа, преобразующая исходный код в объектный код. Обычно существует три типа трансляторов:
Преобразование исходного кода в машинный код
Компиляторы
Компилятор берет исходный код целиком и переводит его в объектный код за один раз.После преобразования объектный код можно запускать без посторонней помощи в любое время. Этот процесс называется компиляцией.
У компиляторов есть несколько преимуществ:
- Скомпилированные программы работают быстро, так как они уже переведены.
- Скомпилированная программа может быть предоставлена в виде исполняемого файла. Исполняемый файл — это файл, готовый к запуску. Поскольку исполняемый файл не может быть легко изменен, программисты предпочитают предоставлять исполняемые файлы, а не исходный код.
- Компиляторы оптимизируют код.Оптимизированный код может работать быстрее и занимать меньше места в памяти.
У компиляторов есть несколько недостатков:
- Поскольку исходный код транслируется как единое целое, должно быть достаточно места в памяти для хранения исходного кода, компилятора и сгенерированного объектного кода. Также должно быть временное рабочее пространство для компилятора для выполнения перевода. Современные системы либо имеют достаточно памяти, либо используют виртуальную память для хранения всех данных.
- Компиляторы обычно не выявляют ошибок — программа должна быть скомпилирована и запущена до того, как будут обнаружены ошибки.Это затрудняет понимание того, в чем заключаются ошибки.
- Исходный код необходимо перекомпилировать каждый раз, когда программист изменяет программу.
- Исходный код, скомпилированный на одной платформе, не будет работать на другой — объектный код зависит от архитектуры процессора.
Интерпретаторы
Интерпретатор переводит исходный код в объектный код по одной инструкции за раз. Это похоже на переводчика-человека, переводящего то, что человек говорит на другой язык, предложение за предложением, когда они говорят.Полученный объектный код затем выполняется немедленно. Процесс называется интерпретацией.
Переводчики имеют несколько преимуществ:
- Инструкции выполняются, как только они переведены.
- Поскольку инструкции выполняются после преобразования, они не сохраняются для дальнейшего использования. В результате интерпретаторам требуется меньше доступной памяти.
- Ошибки можно быстро обнаружить — при обнаружении ошибки программа прекращает работу, а пользователю сообщается, в какой части программы интерпретация не удалась.Это делает интерпретаторы чрезвычайно полезными при разработке программ.
Интерпретаторы также имеют несколько недостатков:
- Интерпретируемые программы работают медленнее, поскольку процессору приходится ждать, пока каждая инструкция будет переведена, прежде чем она сможет быть выполнена.
- Кроме того, программа должна переводиться каждый раз при запуске.
- Интерпретаторы не создают исполняемый файл, который можно распространять. В результате должна быть предоставлена программа с исходным кодом, и она может быть изменена без разрешения.
- Интерпретаторы не оптимизируют код — переведенный код выполняется как есть.
Ассемблеры
Ассемблеры — это третий тип переводчиков. Цель ассемблера — перевести язык ассемблера в объектный код. В то время как компиляторы и интерпретаторы генерируют множество инструкций машинного кода для каждой инструкции высокого уровня, ассемблеры создают одну инструкцию машинного кода для каждой инструкции сборки.
Что такое компиляторы, переводчики, интерпретаторы и ассемблеры?
Трансляторы, компиляторы, интерпретаторы и ассемблеры — все это инструменты программирования, которые преобразуют код в другой тип кода, но каждый термин имеет определенное значение.Все вышеперечисленное работает в некотором роде для перевода языка программирования высокого уровня в машинный код, который может понять центральный процессор (ЦП). Примеры процессоров включают в себя процессоры Intel (например, x86), AMD (например, Athlon APU), NXP (например, PowerPC) и многие другие. Важно отметить, что все переводчики, компиляторы, интерпретаторы и ассемблеры сами по себе являются программами.
Переводчики
Самый общий термин для инструмента преобразования программного кода — «переводчик.«Переводчик в терминах программирования программного обеспечения — это общий термин, который может относиться к компилятору, ассемблеру или интерпретатору; все, что преобразует код более высокого уровня в другой код высокого уровня (например, Basic, C ++, Fortran, Java) или более низкий уровень (то есть язык, который может понимать процессор), например язык ассемблера или машинный код. Если вы не знаете, что на самом деле делает этот инструмент, кроме того, что он выполняет некоторый уровень преобразования кода на определенный целевой язык, вы можете смело называть его переводчиком.
Компиляторы
Компиляторы преобразуют код языка высокого уровня в машинный (объектный) код за один сеанс. Компиляторы могут занять некоторое время, потому что они должны переводить код высокого уровня на машинный язык более низкого уровня сразу, а затем сохранять исполняемый объектный код в памяти. Компилятор создает машинный код, который выполняется на процессоре с определенной архитектурой набора команд (ISA), которая зависит от процессора. Например, вы не можете скомпилировать код для x86 и запустить его на архитектуре MIPS без специального компилятора.Компиляторы также зависят от платформы. То есть компилятор может преобразовать C ++, например, в машинный код, предназначенный для платформы, на которой работает ОС Linux. Однако кросс-компилятор может генерировать код для платформы, отличной от той, которую он запускает на себе.
Кросс-компилятор, работающий, например, на машине Windows, может генерировать код, работающий в определенной операционной системе Windows или платформе Linux (операционной системы). Компиляторы исходного кода переводят одну программу или код в другую на другом языке (например,г., с Java на C). Выбор компилятора означает, что сначала вам нужно знать ISA, операционную систему и язык программирования, который вы планируете использовать. Компиляторы часто поставляются в виде пакета с другими инструментами, и каждый производитель процессора будет иметь по крайней мере один компилятор или пакет инструментов разработки программного обеспечения (который включает компилятор). Часто программные инструменты (включая компилятор) бесплатны; в конце концов, ЦП совершенно бесполезен без программного обеспечения для работы на нем. Компиляторы сообщат об ошибках после завершения компиляции.
Интерпретаторы
Другой способ заставить код работать на вашем процессоре — использовать интерпретатор, который отличается от компилятора. Интерпретатор транслирует код как компилятор, но читает код и немедленно выполняет его, и поэтому изначально работает быстрее, чем компилятор. Таким образом, интерпретаторы часто используются в инструментах разработки программного обеспечения в качестве инструментов отладки, поскольку они могут выполнять один вход кода за раз. Компиляторы переводят код сразу, а затем процессор выполняет на машинном языке, созданном компилятором.Если после компиляции в код вносятся изменения, то измененный код необходимо будет скомпилировать и добавить к скомпилированному коду (или, возможно, потребуется перекомпилировать всю программу). Но интерпретатор, хотя и пропускает этап компиляции запуск всей программы выполняется намного медленнее, чем та же программа, которая была полностью скомпилирована.
, однако, полезны в областях, где скорость не имеет значения (например, отладка и обучение), и можно взять весь интерпретатор и использовать его на другом ISA, что делает его более переносимым, чем компилятор, при работе между оборудованием. архитектуры.Существует несколько типов интерпретаторов: интерпретатор, управляемый синтаксисом (то есть интерпретатор абстрактного синтаксического дерева (AST)), интерпретатор байт-кода и многопоточный интерпретатор (не путать с потоками параллельной обработки), Just-in-Time (вид гибридного интерпретатора / компилятора) и некоторые другие. Инструкции по созданию интерпретатора можно найти в Интернете. [I] Некоторыми примерами языков программирования, использующих интерпретаторы, являются Python, Ruby, Perl и PHP.
Ассемблеры
Ассемблер переводит программу, написанную на языке ассемблера, на машинный язык и фактически является компилятором для языка ассемблера, но также может использоваться интерактивно, как интерпретатор.Ассемблер — это язык программирования низкого уровня. Языки программирования низкого уровня меньше похожи на человеческий в том смысле, что их труднее понять с первого взгляда; вы должны внимательно изучить ассемблерный код, чтобы проследить цель выполнения, и в большинстве случаев ассемблерный код содержит намного больше строк кода для представления тех же функций, которые выполняются в языке более высокого уровня. Ассемблер преобразует код языка ассемблера в машинный код (также известный как объектный код), язык еще более низкого уровня, который процессор может понять напрямую.
чаще используется с 8-битными процессорами и становится все более громоздким по мере того, как путь набора команд процессора становится шире (например, 16-битный, 32-битный и 64-битный). Для людей не исключено читать машинный код, строки из единиц и нулей, которые цифровые устройства (включая процессоры) используют для обмена данными, но он, вероятно, может быть прочитан людьми только в случае компьютерной криминалистики или взлома методом грубой силы. Язык ассемблера — это следующий уровень по сравнению с машинным кодом, и он весьма полезен в крайних случаях отладки кода, чтобы точно определить, например, что происходит при проблемном выполнении.Иногда компиляторы «оптимизируют» код непредвиденным образом, что влияет на результаты, сбивая с толку разработчика или программиста, так что необходимо внимательно следить за пошаговыми действиями процессора в коде сборки, во многом как охотник, выслеживающий добычу или детектив следит за уликами.
[i] «Давайте создадим простой интерпретатор», https://ruslanspivak.com/lsbasi-part1
Разница между переводчиком и переводчиком в языке программирования
Основное различие между переводчиком и интерпретатором в языке программирования состоит в том, что переводчик — это программное обеспечение, которое преобразует код с одного языка программирования на другой, в то время как интерпретатор — это тип переводчика, который преобразует язык программирования высокого уровня в машинный язык.
Компьютерная программа — это набор инструкций для компьютера для выполнения задачи. Он состоит из последовательности утверждений. В большинстве случаев компьютерные программы написаны на языках программирования высокого уровня или ассемблере. Эти программы читаются и понятны программисту, но не компьютеру. Поэтому эти программы преобразуются в эквивалентный машинный язык для понимания компьютером. Переводчики помогают переводить программу с одного языка на другой.В основном он переводит программу в машинный код. Устный переводчик — это разновидность переводчика.
Основные зоны покрытия
1. Что такое переводчик
— Определение, функциональность
2. Что такое переводчик
— Определение, функциональность
3. В чем разница между переводчиком и переводчиком в языке программирования
— Сравнение основных отличий
Ключевые термины
Устный переводчик, Программист
Что такое переводчик в языке программирования
Переводчики переводят программу с одного языка на другой.Существуют различные типы переводчиков, такие как компилятор, интерпретатор и ассемблер. Компилятор преобразует весь исходный код языка высокого уровня в машинный код. Если есть синтаксическая или семантическая ошибка, программа не будет выполняться. Поскольку компилятор проверяет всю программу, время сканирования велико, но время выполнения меньше. Поэтому языки на основе компилятора, такие как C, C ++, считаются быстрыми языками.
Ассемблер — это язык между машинным языком и языками высокого уровня.Это язык низкого уровня. Этот язык используется для программирования микроконтроллеров. Ассемблер — это переводчик, который преобразует программу на ассемблере в машинный язык. Короче говоря, компилятор, интерпретатор и ассемблер являются общими переводчиками.
Что такое переводчик в языке программирования
Интерпретатор — это еще один тип переводчика, который преобразует язык программирования высокого уровня в машинный язык. Он преобразует исходный код в машинный код построчно. Поскольку он проверяет код по одной строке за раз, время сканирования меньше.Но время исполнения больше. Поэтому языки на основе интерпретаторов, такие как PHP, Python, BASIC, Perl и Ruby, считаются более медленными языками. Кроме того, интерпретатор указывает по одной ошибке за раз. Чтобы интерпретировать следующую строку, программист должен исправить ошибку в текущей строке.
Разница между переводчиком и переводчиком в языке программирования
Определение
Переводчик — это программное обеспечение, которое выполняет перевод программы, написанной на одном языке программирования, в функционально эквивалентную программу на другом компьютерном языке.Интерпретатор — это программное обеспечение, которое преобразует инструкции, написанные на языке программирования высокого уровня или сценариях, в программу на машинном языке.
Типы
Устный переводчик — это разновидность переводчика. Другие распространенные переводчики включают интерпретатор, компилятор и ассемблер.
Основные функции
Переводчик преобразует код с одного языка программирования на другой. В основном он преобразует код в машинный код. Интерпретатор построчно преобразует программу с языка высокого уровня на машинный.
Казнь
Компилятор и ассемблер выполняются быстрее, чем интерпретатор. Скорость выполнения интерпретатора ниже.
Отладка
Отладка компилятора и ассемблера затруднена. Переводчик проверяет строку за строкой. Следовательно, отладка проще.
языков
C, C ++ и т. Д. Используют компилятор. В ассемблере используется ассемблер. Такие языки, как Python, PHP, BASIC и т. Д., Используют интерпретатор типа переводчика.
Заключение
Переводчики преобразуют программу на другой язык программирования без потери функциональной или логической структуры исходного кода.Разница между переводчиком и интерпретатором в языке программирования заключается в том, что переводчик — это программное обеспечение, которое преобразует код с одного языка программирования на другой, в то время как интерпретатор — это тип переводчика, который преобразует язык программирования высокого уровня в машинный язык.
Ссылка:
1. Торнтон, Скотт. «Что такое компиляторы, переводчики, интерпретаторы и ассемблеры?» Microcontroller Tips , 17 февраля 2017 г., доступно здесь.
Изображение предоставлено:
1.”583537 ″ (CC0) через Pixabay
Переводчик языковв компьютере и его типы?
Переводчик компьютерного языка
Компьютер — это электронное устройство, которое может понимать только двоичный код машинного уровня (0/1 или вкл / выкл), и очень сложно понять и написать программу на машинном языке, поэтому разработчики используют понятный человеку высокий уровень и инструкции по сборке. Итак, чтобы устранить этот пробел, используется транслятор, который используется для преобразования инструкций высокого уровня в инструкции машинного уровня (0 и 1).
Переводчик — это процессор языка программирования, который переводит программу, написанную на языке высокого уровня или ассемблера, на машинно-понятный машинный язык низкого уровня без потери функциональности кода.
Почему компьютерный переводчик?
Компьютер понимает только машинный код. Он не понимает ни низкоуровневых, ни ассемблерных, ни высокоуровневых языков. Должна существовать программа для преобразования исходного кода в объектный код, чтобы ваш компьютер понял его.Это задача языкового переводчика. Программист записывает и затем преобразует исходный код в читаемый машинный формат (объектный код)
Назначение компьютерного переводчика языка
Основная цель переводчика — заставить машину понимать программу, написанную на низком / ассемблерном / высоком уровне язык.
Типы переводчика компьютерного языка
Существует 3 типа переводчика компьютерного языка: Это:
- Компилятор
- Интерпретатор
- Ассемблер
Компилятор
Компилятор — это программа-переводчик языка, которая переводит код, написанный на человеко-читаемый язык, такой как язык высокого уровня, или компьютерный язык низкого уровня, либо язык ассемблера, машинный код или объектный код, и, наконец, создает исполняемую программу.
В процессе создания исполняемого файла компилятор проходит различные фазы, такие как лексический анализ, синтаксический анализ, семантический анализ, создание промежуточного представления (IR), (промежуточное представление) оптимизация IR, генерация кода и оптимизация.
Вкратце,
В процессе компиляции первый код отправляется в лексер , который сканирует исходный код и разбивает его на токены, хранящиеся в памяти компьютера, и отправляет их в синтаксический анализатор , где распознаются шаблоны. и преобразуются в AST (абстрактное синтаксическое дерево), которое описывает структуру данных программы, представляющей затем оптимизатор (при необходимости) оптимизирует неиспользуемую переменную, недоступный код, откатывается, если возможно, и т. д., тогда генератор кода преобразуется в код машинной инструкции, специфичный для целевой платформы, и компоновщик , объединяющий весь код в исполняемую программу.Кроме того, на всех этапах есть обработчик ошибок, который обрабатывает ошибки и отчеты.
Некоторые из хорошо известных компиляторов: Borland Turbo C, Javac, компилятор GNU, Microsoft Visual Studio, Xcode, Roslyn и т.д. преобразован в машинный код перед запуском. Таким образом, выполнение кода во время выполнения происходит быстрее.
Преимущество компилятора
- Вся программа скомпилирована и кажется защищенной, чем Интерпретируемый код
- Скомпилированный код быстрее.
- Программа может запускаться непосредственно из объектного кода и не требует исходного кода.
Недостаток компилятора
- Для создания исполняемого файла исходный код не должен содержать ошибок.
Интерпретатор
Интерпретатор преобразует язык высокого уровня в язык машинного уровня, компилятор делает то же самое, но его способы преобразования отличаются от компилятора. В Interpreter исходный код преобразуется в машинный код во время выполнения. Но в компиляторе код преобразуется в машинный код, т.е. исполняемый файл перед запуском программы.
Программа интерпретатора запускается напрямую построчно, запуская исходный код. Таким образом, он берет исходный код, по одной строке за раз, транслирует его и запускает процессором, затем переходит к следующей строке, переводит и запускает, и повторяется до тех пор, пока программа не завершится.
Некоторые из популярных интерпретируемых языков: Php, Python, Javascript, Ruby
Характеристики интерпретатора
- Тратит меньше времени на преобразование в машинный код.
- Во время генерации машинных инструкций в интерпретаторе отсутствует этап компиляции.
- Программа выполняется медленнее, поскольку она преобразуется в машинный код во время выполнения.
- Простота отладки и поиска ошибок.
Ассемблер
Ассемблер преобразует код, написанный на языке ассемблера, в код машинного уровня.Язык ассемблера содержит мнемонику машинного кода операции, так что ассемблеры переводят мнемонику в прямую инструкцию в соотношении 1: 1.
Как мы знаем, компьютер понимает только машинный код, но программирование на машинном языке затруднительно для разработчиков. Итак, низкоуровневый язык ассемблера (ASM) разработан для определенного семейства процессоров, представляющих различные инструкции символьного кода.
Характеристики ассемблера
- Поскольку существует соотношение 1: 1 между мнемоникой и прямой инструкцией, перевод выполняется очень быстро.
- Требуется меньше памяти и меньше времени выполнения.
- Он легко выполняет сложные аппаратные задачи.
- Идеально для срочной работы.
Различия между компилятором, интерпретатором и ассемблером
Компилятор | Интерпретатор | Ассемблер |
Он преобразует программы, написанные на языке высокого уровня, в машинный язык до времени выполнения. язык высокого уровня в машинный язык во время выполнения. | Преобразует программу на ассемблере в язык машинного уровня. | |
Используется: C, C ++ | Используется: Python, PHP, Ruby, PostScript, LISP, VB | Используется: GNU, GAS |
Скомпилированный код выполняется быстрее, но время компиляции может занять больше времени . | Каждый раз интерпретатор переводит каждый раз при запуске кода, поэтому он работает медленнее. | Работает быстро, поскольку перевод двух низкоуровневых языков зависит только от набора инструкций процессора. |
Компилятор и интерпретатор
Компилятор | Интерпретатор |
Перевод программы на языке высокого уровня в машинный код до времени выполнения | Перевод программы на языке высокого уровня в машинный код во время выполнения |
Компилятору требуется много времени для анализа всего исходного кода | Для анализа исходного кода требуется меньше времени |
Общее время выполнения программы относительно быстрее. | Общее время выполнения программы относительно медленнее. |
Компилятор выдает сообщение об ошибке только после сканирования всей программы. И все ошибки отображаются одновременно. | Интерпретатор показывает только одну ошибку за раз, и если она решена и снова после интерпретации кода, то показывает следующую ошибку, если она существует. |
Отладка относительно сложнее, так как ошибка может быть в любом месте кода. | Отладить проще, поскольку он продолжает переводить программу до тех пор, пока ошибка не будет исправлена. Показывать только одну ошибку за раз, и если она решена, показывает следующую ошибку, если она существует. |
Компилятор генерирует промежуточный код. | Интерпретатор не генерирует промежуточный код. |
Компилятор компилирует код перед выполнением. | Компиляция и выполнение происходят одновременно. |
Требования к памяти выше, поскольку для создания промежуточного объектного кода требуется время.Этот промежуточный объектный код находится в памяти. | Требуется меньше памяти, так как не создается промежуточный объектный код. |
Сложное обнаружение и удаление ошибок | Простота обнаружения и удаления ошибок |
Язык программирования, на котором используется компилятор: C, C ++, Java, C #, Scala | Язык программирования, на котором используется интерпретатор: Python, Perl, Ruby, PHP |
Программное обеспечение компиляторов больше по размеру. | Программное обеспечение интерпретатора обычно меньше по размеру. |
Сосредоточьтесь на однократной компиляции, выполняйте в любое время | Сосредоточьтесь на компиляции каждый раз. |
Программа не запускается, пока не будет устранена вся ошибка. | Программа запускает код и останавливается только при обнаружении ошибки. |
Часто задаваемые вопросы
1) Портал языка ассемблера?
Ответ: Нет, языки ассемблера не переносимы, поскольку они привязаны к определенной архитектуре компьютера.Программа, написанная и разработанная на одном языке ассемблера, должна быть переписана для работы на другой машине.
2) Какой тип языка является языком ассемблера?
Ответ: язык ассемблера (ASM) — это язык программирования низкого уровня.
3) Как интерпретатор работает медленнее компилятора?
Ответ: интерпретация кода медленнее, чем скомпилированный код.
В компиляторе Вариант: После успешной компиляции программы создается файл объектного кода.Этот файл объектного кода теперь выполняется. Итак, если мы не изменим исходный код, нет необходимости в перекомпиляции. И напрямую выполнять из скомпилированного кода, который кажется быстрее, потому что он близок к машинному языку.
В интерпретаторе Случай: Каждый раз, когда мы хотим запустить программу, она интерпретируется снова и снова. Таким образом, во время выполнения на язык машинного уровня переводится только код.
4) В чем разница между компиляцией и исполнением?
Ответ: Компиляция происходит до выполнения в процессе компиляции.Исходный код компилируется и создает исполняемый файл (например, .dll и .exe), и этот файл запускается во время выполнения. Компилятор взаимодействует с диспетчером памяти ОС для выполнения компиляции. Выполнение выполняется процессором во время выполнения программы.
5) Каков первый этап процесса компиляции?
Ответ: Лексический анализ — это первая стадия процесса компиляции.
6) Сколько частей в компиляторе?
Ответ: У компилятора есть 3 важные части.
- FrontEnd
- Middle End
- BackEnd
7) Является ли компоновщик частью компилятора?
Ответ: У некоторых есть отдельные линкеры, а у некоторых нет. Компоновщик — одна из важных частей компилятора, который объединяет файлы объектного кода и статический файл и создает исполняемый файл.
8) Что такое общий промежуточный язык (CIL)?
Ответ: Все приложения, предназначенные для .NET Framework, сначала компилируются на промежуточный язык, называемый CIL, который является машинно-независимым языком, и только во время выполнения эти промежуточные языки преобразуются в собственный машинный код.
Промежуточным языком в среде Java является байт-код.
9) Является ли Java компилируемым языком?
Ответ: Процесс компиляции Java состоит из двух этапов. Сначала исходный код преобразуется в байтовый код компилятором, а во время выполнения этот байтовый код проверяется байтовым верификатором, и он решает, что может скомпилировать и / или интерпретировать байт-код с помощью Java Interpreter / JIT Compiler. (Источник: stackoverflow)
10) Языковой переводчик — это системное программное обеспечение?
Ответ: Системное программное обеспечение — это программное обеспечение, разработанное для обеспечения платформы для другого программного обеспечения.Это программное обеспечение обеспечивает среду для работы и программирования, в которой пользователи взаимодействуют для создания прикладного программного обеспечения. Сюда входят операционная система, переводчик (языковой процессор), симуляторы, эмуляторы, служебное программное обеспечение и т. Д. Таким образом, все переводчики, такие как компиляторы, переводчики и интерпретаторы, являются системным программным обеспечением.
Компьютерные науки {SS2} — Переводчики
Компьютерные науки SS1 Второй семестр
Неделя 4:
Тема: Переводчики
Введение
Переводчики — это высокоразвитые программы, способные преобразовывать язык высокого уровня в машинный язык, язык низкого уровня в машинный язык.Транслятор — это компьютерная программа , которая выполняет перевод программы, написанной на данном языке программирования, в функционально эквивалентную программу на другом языке компьютера без потери функциональной или логической структуры исходного кода (« суть »каждой программы).
Типы переводчиков
- Ассемблер
- Компилятор
- Переводчик
- Если переводчик переводит язык высокого уровня на другой язык высокого уровня, он называется переводчиком или компилятором исходного кода.Примеры включают Haxe, переводчики FORTRAN-to-Ada, переводчики CHILL-to-C ++, переводчики PASCAL-to-C, переводчики COBOL (DialectA) -to-COBOL (DialectB).
- Если переводчик переводит язык высокого уровня на язык более низкого уровня, он называется компилятором. Обратите внимание, что каждый язык может быть переведен либо на (полный по Тьюрингу) язык высокого уровня, либо на язык ассемблера.
- Если переводчик переводит язык высокого уровня в промежуточный код, который будет немедленно выполнен, он называется интерпретатором.
- Если переводчик переводит целевой / машинный код на исходный язык, он называется декомпилятором. Пример: DCC, декомпиляторы Boomerang и компилятор обратного проектирования (REC).
- Если переводчик переводит язык ассемблера в машинный код, он называется ассемблером. Примеры включают MASM, TASM и NASM.
- Если переводчик переводит машинный код на язык ассемблера, он называется дизассемблером. Примеры включают gdb, IDA Pro и OllyDbg.
- Переводчики, которые переводят из удобочитаемого проекта, определенного в терминах правил и функций высокого уровня, в эквивалентные логические элементы и схему микросхемы, необходимые для его изготовления, относятся к категориям языков автоматизации проектирования и описания оборудования.
1. Ассемблер : это переводчик, способный напрямую преобразовывать язык низкого уровня в машинный. Ассемблер переводит язык ассемблера в машинный код. Язык ассемблера состоит из мнемоники для машинных кодов операций, поэтому ассемблеры выполняют преобразование 1: 1 из мнемоники в прямую инструкцию.
Например: LDA # 4
преобразуется в 0001001000100100
Преимущества использования ассемблера:
Очень быстро переводит язык ассемблера в машинный код как отношение 1 к 1 Ассемблерный код часто очень эффективен (и, следовательно, быстр), потому что это язык низкого уровня. Ассемблерный код довольно прост для понимания благодаря использованию англоязычной мнемоникиНедостатки использования Assembler: Язык ассемблера написан для определенного набора инструкций и / или процессора. Сборка имеет тенденцию быть оптимизированной для оборудования, для которого она предназначена, что означает, что она часто несовместима с другим оборудованием. Для выполнения относительно простых задач требуется много ассемблерного кода, а сложные программы требуют много времени на программирование.
2.Компилятор : это переводчик, способный напрямую преобразовывать язык высокого уровня в машинный. Компилятор — это компьютерная программа, которая переводит код , написанный на языке высокого уровня, в язык более низкого уровня, объектный / машинный код. Наиболее распространенной причиной перевода исходного кода является создание исполняемой программы (преобразование языка высокого уровня в машинный язык).
Преимущества использования компилятора
Исходный код не включен, поэтому скомпилированный код более безопасен, чем интерпретируемый. Создает более быстрый код, чем интерпретация исходного кода. Создает исполняемый файл, поэтому программу можно запускать без необходимости использования исходного кодаНедостатки использования компилятора Перед окончательным исполняемым файлом необходимо создать объектный код, это может быть медленным процессом. Для создания исполняемого файла исходный код должен быть на 100% правильным.
3.Интерпретатор : программа интерпретатора напрямую выполняет другие программы, проходя через программный код и выполняя его построчно. Поскольку он анализирует каждую строку, интерпретатор работает медленнее, чем запуск скомпилированного кода, но для интерпретации программного кода может потребоваться меньше времени, чем для его компиляции и последующего запуска — это очень полезно при прототипировании и тестировании кода. Интерпретаторы написаны для нескольких платформ, это означает, что код, написанный один раз, можно сразу запустить в разных системах без необходимости перекомпилировать для каждой.Примеры этого включают веб-программы на основе флэш-памяти, которые будут работать на вашем ПК, MAC, игровой консоли и мобильном телефоне.
Преимущества использования переводчика
Легче отлаживать (проверять ошибки), чем компилятор Легче создавать многоплатформенный код, поскольку на каждой отдельной платформе будет интерпретатор для запуска одного и того же кода. Полезно для создания прототипов программного обеспечения и тестирования базовой логики программыНедостатки использования интерпретатора Исходный код необходим для выполнения программы, и этот исходный код можно прочитать, что делает его небезопасным. Интерпретаторы обычно работают медленнее, чем скомпилированные программы, из-за построчного метода перевода.
Этапы программирования
В разработке хорошей программы есть шесть этапов.
- Анализ программы
- Программный дизайн
- Кодировка программы
- Проверка программы
- Программная документация
- Сопровождение программы
Блок-схема : это наглядное или графическое представление шагов при написании программы.
Language Translator — обзор
Языковые переводчики
Подмножество имеющегося в продаже программного обеспечения, заслуживающего особого внимания, — это языковые переводчики.Эти программные приложения позволяют пользователям писать и разрабатывать собственное программное обеспечение.
Переводчики языков позволяют программистам писать наборы инструкций на определенных языках программирования. Эти инструкции переводятся языковым переводчиком в машинный код. Затем компьютерная система считывает эти инструкции машинного кода и выполняет их. Следовательно, языковой переводчик — это программа, которая переводит с одного компьютерного языка на другой. Зачем это нужно?
Ранее в этой главе упоминалось, что процессоры могут понимать только машинный код или машинный язык (выраженный в двоичном коде).Машинный код зависит от оборудования, и, следовательно, существует столько же машинных кодов, сколько и конструкций оборудования. Хотя машинный код имеет полный смысл для компьютеров, это очень сложный и утомительный язык для написания программ. Поэтому программисты разработали другие менее сложные языки для написания программ. С годами эти языки программирования все ближе и ближе к человеческому языку. Следовательно, существует несколько поколений языков программирования для компьютеров.
Языки первого поколения (1GL) .1GL представляют собой реальный код, который понимают компьютеры; это машинный код. На заре компьютерных технологий программистам нужно было выучить конкретный паттерн из единиц и нулей во всех вычислительных инструкциях, чтобы указать компьютеру, что делать. Например, команда машинного кода для загрузки значения 1 может быть 10101001 00000001.
Языки второго поколения (2GL) . 2GL называются языками ассемблера. Каждой инструкции машинного кода дается мнемоника, что упрощает запоминание конкретных кодов.Приведенный выше пример на языке ассемблера будет LDA # $ 01, где LDA означает LoaD следующее значение в адресе памяти.
Языки третьего поколения (3GL) . 3GL называются процедурными языками или языками высокого уровня. Их легче понять, потому что они напоминают наш собственный английский язык больше, чем 1GL и 2GL. Однако для программирования на этих языках по-прежнему требуется специальная подготовка. Некоторыми примерами 3GL являются BASIC, COBOL, Pascal, Fortran, C, C ++, Perl и Ada.Один из последних языков, появившихся на рынке, называется JAVA. Этот язык, разработанный Sun Microsystems, позволяет программистам писать приложения, которые можно использовать в любой операционной системе (независимо от платформы). Его основное использование — на веб-страницах, где JAVA используется для написания апплетов (коротких приложений) для улучшения внешнего вида веб-страницы.
Языки четвертого поколения (4GL) . 4GL иногда называют проблемно-ориентированными языками или непроцедурными языками, и они требуют меньшего обучения, чем 3GL.На этих языках человек говорит компьютеру, что делать, а не как это делать. Программисты и конечные пользователи используют 4GL для разработки программных приложений. Некоторыми примерами являются SQL, ACCESS, Informix и FOCUS.
Языки пятого поколения (5GL) . Называемые естественными языками, 5GL переводят человеческие инструкции, включая орфографические ошибки и плохую грамматику, в машинный код. Они созданы, чтобы дать людям более естественное соединение с компьютером. Эти языки являются объектами значительных исследований.Есть надежда, что они смогут запоминать, как люди, а затем улучшать это.
За исключением языков первого поколения, все вычислительные языки должны быть преобразованы в машинный код, чтобы компьютерная система могла выполнять инструкции. Для этого используются два вида языковых переводчиков.
Составители . Компиляторы переводят всю компьютерную программу на машинный язык перед выполнением .
Устные переводчики .С другой стороны, интерпретаторы переводят программы по одной строке во время выполнения . Скомпилированные программы выполняются быстрее, чем переведенные, поскольку процесс преобразования происходит до выполнения.