Проверка контекста и порождение сценария

Выделяют два типа контекстных условий:

· отношения между синтаксическими единицами в исходном тексте. Для нашего примера они могут быть следующими:

1. Каждый идентификатор, используемый в некотором присваивании должен встречаться, по крайней мере, в одном вводе или выводе.

2. Ни один идентификатор не должен встречаться одновременно и во вводе и в выводе.

3. Идентификатор, являющийся результатом не может быть входным данным.

· отношения между синтаксическими единицами исходного текста и базой сцен.

Эти условия не могут быть формализованы в синтаксисе языка.

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

В приведенном примере синтаксическим единицам приписываются следующие контекстные модули:

ВХДАН – синтаксические единицы входные данные со следующими контекстными модулями:

· занесение идентификатора во входной список;

· проверка, что его нет в выходном списке;

· проверка наличия идентификатора в написанной базе данных.

ВЫХДАН – выходные данные:

· занесение идентификатора в выходной список;

· проверка, что его нет во входном списке.

РЕЗУЛЬТАТ – результат выполнения выражения:

· проверка, что идентификатора нет во входном списке.

ОПЕРАНД, ВОЗВРАТ 1

· проверка, что идентификатор содержится во входном или выходном списке.

По такому же принципу как проверка контекстных условий происходит порождение сценария. В этом случае каждой синтаксической единице приписываются порождающие модули.

Пример 6:

Пусть оператор || осуществляет слияние двух отсортированных множеств в одно, а оператор: > выбирает отсортированные данные второго операнда по критерию сортировки (второй операнд). AG осуществляет объединение взятых в скобки операндов в зависимости от их свойств.

В этом случае к синтаксической единице операнд могут быть приписаны следующие модули:

Операнд ВОЗВРАТ 1 – является ли операнд уже отсортированным. Если нет, то в базе сцен ищется подходящая сцена, в сценарий добавляется соответствующий вызов модуля.

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

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

· черный ящик – описываются только входные данные, данные для процесса решения и требуемые выходные данные процесса решения;

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: