- •Глава 5
- •Обработка текста
- •Введение
- •Лексический анализ и грамматический разбор
- •Содержание данной главы
- •Стратегии грамматического разбора и стратегии решения задач
- •5. 1. Лексический анализатор
- •Процедура "читатьпредлож"
- •Алгоритм работы лексического анализатора "читатьпредлож"
- •Использование программы "читатьпредлож"
- •5. 2. Система нисходящего грамматического разбора Программа "объект"
- •Использование программы "объект"
- •Использование процедуры "объект" в обратном направлении
- •Расширение грамматики
- •Принцип работы системы нисходящего грамматического разбора
- •5. 3. Система восходящего грамматического разбора Принцип работы системы восходящего грамматического разбора
- •Вид правила "восх_объект"
- •Анализ процесса грамматического разбора
- •Леворекурсивные правила
- •Работа леворекурсивного правила
- •Использование процедур грамматического разбора
- •5. 4. Конвертер программ с dec-10 пролога на микро-пролог Синтаксис микро-Пролога
- •Компоненты микро-Пролога
- •Реализация программы "d_to_m"
- •Использование процедуры "d_to_m"
- •Улучшение интерфейса с пользователем
- •Ограничения процедуры "d_to_m"
- •5.5. Язык запросов
- •Спецификация схемы базы данных
- •Стратегия реализации
- •Грамматика языка запросов
- •Программа "зобъект"
- •Алгоритм работы программы "зобъект
- •Процедура "построить_псписки"
- •Выходные данные программы "построить-псписки"
- •Процедура "построить-зсписки"
- •Выходная информация программы "построить_зсписки"
- •Процедура "список_во_фразу"
- •Выходные данные процедуры "список_во_фразу"
- •Процедура "печатать_тсписок"
- •Объединение составных частей в единую программу
- •Интерпретатор
- •Библиографические заметки
- •Упражнения
Грамматика языка запросов
Грамматика языка запросов полностью приведена в табл. 5.4. В таком виде данный язык запросов слишком прост для использования на практике. Единственное отношение, известное в нем, — это равенство значений атрибутов двух баз данных. Нельзя проверить на равенство значение атрибута и константу. Было бы целесообразным ввести в язык дополнительные отношения, скажем, неравно или больше (для числовых значений). Помимо команды выдать желательно реализовать и другие команды, к примеру, команды сортировать и суммировать. Можно расширить описываемый здесь язык запросов за счет добавления в него этих средств.
Таблица 5.4 | ||
Грамматика языка запросов | ||
Нетерминалы: | ||
предложение па_список |
-> |
команда па_список уточнение |
па_список |
-> |
па соединитель па_список |
па_список |
-> |
па |
па |
-> |
предикат аргумент |
уточнение |
-> |
союз на отношение па |
уточнение |
-> |
|
Терминалы: | ||
команда |
-> |
"выдать" |
соединитель |
-> |
"и" |
союз |
-> |
"где" |
союз |
-> |
"если" |
отношение |
-> |
"является" |
отношение |
-> |
"равно" |
предикат |
-> |
(определяется в факте "схема”) |
предикат аргумент |
-> |
(любое слово) |
Программа "зобъект"
Программа "зобъект" работает аналогично программе "объект" из разд. 5.2.
% имена переменных:
% Р = имя предиката
% А = имя аргумента
% V = значение аргумента
% Valuelist = список значений аргументов
% Tlist, Printlist, Qlist=
% [t(p,a,v).t(p,a,v), ...]
% I -= ВХОДНОЙ СПИСОК СЛОВ
% R, R 1,0 = остаток списка слов
% нетерминалы:
зобъект (I,O, предложение, Tlist, Printlist) :—
зобъект (I, R, команда, _, _),
зобъект (R, R1, па_список, Printlist, _),
зобъект (R1,О, уточнение, Qlist, _),
присоединить (Print list, Qlist, Tlist).
зобъект (I,O, па_список, [т(Р,А,V ] Tlist],_) :—
зобъект (I, R, па, т (Р, А, V), _),
зобъект (R, R1, соединитель, _, _),
зобъект (R1,O, па список, Tlist, _).
зобъект (I,O,па список, [т (Р, А, V) ] , _) :—
зобъект(I,O,па,т(Р,А,V), _).
зобъект (I,O, па, т (Р, A, Y), _) :-
% сгенерировать уникальную переменную V:
зобъект (I, R, предикат, Р, _),
зобъект (R, О, аргумент, А, _).
% унифицировать V в первом "па" с V во втором "па"
зобъект (I,O, уточнение, [т(Р1, А1, V), т(Р2, А2, V)] , _) :-
зобъект (I, R, союз, _, _),
зобъект(Р,Р1,па,т(Р1,А1,V), _),
зобъект (R1, R2, отношение, _, _),
зобъект(Р2,O,па,т(Р2,А2,V), _).
зобъект (I, I, уточнение, [],_). % пустая продукция.
% терминалы:
зобъект ( [выдать [ R], R, команда, _,_).
зобъект ([Р \ R], R, предикат, Р, _) :- предикат (Р, _).
зобъект ([Имя_арг | R], R, аргумент, Имя_арг, _).
зобъект ( [является [ R], R, отношение, , _).
зобъект ( [равно | R], R, отношение, _, _).
зобъект ([и | R], R, соединитель, _,__).
зобъект ([где | R], R, союз, , __).
зобъект ( [если | R], R, союз, _,_).
предикат (Имя пред, Кол_во_арг) :—
схема (Имя_пред, Список), length (Список, Кол во_арг).