- •Глава 5
- •Обработка текста
- •Введение
- •Лексический анализ и грамматический разбор
- •Содержание данной главы
- •Стратегии грамматического разбора и стратегии решения задач
- •5. 1. Лексический анализатор
- •Процедура "читатьпредлож"
- •Алгоритм работы лексического анализатора "читатьпредлож"
- •Использование программы "читатьпредлож"
- •5. 2. Система нисходящего грамматического разбора Программа "объект"
- •Использование программы "объект"
- •Использование процедуры "объект" в обратном направлении
- •Расширение грамматики
- •Принцип работы системы нисходящего грамматического разбора
- •5. 3. Система восходящего грамматического разбора Принцип работы системы восходящего грамматического разбора
- •Вид правила "восх_объект"
- •Анализ процесса грамматического разбора
- •Леворекурсивные правила
- •Работа леворекурсивного правила
- •Использование процедур грамматического разбора
- •5. 4. Конвертер программ с dec-10 пролога на микро-пролог Синтаксис микро-Пролога
- •Компоненты микро-Пролога
- •Реализация программы "d_to_m"
- •Использование процедуры "d_to_m"
- •Улучшение интерфейса с пользователем
- •Ограничения процедуры "d_to_m"
- •5.5. Язык запросов
- •Спецификация схемы базы данных
- •Стратегия реализации
- •Грамматика языка запросов
- •Программа "зобъект"
- •Алгоритм работы программы "зобъект
- •Процедура "построить_псписки"
- •Выходные данные программы "построить-псписки"
- •Процедура "построить-зсписки"
- •Выходная информация программы "построить_зсписки"
- •Процедура "список_во_фразу"
- •Выходные данные процедуры "список_во_фразу"
- •Процедура "печатать_тсписок"
- •Объединение составных частей в единую программу
- •Интерпретатор
- •Библиографические заметки
- •Упражнения
Анализ процесса грамматического разбора
Нижеследующий запрос осуществляет разбор простого предложения:
|? - восх_объект ([the, cow, shakes, the,
tail], О, терминал, _, предложение).
0=[ ]
Как читать диаграммы
Рассмотрим более подробно действия системы грамматического разбора, предпринимаемые ею при обработке запроса. На рис. 5. 3—5. 9 показаны различные стадии грамматического разбора предложения. Каждая стрелка, направленная вниз, обозначает начало нового процесса разбора, целью которого является объект, на который указывает стрелка. Например, первоначальный запрос запускает процесс грамматического разбора с целью найти предложение. Это представлено на рисунке в виде стрелки, направленной вниз и указывающей на прямоугольник со словом "предложение". Каждая стрелка, направленная вверх, обозначает действия восходящей подцели, входящей в состав одного из правил "восх_объект".
Состояние 1 (рис. 5. 3): "предложение" - это цель данного процесса грамматического разбора. Система разбора берет из входного списка слово «the» и выясняет, что это слово — "артикль".
Состояние 2 (рис. 5. 4): система разбора определяет, что "артикль" — это первая компонента "группы_существительного", а затем стартует еще один процесс грамматического разбора для того, чтобы найти во входном списке "существительное". Этот процесс завершается успешно и дает слово « cow».
Состояние 3 (рис. 5. 5): система разбора выясняет, что "группа_существительного" является первой компонентой "предложения", и затем запускает еще один процесс грамматического разбора для того, чтобы найти "глагольную_группу".
Состояние 4 (рис. 5. 6): система грамматического разбора берет из входного списка слово « shakes» и выясняет, что это слово - "глагол".
Состояние 5 (рис. 5. 7): система определяет, что "глагол" является первой компонентой "глагольной_группы", а затем запускает новый процесс грамматического разбора для отыскания "группы_существительного".
Состояние б (рис. 5. 8): система грамматического разбора берет из входного списка слово «the», выясняет, что это слово является артиклем, и определяет, что артикль - это первая компонента группы существительного.
Состояние 7 (рис. 5. 9): система начинает новый процесс грамматического разбора для обнаружения "существительного". Этот процесс успешно заканчивается отысканием слова «tail». Вследствие этого процесс разбора "группы_существительного" будет успешным, далее процесс разбора "глагольной_группы" окажется успешным и, в свою очередь, исходный процесс грамматического разбора "предложения" также завершится успешно.
Леворекурсивные правила
В системе грамматического разбора "объект2" определение объекта "группа_существительного" было модифицировано с тем, чтобы эта группа могла содержать любое количество прилагательных. Это было достигнуто при помощи праворекурсивного определения объекта "прил":
прил -> прилагательное
прил прил ->
Такое определение нельзя реализовать в программе "восх_объект", так как при восходящем грамматическом разборе невозможна обработка пустых продукций. Но система восходящего разбора может работать с леворекурсивными грамматическими правилами, которые вызвали бы бесконечное зацикливание системы нисходящего разбора. Приведем леворекурсивное определение объекта "группа_существительного", в котором Допускается наличие любого числа прилагательных:
группа_существительного -> артикль прилсущ (1)
прилсущ -> прил существительное (2)
прилсущ -> существительное (3)
прил -> прил прилагательное (4)
прил -> прилагательное (5)
В этой грамматике дается леворекурсивное определение объекта "прил", который является одним или более прилагательным (В правиле (4) "прил" располагается перед объектом "прилагательное".) Вводится новый промежуточный объект — "прилсущ", который является либо только существительным (в соответствии с правилом (3)), либо существительным, перед которым стоит любое количество прилагательных (по правилу (2)). Правило (1) определяет "группу_существительного" как "артикль", за которым следует "прилсущ". Приведенная грамматика реализуется процедурой "восх_объект2":
% условие окончания при достижении цели:
восх_объект2 (I, I, Цель, _, Цель): -!.
% терминалы:
% + - + - +
восх_обьект2 ([the | R], О, терминал, артикль, Цель):—
восх_объект2 (R, О, артикль, _, Цель).
восх_объект2 ([cow | R], О, терминал, существительное, Цель):—
восх_объект2 (R, О, существительное, _, Цель).
восх_обьект2 ([tail | R], О, терминал, существительное, Цель): -
восх_объект2 (R, О, существительное, _, Цель).
восх_объект2 ([big | R], О, терминал, прилагательное, Цель): —
восх_объект2 (R, О, прилагательное, _, Цель).
восх_объект2 ([strong | R], О, терминал, прилагательное, Цель): —
восх_объект2 (R, О, прилагательное, _, Цель).
% нетерминалы:
% группа существительного -> артикль прилсущ
восх_объект2 (I, О, артикль, группа_существительного, Цель):—
восх_объект2 (I, R, терминал, _, прилсущ),
восх_обьект2 (Р, О, группа_существительного, _, Цель).
% прил -> прил прилагательное
восх_объект2 (I, О, прил, прил. Цель):—
восх_объект2 (I, R, терминал, _, прилагательное),
восх_объект2 (R, О, прил, _, Цель).
% прил -> прилагательное
восх_объект2 (I, О, прилагательное, прил, Цель):—
восх_объект2 (I, О, прил, _, Цель).
% прилсущ -> прил существительное
восх_объект2 (I, О, прил, прилсущ. Цель): -
восх_объект2 (I, R, терминал, _, существительное),
восх_объект2 (Р, О, прилсущ, _, Цель).
% прилсущ -> существительное
восх_объект2 (I, О, существительное, прилсущ, Цель):—
восх_объект2 (I, О, прилсущ, _, Цель).