Блок-схема алгоритма работы ведущего модуля при интерпретации команд приведена на рис. 3.1.
Метод компиляции предполагает, что последовательность команд входного языка ППП сначала преобразуется во внутренний управляющий код, который может быть сохранен в памяти ЭВМ и использован многократно. Выполнение задания пользователя, представленного этим управляющим кодом, осуществляется по специальному запросу.
В ППП, предназначенном для решения расчетных задач с использованием некоторого набора обрабатывающих программных модулей, управляющий код может быть записан в форме управляющего вектора U = (u1, u2, …,um), каждая компонента которого содержит имя (код, номер) обрабатывающего или обслуживающего модуля и информацию о списке передаваемых в этот модуль фактических параметров.
Построение управляющего вектора может проводиться в диалоговом режиме, позволяющем пользователю исправлять синтаксические ошибки и редактировать текст вводимых команд. Для проверки выполнимости команд может потребоваться моделирование состояний модели предметной области. В этом случае обобщенный алгоритм ведущего модуля ППП, работающего в режиме компиляции, может быть построен следующим образом (рис. 3.2).
Имя модуля | Входные данные | Выходные данные |
М1 М2 М3 М4 М5 | a, b a, b c, b b, e a, d | c d e x x |
Тогда матрицы T и R имеют вид:
.Теперь, применяя логические операции к вектору-строке S и строкам матриц Ti и Ri (i=1…m), состоящим из n бинарных элементов, можем записать условие выполнимости i-ого обрабатывающего модуля и условие его эффективности. Напомним, что обрабатывающий модуль называется выполнимым (в данном состоянии Sk модели предметной области), если известны все его входные значения. Выполнимый модуль называется эффективным (в данном состоянии Sk модели предметной области), если его вызов переводит модель предметной области в новое состояние Sk+1¹Sk.
Условие выполнимости модуля:
,условие эффективности модуля:
.Здесь
- знак операции конъюнкции (логическое «И»), - знак операции отрицания.Если обозначить вектор исходного состояния S0, а требования к конечному состоянию определить бинарным вектором Z , компоненты которого имеют вид:
то задача планирования вычислительного процесса будет состоять в поиске такого пути на графе переходов (см. рис. 2.2), который из начального узла привел бы в любой из узлов, соответствующих условию конечного состояния:
.Один из методов планирования вычислений называется методом прямой волны. Сущность этого метода состоит в том, чтобы сформировать управляющий вектор, последовательно включая в него все выполнимые модули, эффективные в каждом текущем состоянии модели предметной области, и повторять этот процесс до тех пор, пока не будет получено одно из конечных состояний.
Алгоритм можно описать так.
Этап 1. Очистить формируемый управляющий вектор U, установить его текущую длину КU=0, установить вектор состояния МПО в начальное положение: Sk=S0.
Этап 2. Проверить вектор состояния МПО на достижение конечной цели, т.е. на выполнение условия
.Этап 3. Если
, то начать цикл по перебору функциональных связей, т.е. по строкам матриц T и R (i=1…m).При этом если будет выполнено условие:
(
) ( ),т.е. I-ый модуль выполним и эффективен, то:
1) включить этот модуль в очередную позицию управляющего вектора (например, своим номером: КU = КU + 1, U(КU) = i );
2) преобразовать текущее состояние модели предметной области[6]:
;3) проверить полученный вектор состояния МПО на достижение конечной цели, т.е. на выполнение условия
. Если , то получено решение задачи, если нет – перебор продолжается.Если задача планирования вычислений разрешима, то алгоритм прямой волны позволяет получить одно из возможных решений. Вместе с тем в управляющий вектор этот алгоритм включает и модули, выполнение которых не требуется для вычисления искомых данных.
Продолжим рассмотрение предыдущего примера.
Пусть исходное состояние МПО S0 = (1 1 0 0 0 0), т.е. известны данные a, b . Требуется сформировать управляющий вектор для вычисления х, т.е. Z = (0 0 0 0 0 1).
1) Проверка на достижение конечной цели: