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

Стандартные схемы программ



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

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

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

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

Каждому распознавателю сопоставляется некоторый предикатный терм, а преобразователю – оператор присваивания, имеющий вид y:= t, где y – символ переменной, а t - функциональный терм.

Конечная совокупность всех переменных в схеме образуют ее память.

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

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

Программа выполняется при движении по графу переходов:

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

- при попадании на преобразователь с оператором x:= a вычисляется значение a и присваивается переменной x.

Результат выполнения программы – состояние памяти при попадании на выходную вершину.

Пример 5.2. Графическое представление схемы программы, приведенной в примере 5.1, приведено на рис.5.1.


m 0

m1

Рис.5.1. Графическое представление схемы программы

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

Для примера используем другую интерпретацию предложенной ранее схемы. Возьмем в качестве области интерпретации множество V* всех слов в некотором алфавите V. Константу а заменим пустым словом e. Функциональные и предикатные символы заменим операциями и предикатом над словами:

g – двуместной функцией CONSCAR, приписывающий первую букву первого слова ко второму слову (т.е. CONSCAR (ac,b) = ab, здесь и далее функции языка ЛИСП);

h – одноместной функцией CRD, стирающей первую букву слова (т.е.CRD(ac) = c);

p – предикатом «равно пустому слову e».

Такая интерпретация схемы порождает программу, которая любое слово a1,a2,…,an в алфавите V, поданное в качестве начального значения переменной х, превращает в «перевернутое» слово an,an-1,…,a1.

Программа переворачивания слов:

начало целые х, у;

ввод (х);

у:= e;

m: если х = e то на m1;

у:= CONSCAR (х, у);

х:= CRD(х);

на m;

m1: вывод (у);

конец

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

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

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

Между свойствами программ и свойствами схем программ устанавливается «терминологическая» связь. Например, говорят, что:

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

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

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

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

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





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



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