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

Какие бывают системы программирования

  • автор:

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

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

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

машинные языки ( на машинных кодах);

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

алгоритмические языки — машинно-независимые (языки высокого уровня) (Паскаль, Фортран, Бейсик и др.);

проблемно-ориентированные языки — языки программирования, предназначенные для решения задач определенного класса (Лисп, Симула и др.);

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

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

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

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

Интерпретатор (истолкователь) переводит и выполняет программу строка за строкой.

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

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

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

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

Языки программирования Уровень языка программирования

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

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

машинно-независимые (языки высокого уровня).

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

Языки высокого уровня делятся на:

процедурные (алгоритмические) (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов; для решения задачи процедурные языки требуют в той или иной форме явно записать процедуру ее решения;

логические (Prolog, Lisp и др.), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания;

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

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

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

Программы, написанные на языке ассемблера, требуют значительно меньшего объема памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему понимание архитектуры машины. Несмотря на то, что большинство специалистов в области программного обеспечения разрабатывают программы на языках высокого уровня, таких, как Object Pascal или C, наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблера.

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

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

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

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

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

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

Наиболее полное определение системы программирования и ее составляющих представлено в документе ГОСТ 19781-90. Согласно ему:

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

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

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

Что входит в состав комплекса, основные компоненты

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

  1. Компилятор или интерпретатор.
  2. Интегрированная среда разработки.
  3. Средства создания и редактирования текстов программ.
  4. Библиотеки стандартных программ и функций.
  5. Отладочные программы, помогающие находить и устранять ошибки.
  6. Диалоговая среда.
  7. Многооконный режим работы.
  8. Мощные графические библиотеки.
  9. Утилиты для работы с библиотеками.
  10. Ассемблер.
  11. Справочная служба.

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

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

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

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

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

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

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

Функции жизненного цикла разработки программы:

  1. Набор кода и его редактирование.
  2. Компиляция или интерпретация.
  3. Автоматизация сборки.
  4. Отладка.
  5. Профилирование.

Основные компоненты интегрированной среды разработки:

  1. Текстовый редактор, позволяющий редактировать код программы.
  2. Система поддержки сборки, выполняющая компиляцию проектов из исходных кодов.
  3. Компоновщик, который заботится об упорядочивании объектов в адресном пространстве программы. Это может включать перемещение кода, предполагающего определенный базовый адрес, на другую базу.
  4. Отладчик, который представляет собой набор инструментальных средств, позволяющий отлаживать программы на уровне исходного текста.

Компоновщик — инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает из них исполняемый или библиотечный файл-модуль.

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

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

Важным компонентом понятия системы программирования являются отладочные программы.

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

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

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

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

Машинно-ориентированные системы программирования

Классификация машинно-ориентированных систем:

  1. Машинные языки — совокупность машинных команд, отличающаяся количеством адресов в команде, назначением информации, задаваемой в адресах, набором операций, которые может выполнять машина. Каждый компьютер имеет свой машинный язык.
  2. Языки символического кодирования — они схожи с машинными языками и являются командными, однако представляют собой не последовательности двоичных и восьмеричных цифр, а символический код в виде идентификаторов, предназначенные для облегчения запоминания смыслового содержания операции.
  3. Автокод — языки, включающие в себя все возможности символического кодирования, посредством расширенного введения макрокоманд. Макрокоманда — программный алгоритм действий, записанный пользователем.
  4. Макрос — набор команд и инструкций, группируемых вместе в виде единой команды для автоматического выполнения задачи. Основное назначение макроса — сокращение последовательности символов, описывающих выполнение требуемых действий ЭВМ, для более сжатого вида.

Машинно-независимые системы программирования

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

Виды языков программирования в машинно-независимых системах:

  • процедурно-ориентированные;
  • проблемно-ориентированные языки;
  • объектно-ориентированное программирование.

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

Они включают в себя такие популярные языки как:

  1. Fortran — один из старейших языков программирования высокого уровня, который используется для приложений с интенсивными вычислениями. Fortan часто применяется в процессе научного и инженерного вычисления. Он удобен благодаря большой программной базе, возможностью работы с документами и библиотекам с открытым исходным кодом, доступных под свободными лицензиями. Язык может осуществлять интуитивную запись в виде массива, которая упрощает запись быстрых векторизованных вычислений.
  2. Бейсик является одним из самых простых языков программирования. Он был создан с целью обучения студентов основам решения задач с помощью написания кода, поэтому программа ориентировалась на пользователей, для которых скорость выполнения программ была не очень важна, и которым первостепенно необходима возможность использовать компьютер для решения своих задач, не имея специальной подготовки. В России сегодня наиболее популярна разновидность Turbo-Basic фирмы Borland.
  3. Язык программирования был создан как язык высокого уровня для разработки операционной системы UNIX и стал популярен благодаря своей простоте и эффективности. Си существенно повлиял на развитие индустрии программного обеспечения; его синтаксис стал основой для современных и востребованных языков C++, C#, Java.
  4. Паскаль — язык высокого уровня общего назначения, который был первоначально разработан Никлаусом Виртом в начале 1970-х годов. Он разрабатывался с целью создания платформы для обучения программированию, поэтому Паскаль недостаточно удобен при решении сложных задач и широко используется для математических операций. Разновидность языка Паскаль АБС стала полноценной системой для начинающих, которая сегодня используется для обучения студентов и школьников.

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

Основные проблемно-ориентированные языки:

  1. ЛИСП — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Так как исходный код состоит из списков, программы на ЛИСПе позволяют его изменять как структуру данных и создавать макросистемы, позволяющие программистам формировать новый синтаксис или новые предметно-ориентированные языки, встроенные в ЛИСП. В настоящее время ЛИСП применяется в экспертных системах, системах аналитических вычислений и т.д.
  2. Prolog — язык логического программирования, который обеспечивает решение задач, выраженных в терминах объектов и отношений между ними. Для того чтобы инициировать вычисления, выполняется специальный запрос к базе знаний, на которые система логического программирования генерирует ответы «истина» и «ложь».

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

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

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

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

Специальное программное обеспечение состоит из прикладных программ, проблемно ориентированных на решение определенных задач.

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

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

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

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

Языки программирования

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

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

Компьютер лишь механически выполняет эти предписания.

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

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

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

К наиболее известным процедурным системам программирования относят:

  1. Fortran, один из старейших и по сей день используемых в решении задач математической ориентации язык.
  2. Basic, являющийся универсальным символическим кодом инструкций для начинающих пользователей, самый популярный среди пользователей.
  3. ALGOL, представляющий собой алгоритмический язык, сыгравший большую роль в теории, в настоящее время практически не используется.
  4. PL/1 — многоцелевой язык, который в настоящее время не используется.
  5. Си – широко используемый язык при создании систем программного обеспечения.
  6. Pascal – чрезвычайно популярный язык как среди новичков в программировании, так и среди профессионалов. На его основе созданы более мощные языки такие, как Ada, Delphi.
  7. COBOL – язык, ориентированный на общий бизнес, сейчас практически не используется.
  8. Delphi – очень популярный объективно-ориентированный язык визуального программирования.
  9. Java – платформенно независимый язык объективно-ориентированного программирования, эффективен при создании интерактивных web-страниц.

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

  • Lips;
  • PROLOG.

Машинно-ориентированные системы программирования

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

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

  • высокое качество созданных программ;
  • предсказуемость заказов памяти и объектного кода;
  • использование конкретных аппаратных ресурсов;
  • необходимость знания системы команд и особенностей функционирования конкретной ЭВМ;
  • низкая скорость программирования;
  • трудоемкость процесса программирования;
  • невозможность непосредственного использования программ, составленных на этих языках, на компьютерах других типов.

По степени автоматического программирования машинно-ориентированные системы подразделяют на классы:

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

Машинно-независимые системы программирования

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

Машинно-независимые системы программирования подразделяют на:

  1. Процедурно-ориентированные системы. В этих системах входные языки программирования предназначены для записи при решении задач алгоритмов обработки информации. Эти языки обеспечивают программиста средствами четкого формулирования задач и получения результатов в требуемой форме.
  2. Проблемно-ориентированные системы используют в качестве входного языка язык программирования с проблемной ориентацией. Языки подобного типа обеспечивают программиста средствами короткой и четкой формулировки задач и средствами получения результатов в требуемой форме. Программы на этих языках программирования записываются в терминах решаемой задачи и реализуются через выполнение определенных процедур.
  3. Диалоговые языки. Обеспечивают оперативное взаимодействие пользователя с компьютером через сохранение в его памяти копии исходной программы в машинных кодах. В процессе изменений в программе система программирования устанавливает с помощью специальных таблиц взаимосвязь между структурами исходной и объектной программ, что дает возможность в дальнейшем редактировать объектную программу.
  4. Непроцедурные языки. Составляют группу языков, с помощью которых описывается организация обрабатываемых данных и языков связи с операционными системами. Являются табличными языками, позволяющими четко описывать как задачу, так и ее решения в наглядной форме. В одной таблице решений, описывающей некоторую ситуацию, содержатся все возможные блок-схемы реализаций алгоритмов решения.

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

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

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

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

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

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

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

Системы программирования – это комплексы программ и прочих средств, предназначенных для разработки и их эксплуатации на конкретном языке программирования для конкретного вида ЭВМ.

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

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

Компиляторы, предназначенные для перевода исходного текста на входном языке в язык машинных кодов.

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

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

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

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

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

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

Выделяют два вида трансляторов: интерпретаторы и компиляторы.

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

Существует два основных недостатка метода интерпретации:

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

2) Процесс трансляции одного и того же оператора повторяется такое число раз, которое должна исполнять эта команда в программе. Это приводит к резкому снижению производительности работы программы.

Трансляторы-интерпретаторы являются достаточно распространенными, так как они поддерживают диалоговый режим.

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

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

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

Применяют также трансляторы интерпретаторы-компиляторы, объединяющие в себе достоинства обоих принципов трансляции.

Большинство современных компиляторов работают в режиме трансляции.

Основные блоки (фазы) компилятора, их функции

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

В процессе компиляции можно выделить следующие подпроцессы (блоки, этапы).

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

2. Работа с таблицами.

3. Синтаксический анализ, или разбор.

4. Генерация кода, или трансляция в промежуточный код (например, языка ассемблер).

5. Оптимизация кода.

6. Генерация объектного кода.

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

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

Входом является цепочка символов некоторого алфавита.

Некоторые комбинации символов в программе рассматриваются как единые объекты – лексемы (например, зарезервированные слова, идентификаторы, числовые константы).

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

Выходом является последовательность лексем.

Работа с таблицами

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

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

Вход – цепочка лексем.

На этом этапе исследуется цепочка лексем и устанавливается, удовлетворяет ли она структурным условиям, явно сформулированным в определении синтаксиса языка.

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

Генерация кода

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

Замечание. На практике чаще одновременно строится и дерево, и код.

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

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

Оптимизация кода

Попытка сделать объектные программы более эффективными (т.е. быстрее работающими или более компактными).

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

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

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

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

Генерация объектного кода

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

В некоторых языках, вместо машинного кода генерируется интерпретируемый двоичный код » виртуальной машины «, также называемый байт-кодом (byte-code). Такой подход применяется в Forth, Lisp, Java , Perl, Python, а также в языках платформы Microsoft .NET.

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

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

Синтаксис и семантика

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

Синтаксис – описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию).

Пример синтаксической ошибки: употребление оператора цикла For без To или Next, или отсутствие знака равенства в приведенной на рисунке программе.

Синтаксические ошибки распознаются встроенным синтаксическим анализатором.

Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.

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

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

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