Данный репозиторий хранит исходный код для интегрированной программной среды для языка программирования Пифагор.
Язык программирования Пифагор является функционально-потоковым языком программирования. Для разработки на данном языке используется схема, отличная от привычных.
Перед запуском кода необходимо использовать функционал трансляции -- исходный текст программы преобразуется в промежуточный вид: информационный граф, который затем используется при этапе интерпретации.
Затем происходит выбор выполняемой функции и ввод аргумента в поле.
Последний этап -- запуск самой программы.
Подробнее про язык и исполняемый файл можно прочитать на сайте разработчика языка.
//=============================================================================
// Некоторые примеры из статьи: "На пути к мобильным параллельным программам".
// Открытые системы, №5-6.
//=============================================================================
//--------------------------------------------------------------------
// Функция, осуществляющая скалярное произведение двух векторов.
// Используется параллельный список
//....................................................................
// Примеры данных:
// ((1,2,3),(4,5,6))
// ((3, 5), (-4, 2))
//....................................................................
//
ScalMultVec << funcdef W { (W:#:[]:*) >> return }
//--------------------------------------------------------------------
// Функция, суммирующая элементы вектора.
//....................................................................
// Примеры данных:
// (1,2,3,4,5,6)
// (3, 5, -4, 2)
//
VecSum << funcdef Param {
// Формат аргумента: (x1,... ,xn), где x1,... ,xn - числа
Len<<Param:|;
return<< .^[((Len,2):[<,=,>]):?]^
(
{Param:[]},
{Param:+},
{
block {
OddVec << Param:[(1,Len,2):..];
EvenVec << Param:[(2,Len,2):..];
([OddVec,EvenVec]: VecSum):+
>>break
} // конец блока
} // конец задержанного списка
)
}
//--------------------------------------------------------------------
// Функция, выполняющая произведение двух векторов.
// Древовидная свертка. Результатом является скаляр.
//....................................................................
// Примеры данных:
// ((1,2,3),(4,5,6)) => 32
//....................................................................
//
VecMult<< funcdef x{
x:ScalMultVec:VecSum >> return
}
//--------------------------------------------------------------------
// Функция, осуществляющая сложение элементов вектора.
// Используется правая свертка.
//....................................................................
// Примеры данных:
// (1,2,3,4,5,6)
// (3, 5, -4, 2)
//....................................................................
//
SeqVecSum << funcdef Param {
// Формат аргумента: (x1,... ,xn), где x1,... ,xn - числа
Len<<Param:|;
return<< .^[((Len,2):[<,>=]):?]^
(
{Param:[]},
{(Param:1, Param:-1:SeqVecSum) :+}
)
}
//--------------------------------------------------------------------
// Функция, выполняющая произведение двух векторов.
// Правая свертка. Результатом является скаляр.
//....................................................................
// Примеры данных:
// ((1,2,3),(4,5,6)) => 32
//....................................................................
//
SeqVecMult<< funcdef x{
x:ScalMultVec:SeqVecSum >> return
}Библиотека интерпретатора и транслятора языка находится в каталоге QTTranslator. Изначально сама библиотека представлена в виде файла с расшерением ".a". Были проблемы с подключением библиотеки, потэтому ее файлы были подключены напрямую в CMakeLists.txt. Похожая проблема и возможное ее решение описано в файле со ссылками на статьи с решениями проблем.
Программа написана с использованием фреймворка Qt версии 6.5.0. Данный выбор обусловлен легкостью интеграции библиотеки при написании приложения на C++ с использованием CMakeLists.txt, а также кроссплатформенностью создаваемых приложений.
Также были использованы иконки для создания ToolButton's, с привязкой к методам интерпретатоара и транслятора. Данные иконки распростаняются под лицензией "CC BY-NC 3.0" и были взяты с открытого электронного ресурса: https://freeicons.io. Автор иконок.