
- •Входные языки сапр и
- •Предисловие
- •1. Языки формулировки задания
- •1.1. Функции. Программ перевода.
- •Общие требования к языкам формулировки задания.
- •1.1.2. Требования к языкам формулировки задания с точки зрения их использования.
- •1.2.Лексический и синтаксический анализ.
- •1.3.Проверка контекста и порождение сценария.
- •2.Теория формальных языков.
- •2.1. Порождающие грамматики
- •2.2. Иерархия распознающих автоматов
- •3. Синтаксис языков программирования.
- •3.1. Основные характеристики языков.
- •3.2. Нормальные формы Бекуса
- •3.3. Определение и общие свойства порождающих грамматик
- •3.4. Контекстно-свободные грамматики
- •3.4.1. Определение дерева вывода.
- •3.4.2. Алгоритм получения скобочной записи синтаксического дерева вывода.
- •3.4.3. Операции над бинарными отношениями.
- •3.5. Автоматные грамматики.
- •3.6. Методы распознавания и анализа языков.
- •3.6.1. Машина Тьюринга как распознающее устройство.
- •3.6.2. Автоматы и преобразователи с магазинной памятью.
- •3.7. Построение анализаторов кс-языков по порождающим грамматикам.
- •3.7.1. Анализаторы предшествования.
- •3.7.2. Lr(k)-анализатор
- •3.7.3. Глобальный анализатор
- •3.8. Контекстные условия языков программирования
1.3.Проверка контекста и порождение сценария.
Выделяют два типа контекстных условий:
отношения между синтаксическими единицами в исходном тексте. Для нашего примера они могут быть следующими:
Каждый идентификатор, используемый в некотором присваивании должен встречаться, по крайней мере, в одном вводе или выводе.
Ни один идентификатор не должен встречаться одновременно и во вводе и в выводе.
Идентификатор, являющийся результатом не может быть входным данным.
отношения между синтаксическими единицами исходного текста и базой сцен.
Эти условия не могут быть формализованы в синтаксисе языка.
Для обработки контекстных условий требуется некоторое множество контекстных модулей. Эти модули формулируют контекстную информацию и проверяют ее. Модуль может быть приписан к каждой синтаксической единице. Контекстные модули подключаются при синтаксическом анализе либо обрабатывают дерево синтаксического анализа.
В приведенном примере синтаксическим единицам приписываются следующие контекстные модули:
ВХДАН – синтаксические единицы входные данные со следующими контекстными модулями:
занесение идентификатора во входной список;
проверка, что его нет в выходном списке;
проверка наличия идентификатора в написанной базе данных.
ВЫХДАН – выходные данные:
занесение идентификатора в выходной список;
проверка, что его нет во входном списке.
РЕЗУЛЬТАТ – результат выполнения выражения:
проверка, что идентификатора нет во входном списке.
ОПЕРАНД, ВОЗВРАТ 1
проверка, что идентификатор содержится во входном или выходном списке.
По такому же принципу как проверка контекстных условий происходит порождение сценария. В этом случае каждой синтаксической единице приписываются порождающие модули.
Пример 6:
Пусть оператор || осуществляет слияние двух отсортированных множеств в одно, а оператор : > выбирает отсортированные данные второго операнда по критерию сортировки (второй операнд). AG осуществляет объединение взятых в скобки операндов в зависимости от их свойств.
В этом случае к синтаксической единице операнд могут быть приписаны следующие модули:
Операнд ВОЗВРАТ 1 – является ли операнд уже отсортированным. Если нет, то в базе сцен ищется подходящая сцена, в сценарий добавляется соответствующий вызов модуля.
Порождение сценария определяется не только исходным текстом, но и базой сцен, которая зависит от типа задания. Задания бывают трех типов:
белый ящик – стратегия преобразования данных описывается полностью, т.е. с заданием всех промежуточных шагов;
черный ящик – описываются только входные данные, данные для процесса решения и требуемые выходные данные процесса решения;
серый ящик-тип задания промежуточный между белым и черным, здесь только некоторые шаги заданы явно.
Упражнения
Постройте синтаксическое дерево разбора для строки 4 программы из примера 4.
Постройте синтаксическое дерево разбора для строки 5 программы из примера 4.
Постройте синтаксическое дерево разбора для строки 6 программы из примера 4.
Постройте линейно-скобочную запись для строки 4 программы из примера 4.
Постройте линейно-скобочную запись для строки 5 программы из примера 4.
Постройте линейно-скобочную запись для строки 6 программы из примера 4.
Запишите результат лексического разбора программы из примера 4.