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