Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка языка запросов в бинарной модели знаний и транслятора этого языка в язык SQL (бакалаврская работа).doc
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
1.31 Mб
Скачать

4.3. Использование транслятора в программном коде.

Для использования транслятора в программном коде, необходимо подключить файл Translator.cs, в котором находятся классы Translator и TranslatorException, реализующие соответственно транслятор и исключение с сообщением об ошибке, возникающее в ходе трансляции.

В программе нужно создать экземпляр транслятора, используя ранее определенную схему, и вызвать функцию translate, аргументом которой является запрос на языке БМЗ, результатом будет запрос наSQL.

Пример:

Translator t = new Translator(currentScheme);

string SQLQuery = t.translate(QLQuery);

Здесь currentScheme – схема, QLQuery – запрос на языке БМЗ, SQLQuery – запрос на SQL.

4.4. Программа с подключенной базой данных.

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

Внешний вид, в основном, совпадает с программой, представленной на Рис 3.1. При нажатии на кнопку «Перевести», кроме трансляции, выполяняется вывод результатов выполнения. В нижней части программы выводится результат запроса на SQL (Рис 4.4), либо одна из таблиц из базы данных (Рис 4.5).

Рис 4.4

Рис 4.5

Приложение

Сообщения об ошибке в запросе:

Запрос пуст

В начале запроса должен стоять вопросительный знак

Отсутствует знак '-'

Нельзя использовать символы "__” в начале слова

Отсутствует целевая переменная(выражение перед знаком '-'

Отсутствуют условия (выражения после знака '-')

Лишняя запятая после первой цели запроса <ЦЕЛЕВАЯ ЧАСТЬ>

Лишняя запятая после цели <ЦЕЛЬ>

Незакрытая скобка в цели запроса <ЦЕЛЬ>

Неизвестная функция <АГРЕГАТНАЯ ФУНКЦИЯ> в цели запроса <ЦЕЛЬ>

Лишняя открывающая скобка на <ПОЗИЦИЯ> символе

Конъюнктивное выражение под номером <НОМЕР> пусто

Последнее конъюнктивное выражение пусто (возможно лишний символ ";"

При использовании ключевого слова "IN" скобка должна стоять после имени класса

Пустое выражение внутри скобок в выражении <ВЫРАЖЕНИЕ>

Неверно выражение <ВЫРАЖЕНИЕ>. Отношение должно состоять из 4 слов:(X RelationName L Y) или из 3: (X RelationName Y)

Переменная отношения <ИМЯ ПЕРЕМЕННОЙ> относится к неизвестному отношению <ИМЯ ОТНОШЕНИЯ>

В выражении <ВЫРАЖЕНИЕ> несколько операторов

В выражении <ВЫРАЖЕНИЕ> отсутствуют операторы

Ошибка записи в выражении <ВЫРАЖЕНИЕ>. В атрибутах, где используются суррогаты можно использовать только оператор "="

Переменная <ИМЯ ПЕРЕМЕННОЙ> относится к классу <КЛАСС ПЕРЕМЕННОЙ> но в этом классе не содержится атрибут <ИМЯ АТРИБУТА>

Переменная <ИМЯ ПЕРЕМЕННОЙ> неизвестного типа

Не задана целевая переменая

Переменная <ИМЯ ПЕРЕМЕННОЙ> имеет неопределенный в схеме класс <КЛАСС ПЕРЕМЕННОЙ>

Неоднозначный тип у переменной <ИМЯ ПЕРЕМЕННОЙ>. Возможные значения типов: <КЛАСС1 ПЕРЕМЕННОЙ>, <КЛАСС2 ПЕРЕМЕННОЙ>

Код программы Файл Onthology.Cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Запросы

{

class OnthologyScheme

{

public string Name;

public List<OnthologyClass> Classes;

public List<OnthologyRelation> Relations;

public OnthologyScheme(string name, params OnthologyClass[] classes)

{

Name = name;

Classes = new List<OnthologyClass>();

Relations = new List<OnthologyRelation>();

foreach (OnthologyClass oc in classes)

{

if (oc is OnthologyRelation)

Relations.Add(oc as OnthologyRelation);

else

Classes.Add(oc);

}

}

}

class OnthologyClass

{

public string Name;

public List<OnthologyAttribute<string>> SimpleAttributes;

public List<OnthologyAttribute<OnthologyClass>> ClassAttributes;

public OnthologyClass(string name)

{

Name = name;

SimpleAttributes = new List<OnthologyAttribute<string>>();

ClassAttributes = new List<OnthologyAttribute<OnthologyClass>>();

}

public bool isSimpleAttribute(string attrName)

{

foreach (OnthologyAttribute<string> attr in SimpleAttributes)

{

if (attrName.ToUpper() == attr.Name.ToUpper())

return true;

}

return false;

}

virtual public bool isClassAttribute(string attrName)

{

foreach (OnthologyAttribute<OnthologyClass> attr in ClassAttributes)

{

if (attrName.ToUpper() == attr.Name.ToUpper())

return true;

}

return false;

}

public void AddSimpleAttribute(string name,string type)

{

SimpleAttributes.Add(new OnthologyAttribute<string>{Name = name, Type = type});

}

public void AddClassAttribute(string name, OnthologyClass oc)

{

ClassAttributes.Add(new OnthologyAttribute<OnthologyClass> { Name = name, Type = oc });

}

}

class OnthologyAttribute<T>

{

public string Name;

public T Type;

}

class OnthologyRelation : OnthologyClass

{

public OnthologyRelation(string name,OnthologyClass left,OnthologyClass right) : base(name)

{

Left = left;

Right = right;

}

public OnthologyClass Left;

public OnthologyClass Right;

override public bool isClassAttribute(string attrName)

{

return (base.isClassAttribute(attrName) ||

attrName.ToUpper() == Left.Name.ToUpper() ||

attrName.ToUpper() == Right.Name.ToUpper());

}

}

}

Соседние файлы в предмете Государственный экзамен