Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_EVM.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.78 Mб
Скачать

II. Принципы построения трансляторов

II.1. Определения транслятора

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

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

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

II.2. Определение компилятора

Понятие компилятора близко по смыслу понятию транслятора.

Компилятор это транслятор, который осуществляет перевод исходной програм­мы в эквивалентную ей результирующую программу на языке машинных команд или на языке ассемблера. Компилятор отличается от транслятора лишь тем, что его ре­зультирующая программа всегда должна быть написана на языке машинных ко­дов или на языке ассемблера. Результирующая программа транслятора, в общем случае, может быть написана на любом языке (например, транслятор программ с языка Pascal на язык С). Всякий компилятор являет­ся транслятором, но не наоборот — не всякий транслятор будет компилятором. Результирующая программа компилятора называется объектной программой или объектным кодом. А исходная программа в этом случае называется исходным кодом. Файл, в который она записана, обычно называется объ­ектным файлом. Даже в том случае, когда результирующая программа порож­дается на языке машинных команд и исполняемой программой (исполняемым файлом) есть существенная разница. Порожденная компилятором программа не может непосредственно выполняться на компьютере. Компилятор составляет объектную программу из фрагментов машинных кодов, соответствующих синтаксическим конструкциям исходной программы. Результирующая программа, созданная компилятором, строится на языке машинных кодов или на языке ассемблера, ориентирована на определенную ВС, имеющую конкретную архитектуру. Существуют компиляторы, которых результирующая программа создается не на языке машинных кодов и не на языке ассемблера, а на некотором промежуточном языке, который не может непосредственно выполняться на компьютере, а требует наличия промежуточного интерпретатора для выполнения написанной на нем программы. Промежуточный язык является языком низкого уровня, будучи родственным языку машинных кодов и языку ассемб. ВС, на которой выполняется результирующая объектная пр., созданная компилятором, называется целевой ВС. В это понятие входит не только ее архитектура и ОС, а также набор динам. подключ. библиотек, необходимых для выполнения программ. Объектная пр. ориентирована на целевую ОС, но не может быть выполнена на ней без дополнительной обработки. Целевая ВС не всегда является той ВС, на которой работает сам компилятор. Бывает так, что компилятор работает на ВС одного типа, а строит объектную пр. для ВС другого типа. Все компиляторы практически создаются с помощью других компиляторов предыдущих версий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]