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