Системы программирования

по дисциплине «Организация и функционирование компьютерных систем»
СИСТЕМЫ ПРОГРАММИРОВАНИЯ: ОСНОВНЫЕ ПОНЯТИЯ

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

    Например, одна из популярных систем программирования на языке С/С++ от фирмы Watcom для OS/2 позволяет получать программы и для самой OS/2, и для DOS, и для Windows.

Система программирования включает следующие программные компоненты:

  • редактор текста;
  • транслятор с соответствующего языка;
  • компоновщик (редактор связей);
  • отладчик;
  • библиотеки подпрограмм.

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

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

Компоновщик, или редактор связей — системная обрабатывающая программа, редактирующая и объединяющая объектные (ранее оттраслированные) модули в единые загрузочные, готовые к выполнению программные модули. Загрузочный модуль может быть помещен ОС в основную память и выполнен.
Отладчик позволяет управлять процессом исполнения программы, является инструментом для поиска и исправления ошибок в программе. Базовый набор функций отладчика включает:

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

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

Список использованных источников

  1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. — СПб.: Питер, 2001. — с. 17-21
  2. Пустоваров В.И. Ассемблер: программирование и анализ корректности машинных программ: — К.: Издательская группа BHV, 2000. — с. 5-25

Понятие системы программирования.

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

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

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

· трансляторы с языков высокого уровня;

· средства редактирования, компоновки и загрузки программ;

· макроассемблеры (машинно-ориентированные языки);

· отладчики машинных программ.

Системы программирования, как правило, включают в себя:

· текстовый редактор (Edit), осуществляющий функции записи и редактирования исходного текста программы;

· загрузчик программ (Load), позволяющий выбрать из директория нужный текстовый файл программы;

· запускатель программ (Run), осуществляющий процесс выполнения программы;

· компилятор (Compile), предназначенный для компиляции или интерпретации исходного текста программы в машинный код с диагностикой синтаксических и семантических (логических) ошибок;

· отладчик (Debug), выполняющий сервисные функции по отладке и тестированию программы;

· диспетчер файлов (File), предоставляет возможность выполнять операции с файлами: сохранение, поиск, уничтожение и т.п.

Ядро системы программирования составляет язык. Существующие языки программирования можно разделить на две группы: процедурные и непроцедурные.

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

Процедурные языки разделяют на языки низкого и высокого уровня.

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

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

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

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

Алфавит – это счётное множество допустимых символов языка. Будем обозначать это множество символом V.

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

Цепочка символов α является цепочкой над алфавитом V; α(V), если в нее вводят только символы, принадлежащие множеству символов V. Для любого алфавита V пустая цепочка λ может как являться, так и не являться цепочкой λ(V). Это условие оговаривается дополнительно.

Если V – некоторый алфавит, то:

V+ – множество всех цепочек над алфавитом V без λ;

V* – множество всех цепочек над алфавитом V, включая λ.

Справедливо равенство: V* = V+{λ}.

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

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

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

Язык задать можно тремя способами:

– перечислением всех допустимых цепочек языка;

– указанием способа порождения цепочек языка (заданием грамматики языка);

– определением метода распознавания цепочек языка.

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

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

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

Синтаксис языка – это набор правил, определяющий допустимые конструкции языка. Синтаксис определяет «форму языка» – задает набор цепочек символов, которые принадлежат языку. Чаще всего синтаксис языка можно задать в виде строгого набора правил, но полностью это утверждение справедливо только для чисто формальных языков.

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

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

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

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

Для задания языка программирования необходимо решить три вопроса:

− определить множество допустимых символов языка;

− определить множество правильных программ языка;

− задать смысл для каждой правильной программы.

Только первые два вопроса полностью или частично удаётся решить с помощью лексики формальных языков.

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

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

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

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

− использовать для проверки смысла некоторую «идеальную машину», которая предназначена для выполнения программ, написанных на данном языке.

Грамматика − это описание способа построения предложений некоторого языка. Иными словами, грамматика − это математическая система, определяющая язык.

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

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

Правило (или продукция) − это упорядоченная пара цепочек символов (α, β). В правилах очень важен порядок цепочек, поэтому их чаще записывают в виде α→β (или α: = β). Такая запись читается как «α порождает β» или «β по определению есть α».

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

Язык, заданный грамматикой G, обозначается как L(G).

Две грамматики G и G’ называются эквивалентными, если они определяют один и тот же язык: L(G) = L(G’). Две грамматики G и G’ называются почти эквивалентными, если заданные ими языки различаются не более чем на пустую цепочку символов: L(G) {λ} = L(G’) {λ}.

Дата добавления: 2016-06-02; просмотров: 1194;

Виды и состав систем программирования

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

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

Виды систем программирования. Программисты предпочитают те системы, которые просты в использовании, позволяют получать эффективные программы, имеют богатые библиотеки программ. В качестве таких систем программирования используются Turbo С, Turbo С++, Turbo Pascal, С, С++ и другие. Системы программирования, прежде всего, различаются по тому, какой язык программирования они реализуют, например:

· язык С (Си) был изобретен в начале 1970-х гг. Кеном Томпсоном и Денисом Ритчи для написания весьма популярной ныне операционной системы UNIX. Этот язык соединяет свойства языка высокого уровня с возможностью эффективного использования ресурсов компьютера, которое обычно обеспечивается только при программировании на языке Ассемблера;

· язык С++ (Си плюс плюс) представляет собой расширение языка Си (создан в 1983 г. Бьёрном Страуструпом).

Язык облегчает создание сложных программ, реализует популярные в настоящее время концепции объектно-ориентированного программирования;

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

· язык Бейсик (Basic) (разработан в 1963 г. Томасом Курцем и Джоном Кемени) облегчает написание простых программ и предназначен для начинающих пользователей. Существует множество версий этого языка, которые не всегда совмести мы друг с другом. Язык мало подходит для написания больших и сложных программ;

· языки Лисп (Lisp, от англ. LISt Processing language – «язык обработки списков», создан в 1958 г. Джоном Маккарти) и Пролог (Prolog, фр. Programmation en Logique, создан в 1972 г.) используются для построения экспертных систем;

· а язык Clipper используется для создания информационных систем.

Состав систем программирования. В состав систем программирования входят:

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

· библиотеки программ, содержащие заранее подготовленные программы, которыми могут пользоваться программисты;

· различные вспомогательные программы.

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

Закрыть меню