Грамматика языка запросов

Грамматика языка запросов полностью приведена в табл. 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 (Список, Кол во_арг).

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие