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


Системное программное обеспечение



Системное программное обеспечение

 

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

Трансляторы, компиляторы, интерпретаторы. Этапы и фазы трансляции. Схема работы транслятора.

 

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

 aA bB

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

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

 

Ассемблер

Однопроходные и многопроходные трансляторы. Ассемблеры. Макроязыки, препроцессоры.

Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.

Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.

 

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

 

Макроязык — набор правил для объявления и использования макросов. Макросы используются в языках программирования, например, в ассемблере и в прикладных программах, например, в Microsoft Office.

(Макрос — символьное имя, заменяющее несколько команд языка ассемблера.)

 

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

Лексический анализ.

Лексема (лексическая единица языка) – это структурная единица языка,

которая состоит из элементарных символов языка и не содержит в своем составе других структурных единиц языка.

Лексемами языков естественного общения являются слова. Лексемами

языков программирования являются идентификаторы, константы, ключевые

слова языка, знаки операций и т. п. Состав возможных лексем каждого конкретного языка программирования определяется синтаксисом этого языка.

Лексический анализ (ЛА) – это первый этап процесса компиляции. На этом

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

Синтаксический анализ.

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

 

Рекурсивный спуск — это эффективный и простой нисходящий алгоритм распознавания. Он состоит в следующем. Для каждого нетерминала грамматики (понятия, конструкции языка), то есть для каждой синтаксической диаграммы, записывается отдельная распознающая процедура. При этом соблюдаются следующие соглашения: 1. Перед началом работы процедуры текущим является первый символ анализируемого понятия. 2. В процессе работы процедура считывает все символы входной цепочки, относящиеся к данному нетерминалу (выводимые из данного нетерминала) или сообщает об ошибке. Если правила для данного нетерминала содержат в правых частях другие нетерминалы (синтаксическая диаграмма данного нетерминала содержит другие нетерминалы), то процедура обращается к распознающим процедурам этих нетерминалов для анализа соответствующих частей входной цепочки. 3. По окончании работы процедуры текущим становится первый символ, следующий во входной цепочке за данной конструкцией языка (символами, выводимыми из данного нетерминала). Распознавание начинается вызовом распознающей процедуры начального нетерминала. При этом текущим символом, как это следует из п. 1, должен быть первый символ входной цепочки. По завершении работы начальной процедуры текущим должен быть символ «конец текста». Таким образом, анализ методом рекурсивного спуска всегда строится по следующей схеме: Название «рекурсивный спуск» обусловлено тем, что при наличии в грамматике самовложения вызовы распознающих процедур будут рекурсивными. Процесс распознавания развивается от начального нетерминала (корень дерева разбора) через вызов процедур для промежуточных нетерминалов (внутренние вершины дерева) к анализу отдельных терминальных символов (листья дерева). Это нисходящий разбор. Каждая распознающая процедура строится по соответствующей синтаксической диаграмме, которая играет роль схемы алгоритма. Соответствие участков Принцип работы анализатора, который строится по предлагаемым схемам, состоит в том, что, анализируя очередной символ входной цепочки, распознаватель выбирает путь движения по синтаксической диаграмме, соответствующий этой цепочке.

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

 

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

 

Подготовка к генерации кода. Распределение памяти. Виды переменных и областей памяти. Выравнивание границ. Менеджеры памяти. Статическое и динамическое связывание.

 

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

 

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

Область памяти — это блок ячеек памяти, выделяемый для данных, каким-то образом объединенных логически. Логика таких объединений задается семантикой исходного языка.

Распределение памяти работает с лексическими единицами языка — перемен­ными, константами, функциями и т. п. — и с информацией об этих единицах, полученной на этапах лексического и синтаксического анализа.

 

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

 

Статические библиотеки

Могут быть в виде исходного текста, подключаемого программистом к своей программе на этапе написания (например, для языка Fortran существует огромное количество библиотек для решения разных задач именно в исходных текстах), либо в виде объектных файлов, присоединяемых (линкуемых) к исполняемой программе на этапе компиляции (в Microsoft Windows такие файлы имеют расширение .lib, в UNIX‐подобных ОС — обычно .a). В результате программа включает в себя все необходимые функции, что делает её автономной, но увеличивает размер. Без статических библиотек объектных модулей (файлов) невозможно использование большинства современных компилирующих языков и систем программирования: Fortran, Pascal, C, C++ и других.

Основное назначение менеджера памяти в первом смысле — реализация динамической памяти. Например, в языке C динамическое выделение памяти производится через функцию malloc.

 

Трансляция адресов

Модуль, который выполняет преобразование относительных адресов в реальные (абсолютные), то есть осуществляет трансляцию.

 

Настраивающий загрузчик

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

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

 

Динамические загрузчики

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

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

 

Динамические библиотеки

Часть основной программы, которая загружается в ОС по запросу работающей программы в ходе её выполнения (Run-time), то есть динамически (Dynamic Link Library, DLL в Windows, SO в Linux). Один и тот же набор функций (подпрограмм) может быть использован сразу в нескольких работающих программах, из-за чего они имеют ещё одно название — библиотеки общего пользования (Shared Library). Если динамическая библиотека загружена в адресное пространство самой ОС (System Library), то единственная копия может быть использована множеством работающих с нею программ, что положительно сказывается на степени использовании ресурса ОЗУ. Динамические библиотеки могут содержать в себе как критические для работы программы части, так и дополнительные функции. Дополнительным плюсом такого подхода является то, что динамическая библиотека может быть использована в качестве плагина (Plug-ins), расширяющего функциональность программы. Минусом является то, что в случае, если модуль, который содержит в себе критическую часть, отсутствует, программа не сможет продолжить работу.

 

 

Статические библиотеки

Могут быть в виде исходного текста, подключаемого программистом к своей программе на этапе написания (например, для языка Fortran существует огромное количество библиотек для решения разных задач именно в исходных текстах), либо в виде объектных файлов, присоединяемых (линкуемых) к исполняемой программе на этапе компиляции (в Microsoft Windows такие файлы имеют расширение .lib, в UNIX‐подобных ОС — обычно .a). В результате программа включает в себя все необходимые функции, что делает её автономной, но увеличивает размер. Без статических библиотек объектных модулей (файлов) невозможно использование большинства современных компилирующих языков и систем программирования: Fortran, Pascal, C, C++ и других.

 

Системное программное обеспечение

 

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

Трансляторы, компиляторы, интерпретаторы. Этапы и фазы трансляции. Схема работы транслятора.

 

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

 aA bB

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

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

 


Поделиться:



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


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