Компилятор транслятор интерпретатор: 2.3 Понятие транслятора, компилятора и интерпретатора

Содержание

2.3 Понятие транслятора, компилятора и интерпретатора

Транслятор (англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд[15].

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

Примеры компиляторов:

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

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

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

Компиляторы, интерпретаторы и трансляторы

 
Cyrax ©   (2006-11-20 13:44) [0]

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

Примеры трансляторов: assembler (язык ассемблера -> машинный код), дизассемблер (язык ассемблера -> машинный код), компиляторы и декомпиляторы языков высокого уровня, утилита, преобразующая pascal-код  в C-код, javac (транслятор Java) и др.
Компилятор – это частный случай (разновидность) трансляторов. А именно, такой транслятор, который преобразует программу на некотором языке программирования в машинный код. В строгом понимании под машинным кодом следует понимать машинный код процессора. Именно такого понимания придерживаются авторы книги «PHP 5» Дмитрий Котеров и Алексей Костарев, рассматривающие процесс преобразования кода с языка высокого уровня на промежу-точный код (например, байт-код или p-код) как трансляцию (трансляцию в широком понимании, не относящейся к компиляции). С другой стороны, промежуточный код тоже можно рассматри-вать как машинный, только машиной уже является не процессор, а виртуальная машина (CLR для .NET и JVM для Java). Такая абстракция позволяет представить процесс преобразования кода с языка высокого уровня на промежуточный код как компиляцию (разновидность трансляции). Та-кой подход наиболее распространён. Универсальность первого подхода заключается в том, что он не противоречит второму подходу, поскольку компилятор – это транслятор.
Следует отметить, что процесс преобразования процессорного кода в промежуточ-ный нельзя рассматривать как компиляцию (это трансляция процессорного кода в промежуточ-ный), поскольку компиляция подразумевает обработку сверху вниз, т.е. от языка более высокого уровня к языку более низкого (тогда как трансляция может происходить в любом направлении, в том числе и на одном уровне (например, pascal -> С)).
Интерпретатор – это программа, «просматривающая» код на некотором языке про-граммирования и «выполняющая» одну его инструкцию за другой. Основной функцией про-грамм, транслирующих (в частности, компилирующих) и интерпретирующих код является та, ко-торая выполняется на последнем этапе работы таких программ. Поэтому программы, которые сначала транслируют (компилируют согласно второму подходу в понимании компиляторов) код на языке высокого уровня в промежуточный код, а затем его интерпретируют, называют интер-претаторами (с оптимизирующим транслятором (первый подход) или компилирующего типа (второй подход)).
Ключевые отличие интерпретаторов от компиляторов:
1. интерпретатор обнаруживает синтаксические ошибки только когда интерпретиру-ет данную инструкцию
2. интерпретируемые языки позволяют формировать и изменять команды в процессе выполнения программы (для компилируемых языков это возможно только на этапе работы пре-процессора с помощью макросов)
2. интерпретатор ещё и «выполняет» преобразуемый код (естественно, с помощью процессора)
В определении интерпретаторов также существует два подхода. Согласно первому подходу (авторы книги «PHP 5» Дмитрий Котеров и Алексей Костарев) интерпретаторы не явля-ются подмножеством трансляторов, поскольку интерпретаторы не выдают на выходе преобразо-ванного кода программы. Второй подход относит интерпретаторы к множеству трансляторов, по-скольку интерпретатор всё же транслирует инструкции в машинный код (которые сразу же вы-полняет процессор), хотя и не выдаёт преобразованный код программы.

Ниже приведена таблица, иллюстрирующая различия в подходах к пониманию трансляторов, компиляторов и интерпретаторов.

Строгий подход Абстрактный подход
Сторонники авторы книги «PHP 5» Дмитрий Ко-теров и Алексей Костарев Авторы большинства статей в Ин-тернете
Классификация программ, преобра-зующих программный код Трансляторы и интерпретаторы. Компиляторы – частный случай трансляторов Трансляторы.
Компиляторы и интерпретаторы – частные случаи трансляторов
Характеристика интерпретаторов, выполняющих предварительную трансляцию в промежуточный код Интерпретатор с оптимизирующим транслятором или интерпретирую-щий транслятор (с основной функци-ей интерпретации) Интерпретатор компилирующего типа

Чистые компиляторы: C, C++, Pascal, Assembler
Чистые интерпретаторы: Basic, JavaScript, JScript, командный язык DOS (выполняю-щий bat-файлы), shell (командный язык Unix), Python и его разновидности, JVM (виртуальная машина Java), PHP до версии 3, CLR (общеязыковая среда исполнения технологии .NET).
Интерпретаторы с оптимизирующей трансляцией: PHP с версии 4, Perl
Трансляторы в промежуточный код: .NET-языки (Visual C#, Visual J#, Visual Basic .NET, Visual C++ .NET), javac (транслятор Java).

______________________________________________________________
Зацените статью и, собственно, своё мнение (только не обо мне, а об изложенном)…


 
Cyrax ©   (2006-11-20 13:46) [1]

Так, с таблицеё чё-то не вышло. Сейчас будет…


 

Александр Иванов ©   (2006-11-20 13:50) [2]

Слишком много букв, причем о вещах, которые уже описаны в толстенных книгах.


 
Игорь Шевченко ©   (2006-11-20 13:59) [3]


> Зацените статью

Графоманство


 
Курдль ©   (2006-11-20 14:04) [4]

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


 
KilkennyCat ©   (2006-11-20 14:04) [5]

ой.


 
Cyrax ©   (2006-11-20 14:09) [6]

Игорь Шевченко ©   (20.11.06 13:59) [3]

Зато всё по полочкам…

Александр Иванов ©   (20.11.06 13:50) [2]
Слишком много букв, причем о вещах, которые уже описаны в толстенных книгах.

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


 
boriskb ©   (2006-11-20 14:10) [7]

Cyrax ©   (20.11.06 13:44)

Дельная вещь.
Ты разобрался.

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

Только на всеобщее обозрение не надо было выставлять.
🙂


 
KilkennyCat ©   (2006-11-20 14:11) [8]

> Я что -гений ?:))

нет. ибо все гениальное — просто. а тут все слишком сложно. хотя можно было бы уложиться в два предложения.


 
Джо ©   (2006-11-20 14:12) [9]

Много ошибок и неточностей. Например:
Чистые интерпретаторы: … JVM (виртуальная машина Java).
Ну, и см.  [4] Курдль ©.


 
Cyrax ©   (2006-11-20 14:14) [10]

boriskb ©   (20.11.06 14:10) [7]


Возможно, выпендрёж…
Впрочем, я хотел обсудить детали. Чтоб не писать всё заново — копирнул.
Вот 4-й пост — вот это и нужно…


 
click   (2006-11-20 14:22) [11]

с дефисами проблемы имхо…
а в остальном… чтош, мысли в слух тебе удалось весьма похвально отформатировать…


 
Cyrax ©   (2006-11-20 14:27) [12]

Курдль ©   (20.11.06 14:04) [4]
Определение компилятора дано неточно (под это определение подходит и ассемблер).

Ну так чем ассемблер (не язык, а транслятор) не компилятор ??

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

Ну а это уже не чистые интерпретаторы…

Джо ©   (20.11.06 14:12) [9]
Много ошибок и неточностей. Например:
Чистые интерпретаторы: … JVM (виртуальная машина Java).

Что — не чистый ?


 
Vga ©   (2006-11-20 14:35) [13]

> Джо ©   (20.11.06 14:12) [9]
> Много ошибок и неточностей. Например:
> Чистые интерпретаторы: … JVM (виртуальная машина Java)
> .
>
> Что — не чистый ?

Это виртуальная машина. Причем, вполне может и сперва откомпилировать код, а потом запускать (JIT-компиляция).


 
Джо ©   (2006-11-20 14:39) [14]

> [12] Cyrax ©   (20.11.06 14:27)
> Что — не чистый ?

Совершенно верно. Равно как и технология .Net в которой также используется JIT-компиляция.


 
Курдль ©   (2006-11-20 14:41) [15]


> Cyrax ©   (20.11.06 14:27) [12]
> Ну так чем ассемблер (не язык, а транслятор) не компилятор ??

Ассемблер отличается от компилятора тем, что он транслирует одно предложение ЯП строго в одну машинную команду.

Основным отличием интерпретатора является то, что он транслирует и сразу инициирует выполнение предложения за предложением.


 
Курдль ©   (2006-11-20 14:43) [16]


> Джо ©   (20.11.06 14:39) [14]


> Vga ©   (20.11.06 14:35) [13]

Такие трансляторы называют Common-трансляторами.


 
Vga ©   (2006-11-20 14:46) [17]

> [16] Курдль ©   (20.11.06 14:43)

А как называют трансляторы вроде lua, которая сперва компилирует программу в байткод своей VM, потом выполняет на ней без фокусов типа JIT?


 
Cyrax ©   (2006-11-20 15:00) [18]

Курдль ©   (20.11.06 14:41) [15]
Ассемблер отличается от компилятора тем, что он транслирует одно предложение ЯП строго в одну машинную команду.

Одна команда asm -> одна команда процессора ?  Это что — фокус ?
Но даже если взять какой-то гипотетический язык выше машкода, где
одна команда языка -> одна команда процессора, то это тоже будет компилятор…

Основным отличием интерпретатора является то, что он транслирует и сразу инициирует выполнение предложения за предложением.

Да, JVM — не чистый интерпретатор, т.к. компилит весь код в натив (JIT»ом), только потом его запускает…
Но вот JIT — чистый копмилятор…


 
Anatoly Podgoretsky ©   (2006-11-20 15:04) [19]

> Cyrax  (20.11.2006 15:00:18)  [18]

Компилятор/Интерпритарор к ассемблеру не имеют отношения, есть и интерпритирующие ассемблеры.


 
Курдль ©   (2006-11-20 15:05) [20]


> Cyrax ©   (20.11.06 15:00) [18]
> Одна команда asm -> одна команда процессора ?  Это что — фокус ?

А ты не задумывался, почему не бывает «чистого» ассемблера, а он всегда с какими-то мерзкими добавочками типа «Ассемблер 386» или «Ассемблер РС»?

Дальше ты начинаешь утомлять. Я дал тебе точное определение и отличия трансляторов (возможно, они устарели).


 
Cyrax ©   (2006-11-20 15:38) [21]

Anatoly Podgoretsky ©   (20.11.06 15:04) [19]
Компилятор/Интерпритарор к ассемблеру не имеют отношения, есть и интерпритирующие ассемблеры.

Интерпретирующий ассемблер — интерпретатор, компилирующий — компилятор (и транслятор)…


 
oldman ©   (2006-11-20 18:39) [22]


> Транслятор (в пер. с англ. — «переводчик») – это программа,
>  принимающая на вход программу на одном языке и преобразующая
> её в программу на другом языке.

Мдя…


 
DrPass ©   (2006-11-20 18:44) [23]


> компилирующий — компилятор

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


 
oldman ©   (2006-11-20 18:46) [24]


> DrPass ©   (20.11.06 18:44) [23]
> Ассемблер по сути выполняет только подстановку — машинные коды вместо их символических обозначений

давно???


 
Anatoly Podgoretsky ©   (2006-11-20 19:50) [25]

> DrPass  (20.11.2006 18:44:23)  [23]

MacroAssembler


 
DrPass ©   (2006-11-21 00:07) [26]


> oldman ©   (20.11.06 18:46) [24]
> давно???

Изначально


> Anatoly Podgoretsky ©   (20.11.06 19:50) [25]

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


 
MeF Dei Corvi ©   (2006-11-21 00:47) [27]


> Ассемблер по сути выполняет только подстановку — машинные
> коды вместо их символических обозначений

А подстановка не есть преобразование?
К тому же есть ассемблеры, анализирующие код на лишние недостижимые команды.
FASM, например, очень интересный ассемблер.
http://ru.wikipedia.org/wiki/FASM


6 Трансляторы, компиляторы и интерпретаторы

6 Трансляторы, компиляторы и интерпретаторы

Язык программирования – это совокупность команд и операторов (ключевых слов) и вспомогательных символов, позволяющих описывать алгоритмы решения задач.

Программа – это алгоритм решения задачи, записанный на языке программирования.

Алгоритм – последовательность действий (операций) при решении задачи.

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

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

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

Информация в лекции «13 — Изрядное количество колористики» поможет Вам.

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

Компилятор переводит весь исходный текст программы целиков и создаёт при этом новый документ – объектный код программы. При этом компилятор сначала предварительно просматривает исходную программу, выявляет повторяющиеся места (чтобы не переводить их дважды) и синтаксические ошибки – неправильно записанные слова команд и операторов (например, printe вместо print e). Логические ошибки (вроде π = 4,13, а не 3,14) может выявить только сам разработчик программы.

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

Язык С++ в настоящее время является  самым распространённым в мире языком, большинство программ в России и и за рубежом создаётся именно на нём.

 

 

В состав чего входят транслятор интерпретатор ассемблера

1.Трансляторы, компиляторы и интерпретаторы: определение, общая схема работы. Варианты взаимодействия блоков транслятора.

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

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

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

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

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

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

Наиболее часто встречаются две разновидности трансляторов:

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

Рис. 1. Функциональные блоки транслятора

2. Эргономические требования, предъявляемые к дизайну пользовательских интерфейсов.

Дата добавления: 2015-04-21 ; просмотров: 7 ; Нарушение авторских прав

Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.

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

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

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

Ассемблер – компилятор, который переводит каждую команду исходной программы в одну машинную команду.

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

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

4.3 Общая схема работы компилятора

Основные функции компилятора:

1) проверка исходной цепочки символов на принадлежность к входному языку;

2) генерация выходной цепочки символов на языке машинных команд или ассемблере.

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

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

Данные этапы состоят из более мелких стадий, называемых фазами. Состав фаз и их взаимодействие зависит от конкретной реализации компилятора. Но в том или ином виде в каждом компиляторе выделяются следующие фазы:

1) лексический анализ;

2) синтаксический анализ;

3) семантический анализ;

4) подготовка к генерации кода;

5) генерация кода.

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

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

Общая схема работы компилятора представлена на рисунке 4.3.

Читайте также:
  1. БИЛЕТ -1
  2. Билет 1
  3. Билет 1
  4. Билет 1
  5. БИЛЕТ 1
  6. Билет 1
  7. Билет 1
  8. Билет 1
  9. Билет 1
  10. Билет 1

Рисунок 4.1– Общая схема работы компилятора

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

Лучшие изречения: Сдача сессии и защита диплома – страшная бессонница, которая потом кажется страшным сном. 8794 – | 7154 – или читать все.

78.85.5.224 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Читайте также:

  1. А этот текст отобразится уже с новой строки.
  2. Введение в информатику
  3. Введение в информатику
  4. Вопрос 1
  5. Использование радиочастотного диапазона
  6. Китайская философия
  7. Кодирование.
  8. Компиляция и интерпретация программ
  9. Маркировка боеприпасов
  10. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ 4 страница
  11. Нелинейные структуры данных 161

Принципы функционирования систем программирования. Современные системы.

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

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

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

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

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

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

Если рассматривать системы трансляции, то есть еще один вид трансляторов — кросс-трансляторы (и кросс-компиляторы). Кросс транслятор работает на некотором типе вычислительной системы, которая называется инструментальная ЭВМ. Инструментальная ЭВМ может характеризоваться своей архитектурой и/или операционным окружением, которое функционирует на ней. Кросс-транслятор обеспечивает перевод программы, записанной в нотации некоторого языка, в код вычислительной системы, отличной от инструментальной ЭВМ. Та вычислительная система,для которой генерируется код, называется объектной ЭВМ, и соответственно, тот код, который мы получаем, называется объектным кодом (это не тоже, что объектный модуль). На самом деле, бывают ситуации, когда тип объектной машины совпадает с типом инструментальной машины, но отличаются операционные среды, которые функционируют на данных машинах. В этом случае также нужна система кросс-программирования.

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

Обработка модульной программы.

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

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

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

В эту же схему также часто добавляется этап оптимизации программы, причем оптимизация может происходить до этапа трансляции (т.е. в терминах исходного языка) или/и после трансляции (в терминах машинного кода). Например до трансляции можно вычислить все константные подвыражения и т.д. Для машин типа PC этап оптимизации может быть не столь важен, потому что этот вопрос обычно разрешается покупкой какого-нибудь более быстрого компонента, но есть класс машин (mainframe), для которых этот этап необходим.

Давайте посмотрим на проблему кодирования с другой стороны. Мы посмотрим как устроен этап трансляции.

Каждый транслятор при обработке программы выполняет следующие действия.

Семантический анализ и генерация кода.

Лексический анализатор производит анализ исходного текста на предмет правильности записи лексических единиц входного языка. Затем он переводит программу из нотации исходного текста в нотацию лексем.

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

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

После этого исходная программа переводится в вид лексем. Лексема — это некоторая конструкция, содержащая два значения — тип лексемы и номер лексемы.

Тип лексемы№ лексемы

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

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

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

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

Мы с вами посмотрели на транслятор с точки зрения функциональных этапов. Но очень часто мы слышим об однопроходных трансляторах, двухпроходных, трехпроходных, и т.д. С проблемой трансляции связано понятие «проход». Проход — это полный просмотр некоторого представления исходного текста программы.

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

Если мы посмотрим Си-компилятор, с которым вы работаете, то скорее всего он двухпроходный. Первый проход — это работа препроцессора. После первого прохода появляется чистая Си-программа без всяких препроцессорных команд. На Втором проходе происходит лексический, синтаксический и семантический анализ, и в итоге вы получаете объектную программу в виде ассемблера.

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

Make-файл. К этой же проблеме кодирования относится средство поддержки разработки программных проектов. Одним из популярных средств, ориентированных на работу одного или нескольких программистов, является т.н. make-средство. Название происходит от соответствующей команды ОС UNIX. C make-командой связан т.н. make-файл, в котором построчно указываются взаимосвязи всевозможных файлов, получаемых при трансляции, редактировании связей, и т.д., и те действия, которые надо выполнить, если эти взаимосвязи нарушаются. В частности можно сказать, что некоторый исполняемый файл зависит от группы объектных файлов, и если эта связь нарушена, то надо выполнить команду редактирования связей (link . ). Что значит нарушение зависимости и что значит связь? Make-команда проверяет существование этих объектных файлов. Если они существуют, то времена их создания должны быть более ранние, чем время создания исполняемого файла. В том случае, если это правило будет нарушено (а это проверяет make-команда), то будет запущен редактор связей (link), который заново создаст исполняемый файл. Тем самым такое средство позволяет нам работать с программой, состоящей из большого количества модулей, и не заботитьсяо том, соответствует ли в данный момент времени исполняемый файл набору объектных файлов или не соответствует (можно просто запустить make-файл).

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

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

Ассе́мблер (от англ. assemble — собирать) — компилятор с языка ассемблера в команды машинного языка.

Под каждую архитектуру процессора и под каждую ОС или семейство ОС существует свой Ассемблер. Существуют также так называемые «кросс-ассемблеры», позволяющие на машинах с одной архитектурой (или в среде одной ОС) ассемблировать программы для другой целевой архитектуры или другой ОС, и получать исполняемый код в формате, пригодн Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM) и Macro Assembler (MASM). Также в своё время был популярен простой ассемблер A86.

При появлении операционной системы Microsoft Windows появилось расширение TASM, именуемое TASM32, позволившее создавать программы для выполнения в среде Windows. Последняя известная версия Tasm — пятая, включая различные к ней дополнения. Но официально развитие программы полностью остановлено.

Совсем по-другому обстоит дело с программой MASM. Она продолжает развиваться и по сей день, последние версии включены в наборы DDK. Но версия программы, направленная на создание программ для DOS, не развивается.

Для более удобного создания программ на ассемблере для Windows появился пакет, названный MASM32, автором которого является Стивен Хатчессон (aka hutch–). Более подробная информация доступна на сайте пакета MASM32

Настоящие ценители языка используют ассемблер FASM, бескорыстно предоставленный в общее пользование и написанный Томазом Грижтаром (Tomasz Grysztar). Официальный сайт ассеблера FASM

Несколько иначе обстоит ситуация с ассемблерами для другой известной операционной системы GNU/Linux. В её состав входит компилятор gcc, включающий в себя ассемблер gas (GNU Assembler)… Но в нём используется AT&T синтаксис, в отличие от Intel-синтаксиса, используемого в большинстве остальных ассемблеров.

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

YASM это переписанная с нуля версия NASM под лицензией BSD (с некоторыми исключенями).

FASM — молодой, но быстро развивающийся и завоёвывающий популярность ассемблер, распространяется с исходным кодом, есть версии для KolibriOS, GNU/Linux и Microsoft Windows, использует Intel-синтаксис. Также fasm поддерживает инструкции AMD64. Достоинством является очень сильный макроязык, разнообразие форматов выходных файлов и несколько изменённый (в лучшую сторону, но несколько непривычный для «старой школы») синтаксис.

Дата добавления: 2015-01-03 ; Просмотров: 1269 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Транслятор — это… Что такое Транслятор?

Эта статья о языках программирования; о естественных языках см.: Перевод.

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

Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.[1]

Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.[1]

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

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

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

Трансляторы подразделяют[2]:

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

Реализации

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

Язык процессоров (машинный код) обычно является низкоуровневым. Существуют платформы, использующие в качестве машинного язык высокого уровня (например, iAPX-432[5]), но они являются исключением из правила в силу сложности и дороговизны. Транслятор, который преобразует программы в машинный язык, принимаемый и исполняемый непосредственно процессором, называется компилятором.[6]

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

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

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

Другой метод реализации — когда программа исполняется с помощью интерпретатора вообще без трансляции. Интерпретатор программно моделирует машину, цикл выборки-исполнения которой работает с командами на языках высокого уровня, а не с машинными командами. Такое программное моделирование создаёт виртуальную машину, реализующую язык. Этот подход называется чистой интерпретацией.[6] Чистая интерпретация применяется как правило для языков с простой структурой (например, АПЛ или Лисп). Интерпретаторы командной строки обрабатывают команды в скриптах в UNIX или в пакетных файлах (.bat) в MS-DOS также как правило в режиме чистой интерпретации.

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

Существуют компромиссные между компиляцией и чистой интерпретацией варианты реализации языков программирования, когда интерпретатор перед исполнением программы транслирует её на промежуточный язык (например, в байт-код или p-код), более удобный для интерпретации (то есть речь идёт об интерпретаторе со встроенным транслятором). Такой метод называется смешанной реализацией.[6] Примером смешанной реализации языка может служить Perl. Этот подход сочетает как достоинства компилятора и интерпретатора (бо́льшая скорость исполнения и удобство использования), так и недостатки (для трансляции и хранения программы на промежуточном языке требуются дополнительные ресурсы; для исполнения программы на целевой машине должен быть представлен интерпретатор). Также, как и в случае компилятора, смешанная реализация требует, чтобы перед исполнением исходный код не содержал ошибок (лексических, синтаксических и семантических).

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

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

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

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

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

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

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

Примечания

  1. 1 2 3 ГОСТ 19781-83 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X
  2. 1 2 Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0
  3. СТ ИСО 2382/7-77 // Вычислительная техника. Терминология. Указ. соч.
  4. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания)
  5. Органик Э. Организация системы Интел 432 = A Programmer’s View of the Intel 432 System / Пер. с англ. — М.: Мир, 1987. — С. 20, 31. — 446 с. — 59 000 экз.

    Можно привести ряд других примеров, в которых архитектура разработанных серий вычислительных машин базировалась или сильно зависела от некоторой модели структуры программы. Так, серия GE/Honeywell Multics основывалась на семантической модели выполнения программ, написанных на языке ПЛ/1. В Burroughs (англ.) B5500, B6700 … B7800 прототипом послужила модель программы этапа выполнения, написанной на расширенном языке Алгол. …

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

    Язык Ада поддерживает объектно-базированное программирование, что и послужило причиной выбора его в качестве основного языка программирования для i432.

  6. 1 2 3 Роберт У. Себеста. 1.7. Методы реализации // Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — С. 45—52. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.)

Литература

  • Касьянов В. Н., Поттосин И. В. Методы построения трансляторов. — Новосибирск: Наука, 1986. — 344 с.

Ответы на вопрос «56. Понятие интерпретатора, транслятора и компилятора.»

 

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

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

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

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

Компилятор vs интерпретатор vs Транспилер



Во время сеанса reactJS, на котором я присутствовал, ведущий использовал термин транспилер для некоторого преобразования/переноса кода. Я всегда использовал и слышал термины компилятор и интерпретатор, когда речь заходит о преобразовании языкового кода в работоспособную форму на компьютере system/machine. Транспилер для меня в новинку. Чем транспилер отличается от компилятора или интерпретатора и почему он действительно нужен?

compiler-construction language-agnostic terminology interpreter transpiler
Поделиться Источник RBT     31 августа 2016 в 10:00

7 ответов


  • компилятор vs интерпретатор ( на основе построения и проектирования )

    Просмотрев множество постов о разнице между компиляторами и интерпретаторами, я до сих пор не могу понять разницу в их конструкции и внутреннем механизме. Самое распространенное различие, которое я читал, заключалось в том, что компилятор создает целевую программу, которая является исполняемой {…

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

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



37

Компилятор — компилирует код в код более низкого уровня.

Пример:

  • "Developer code" -> "Machine code"
  • PHP -> C
  • Java -> bytecode

Транспилер — компилирует код до того же уровня code/abstraction.

Пример:

  • "Developer code" -> "Another developer code or version"
  • JavaScript ES2015+ -> JavaScript ES5

Интерпретатор — интерпретирует код, на самом деле не в том же class/league/context с двумя приведенными выше.

Пример: php.exe

  • «Ваш код PHP/скрипты внутри index.php» -> «Приводит к html или так же, как чистый index.html »

Поделиться Jim M     17 ноября 2017 в 00:18



28

Как уже упоминалось в этой статье Wiki , это тип компилятора, который переводит исходный код с одного языка программирования на другой язык программирования. Исходный код может быть на каком-то языке, который больше не используется, или не поддерживает последние достижения в области аппаратного и программного обеспечения, или в соответствии с convenience/favoritism. программиста

Преобразователь VB6 в VB.NET можно рассматривать как транспилятор. Я мог бы подумать о инструменте COBOL — C# / C++ / Java в качестве транспилятора.

Поделиться Ajay     31 августа 2016 в 10:15



21

Его часто называют ‘transpiling’, когда вы переводите код с JS-препроцессорами, такими как CoffeeScript, TypeScript (вы называете его), в обычный JavaScript. Но на самом деле это не эксклюзивная вещь. Это относится ко всем видам языков программирования. В основном это просто называется компиляцией.

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

Согласно https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling /

Так что в вашем случае :

  • ‘compile’ JSX => JavaScript (и HTML), что, я думаю, соответствует приведенному выше определению.
  • Поэтому его можно назвать ‘transpiling’. Хотя назвать его ‘compiling’ тоже было бы нормально.

Еще один пример:

  • CoffeeScript / TypeScript / …whatEverScript.. => JavaScript и наоборот.

Поделиться fuma     07 сентября 2016 в 12:56


Поделиться Ira Baxter     01 сентября 2016 в 01:46


  • Изменение целевого компилятора в VS 2013 году на VS 2012

    У меня есть проект VS 2012, который работал нормально, пока проблемы с шаблоном в c++ не начали вызывать проблемы в VS 2013. Кто-то упомянул, что изменение компилятора на VS 2012 в настройках исправит проблему, используя тот же компилятор VS 2012. Шаги для этого, как мне сказали, состояли в том,…

  • MEX не может найти компилятор VS Express 2013-MATLAB R2013a

    При настройке mex на моей машине с помощью mex -setup -v компилятор VS Express 2013 не может быть найден по некоторым причинам (см. скриншот выше). У меня все еще есть VS 2010, установленный на моей машине, но я хотел бы иметь возможность выбрать компилятор Express 2013 на C:\Program Files…



6

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

Источник : Википедия

  • Компилятор — переводит исходный код с языка более высокого уровня на язык более низкого уровня.
    Пример : компиляторы C (C для машинного кода), инструмент javac JDK (java для байтового кода)
  • Транспилер — тип компилятора, который переводит исходные коды на один и тот же уровень абстракции.
    Пример : Babel (от ES6+ до ES5) — который вы можете использовать для написания кода ES6, все еще поддерживая старые браузеры, такие как IE 11 и ниже.

Поделиться shaahiin     27 ноября 2017 в 08:44



3

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

Типы компилятора

  • Компилятор собственного кода : Компилятор, используемый для компиляции исходного кода только для одного типа платформы. Выходные данные, генерируемые компилятором этого типа, могут быть запущены только на том же типе компьютерной системы и операционной системы(OS), на котором работает сам компилятор.
  • Кросс Компилятор : Компилятор используется для компиляции исходного кода для различных типов платформ. Используется при создании программного обеспечения для встраиваемых систем, которые могут использоваться на нескольких платформах.
  • Компилятор от источника к источнику : Преобразует HLL (Язык высокого уровня) или исходный язык в LLL (язык низкого уровня) или машинный язык.
  • Транспилер : Преобразует HLL (язык высокого уровня) в другой HLL

Поделиться Jeyanth     22 января 2019 в 04:23



3

По определению транспилер -это особая форма переводчика .

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

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

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

Поделиться Valera Grishin     18 ноября 2018 в 04:17



Похожие вопросы:


Потерял ли компилятор VS 2015 VB способность инкрементного построения?

У меня есть проект 500KLOC vb.net, содержащий около 1000 файлов кода. visual-studio-2012 удалось скомпилировать решение за 25 секунд, в то время как visual-studio-2015 требуется 150 секунд, и…


Как изменить компилятор VS?

Я использую VS 2010. Я изменил настройки для компилятора C кода вместо C++. Он работает нормально,но проблема в том, что компиляторы MS не поддерживают стандарт C99, поэтому я ищу компилятор C,…


Как установить собственный компилятор Microsoft для VS 2003, если компилятор Intel является компилятором по умолчанию?

Я использую среду разработки с VS 2003 в качестве IDE и компилятором Intel в качестве компилятора по умолчанию. Я должен установить компилятор Microsoft по умолчанию для компиляции моего проекта….


компилятор vs интерпретатор ( на основе построения и проектирования )

Просмотрев множество постов о разнице между компиляторами и интерпретаторами, я до сих пор не могу понять разницу в их конструкции и внутреннем механизме. Самое распространенное различие, которое я…


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

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


Изменение целевого компилятора в VS 2013 году на VS 2012

У меня есть проект VS 2012, который работал нормально, пока проблемы с шаблоном в c++ не начали вызывать проблемы в VS 2013. Кто-то упомянул, что изменение компилятора на VS 2012 в настройках…


MEX не может найти компилятор VS Express 2013-MATLAB R2013a

При настройке mex на моей машине с помощью mex -setup -v компилятор VS Express 2013 не может быть найден по некоторым причинам (см. скриншот выше). У меня все еще есть VS 2010, установленный на моей…


VS код не обнаруживает интерпретатор Python3 на MacOS

Я только что обновил python3 до 3.6 (используя homebrew), и теперь VS Code, похоже, не знает об этом. Когда я пытаюсь выбрать свой интерпретатор Python, я вижу 2.7.9 и 2.7.10 (в /usr/bin и…


VS Code не может найти интерпретатор python 3

Я устанавливаю Python 3.7.2 в первый раз и использую расширение VS Code python. Когда я запускаю python -V , я получаю Python 2.7.10 , что неверно! Когда я выбираю интерпретатор…


Как определить, поддерживает ли компилятор VS C++ C++11?

Как определить, поддерживает ли компилятор Visual Studio (VS) C++ C++11 через препроцессор macros? Я попробовал использовать __cplusplus (макрос препроцессора, который многие советуют использовать…

языковых процессоров: ассемблер, компилятор и интерпретатор

языковых процессоров —

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

Язык ассемблера является машинно-зависимым, однако мнемоника, используемая для представления в нем инструкций, не понимается напрямую машиной, а язык высокого уровня не зависит от машины.Компьютер понимает инструкции в машинном коде, то есть в форме нулей и единиц. Написание компьютерной программы непосредственно в машинном коде — утомительная задача. Программы написаны в основном на языках высокого уровня, таких как Java, C ++, Python и т. Д., И называются исходным кодом. Этот исходный код не может быть выполнен непосредственно компьютером и должен быть преобразован в машинный язык для выполнения. Следовательно, для перевода программы, написанной на языке высокого уровня в машинный код, используется специальное программное обеспечение системы трансляции, которое называется языковым процессором, а программа после преобразования в машинный код (объектная программа / объектный код).

Языковые процессоры могут быть любого из следующих трех типов:

1. Компилятор:
Языковой процессор, который за один раз считывает полную исходную программу, написанную на языке высокого уровня, и переводит ее в эквивалент. программа на машинном языке называется компилятором. Пример: C, C ++, C #, Java.


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

2. Ассемблер:
Ассемблер используется для перевода программы, написанной на языке ассемблера, в машинный код. Исходная программа — это входные данные ассемблера, содержащие инструкции на языке ассемблера. Вывод, сгенерированный ассемблером, представляет собой объектный код или машинный код, понятный компьютеру. Ассемблер — это, по сути, первый интерфейс, который может общаться между людьми с машиной.Нам нужен Ассемблер, чтобы заполнить пробел между человеком и машиной, чтобы они могли общаться друг с другом. код, написанный на языке ассемблера, представляет собой своего рода мнемонику (инструкции), такую ​​как ADD, MUL, MUX, SUB, DIV, MOV и так далее. а ассемблер в основном может преобразовывать эти мнемоники в двоичный код. Здесь эти мнемоники также зависят от архитектуры машины.

Например, архитектура Intel 8085 и Intel 8086 отличается.

3.Интерпретатор:
Перевод одного оператора исходной программы в машинный код выполняется языковым процессором и выполняется непосредственно перед переходом к следующей строке и называется интерпретатором. Если в операторе есть ошибка, интерпретатор завершает свой процесс перевода на этом операторе и отображает сообщение об ошибке. Интерпретатор переходит к следующей строке для выполнения только после устранения ошибки. Интерпретатор напрямую выполняет инструкции, написанные на языке программирования или сценариях, без предварительного преобразования их в объектный код или машинный код.

Пример: Perl, Python и Matlab.

Разница между компилятором и интерпретатором —

Компилятор Интерпретатор
Компилятор — это программа, которая преобразует весь исходный код языка программирования в исполняемый машинный код для ПРОЦЕССОР.
Интерпретатор берет исходную программу и запускает ее построчно, переводя каждую строку по мере ее поступления
Компилятору требуется много времени для анализа всего исходного кода, но общее время выполнения программы сравнительно быстрее.
Интерпретатору требуется меньше времени для анализа исходного кода, но общее время выполнения программы меньше.
Компилятор генерирует сообщение об ошибке только после сканирования всей программы, поэтому отладка сравнительно сложна, поскольку ошибка может присутствовать в любом месте программы. Его отладка проще, поскольку он продолжает переводить программу до тех пор, пока не будет обнаружена ошибка.
Компилятору требуется много памяти для генерации объектных кодов. Он требует меньше памяти, чем компилятор, поскольку объектный код не создается.
Создает промежуточный объектный код. Промежуточный объектный код не создается.
Для обеспечения безопасности более полезен компилятор. Интерпретатор немного уязвим с точки зрения безопасности.
Примеры: C, C ++, Java Примеры: Python, Perl, JavaScript, Ruby

Вниманию читателя! Все, кто говорит, что программирование не для детей, просто еще не встретили подходящего наставника.Присоединяйтесь к демонстрационному классу для первого шага к курсу программирования, специально разработан для учащихся 8-12 классов.

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

Полная разница между компилятором и интерпретатором

Что такое компилятор?

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

Компилятор должен соответствовать правилу синтаксиса того языка программирования, на котором он написан. Однако компилятор — это всего лишь программа и не может исправить ошибки, обнаруженные в этой программе. Итак, если вы допустили ошибку, вам нужно внести изменения в синтаксис вашей программы. В противном случае он не будет компилироваться.

Что такое переводчик?

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

КЛЮЧЕВАЯ РАЗНИЦА

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

Разница между компилятором и интерпретатором

Основание разницы Компилятор Переводчик
Шаги программирования
  • Создайте программу.
  • Compile проанализирует правильность всех языковых операторов. Если неверно, выдает ошибку
  • Если ошибок нет, компилятор преобразует исходный код в машинный код.
  • Он связывает разные файлы кода в исполняемую программу (известную как exe)
  • Запустите программу
  • Создание программы
  • Нет связывания файлов или генерации машинного кода
  • Исходные операторы, выполняемые построчно ВО ВРЕМЯ выполнения
Преимущество Программный код уже переведен в машинный код.Таким образом, время выполнения кода меньше. Переводчиками проще пользоваться, особенно новичкам.
Недостаток Вы не можете изменить программу, не вернувшись к исходному коду. Интерпретируемые программы могут работать на компьютерах с соответствующим интерпретатором.
Машинный код Хранить машинный язык как машинный код на диске Совсем не сохраняет машинный код.
Продолжительность Скомпилированный код работает быстрее Интерпретируемый код работает медленнее
Модель Он основан на языковой модели перевода-загрузки. Основано на методе интерпретации.
Генерация программы Создает программу вывода (в виде exe), которая может быть запущена независимо от исходной программы. Не создавать программу вывода. Таким образом, они оценивают исходную программу каждый раз во время выполнения.
Исполнение Выполнение программы отдельно от компиляции. Он выполняется только после того, как вся программа вывода скомпилирована. Выполнение программы является частью процесса интерпретации, поэтому оно выполняется построчно.
Требования к памяти Целевая программа выполняется независимо и не требует наличия компилятора в памяти. Переводчик существует в памяти во время перевода.
Лучше всего подходит для Привязан к конкретной целевой машине и не может быть перенесен. C и C ++ — самые популярные языки программирования, использующие модель компиляции. Для веб-сред, где важно время загрузки. Из-за того, что выполнен исчерпывающий анализ, компиляции требуется относительно больше времени для компиляции даже небольшого кода, который нельзя запускать несколько раз.В таких случаях лучше переводчики.
Оптимизация кода Компилятор видит весь код заранее. Следовательно, они выполняют множество оптимизаций, которые ускоряют работу кода Интерпретаторы видят код построчно, поэтому оптимизация не такая надежная, как компиляторы
Динамический ввод Сложно реализовать, поскольку компиляторы не могут предсказать, что произойдет во время очереди. Переводимые языки поддерживают динамический ввод
Использование Лучше всего подходит для производственной среды Лучше всего подходит для программы и среды разработки.
Ошибка выполнения Компилятор отображает все ошибки и предупреждения во время компиляции. Следовательно, вы не можете запустить программу, не исправив ошибки Интерпретатор читает один оператор и показывает ошибку, если таковая имеется. Вы должны исправить ошибку, чтобы интерпретировать следующую строку.
Ввод Требуется вся программа Требуется одна строка кода.
Выход Compliers генерирует промежуточный код machnie. Интерпретатор никогда не генерирует какой-либо промежуточный машинный код.
Ошибки Показать все ошибки после компиляции одновременно. Поочерёдно отображает все ошибки в каждой строке.
Программирование
языков
C, C ++, C #, Scala, Java — все используют компилятор. PHP, Perl, Ruby использует интерпретатор.

Роль компилятора

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

Роль переводчика

  • Интерпретатор построчно преобразует исходный код во время RUN Time.
  • Interpret полностью переводит программу, написанную на языке высокого уровня, на язык машинного уровня.
  • Интерпретатор позволяет оценивать и изменять программу во время ее выполнения.
  • Относительно меньше времени, затрачиваемого на анализ и обработку программы
  • Выполнение программы относительно медленно по сравнению с компилятором

ЯЗЫК ВЫСОКОГО УРОВНЯ

Языки высокого уровня, такие как C, C ++, JAVA и т. Д., Очень близки к английскому. Это упрощает процесс программирования. Однако перед выполнением его необходимо перевести на машинный язык. Этот процесс перевода выполняется либо компилятором, либо интерпретатором.Также известен как исходный код.

КОД МАШИНЫ

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

КОД ОБЪЕКТА

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

Java компилируется и интерпретируется.

Для использования относительных преимуществ компиляторов являются интерпретаторы, некоторые языки программирования, такие как Java, компилируются и интерпретируются. Сам код Java компилируется в объектный код.Во время выполнения JVM интерпретирует объектный код в машинный код целевого компьютера.

Ассемблеры, компиляторы и интерпретаторы — Программное обеспечение для программирования и IDE — GCSE Computer Science Revision

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

Ассемблер

‘Ассемблер переводит язык ассемблера в машинный код.Ассемблер — это низкоуровневый язык, написанный на мнемониках, который точно отражает операции ЦП.

Интерпретатор

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

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

Языки интерпретации включают JavaScript, PHP, Python и Ruby. Интерпретируемые языки также называются языками сценариев. Они идеально подходят для использования в динамических веб-приложениях. Они используются для кодирования на стороне клиента и на стороне сервера, поскольку представляют собой небольшие программы, выполняемые в браузере.

Компилятор

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

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

Java и C ++ — это скомпилированные языки программирования. Java — это язык программирования высокого уровня, который компилируется для создания байт-кода , который затем интерпретируется виртуальной машиной ( VM ).Байт-код — это код, который компилируется и затем может быть интерпретирован.

Джексон Габбард объясняет, как Facebook использует компиляторы

Что такое переводчики? Различные типы переводчиков

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

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

Он также обнаруживает и сообщает об ошибке во время перевода.

Роли переводчика:

• Перевод входных данных программы на языке высокого уровня в эквивалентную программу на машинном языке.

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

Различные типы переводчиков

Существуют следующие типы переводчиков:

Компилятор

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

Интерпретатор

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

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

Он дает лучшую диагностику ошибок, чем компилятор.

Различия между компилятором и интерпретатором

SI. №

Компилятор

Интерпретатор

1

Выполняет перевод программы в целом.

Выполняет перевод выписок за выписку.

2

Выполнение происходит быстрее.

Выполнение медленнее.

3

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

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

4

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

Прекращает перевод при обнаружении первой ошибки. Следовательно, отладка проста.

5

В языках программирования, таких как C, C ++, используются компиляторы.

В языках программирования, таких как Python, BASIC и Ruby, используются интерпретаторы.

ассемблер в код машинного языка.

Различия между компилятором и интерпретатором

Компиляторы и интерпретаторы — это программы, которые помогают преобразовывать язык высокого уровня (исходный код) в машинные коды для понимания компьютерами. Компьютерные программы обычно пишутся на языках высокого уровня. Язык высокого уровня — это язык, понятный людям. Чтобы было понятно, они содержат слова и фразы из широко используемых языков, например английского или других языков. Однако компьютеры не могут понимать языки высокого уровня, как мы, люди.Они могут понимать только программы, разработанные в двоичных системах, известных как машинный код. Начнем с того, что компьютерная программа обычно пишется на языке высокого уровня, который описывается как исходный код. Эти исходные коды должны быть преобразованы в машинный язык, и здесь появляется роль компиляторов и интерпретаторов.
Различия между интерпретатором и компилятором
Интерпретатор переводит только один оператор программы за раз в машинный код. Компилятор сканирует всю программу и сразу переводит ее в машинный код.
Интерпретатору требуется гораздо меньше времени для анализа исходного кода. Однако общее время выполнения процесса намного меньше. Компилятору требуется много времени для анализа исходного кода. Однако общее время, необходимое для выполнения процесса, намного быстрее.
Интерпретатор не генерирует промежуточный код. Следовательно, интерпретатор очень эффективен с точки зрения его памяти. Компилятор всегда генерирует промежуточный объектный код. Потребуется дополнительная ссылка. Следовательно, требуется больше памяти.
Продолжает перевод программы непрерывно, пока не будет обнаружена первая ошибка. Если обнаружена какая-либо ошибка, она перестает работать, и, следовательно, отладка становится легкой. Компилятор генерирует сообщение об ошибке только после того, как он просканирует всю программу, и, следовательно, отладка относительно сложнее при работе с компилятором.
Интерпретаторы используются, например, в таких языках программирования, как Ruby и Python. Compliers используются, например, в языках программирования, таких как C и C ++.

Как работают интерпретатор и компилятор?

Для начала компилятор создает программу. Он проанализирует все языковые утверждения, чтобы проверить их правильность. Если он обнаружит что-то неправильное, он выдаст сообщение об ошибке. Если ошибок не обнаружено, компилятор преобразует исходный код в машинный код. Компилятор связывает различные файлы кода с программами, которые можно запускать, например с exe.Наконец программа запускается.

Интерпретатор создает программу. Он не связывает файлы и не генерирует машинный код. Исходные операторы выполняются построчно во время выполнения программы.

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

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

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

Компилятор и интерпретатор в программировании

1. Кросс-компилятор

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

2.Собственный компилятор

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

3. Компилятор начальной загрузки

Компилятор, написанный на языке, который он собирается компилировать.

4. Декомпилятор

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

5. Компилятор исходного кода (Transpiler)

Это программа, которая осуществляет перевод между языками высокого уровня.Этот тип компиляторов также известен как транскомпилятор или транспилятор.

Примеры:

  • Emscripten: переводит C / C ++ в JavaScript.
  • Babel: переносит код JavaScript с ES6 + на ES5.
  • Cfront: исходный компилятор для C ++ (примерно с 1983 г.). Он использовал C в качестве целевого языка и создал код C без стиля отступов и без красивого промежуточного кода C, поскольку сгенерированный код обычно не предназначался для чтения людьми.

6.Переписчик языка

Обычно это программа, переводящая форму выражений без изменения языка.

7. Компилятор байт-кода

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

Примеры: компиляторы байт-кода для Java и Python.

8. Оперативный компилятор (JIT-компилятор)

JIT-компилятор откладывает компиляцию до времени выполнения.Обычно он выполняется внутри интерпретатора.

Примеры:

  • Самый ранний опубликованный JIT-компилятор относится к LISP в 1960 году.
  • Последний метод появился в таких языках, как Smalltalk, в 1980-х.
  • Затем JIT-компиляция привлекла всеобщее внимание среди современных языков, таких как Java, . NET Framework, Python и самые современные реализации JavaScript.
Функциональные возможности JRE (Java Runtime Environment)

В Java исходные файлы сначала компилируются и преобразуются в .class , которые содержат байт-код Java (высоко оптимизированный набор инструкций), затем интерпретатор байт-кода выполняет байт-код, а позже JIT-компилятор преобразует байт-код в машинный код.

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

9. Компиляция AOT

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

Пример:

Фреймворк Angular использует опережающий компилятор (AOT) для преобразования кода HTML и TypeScript в код JavaScript во время сборки, чтобы обеспечить более быструю визуализацию позже в браузере при выполнении кода.

10. Ассемблер

Ассемблер переводит понятный человеку язык ассемблера в машинный код. Этот процесс компиляции называется сборкой. Обратная программа, преобразующая машинный код в язык ассемблера, называется дизассемблером.

Ассемблер

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

Разница между интерпретатором компилятора и ассемблером

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

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

Основные зоны покрытия

1. Что такое компилятор
— Определение, функциональность
2. Что такое интерпретатор
— Определение, функциональность
3. Что такое Ассемблер
— Определение, функциональность
4. Разница Между интерпретатором компилятора и ассемблером
— Сравнение основных различий

Ключевые термины

Компилятор, интерпретатор, ассемблер

Что такое компилятор

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

Рисунок 1: Компилятор

Языки программирования, такие как C, C ++, используют компилятор для преобразования языка. На этих языках время выполнения меньше. Поэтому они считаются быстрыми языками.

Что такое переводчик

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

Интерпретатор одновременно выводит ошибку. Программист должен исправить эту ошибку, чтобы интерпретировать следующую строку. Языки программирования, такие как Python, Ruby, PHP, Perl, являются некоторыми примерами языков, основанных на интерпретаторах.

Что такое Ассемблер

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

Разница между интерпретатором компилятора и ассемблером

Определение

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

Функциональность

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

Язык

Такие языки, как C, C ++, используют компиляторы для преобразования кода. Такие языки, как Ruby, Perl, Python, PHP используют интерпретатор, а язык ассемблера использует ассемблер.

Заключение

Compiler, Interpreter и Assembler — это языковые переводчики. Разница между интерпретатором компилятора и ассемблером заключается в том, что компилятор преобразует целые программы на языке высокого уровня в машинный язык за один раз, в то время как интерпретатор преобразует программы на языке высокого уровня в машинный язык построчно, а ассемблер преобразует программы на языке ассемблера в машинный язык.

Артикул

1. «Что такое ассемблер, интерпретатор и компилятор? (На английском языке) », Exam Study Zone, 9 сентября 2017 г., доступно здесь.
2. «Введение в сборку». Tutorials Point, 19 марта 2018 г.

Author: alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *