Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализация сетевой модели вычислений с аксиоматической и рекурсивной формами задания функций и предикатов (бакалаврская работа)

.pdf
Скачиваний:
6
Добавлен:
28.06.2014
Размер:
704.41 Кб
Скачать

30

Рис 4.1. Окно программы

Влевой части окна расположен список со всеми доступными функциями. Функции взяты из исходного файла, который расположен по умолчанию в папке с программой. Далее расположен список всевозможных определений выбранной функции. В правой части находится некоторая информация о функции или определении – имя функции, имя класса, в котором хранится информация о функции, арность функции, и её граическое представление.

Внижней части расположено окно с информацией о процессе разбора и процессе построения деревьев или графических представлений.

Чтобы перейти к процессу вычислений схем направленных отношений требуется выбрать функцию для подстановки и её реализации (Рис 4.2).

31

Рис 4.2 Выбор подставляемой функции

После очередного этапа совершения подстановки в списке определений функции будут добавляться её новые определения.

32

Рис 4.3 Результат процесса вычисления

4.2. Вывод

В работе реализована базовая система функционально-логического программирования (СФЛП). Созданы средства распознавания и анализа исходного кода программ на разновидности языка FLOGOL; разработана система структур внутренних представлений направленных отношений, выраженных в алгебраической и графической формах и их зависимостях. Реализована процедура вычислений направленных отношений на основе принципа сетевой резолюции.

Программа разработана в среде Visual studio 2010 на языке C# с использованием платформы .NET Framework.

4.3. Перспективы

Одним из недостатков работы с алгебраическим представлением является высокая сложность алгоритма редукции дерева.. Поэтому одной из

33

основных проблем является решение задачи оптимизации алгоритмов β- редукции НО в форме алгебраического представления.

Врассматриваемой программе не реализовано получение информации об еще не объявленной функции из контекста.

Помимо оптимизации кода планируется добавить типизацию – отступить от парадигмы абсолютно функционального языка.

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

Перспективной задачей также является увеличение конструкций языка

вданной реализации.

34

5.Использованная литература

1.Фальк В.Н. FLOGOL: Язык и система функционально-логического программирования. М:– МЭИ. -2009.

2.FLIDE Система функционально-логического программирования на языке S-FLOGOL //Приложение к диссертация Бебчик Ал.М. Бебчик Ан.М. М:– МЭИ. -2004.

3. Дж. Бишоп, Н. Хорспул. C# в кратком изложении М:-Бином. Лаборатория знаний. -2005

4.Фальк В.Н. Теория направленных отношений и ее приложения // Дисс. докт. техн. наук. М: – МЭИ. -2001.

5.Фальк В.Н. Языки схем отношений //Формальные модели параллельных вычислений. Новосибирск, 1988.

6.Бебчик Ал.М., Бебчик Ан.М., Фальк В.Н. Система функциональнологического программирования S-FLOGOL // Девятая Национальная конференция по искусственному интеллекту с международным участием КИИ-2004 (28 сентября – 2 октября 2004 г., Тверь)

7.Бебчик Ал.М., Бебчик Ан.М., Фальк В.Н. Инструментальные средства разработки и отладки программ системы функциональнологического программирования S-FLOGOL // Девятая Национальная конференция по искусственному интеллекту с международным участием КИИ-2004 (28 сентября – 2 октября 2004 г., Тверь)

35

Приложение

1. Описание грамматики

Нетерминальные символы начинаются со знака $. Затем следует его название с большой буквы.

В левой части от знака «=» находится определяемый нетерминал. В правой части - список определяющих нетерминальных и терминальных символов, разделённый знаком “_”

$Имя=$ЗагБуква_$Строка $Строка=$ЗагБуква_$Строка $Строка=$Цифра_$Строка $Строка=$Буква_$Строка $Строка=$Пусто $Буквы=$Буква $Буквы=$Буква_$Буквы

$Число=$Цифра $Число=$Цифра_$Число

$Пробел= $Пробелы=$Пробел_$Пробелы

$Арность=(_$Число_:_$Число_) $Рекурсия=@

$Графич=$Конструктор_$Конец $Графич=$ПрологПредставление_$Конец $Графич=$Сеть_$Конец

$Конец=;

//ОПИСАНИЕ ФУНКЦИИ, ЗАДАННОЙ СЕТЬЮ $Сеть=$Имя_=_$ГрафичОперанд $Сеть=$Арность_$Имя_=_$ГрафичОперанд

$ГрафичОперанд1=$Имя

36

$ГрафичОперанд1=$Константа $ГрафичОперанд1=$Рекурсия

$ГрафичОперанд1=(_$НачалоВСкобках_$ГрафичОперанд_$КонецВСк обках_)

$НачалоВСкобках=$Пусто $КонецВСкобках=$Пусто $ГрафичОперанд=$ГрафичОперанд1

$ГрафичОперанд=$ГрафичОперанд1_$Операция_$ГрафичОперанд

$Константа=--> $Константа=--< $Константа=<-- $Константа=>-- $Константа=---

$Константа=-/- $Константа=] $Константа=[

$Операция=* $Операция=#

//ОПИСАНИЕ КОНСТРУКТОРА $Конструктор=$АрностьКонстр_$Имя $АрностьКонстр=(_+_$Число_+_:_+_$Число_)

//ОПИСАНИЕ ФУНКЦИИ, ЗАДАННОЙ ГРАФИЧЕСКИМ ПРЕДСТАВЛЕНИЕМ

$ПрологПредставление=$Имя_=_{_$ПрологВходы_$ПрологВыходы_$ ПрологОграничения_}

$ПрологПредставление=$Арность_$Имя_=_{_$ПрологВходы_$Пролог Выходы_$ПрологОграничения_}

$ПрологВходы=$СписокПараметров

$СписокПараметров=$Параметр $СписокПараметров=$Параметр_,_$СписокПараметров

$Параметр=$Переменная $Параметр=$ПрологФункция

37

$Переменная=$Буквы

$КонецПрологФункции=$Пусто

$ПрологФункция=$Имя_$КонецПрологФункции $ПрологФункция=$Имя_(_$СписокПараметров_)_$КонецПрологФунк

ции

$ПрологВыходы=$Пусто $ПрологВыходы=:_$СписокПараметров

$ПрологОграничения=$Пусто $ПрологОграничения=?_$ПрологСписокОграничений $ПрологОграничения=?

$ПрологСписокОграничений=$ПрологОграничение $ПрологСписокОграничений=$ПрологОграничение_,_$ПрологСписок

Ограничений

$ПрологОграничение=$ПраваяЧасть $ПрологОграничение=$ЛеваяЧасть_=_$ПраваяЧасть

$ПраваяЧасть=$ПрологФункция $ПраваяЧасть=$Переменная

$ЛеваяЧасть=$ПрологФункция $ЛеваяЧасть=$Переменная $ЛеваяЧасть=[_$СписокПараметров_]

2. Класс для составления функций по списку лексем

Метод Аction будет выполняться после завершения разбора каждой строки входного файла.

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

38

static class Saver {

static List<string[]> lst = new List<string[]>(); public static void Add(string[] s) {

lst.Add(s);

}

public static void Action()

{

if (lst[0][0] == "$Сеть") { if (lst[1][0] == "$Имя") {

List<string[]> tmp = lst.Skip(2).ToList();

UserFunction.CreateFunction(lst[1][1], tmp); } else if (lst[1][0] == "$Арность") {

List<string[]> tmp = lst.Skip(3).ToList(); UserFunction.CreateFunction(lst[2][1], tmp, lst[1][1]);

} else {

LOGClass.Add("Saver", "Не распознан способ задания

функции ");

}

}else if (lst[0][0] == "$Конструктор") { Constructor.Create(lst[1][1], lst[2][1]);

}else if (lst[0][0] == "$ПрологПредставление") { if (lst[1][0] == "$Имя") {

List<string[]> tmp = lst.Skip(2).ToList();

UserFunction.CreateProlog(lst[1][1], tmp); } else if (lst[1][0] == "$Арность") {

List<string[]> tmp = lst.Skip(3).ToList(); UserFunction.CreateProlog(lst[2][1], tmp, lst[1][1]);

} else {

LOGClass.Add("Saver", "Не распознан способ задания функции

");

}

}

lst.Clear();

}

}

39

3. Лексический разбор на основе грамматики

namespace Parser {

public delegate void OnAction(params string[] param); public delegate void OnLog(string classname, string s);

public struct PairAssign { internal string Name; internal OnAction Action;

public PairAssign(string Name, OnAction Action) { this.Name = Name;

this.Action = Action;

}

}

public static class Parser { #region Классы

struct Pair {

public OnAction Action; public string[] param;

public Pair(OnAction Action, params string[] param) { this.Action =Action;

this.param = param;

}

}

class Result { internal string s;

internal List<Pair> lst;

internal Result(string s, List<Pair> lst) { this.s = s;

this.lst = lst;

}

}