Вычислительная схема, состоящая из предопределенного набора вычислительных блоков и связей между ними.
Данная реализация Workflow является линейной.
desc # Описание блоков схемы
id1 = block1
id2 = block2
...
idN = blockN
csed
idA -> idB -> idC -> ... idZ # Описание структуры схемы
- desc, csed - Ключевые слова, ограничивающие описания блоков.
- id1, ..., idN - целые, неотрицательные, неповторяющиеся числа.
- block1, ..., blockN - Команды из списка команд с обязательными параметрами.
- idA, idB, ..., idZ - числа, принадлежащие множеству id1, ..., idN. Описание конвейра. Длина неограничена.
- -> - Ключевое слово, обозначающее связь вычислительных узлов.
После описания команды указан принимаемый тип -> возвращаемый тип.
Тип возвращаемого значения текущей команды должен соответствовать типу принимаемого значения следующей за ней команды в списке исполнения!
- readfile < filename > ; None -> Text:
Считывает текстовый файл в память целиком.
- writefile < filename > ; Text -> None:
Записывает текст в файл и является завершением конвейра.
- grep < word > ; Text -> Text:
Выбирает из входного текста строки, разделенные символом переноса строки и содержащие слово заданное слово.
- sort ; Text -> Text:
Сортирует строки текста.
- replace < pattern > < substitution > ; Text -> Text:
Заменяет слова в тексте.
- dump ; Text -> Text:
Записывает текст в файл.
Допускается отсутствие входного и/или выходного файла для схемы.
В этом случае при запуске требуется указать отсутствующие имена.
Как это сделать, описано ниже.
desc
1 = replace abracadabra cadabraabra
2 = grep braab
3 = sort
0 = readfile in.txt
5 = writefile out.txt
csed
0 -> 1 -> 2 -> 3 -> 5
desc
1 = grep some_word
2 = sort
csed
1 -> 2
Получаем исходные файлы:
git clone https://github.com/kirpichik/Linear-Workflow.git
Переходим в репозиторий:
cd Linear-Workflow
Генерируем Makefile:
mkdir build && cd build && cmake ..
Выполняем сборку:
make
Запускаем тесты:
./WorkflowTests
./Workflow < файл схемы >
Чтобы указать входные и выходные файлы (если они не указаны в схеме):
./Workflow -i < входной файл > -o < выходной файл > < файл схемы >