Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Введение. Язык предикатного программирования P (Predicate programming language) является универсальным и может использоваться для разработки широкого класса программ



Язык предикатного программирования P (P redicate programming language) является универсальным и может использоваться для разработки широкого класса программ. По меньшей мере, этот класс включает программы, разрабатываемые обычно на языке ФОРТРАН, для задач вычислительной математики. В целях спецификации и реализации программ для реактивных систем язык P расширен средствами для описания процессов, передачи сообщений и порождения процессов, работающих параллельно с процессом-родителем. В меньшей степени язык P пригоден для задач системного программирования, где обычно используются объектно-ориентированные средства, которых нет в ядре языка P.

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

Функциональный язык удобнее императивного для разработки алгоритма. Однако получение эффективной программы для функциональных языков проблематично даже с применением изощренной оптимизации в процессе трансляции. Поэтому после отладки программы на функциональном языке для достижения требуемой эффективности ее приходится переписывать на императивный язык. Приемущество технологии предикатного программирования в том, что она является сквозной: к предикатной программе применяется набор трансформаций с получением эффективной программы на императивном расширении языка P (см. разд. 6.11), после чего программа может конвертироваться на любой из императивных языков: C, C++, ФОРТРАН и др. Базовыми трансформациями являются:

· склеивание переменных, реализующее замену нескольких переменных одной;

· замена хвостовой рекурсии циклом;

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

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

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

Язык предикатного программирования P впервые представлен в работе [1]. Полное описание языка P дается в препринте [2]. Последующие модификации и расширения языка инициированы использованием языка для описания различных алгоритмов [3–5]. Введены средства спецификации определений предикатов в виде предусловий и постусловий. Имеется опыт использования языка P в качестве языка публикации алгоритмов. Язык P расширен для спецификации и реализации реактивных систем, определяемых в виде совокупности взаимодействующих процессов [5]. Введены средства изображения процессов, операторы приема и посылки сообщений, средства динамического порождения процессов.

Все предыдущие версии языка P по стилю были ближе к языкам Паскаль и Модула-2. Последняя версия языка P, представленная в настоящем описании, по синтаксису, набору операторов и операций и другим особенностям существенно приближена к стилю языков типа C. Как следствие, язык P станет более комфортным для программирующих на языках C, C++, Java, C#. Изменения синтаксиса языка P стали причиной проведения серии серьезных модификаций во всем языке. Определенное влияние на новую версию языка P оказал язык спецификаиций PVS [7]. Введены алгебраические типы. Последовательности заменены списками.

Синтаксис описывается на расширенном языке Бэкусовских нормальных форм (БНФ) со следующими особенностями:

· терминальные символы выделены жирным шрифтом;

· [ фрагмент ] - означает возможное отсутствие в синтаксическом правиле заключенного в квадратные скобки фрагмента; фрагмент определяет последовательность терминальных и нетерминальных символов;

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

· (фрагмент)+ - определяет повторение фрагмента один или более раз;

· запись вида [:CLASS:] обозначает символ указанного класса; используются следующие классы символов:

alpha - буквенный символ, принадлежащий латинскому или русскому алфавиту; разрешаются заглавные и строчные буквы;

digit - цифра (0, 1, 2, 3, 4, 5, 6, 7, 8 или 9);

alnum - символ, принадлежащий alpha или digit;

blank - пробел или символ табуляции;

xdigit - шестнадцатеричная цифра (digit - заглавная или строчная буква от A до F);

print - символ, для которого определено начертание (т. е. символ из alnum, blank либо какой-либо другой символ, который можно отобразить).





Дата публикования: 2014-11-18; Прочитано: 418 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...