Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М.

advertisement
Лекция 2
Языки и методы
программирования
Преподаватель – доцент каф. ИТиМПИ
Кузнецова Е.М.
Содержание
 Парадигмы программирования.
 Металингвистические формулы Бэкуса –
Наура.
 Синтаксическая диаграмма Вирта.
Парадигмы программирования
 Парадигма - набор теорий, стандартов и
методов, которые совместно представляют
собой способ организации научного знания, иными словами, способ видения мира.
 парадигма в программировании - способ
концептуализации, который определяет, как
следует проводить вычисления, и как работа,
выполняемая компьютером, должна быть
структурирована и организована.
Парадигмы программирования
 Парадигма программирования — это
совокупность идей и понятий, определяющая
стиль написания программ. Парадигма, в
первую очередь, определяется базовой
программной единицей и самим принципом
достижения модульности программы.
 В качестве этой единицы выступают
определение (декларативное, функциональное
программирование), действие (императивное
программирование), правило (продукционное
программирование), диаграмма переходов
(автоматное программирование) и др.
парадигмы директивного, объектноориентированного и функциональнологического программирования.
Директивное программирование (directive
programming)
 C и Pascal
 разработчик программы использует процессорно-
ориентированная модель, то есть пытается создать код,
должным образом воздействующий на данные.
Активным началом при этом подходе считается
программа (код), которая должна выполнить все
необходимые для достижения нужного результата
действия над пассивными данными.
объектно-ориентированный (object
oriented) подход
 C++ и Java.
 первичными считаются объекты (данные), которые
могут активно взаимодействовать друг с другом с
помощью механизма передачи сообщений
(называемого также и механизмом вызова методов).
Функция программиста - он должен придумать и
реализовать такие объекты, взаимодействие которых
после старта программы приведет к достижению
необходимого конечного результата.
Функциональное и логическое
программирование
 Lisp, Haskell и Prolog.
 Эта парадигма базируется на принципиально
иной трактовке понятия программы. Здесь
главным является точная формулировка
задачи, а выбор и применение необходимого
для ее алгоритма решения -- проблема
исполняющей системы, но не программиста.
Языки программирования
 Алфавит - фиксированный для данного языка
набор основных символов, допускаемых для
составления текста программы на этом языке.
 Синтаксис - система правил, определяющих
допустимые конструкции языка
программирования из букв алфавита.
 Семантика - система правил однозначного
толкования отдельных языковых конструкций,
позволяющих воспроизвести процесс
обработки данных.
 Взаимодействие синтаксических и
семантических правил определяют понятия
языка.
 правила грамматики и семантики для
языков программирования должны быть
явно, однозначно и четко сформулированы.
достоинства ЯПВУ :
• алфавит языка значительно шире машинного,
что делает его гораздо более выразительным и
существенно повышает наглядность и
понятность текста;
• набор операций, допустимых для
использования, не зависит от набора
машинных операций, а выбирается из
соображений удобства формулирования
алгоритмов решения задач определенного
класса;
достоинства ЯПВУ :
• конструкции команд (операторов) отражают
содержательные виды обработки данных и
задаются в удобном для человека виде;
• используется аппарат переменных и действия
с ними;
• поддерживается широкий набор типов
данных.
МЕТАЯЗЫКИ ОПИСАНИЯ
ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
 металингвистические формулы Бэкуса -
Наура (язык БНФ)
(Предложены Джоном Бэкусом в конце 50-х
годов для описания синтаксиса языка ALGOL)
 синтаксические диаграммы Вирта.
металингвистические формулы
Бэкуса - Наура
Для каждого понятия языка существует
единственная метаформула (нормальная
форма).
 символ ::= имеет значение «по определению
есть"
 символ | имеет значение "или"
 пара символов < > ограничивает имя
синтаксической единицы
металингвистические формулы
Бэкуса – Наура (примеры)
<переменная>::=А|В
<выражение>::=<переменная>|<переменная>+
<переменная>|<переменная><переменная><переменная>
А; В; А+А; А+В; В+А; В+В; А-А; А-В: В-А; В-В
<двоичная цифра>::= 0|1
<двоичный код>::=<двоичная цифра>|<двоичный
код> <двоичная цифра>
металингвистические формулы
Бэкуса - Наура (примеры)
<цифра>::= 0|1|2|3|4|5|6|7|8|9
<целочисленное значение> ::= цифра | цифра <
целочисленное значение>
Синтаксическая диаграмма
Вирта
 является графическим представлением
значения метапеременной метаязыка.
Диаграмма состоит из основных символов или
понятий языка.
Синтаксическая диаграмма
Вирта
 Металингвистические формулы в некотором
виде заложены в трансляторы; с их помощью
ведется проверка конструкций, используемых
программистом, на формальное соответствие
какой-нибудь из конструкций, синтаксически
допустимых в этом языке (синтаксический
контроль).
Модели трансляции. Трансляторы
По типу выходных данных различают два
основных вида трансляторов:
 компилирующие окончательный
выполнимый код;
 компилирующие интерпретируемый код,
для выполнения которого требуется
дополнительное программное обеспечение.
 Языки, формирующие окончательный
выполнимый код, называются
компилируемыми языками. К ним относятся
языки С, C++, FORTRAN, Pascal.
 Языки, реализующие интерпретируемый код,
называются интерпретируемыми языками. К
таким языкам относятся язык Java, LISP, Perl,
Prolog.
 Программный модуль - определенным
образом оформленный код на языке высокого
уровня.
 Процесс трансляции в этом случае может
выполняться как единое целое – компиляция и
редактирование связей, или как два отдельных
этапа – сначала компиляция объектных
модулей, а затем вызов редактора связей,
создающего окончательный код.
 Объектный код, создаваемый компилятором,
представляет собой область данных и область
машинных команд, имеющих адреса, которые
в дальнейшем "согласуются" редактором связи
(иногда называемым загрузчиком). Редактор
связи размещает в едином адресном
пространстве все по отдельности
откомпилированные объектные модули и
статически подключаемые библиотеки.
Процесс трансляции
 Программу, написанную на языке
программирования высокого уровня, называют
исходной программой, а каждую
самостоятельную программную единицу,
образующую данную программу, программным модулем.
 В ходе трансляции важно не просто
откомпилировать программу, а получить при
этом достаточно эффективный код
 анализ исходной программы → синтез
выполнимой формы программы.
 Трансляторы (в зависимости от числа
просмотров исходной программы,
выполняемых компилятором) однопроходные, двухпроходные и
трансляторы, использующие более двух
проходов.
Фаза анализа программы
 лексический
анализ;
 синтаксический
анализ;
 семантический
анализ.
На этапе синтаксического анализа
происходит разбор полученных лексем с
целью получения семантически понятных
синтаксических единиц, которые затем
обрабатываются семантическим анализатором.
(синтаксическими единицами выступают
выражения, объявление, оператор языка
программирования, вызов функции)
На этапе семантического анализа
происходит обработка синтаксических единиц
и создание промежуточного кода. В
зависимости от наличия или отсутствия фазы
оптимизации результатом семантического
анализа может быть оптимизируемый далее
промежуточный код или готовый объектный
модуль.
задачи, решаемые семантическим
анализатором, :
 обнаружение ошибок времени компиляции;
 заполнение таблицы символов, созданной на этапе
лексического анализа, конкретными значениями,
определяющими дополнительную информацию о
каждом элементе таблицы;
 замена макросов их определениями;
Макросом называется некоторый предварительно
определенный код, который на этапе компиляции
вставляется в программу во всех местах указания
вызова данного макроса.
На фазе синтеза программы
 генерация кода;
 редактирование связей
процесс генерации кода является
неотъемлемой частью фазы синтеза
программы, а необходимость выполнения
редактора связей зависит от конкретного
языка программирования.
 Редактор связей приводит в соответствие адреса
фрагментов кода, расположенных в отдельных
объектных модулях: определяются адреса вызываемых
внешних функций, адреса внешних переменных,
адреса функций и методов каждого модуля. Для
редактирования адресов редактор связей использует
специальные, создаваемые на этапе трансляции,
таблицы загрузчика. После обработки объектных
модулей редактором связей генерируется выполнимая
форма программы
Download