Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Компиляторы и средства технического обслуживания



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

· Машинном языке

· Языке ассемблера

· Языке высокого уровня

· Языке сверхвысокого уровня

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

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

1) трансляция

2) компоновка

3) загрузка

4) активизация (выполнение).

Схематически все эти процессы можно описать следующим образом:

 

 

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

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

В зависимости тот режима работы трансляторы делятся на следующие группы:

· Компиляторы

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

· Ассемблеры

· Декомпиляторы

· Деассемблеры

Все это можно описать следующей схемой:

 

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

· Векторизующий

· Гибкий

· Диалоговый

· Инкрементальный

· Интерпретирующий

· Компилятор компиляторов

· Отладочный

· Резидентный

· Самокомпилируемый

· Универсальный

Виды компиляции:

1. Пакетная (указывают задание на обработку нескольких модулей)

2. Построчная (эквивалент интерпретации)

3. Условная (исходный текст записан на двух языках: сверхвысокого и высокого уровня)

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

 

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

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

2. Синтаксический/грамматический анализ: (воссоздается последовательная структура программы. Последовательность лексем преобразуется в дерево разбора).

3. Семантический анализ: (дерево разбора обрабатывается с целью выявления его смысла. Т.е. осуществляется привязка имен и типа, объявления. Определяются типы выражений и проверяются совместимостью. Результат обычно называется промежуточным кодом).

4. Оптимизация: (выполняются удаления излишних конструкций. Упрощается код с сохранением его смысла. При этом оптимизация может выполняться по быстродействию или объемам памяти).

5. Генерация кода: (из промежуточного представления формируется код на целевом языке). 

 

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

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


 

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

В таком процессе следует понимать, что обязательно будет существовать результат на промежуточном языке. Это удобно в тех случаях, если вычислительная система дает возможность совместного использования программ, написанных на разных языках. В этом случае, все они предварительно транслируются на промежуточный язык и приобретают одинаковую форму. В дальнейшем, должен существовать специальный транслятор, для процесса преобразования в машинный язык. Промежуточный язык часто называют байт-кодом. Именно так работает среда «.NET Framework». Т.е. можно записать функции на C#, C++ и некоторых других языках, а затем, вызывать их, например, в программе на C#. Чтобы повысить эффективность работы такой среды, часто используют специальные трансляторы с байт-кода, которые называются джиттерами (JIT – Just in time), эти трансляторы осуществляют трансляцию с байт-кода, по мере необходимости, по текущему требованию. Т.е. машинный код создается в тот момент, когда некоторая часть байт-кода, первый раз активизирована. Процесс работы с байт-кодом, можно описать следующим образом:

 


Поделиться:



Последнее изменение этой страницы: 2019-05-04; Просмотров: 196; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь