Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЛО.DOC
Скачиваний:
42
Добавлен:
23.03.2016
Размер:
534.53 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример 6:

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

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

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

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

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

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

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

Упражнения

  1. Постройте синтаксическое дерево разбора для строки 4 программы из примера 4.

  2. Постройте синтаксическое дерево разбора для строки 5 программы из примера 4.

  3. Постройте синтаксическое дерево разбора для строки 6 программы из примера 4.

  4. Постройте линейно-скобочную запись для строки 4 программы из примера 4.

  5. Постройте линейно-скобочную запись для строки 5 программы из примера 4.

  6. Постройте линейно-скобочную запись для строки 6 программы из примера 4.

  7. Запишите результат лексического разбора программы из примера 4.