- •3. Опорный конспект лекций
- •3.1. Введение, определение языка
- •3.1.1. Элементы теории языка и их грамматика. Символы, цепочки и операции над ними
- •Формальное определение языка
- •3.1.3. Отношения и операции над ними
- •3.1.4. Требования, предъявляемые к грамматикам
- •Способы представления синтаксиса языка. Задание бесконечного текста конечными средствами. Проблема разбора. Классификация языков
- •3.2. Сканеры (лексические анализаторы)
- •3.2.1. Автоматные грамматики и диаграмма состояний
- •Регулярные выражения и конечные автоматы
- •Недетерминированные конечные автоматы
- •3.3. Грамматики простого предшествования
- •3.3.1. Простые предшествования.
- •Отношения предшествования и их вычисление
- •Операторное предшествование
- •Вычисление отношений операторного предшествования. Алгоритм разбора на основе операторного предшествования
- •3.3.5. Предшествование более высокого порядка
- •3.3.6. Способ представления грамматики в оп
- •3.3.7. Предшествование более высокого порядка
- •3.3.8. Ограниченный контекст
- •Определение 1:1 ограниченного контекстного распознавателя
- •Алгоритм 1:1 ограниченного контекстного преобразователя
- •Примеры разбора цепочек по алгоритму 1:1 ограниченного контекстного преобразователя
- •Определение m: n - ограниченного контекста
- •3.4. Автоматы с магазинной памятью, [ мп-автомат ]
- •Операции над магазином:
- •Операции над состоянием:
- •Операции над входной цепочкой:
- •Автомат задаётся:
- •Варианты мп-автоматов (доопределение)
- •Эквивалентность мп-автоматов и кс-грамматик
- •Мп, работающий снизу вверх
- •Формальное определение для левой свертки
- •Восходящий распознаватель
- •Детерминированный мп-автомат
- •Проблема зацикливания
- •3.4.1. Общие методы синтаксического анализа.
- •Вопросы для самопроверки
- •Нисходящий разбор
- •Нисходящий преобразователь (распознаватель)
- •Моделирование мп –преобразователя. Нисходящий анализ с возвратом Синтез процедуры
- •Нисходящий разбор в терминах грамматик
- •Алгоритм нисходящего разбора
- •Пример:
- •Алгоритм восходящего разбора
- •3.4.2. Польская запись, тетрады, триады, деревья.
- •Перевод индексной записи в тетрады
- •3.5. Теория перевода
- •3.5.1. Формализмы определения перевода
- •3.5.2. Синтаксически управляемый перевод
- •3.5.3. Конечные преобразователи. (Простейший транслятор)
- •3.5.4. Преобразователи с магазинной памятью
- •Лабораторная работа №7 Поиск основы в грамматиках простого предшествования
- •5. Контроль знаний
- •Глоссарий
3.3.7. Предшествование более высокого порядка
Рассмотрим следующее дерево:
+
T
E
*
(E)
F
T
E+T
E
Для этого дерева существует следующие неоднозначности: +≐T и +⋖T; (≐E и (⋖E.
Для простого предшествования это не пригодно, поэтому для нашего случая необходимо ввести символ, чтобы Т не совпадали, то есть введем стратификацию.
Для решения проблемы введём новые правила:
E: = E1;
E1: = E1+T1|T1;
T1: = T.
Теперь, учитывая эти новые правила, можно нарисовать следующее дерево:
E1
E
T1
+
T
Т
*
F
(E)
E1
E1+T
В итоге для этого дерева имеем следующие отношения:
+≐T1 и +⋖T;
(≐E и (⋖E1.
Для первого дерева без замены Т и ввода новых правил получим
E+T*F;
+⋖T*;
(⋖E+.
Для того чтобы отличать предшествование 2.1 от операторного, внесём символ «∘» за знак < . Пусть у нас есть три символа R, S, T , которые принадлежат словарю алфавита.
Этот путь решения проблемы называется стратификация.
RS>∘ T – S является хвостом основы.(2.1 предшествование).
RS =>∘ T – T принадлежит основе. (2.1 предшествование).
R∘<ST – S является головой основы. (1.2 предшествование).
R∘<= ST – R принадлежит основе. (1.2 предшествование).
R, S, TÎ VN∪VT.
Выводы к определениям:
RS>∘T тогда и только тогда, когда имеется вывод Z=>+…[R]UTx…=> =>+…RSTx…
Для этого необходимы следующие выводы: U=>+…S или U=>+…RS.
RS =>∘T тогда и только тогда, когда Z=>+…[R]Ux =>...RSTx .
Чтобы получился этот вывод, нужно: U: = ST.
R∘< ST тогда и только тогда, когда Z=>+…RUТx =>+…RSTx… .
Чтобы получился этот вывод, нужно: U: = S .
R∘<= ST тогда и только тогда, когда Z=>+…UТx =>…RSTx… .
Чтобы получился этот вывод, нужно: U: = RS .
Если цепочка # S1 S2 … Si Sj … Sn # – сентенциальная форма, то основа этой сентенциальной формы будет цепочка Si … Sj , если для неё выполняется условие
Si-1∘< Si Si+1=>∘ Si+2 … Sj-1Sj >∘ Sj+1.
=>∘ этот символ означает, что мы ищем хвост основы.
∘<= этот символ означает, что ищем голову основы.
Si … Sj –основа.
# ∘<S # -условие, когда заканчивается поиск.
Может быть ситуация:
# Sj >∘ Sj+1 #;
# ∘<SiSj #;
# ∘<S #.
Если найден хвост, то можно просмотреть правила и сравнить правые части.
Алгоритм распознавания
Распознаватель использует единственную таблицу. Таблица содержит три столбца.
В первом столбце таблицы содержится содержимое стека в форме Tu, где Т - любой символ или ограничитель, а U-правая часть правила.
Второй столбец содержит соответствующие правые контексты (либо # - символ конца цепочки ).
В третьем столбце записан номер правила, которое использовано при редукции.
На каждом шаге работы распознаватель среди строк таблицы ищет ту, в которой содержимое первого столбца совпадает с верхней частью стека, а содержимое второго столбца совпадает с последним считанным символом.
Если такая строка найдена, осуществляется редукция в соответствии с правилом, номер которого указан в третьем столбце.
Если такой строки нет, то редукция невозможна.
Последний сканируемый символ помещается в стек, и сканируется следующий символ предложения.
Предшествование m: n
Грамматика m,n предшествования это такая грамматика, которая удовлетворяет условиям:
Все правые части правил единственны.
Для любой пары цепочек xy таких, что |x| = m; |y| = n, выполняется не более одного из трех рассмотренных ниже отношений.
W = xy |x| = m; |y| = n.
x ∘< y, если первый символ цепочки y является головой основы.
x >∘ y, если последний символ цепочки x является хвостом основы.
x ≗ y, , если последний символ цепочки x и первый символ цепочки y принадлежат основе.