У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


залишок входу, поки не знаходить найдовший префікс, що може бути зпівставлений одному з регулярних виразів. Синтаксичному аналізатору лексичний аналізатор повертає єдине значення - тип лексеми. Для передачі інформації про лексему використовується глобальна змінна yylval [3,5].

Наведемо частину LEX-файлу, що реалізує функцію лексичного аналізу реляційної алгебри:

%{

#include "ra.h"

#include "ra.tab.h"

%}

% option noyywrap

% option case-insensitive

number [[:digit:]]+

whitespace [[:space:]]+

identifier [[:alpha:]_][[:alnum:]_]*

%%

[Rr][Ee][Nn][Aa][Mm][Ee] return RENAME;

[Aa][Ss] return AS;

[Ww][He][Ee][Rr][Ee] return WHERE;

У розділі оголошень, укладеному в дужки %{ і %}, перераховано константи, використовувані правилами трансляції. У секцію визначень входять також деякі регулярні визначення. Наприклад, перше визначення - це number. Воно позначає клас чисел. Друге визначення – роздільник (whitespace). Третє визначення – це identifier. Для того, щоб інтерпретатор міг правильно ідентифікувати ключові слова (JOIN, MINUS, …) було введено такі граматичні правила як:

[Uu][Nn][Ii][Oo][Nn] return UNION;

[Ii][Nn][Tt][Ee][Rr][Ss][Ee][Cc][Tt] return INTERSECT;

[Mm][Ii][Nn][Uu][Ss] return MINUS;

Синтаксичний аналіз. Ієрархічний аналіз називається розбором (parsing), або синтаксичним аналізом, котрий включає групування токенів початкової програми в граматичні фрази, які використовуються компілятором (чи інтерпретатором) для синтезу виводу.

Ієрархічна структура програми зазвичай виражається рекурсивними правилами.

В якості основного засобу для створення інтерпретатора було обрано YACC [6]. YACC використовується для побудови синтаксичного аналізатора контекстно-вільної мови. Мова, що аналізується (в нашому випадку - реляційна алгебра) описується, як було наведено вище, за допомогою граматики в вигляді форми Бекуса-Наура (БНФ). Результат роботи YACC є програма на C, яка реалізує LALR(1) розпізнавач (інтерпретатор реляційної алгебри) [8].

Кожен з виразів реляційної алгебри має свої еквіваленти на мові SQL. При трансляції ці еквіваленти будуть слугувати запитами до бази даних. Наприклад:

Вираз Реляційної Алгебри:

A RENAME Attr_old1, Attr_old2 AS Attr_new1, Attr_new2;

Еквівалент на SQL:

SELECT Attr_old1 AS Attr_new1, Attr_old2 AS Attr_new2 FROM A;

Вираз Реляційної Алгебри:

A WHERE Attr_A > 123;

Еквівалент на SQL:

SELECT * FROM A WHERE Attr_A > 123; [Дейт]

Ядром yacc-специфікації є набір граматичних правил. Кожне правило описує синтаксичну конструкцію і дає їй ім'я:

restriction : term WHERE condition

{

$$ = "SELECT * FROM "+$1+" WHERE "+$3;

};

projection : term '[' attribute_list ']'

{

$$ = "SELECT DISTINCT "+$3+" FROM "+$1;

};

Завдяки цим текстам можна зрозуміти процес трансляції виразів. Основною ідеєю трансляції виразів є те, що присутні конструкції на мові SQL, які є еквівалентами конструкціям мови реляційної алгебри.

Рис.1. Загальна структура інтерпретатора РА

Треба відмітити, що для підвищення продуктивності роботи інтерпретатора ядро програми – транслятор виразів, було створено на мові “С” в вигляді exe-файлу (рис.1). Ця програма була під’єднана до користувацького інтерфесу через зовнішній файл. Це дозволяє Java-середовищу [9] використовувати машинно-залежні функції із середини машинно-незалежної програми) . Через це було погіршено мобільність програми але покращено її продуктивність.

При використанні JDBC-ODBC мосту можна робити запити до будь-якої бази даних, створеної за стандартом SQL-92. Також, дуже просто використовувати різні БД, тому що завдяки SQL-92 всі запити багатьох БД майже не відрізняються один від одного.

Інтерфейс програми створено на основі AWT та Swing бібліотек. В цих бібліотеках є всі необхідні примітиви інтерфейсу сучасного графічного програмного продукту. Для прискорення створення інтерфейсу використовувалося інтегроване середовище автоматизованої розробки програм “JBuilder 2005 Enterprise Edition” [10].

Приклад роботи програми. Хай у базі даних ми маємо дві таблиці, які представлені на рис. 2 та рис. 3.

Рис.2. Вміст “Table1”

Рис.3. Вміст “Table2”

Для цих двох таблиць ми хочемо реалізувати наступний вираз РА:

Table1 UNION Table2;

Для цього запускаємо головне вікно програми Database Query Viewer, яке показане на рис. 4.

Рис 4. Головне вікно програми

Далі заповнюємо необхідні поля (як показано на рис. 5) і натискаємо кнопку «Показати рез-ти»:

Рис. 5. Вікно роботи програми

Як можна побачити , при виконанні SQL-запиту, з‘явилась додаткова панель – “Результати запиту”. Стовбці та рядки цієї панелі генеруються автоматично , згідно з результатами запиту. Можна ввести новий запит в поле програми “Рел.Алг.-запит”, натиснути кнопку “Показати рез-ти”. В цьому випадку ми знов матимемо результати запиту, але вже оновленні.

Висновки і перспективи подальших досліджень. На основі створеного інтерпретатора були розроблені лабораторні роботи для опанування реляційної алгебри Кодда, що зробило процес засвоєння матеріалу більш активним.

В подальшому планується поповнити набір операцій РА додатковими, розробити аналогічний інтерпретатор для мови реляційного числення та транслятори взаємного перетворення мов РА, РЧ та SQL. Трансляція мови SQL в мови РА та/або РЧ дозволить підійти до створення засобів, що забезпечуть активне засвоення ще таких тем з баз даних, як оптимізація схем виконання запитів, розподілених транзакцій, реплікацій, тощо.

Список використаної літератури

К.Дж. Дейт. Введение в системы Баз данных. - М.: Издательский дом «Вильямс», 2001.- 1071с.

Ахо, Альфред, В., Сети, Рави, Ульман, Джеффри, Д. Компиляторы: принципы, технологии, инструменты.: Пер. с англ. – М.: Издательский дом «Вильямс», 2001.- 768с.: ил. – Парал. тит. Англ.

Книга по БД КПІ (перешлю назву)

Книга по БД ОНТУ (перешлю назву)

Генератор программ лексического анализа Lex. – М.: ПВК "И Н Т Е Р Ф Е Й С", 1988. - 42с.

Автор Неизвестен Генератор программ синтаксического анализа yacc - http://bookz.ru/authors/avtor-neizvesten/yacc.html

Серебряков В. А. Лекції по конструюванню компіляторів, М.: Вид-во МГУ, 1993. – 175 с

В. Л. Богданов, В. С. Гордєєв Практичний досвід написання синтаксичного аналізатора мови програмування Кобол, 2000. – http://se.math.spbu.ru/reeng.html

KenJamesDavidTHE Java™ Programming Language, Fourth Edition, Addison Wesley Professional, 2005 – 928 p.

Chuck Easttom JBuilder 8.0 JFC and Swing programming, Wordware Publishing, 2003 – 397 p.


Сторінки: 1 2