Документация по Дейталог-системе,
версия 1.0.0
Синтаксис
используемого Дейталога
Использование
Дейталог-системы
Общая цель создания экспериментальной Дейталог-системы заключается в предоставлении образовательному и научному обществу завершенной системы логического программирования, базирующейся на языке Дейталог, которую можно было бы использовать в различных направлениях, в том числе в практических занятиях и научных исследованиях студентов и специалистов.
Из экспериментальности системы следует, что нет нужды в том, чтобы система воплощала все множество методов и алгоритмов, применяемых к Дейталогу. Необходимо было предоставить какое-то подмножество всех методов, чтобы понять, в чем действительно нуждаются пользователи и на чем можно сосредоточить дальнейшие разработки. Исходя из этого были сформулированы основные функциональные требования к системе:
Система должна:
1. уметь производить синтаксический разбор программ, написанных на языке Дейталог;
2. вычислять программы на Дейталоге различными вычислительными методами, как восходящими, так и нисходящими;
3. хранить факты (кортежи) в какой-либо СУБД и уметь извлекать их оттуда и предоставлять вычислителю.
Для развития системы требуется обратная связь пользователей, их вовлеченность в процесс. В том числе и отсюда вытекают нефункциональные требования, требования к реализации:
Реализация должна быть:
1. открытой;
2. легко расширяемой;
3. по возможности переносимой.
На данном этапе, с одной стороны, не преследовалась цель сильного связывания Дейталог-системы с какими-либо другими системами, с другой стороны, необходимо было обеспечить возможность интеграции Дейталог-системы с другими программными системами.
Итак, требования к интерфейсам:
1. Обращение с СУБД, в которой Дейталог-система хранит кортежи должно происходить через стандартный интерфейс, СУБД должна быть легко заменяема.
2. Необходимо предоставить пользователям программный интерфейс для потенциальной интеграции Дейталог-системы с другими программными продуктами.
На вход системы поступает Дейталог-программа. Дейталог-система производит синтаксический анализ программы, получая внутреннее представление. В зависимости от выбранного метода вычисления Дейталог-правила могут транслируются в уравнения реляционной алгебры и поступают в вычислитель.
Перед началом вычислений система выкачивает кортежи необходимых отношений из
базы данных, используя программный интерфейс СУБД. Полученная программа и
запросы к ней вычисляются с помощью восходящих методов (Якоби, Гаусса-Зейделя,
полунепосредственного) и восходящего QSQ (запрос-подзапрос).
Затем выдается результат.
Синтаксический анализатор работает, используя следующую грамматику:
<Program>
::= <Statement List>
<Statement
List> ::= <Statement> | <Statement List> <Statement>
<Statement>
::= <Rule> | <Query> | <Processing Instruction>
<Processing
Instruction> ::= ! <Instruction>
<Instruction> ::= Edb filename
<Rule>
::= <Predicate>
:- <Predicate List> .
<Predicate>
::= constant (
<Term List> )
<Term
List> ::= <Term> | <Term List>, <Term>
<Term>
::= constant |
<variable>
<variable> ::= identifier | _
<Predicate
List> ::= <Predicate> | <Predicate
List>, <Predicate>
<Query> ::= ? <Predicate List> .
Строчка, начинающаяся с `;'
– комментарий.
Дейталог-система существует на разных платформах. Система распространяется как в виде исходных текстов, так и в откомпилированном виде.
Дейталог-система тестировалась с СУБД SQLite [http://www.sqlite.org], версия 2.8.11.
Для сборки Дейталог-системы вам потребуется компилятор Bigloo [http://www-sop.inria.fr/mimosa/fp/Bigloo], СУБД SQLite.
Распакуйте dtlog-1.0.0.tar.gz в
какую-нибудь директорию.
Если вы работает с Unix-подобной ОС, переименуйте файл Makefile.unix
в Makefile.
Если вы работает под Windows2000, XP переименуйте файл Makefile.vc6
в Makefile.
Отредактируйте Makefile/
Переименуйте файл Makefile.unix в Makefile. Отредактируйте Makefile: пропишите (с полными путями, если это необходимо)
·
компилятор Bigloo – BIGLOO
·
утилита afile, входящая в дистрибутив Bigloo – BIGLOO_AFILE_TOOL
·
компилятор С – CC
· директории .h файлов и библиотек Bigloo - BIGLOO_INC_DIR, BIGLOO_LIB_DIR
·
директории .h файлов и библиотек SQLite - SQLITE_INC_DIR , SQLITE_LIB_DIR
·
прописать директории для компилятора INC_DIRS
·
прописать директории для компоновщика LIB_DIRS
· в случае необходимости отредактировать LIBS – библиотеки, с которыми будет линковаться Дейталог-система.
Наберите make.
После того, как система будет откомпилирована, можно
запускать исполняемый файл dtlog.
Вам потребуется Microsoft Visual Studio 6.0. Возможно,
вам потребуется запустить vcvars32.bat для установки переменных окружения MSVC.
Переименуйте файл Makefile.vc6 в Makefile. Отредактируйте Makefile: пропишите (с полными путями, если это необходимо)
·
компилятор Bigloo – BIGLOO
·
утилита afile, входящая в дистрибутив Bigloo – BIGLOO_AFILE_TOOL
·
компилятор С – CC
·
утилиту сборки (линковки) LNK
· директории .h файлов и библиотек Bigloo - BIGLOO_INC_DIR, BIGLOO_LIB_DIR
· директории .h файлов и библиотек SQLite - SQLITE_INC_DIR , SQLITE_LIB_DIR
· в случае необходимости отредактировать LIBS – библиотеки, с которыми будет линковаться Дейталог-система.
Наберите nmake.
После того, как система будет откомпилирована, можно запускать исполняемый файл dtlog.exe.
Скомпилировав или получив предкомпилированный
файл, можно пользоваться Дейталог-системой. Для справки, наберите
dtlog.exe –help
Вы увидите приблизительно следующее (в оригинале на английском языке):
Usage:
dtlog-bigloo [options]
help:
-h, --help --
Печать этого вспомогательного сообщения
-v, --version --
Печать версии
options:
-f <file> --
Дейталог-программа для выполнения
-edb
<file> -- База данных SQLite, перекрывающая файл, прописанный
в инструкции Дейталог-программы
calculations:
-sn --
Вычислить программу, используя обобщенный полунепосредственный метод (по
умолчанию)
-ya --
Вычислить программу, используя метод Якоби
-gz --
Вычислить программу, используя метод Гаусса-Зейделя
-qsq -- Если программа вычисляется восходящим методом, то все запросы к ней выполняются традиционными запросами реляционной алгебры. Этот флаг настраивает систему на нисходящий метод, им вычисляются все запросы. Если запросов нет, то система ничего не делает.
!edb "anc/1.sqlite"
anc(X, Y) :- par(X, Y).
anc(X, Y) :- anc(X,
Z), par(Z, Y).
? anc(_,
_).
? anc("a",
_).
? anc("12",
"10").
;end of
program
Если в файле 1.sqlite находятся кортежи отношения par: (a, b), (b, c), p(b, d), (c, e), то результат выполнения программы будет таким:
((anc _
_)) = (#(a, b), #(b, c), #(b, d), #(c, e), #(b, d), #(c, e), #(a, c),
#(a, d), #(b, e), #(a, e))
((anc a _)) = (#(a, b), #(a, c), #(a, d), #(a, e))
((anc c a)) = (#(a, b))