Разработка языка реляционной алгебры и реляционного исчисления и транслятора на язык SQL

УДК 519.72

РАЗРАБОТКА ЯЗЫКА РЕЛЯЦИОННОЙ АЛГЕБРЫ И РЕЛЯЦИОННОГО ИСЧИСЛЕНИЯ И ТРАНСЛЯТОРА НА ЯЗЫК 80Ь

А. А. Малиёв

В статье рассматривается задача создания языка реляционной алгебры и реляционного исчисления (ЯРАИ) и транслятора для него. Предложены пути по реализации транслятора и синтаксические конструкции языка. Разработан и описан язык, реализующий реляционную алгебру и реляционное исчисление, выведены правила генерации кода на SQL с ЯРАИ и разработан транслятор и среда для создания программ на ЯРАИ

Ключевые слова: SQL транслятор, реляционная алгебра, исчисление

Первая версия реляционной алгебры была определена Коддом в [2]. Эта "оригинальная" алгебра включала восемь операций,

подразделявшиеся на 2 группы по 4 операции.1) Традиционные операции с множествами: объединение, пересечение, разность и декартово произведение. 2) Специальные реляционные

операции: сокращение (известное также под

названием выборки), проекция, соединение и деление.

Реляционная алгебра и реляционное

исчисление представляют собой два альтернативных подхода. Реляционная алгебра определяет в явном виде набор операций (соединение, объединение, проекция и т.д.), которые можно использовать, чтобы сообщить системе, как в базе данных из определенных отношений сформировать некоторое требуемое отношение, а реляционное исчисление просто задает систему обозначений для определения требуемого отношения в терминах существующих отношений. В основе реляционного исчисления лежит понятие переменной с определенной для нее областью допустимых значений и понятие правильно построенной формулы, опирающейся на переменные, предикаты и кванторы, поэтому стоит определить операцию задания переменной и расширить функционал операции выборки, добавив возможность получать в качестве параметра логическое выражение с квантором.

Также, стоит учесть, что транслятор не может узнать то, какие таблицы и с какими полями содержатся в некоторой РБД, поэтому необходимо добавить функцию объявления переменной кортежей - таблицы РБД с указанием набора ее атрибутов.

Транслятор является программой, которая способна воспринимать строку символов определенного вида (т.е. текст программы на исходном языке) и выдавать другую строку символов (объектную программу). Трансляторам присущ ряд общих черт, что упрощает их процесс

Малиёв Алексей Александрович — ВГУ, магистр, тел. 8(920)4091282, E-mail: maliyov@gmail.com

создания. В состав любого транслятора входят три основных компонента: лексический анализатор

(блок сканирования), синтаксический анализатор и генератор кода машинных команд.

Для разработки лексического и синтаксического анализатора можно

воспользоваться так называемыми компиляторами компиляторов. Компилятор компиляторов — программа, воспринимающая синтаксическое или семантическое описание языка программирования и генерирующая компилятор для этого языка.

Семантика языка обычно описывается путём ассоциирования процедуры генерации кода с каждой синтаксической конструкцией, причём необходимая процедура вызывается всякий раз, когда соответствующая конструкция распознаётся программой синтаксического анализа. Таким образом, пользователю компилятора компиляторов в любом случае нужно разработать исполняющие структуры и выбрать способ преобразования каждой входной синтаксической конструкции в операции выходного языка или в машинные операции, после чего нужно написать собственно процедуры генерации кода.

Метод рекурсивного спуска или нисходящий разбор — это один из методов определения принадлежности входной строки к некоторому формальному языку, описанному ЬЦк) контекстносвободной грамматикой. Это класс алгоритмов грамматического анализа, где правила формальной грамматики раскрываются, начиная со стартового символа, до получения требуемой

последовательности токенов (лексем).

Для каждого нетерминального символа К

строится функция, которая для любого входного слова х делает 2 вещи:

1) находит наибольшее начало ъ слова х, способное быть началом выводимого из К слова;

2) определяет, является ли начало ъ выводимым из К.

Такая функция должна удовлетворять следующим критериям:

• считывать из еще необработанного

входного потока максимальное начало А,

являющегося началом некоторого слова, выводимого из К;

• определять является ли А выводимым из К или просто невыводимым началом выводимого из К слова.

В случае, если такое начало считать не удается (и корректность функции для нетерминала К доказана), то входные данные не соответствуют языку, и следует остановить разбор.

Разбор заключается в вызове описанных выше функций. Если для считанного нетерминала есть составное правило, то при его разборе будут вызваны другие функции для разбора входящих в него терминалов. Дерево вызовов, начиная с самой «верхней» функции эквивалентно дереву разбора [1,

3].

Для выполнения функций трансляции программы в данном случае, наиболее подходит небольшая программа-транслятор, построенная на основе алгоритма рекурсивного спуска (РС).

В процессе работы над данным проектом был создан и описан язык, реализующий реляционную алгебру и реляционное исчисление, выведены

правила генерации кода на 8рЬ (табл.) с ЯРАИ и разработан транслятор и среда для создания программ на ЯРАИ.

Литература

1. Ахо В.А. Теория синтаксического анализа, перевода и компиляции. Т1 / В.А. Ахо, Д. Д. Ульман; пер. с англ. В.Н. Агафонова - М.: Издательство "Мир", 1978. -613 с.

2. Кревский И.Г. Формальные языки, грамматики и основы построения трансляторов: учеб. пособие / И.Г. Кревский, М.Н. Селиверстов, К.В. Григорьева - Пенза: Изд-во Пенз. гос. ун-та, 2002.- 124 с.

3. Астахова И.Ф. Разработка описания языка

реляционной алгебры и реляционного исчисления и транслятора для него в язык SQL / И.Ф. Астахова, Е.А. Голядкин // Современные проблемы прикладной математики и математического моделирования:

материалы III Междунар. науч. конф. 2009. - Ч. 1. - С. 132-134.

Правила генерации транслятором ЯРАИ кода на SQL

Название конструкции ЯРАИ Схематическое выражение конструкции ЯРАИ Соответствующая конструкция языка SQL

Операция объединения <имя переменной 1> union <имя переменной 2> select <список всех атрибутов 1> from <имя переменной 1 (имя таблицы в РБД)> union select <список всех атрибутов 2> from <имя переменной 2>

Операция пересечения <имя переменной 1>intersect <имя переменной 2> select distinct <список всех атрибутов 1> from <имя переменной 1> where exists

Операция проекции <имя переменной>{<список атрибутов>} select <список атрибутов> from <имя переменной>

Операция декартового произведения <имя переменной 1>times <имя переменной 2> select distinct <список всех атрибутов 1>, <список всех атрибутов 2> from <имя переменной 1>, <имя переменной 2>

Операция сокращения <имя переменной>%^еге <логическое выражение> select <список всех атрибутов> from <имя переменной> where <логическое выражение>

Операция разности <имя переменной 1>minus <имя переменной 2> select distinct <список всех атрибутов 1> from <имя переменной 1> where not exists

Операция соединения <имя переменной 1> join <имя переменной 2> select distinct <список всех атрибутов 1>, <список атрибутов 2 без общих> from <имя переменной 1>, <имя переменной 2> where <атрибуты 1> = <атрибуты 2>

Операция деления <имя переменной 1> divideby <<имя переменной 2> Предположим, что переменная 1 содержит атрибуты X, Y, а переменная 2 атрибут Y, тогда данная операция выражается через прочие следующим образом:

Воронежский государственный университет

RELATIONAL ALGEBRA AND RELATIONAL CALCULUS LANGUAGE DEVELOPMENT WITH SQL ASSEMBLER

A.A. Maliyov

This article is devoted to the problem of relational algebra and relational calculus language (RARCL) development and SQL assembler for it. Ways of assembler and language phrases implementation is offered. The RARCL language is invented

and described, rules for SQL code generation from RARCL are inferred and assembler with environment is developed for RARCL code creation

Key words: SQL assembler, relational algebra, calculus