- •Глава 5
- •Обработка текста
- •Введение
- •Лексический анализ и грамматический разбор
- •Содержание данной главы
- •Стратегии грамматического разбора и стратегии решения задач
- •5. 1. Лексический анализатор
- •Процедура "читатьпредлож"
- •Алгоритм работы лексического анализатора "читатьпредлож"
- •Использование программы "читатьпредлож"
- •5. 2. Система нисходящего грамматического разбора Программа "объект"
- •Использование программы "объект"
- •Использование процедуры "объект" в обратном направлении
- •Расширение грамматики
- •Принцип работы системы нисходящего грамматического разбора
- •5. 3. Система восходящего грамматического разбора Принцип работы системы восходящего грамматического разбора
- •Вид правила "восх_объект"
- •Анализ процесса грамматического разбора
- •Леворекурсивные правила
- •Работа леворекурсивного правила
- •Использование процедур грамматического разбора
- •5. 4. Конвертер программ с dec-10 пролога на микро-пролог Синтаксис микро-Пролога
- •Компоненты микро-Пролога
- •Реализация программы "d_to_m"
- •Использование процедуры "d_to_m"
- •Улучшение интерфейса с пользователем
- •Ограничения процедуры "d_to_m"
- •5.5. Язык запросов
- •Спецификация схемы базы данных
- •Стратегия реализации
- •Грамматика языка запросов
- •Программа "зобъект"
- •Алгоритм работы программы "зобъект
- •Процедура "построить_псписки"
- •Выходные данные программы "построить-псписки"
- •Процедура "построить-зсписки"
- •Выходная информация программы "построить_зсписки"
- •Процедура "список_во_фразу"
- •Выходные данные процедуры "список_во_фразу"
- •Процедура "печатать_тсписок"
- •Объединение составных частей в единую программу
- •Интерпретатор
- •Библиографические заметки
- •Упражнения
Принцип работы системы нисходящего грамматического разбора
Система нисходящего грамматического разбора, такая как "объект" или "объект2", начинает работу с принятия некоторой гипотезы, а затем проверяет верность следствий этой гипотезы по данным, содержащимся во входном списке. Первоначальной гипотезой может, скажем, служить предположение о том, что во входном списке можно обнаружить нетерминал "предложение". В соответствии с грамматическим правилом для нетерминала "предложение" данная гипотеза разбивается на две субгипотезы — на предположения о том, что во входном списке содержатся "группа_существительного" и "глагольная_группа". Эти две гипотезы, в свою очередь, разбиваются на субгипотезы более низкого уровня. Процесс разделения гипотез на субгипотезы продолжится до тех пор, пока система не встретит терминал. В этом случае она попытается установить факт наличия терминала в начальной позиции входного списка. Иерархия терминалов и нетерминалов, подразумеваемая грамматикой процедуры "объект2", показана на рис. 5. 2.
5. 3. Система восходящего грамматического разбора Принцип работы системы восходящего грамматического разбора
В системе восходящего грамматического разбора применяется иной принцип работы, чем в системе нисходящего разбора. Системы восходящего грамматического разбора начинают работу с данных и переходят к простым синтаксическим объектам, а затем и к более сложным синтаксическим объектам. В то время как система нисходящего грамматического разбора управляется в первую очередь гипотезами (т. е. принимаемые ею решения основываются на текущих гипотезах системы), система восходящего разбора управляется данными (т. е. ее решения принимаются, исходя из имеющихся данных).
Существует несколько стратегий восходящего грамматического разбора. Здесь рассматривается система восходящего разбора "восх_объект". Она начинает работу со считывания слова из входного списка. Далее по словарю выясняется, каким типом терминала является это слово. Затем система просматривает грамматические правила, определяющие нетерминалы, чтобы определить, начинаются ли какие-либо из этих правил с только что распознанного терминала.
Предположим, что грамматика процедуры "восх_объект" состоит из тех же трех правил:
предложение -> группа_существительного глагольная_группа
группа_существительного -> артикль существительное
глагольная_группа -> глагол группа_существительного
Сперва система разбора ищет "артикль" в начале входного списка слов Она отыскивает правило, первой компонентой которого является "артикль", и находит "группу_существительного". Затем система пытается найти все оставшиеся компоненты "группы_существительного"; В данном случае имеется только одна компонента — "существительное". Если система обнаружит, что следующий терминал во входном списке — это "существительное", то она успешно идентифицирует "группу_существительного". Затем система перейдет к поиску другого объекта, первой компонентой которого является "группа_существительного". Однако если следующим терминалом, который она обнаружит, не будет "существительное", то она отвергнет гипотезу о том, что слова, расположенные в начале входного списка, образуют "группу—существительного". Система вернется назад и приступит к поиску другого грамматического правила, первой компонентой которого является "артикль".
Система грамматического разбора продолжит поиск этим способом нетерминалов все более высокого уровня. Поиск будет длиться до тех пор, пока система не достигнет некоторого целевого нетерминала (такого как "предложение"). В этой точке она остановится. Если бы целевой нетерминал отсутствовал, то система разбора действовала бы до бесконечности.