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

Императивное расширение



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

ЗАГОЛОВОК-ПРЕДИКАТА::=

ИМЯ-ПРЕДИКАТА ( [ОПИСАНИЯ-АРГУМЕНТОВ] [: ОПИСАНИЯ-РЕЗУЛЬТАТОВ] )

ВЫЗОВ-ПРЕДИКАТА-ФУНКЦИИ::=

ИДЕНТИФИКАЦИЯ-ПРЕДИКАТА ( [АРГУМЕНТЫ] [: РЕЗУЛЬТАТЫ] )

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

Определим дополнительные операторы императивного расширения.

ОПЕРАТОР-ИМПЕРАТИВНОГО-РАСШИРЕНИЯ::=

break | ОПЕРАТОР-FOR | ОПЕРАТОР-ЕСЛИ

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

ОПЕРАТОР-FOR::= for ( ЗАГОЛОВОК-ЦИКЛА ) { ОПЕРАТОР [; ОПЕРАТОР] }

ЗАГОЛОВОК-ЦИКЛА::= [[ИЗОБРАЖЕНИЕ-ТИПА] ПАРАМЕТР-ЦИКЛА = ВЫРАЖЕНИЕ];

[УСЛОВИЕ-ЗАВЕРШЕНИЯ];

[ПЕРЕСЧЕТ-ПАРАМЕТРА]

ПАРАМЕТР-ЦИКЛА::= ИДЕНТИФИКАТОР

УСЛОВИЕ-ЗАВЕРШЕНИЯ::= ВЫРАЖЕНИЕ

ПЕРЕСЧЕТ-ПАРАМЕТРА::= ОПЕРАТОР

В императивном расширении используются также операторы перехода и помеченные операторы. Синтаксис и семантика определены в разд. 10.

Семантика цикла for соответствует языку C++. Выход из цикла for может также быть реализован оператором break из тела цикла.

ЦИКЛ-WHILE::= while ( ВЫРАЖЕНИЕ ) ОПЕРАТОР

Тело цикла while исполняется, пока логическое выражение в его заголовке истинно.


sum (list (int) a: int r) {

if (len (a) > 0) {

r = a [0];

int i = 1;

while (i < len (a)) {

r = r + a [i];

i = i + 1;

}

} else {

r = 0;

}

}

Пример 18. Использование цикла while

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

Циклы for и while часто используектся для представления циклов, реализуемых с помощью операторов перехода, в целях улучшения структуры программы.

Список литературы

1. Шелехов В. И. Введение в предикатное программирование. Новосибирск, 2002. 82 с. (Препр. / ИСИ СО РАН № 100).

2. Шелехов В. И. Язык предикатного программирования P. Новосибирск, 2002. 40 с. (Препр. / ИСИ СО РАН № 101).

3. Шелехов В. И. Предикатное программирование: основы, язык, технология // Методы предикатного программирования. Новосибирск, ИСИ СО РАН. 2003. С. 7-15.

4. Шелехов В. И. Разработка программы построения дерева суффиксов в технологии предикатного программирования. Новосибирск, 2004. 52 с. (Препр. / ИСИ СО РАН № 115).

5. Шелехов В. И. Язык спецификации процессов // Методы предикатного программирования. Новосибирск, ИСИ СО РАН. 2006. Вып. 2. C. 17-34.

6. Шелехов В. И. Модель корректности программ на языке исчисления вычислимых предикатов. Новосибирск, 2007. 51 с. (Препр. / ИСИ СО РАН № 145).

7. PVS Specification and Verification System. URL: http://pvs.csl.sri.com/

8. Milner R. A Calculus of Communicating Systems // LNCS. Springer Verlag, 1980. Vol. 94.

9. Lamport L. Specifying concurrent systems with TLA+. Calculational System Design. Series F: Computer and Systems Sciences. Amsterdam: IOS Press. 1999. N. 173. P. 183-247.

10. Moura L., Owre S., and Shankar N. The SAL Language Manual. SRI International. URL: http://sal.csl.sri.com/doc/language-report.pdf.





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



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