У меня назрела необходимость определиться с форматом передачи информации из ДРАКОН-схемы в некую среду для дальнейшей трансляции и обратно из среды в ДРАКОН-схему. Потенциально эта среда необязательно должна быть транслятором для какого-либо языка программирования. Такая среда может быть, например, текстовым процессором.
Очевидно, что ДРАКОН-схема не может содержать необходимую декларативную информацию, о чём неоднократно говорилось на форуме. Следовательно, формат должен быть способен описывать её, а также другие полезные сущности, которые в свою очередь должны поддерживаться редактором.
Схему, содержащую в себе кроме ДРАКОН-схем и другую информацию, для краткости буду называть - КАРТА ЗНАНИЙ. Термин можно обсудить, как и всё остальное изложенное здесь : )
Формат пока назову ОПИСАНИЕ КАРТЫ ЗНАНИЙ (далее по тексту ОПИСАНИЕ).
Предложенный Рэйлвэй Каген ПРОТОН показался мне неудобным (похоже я просто до конца так и не осознал его преимуществ, а мельтешащие скобки мне сильно мешают : ) К тому же, оказалось, что в некоторых случаях есть польза от произвольных переходов на метку. Не уверен что ПРОТОН с ними справится. Позже будет пример.
Ниже мои предложения, не претендующие на истину в последней инстанции, а лишь служащие приглашением к обсуждению возможного текстового формата для описания КАРТЫ ЗНАНИЙ. Решение лобовое, по принципу что вижу то пою : ) Развёртка ДРАКОН-схемы в линейный текст.
Большинство терминов, используемых в данном тексте не являются устоявшимися и могут быть в дальнейшем изменены.
КАРТА ЗНАНИЙ представляет собой совокупность текстовой и графической информации, структурированной определённым образом. (каким именно образом - можно и нужно обсуждать : )
Имя КАРТЫ ЗНАНИЙ определяется именем файла, содержащего описание КАРТЫ ЗНАНИЙ.
Содержимое КАРТЫ ЗНАНИЙ предназначено для формирования правил и инструкций для ИСПОЛНИТЕЛЕЙ: человека, машины или их групп и комплексов.
Инструментом для работы с КАРТОЙ ЗНАНИЙ является специализированное программное обеспечение (далее РЕДАКТОР).
Алгоритмические схемы отображаются, в основном, на языке ДРАКОН и его модификациях.
Другие схемы отображаются с помощью адекватных средств (соответственно, нужны предложения по применению таких средств или их созданию).
ОПИСАНИЕ не предназначено для ручного редактирования, но может быть легко прочитано и понято человеком.
Назначение ОПИСАНИЯ:
служить интерфейсом между РЕДАКТОРОМ КАРТЫ ЗНАНИЙ и сторонними программными модулями, предназначенными, как для получения правил и инструкций для человека, так и для получения документации и исполняемого кода для автоматизированных систем.
предоставить простой человекопонимаемый формат для автоматического преобразования исполняемого кода в КАРТУ ЗНАНИЙ.
Синтаксис формата дан в форме близкой к БНФ и словесного описания.
Формат определён далеко не полностью, в силу ограниченности моих знаний : )
Условные обозначения:
< > - угловые скобки содержат определяемое понятие
~ - исключение
::= - справа от этого символа находятся определяющие конструкции
| - означает 'или'
( ) - скобки группируют конструкции
{ } - содержимое фигурных скобок может повторяться ноль и более раз
[ ] - содержимое этих скобок является не обязательным
' ' - в одинарных кавычках находятся символы передаваемые как есть.
ПС — перевод строки
ТАБ — табуляция
В любом месте ОПИСАНИЯ могут быть вставлены комментарии:
// - всё, что справа — комментарий
/* многострочный комментарий */
<Формат> ::= 'ОПИСАНИЕ КАРТЫ ЗНАНИЙ' ПС 'ВЕРСИЯ' <Номер версии> ПС [<Разделы>]
<Номер версии> ::= (<Буква> | <Десятичная цифра> | '_' | '-' ) [{<Буква> | <Десятичная цифра> | '_' | '-' }]
<Разделы> ::= <Раздел> [{<Раздел> }]
<Раздел> ::= ('=' ПС <Тип раздела> [<Параметры раздела>] ПС <Блок раздела> ПС '==' ПС)
<Тип раздела> ::= 'ДОБАВИТЬ КАРТУ ЗНАНИЙ' | 'НАСТРОЙКИ' | 'ТАБЛИЦА ОПРЕДЕЛЕНИЙ' | 'ОБЪЕКТЫ' | 'КОМПОНЕНТЫ' | 'СХЕМА СОБЫТИЙ' | 'СХЕМА ОТНОШЕНИЙ' | 'ШАБЛОН' | 'АЛГОРИТМ' | 'ТЕКСТ'
<Параметры раздела> - зависят от типа и могут содержать имя, имя файла, описание и содержание таблиц определений, атрибуты, язык программирования, трактовку текстовых структур в иконах и т.п.
Для каждого <Тип раздела> может существовать свой набор из множества <Блок раздела>
Начну с <Тип раздела> 'АЛГОРИТМ', как наиболее понятному для меня : ) Пока только для примитива.
<Блок раздела> для 'АЛГОРИТМ' ::= '.' ПС ('ПРИМИТИВ' | 'СИЛУЭТ') ПС ['.' ПС 'НАСТРОЙКИ ИЗ ШАБЛОНА' <Имя шаблона> ПС] ['.' ПС 'НАСТРОЙКИ ИЗ ФАЙЛА' <Имя файла> ПС] ['.' ПС 'ДЛЯ ИСПОЛНИТЕЛЯ' <Имя исполнителя> ПС] [{'.' ПС 'ИСПОЛЬЗОВАТЬ ТАБЛИЦУ ОПРЕДЕЛЕНИЙ' <Имя таблицы определений> ПС}] '.' ПС 'СХЕМА' <Описание схемы> [{'.' ПС 'ШАБЛОН' <Имя шаблона> <Описание шаблона> ПС}] [{'.' ПС 'ТЕКСТ СКРЫТЫЙ' <Имя текста> <Текст скрытый> ПС}]
<Описание схемы> ::= '!' ПС <Секция НАЧАЛО> '!!!' ПС [ ( {'!' ПС <Секция> '!!!' ПС} | {'!' ПС <Метка> '!!!' ПС} ) ] '!' ПС <Секция КОНЕЦ> '!!!' ПС
< Секция НАЧАЛО> ::= <Икона НАЧАЛО> [('.' ПС 'СПРАВА' ПС '.' <Иконы правые> ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>] ] [('.' ПС 'СЛЕВА' ПС '.' <Иконы левые> ['.' ПС 'СЛЕВА' ПС '.' <Икона ЛЕВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СЛЕВА' ПС '.' <Икона ЛЕВЫЙ КОММЕНТАРИЙ>] ]
Секция — горизонтально расположенные иконы, связанные между собой (см. рисунок ниже, красными прямоугольниками обозначены секции)
Вложение:
Секции.png [ 18.34 КБ | Просмотров: 24379 ]
<Икона НАЧАЛО> ::= 'НАЧАЛО' [ ПС <Тело иконы> ]
Остальные именованные иконы раскрываются подобным же образом, если иное явно не определено.
Например:
<Икона ЛЕВЫЙ КОММЕНТАРИЙ> ::= 'ЛЕВЫЙ КОММЕНТАРИЙ' ПС [ ПС <Тело иконы> ]
<Икона ПРАВЫЙ КОММЕНТАРИЙ> ::= 'ПРАВЫЙ КОММЕНТАРИЙ' ПС [ ПС <Тело иконы> ]
<Тело иконы> ::= ( [ {'.' ПС 'КОММЕНТАРИЙ ВИДИМЫЙ' ПС <Комментарий видимый>}] | [{'.' ПС '.' 'ТЕКСТ ВИДИМЫЙ' ПС <Текст видимый>}] ) | ( [ {TAB '.' 'ТЕКСТ СКРЫТЫЙ' <Имя текста> ПС}] ) | ( [ {ТАБ '.' ПС 'ФАЙЛ С ТЕКСТОМ' <Имя файла> [ <Номер_строки_и_позиции_начала> <Номер_строки_и_позиции_конца> ] ПС}] )
<Комментарий видимый> - непосредственно отображается в иконе.
<Текст видимый> - текст на исполняемом языке, отображается непосредственно в иконе.
Текст скрытый — текст на исполняемом языке, включая комментарии, отображается, например, при использовании инструмента Лупа.
Файл с текстом — на исполняемом языке, отображается в специальном окне.
<Секция> ::= <Секция ДЕЙСТВИЕ> | <Секция ВОПРОС> | <Секция ВЫБОР> | <Секция ВАРИАНТ> | <Секция ВСТАВКА> | <Секция ПОЛКА> | <Секция НАЧАЛО ЦИКЛА ДЛЯ> | <Секция КОНЕЦ ЦИКЛА ДЛЯ> | <Секция ВЫВОД> | <Секция ВВОД> | <Секция ПАУЗА> | <Секция ПУСК ТАЙМЕРА> | <Секция ПАРАЛЛЕЛЬНЫЙ ПРОЦЕСС> | <Секция КОММЕНТАРИЙ>
<Иконы левые> ::= <Икона ИСПОЛНИТЕЛЬ> | <Икона АВТОИСПОЛНИТЕЛЬ> | <Икона ВОЗДЕЙСТВИЕ> | <Икона СИНХРОНИЗАТОР ПО ТАЙМЕРУ>
ИСПОЛНИТЕЛЬ — человек или группа людей
АВТОИСПОЛНИТЕЛЬ — устройство, способное выполнять инструкции, прописанные в алгоритме.
<Иконы правые> ::= <Икона ПАРАМЕТРЫ> | <Икона ПРАВИЛА>
< Секция ДЕЙСТВИЕ> ::= <Икона ДЕЙСТВИЕ> [('.' ПС 'СПРАВА' ПС '.' <Иконы правые> ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>] ] [('.' ПС 'СЛЕВА' ПС '.' <Иконы левые> ['.' ПС 'СЛЕВА' ПС '.' <Икона ЛЕВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СЛЕВА' ПС '.' <Икона ЛЕВЫЙ КОММЕНТАРИЙ>] ]
<Секция ВОПРОС> ::= <Икона ВОПРОС> [('.' ПС 'СПРАВА' ПС '.' <Иконы правые> ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>] ] '.' ПС 'ДА К ВОПРОСУ' <Номер_вопроса> [{<секция>}] [ ('ПЕРЕХОД НА МЕТКУ' <Имя метки внизу> | 'ПЕРЕХОД НА МЕТКУ ЦИКЛА' <Имя метки цикла> | 'ПЕРЕХОД НА МЕТКУ ПЕРЕХОДА' <Имя метки перехода>) ПС ] '.' ПС 'НЕТ К ВОПРОСУ' <Номер_вопроса> [{<секция>}] ('ПЕРЕХОД НА МЕТКУ' <Имя метки внизу> | 'ПЕРЕХОД НА МЕТКУ ЦИКЛА' <Имя метки цикла> | 'ПЕРЕХОД НА МЕТКУ ПЕРЕХОДА' <Имя метки перехода>) ПС
<Икона ВОПРОС> ::= 'ВОПРОС' <Номер_вопроса> <Тело иконы>
<Метка> ::= '.' МЕТКА <Имя метки внизу> ПС
<Метка ЦИКЛА> ::= '.' МЕТКА ЦИКЛА <Имя метки цикла> ['.' ПС 'СПРАВА' ПС <Икона ПЕРИОД>] ПС
<Метка ПЕРЕХОДА> ::= '.' МЕТКА ПЕРЕХОДА <Имя метки перехода> ПС
Вложение:
Метки.png [ 12.78 КБ | Просмотров: 24379 ]
ПЕРЕХОД полезен для быстрого создания ДРАКОН-схемы.
Это очень удобно, например, при описании деятельности исполнителей прямо во время интервью с ними. Скорость записи практически зависит только от скорости набора текста.
Если ПЕРЕХОД не использовать, то весьма затруднительно быстро построить схему, что накладывает запрет на использование ДРАКОН-редактора прямо во время интервью.
ПЕРЕХОДОВ может быть множество.
Схему с ПЕРЕХОДАМИ можно считать не правильной, но с ней можно работать.
<Секция ВЫБОР> ::= <Икона ВЫБОР> [('.' ПС 'СПРАВА' ПС '.' <Иконы правые> ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>]) | ['.' ПС 'СПРАВА' ПС '.' <Икона ПРАВЫЙ КОММЕНТАРИЙ>] ] '.' ПС {<Секция ВАРИАНТ> [{<Секция ~<Секция ВАРИАНТ>>} [('ПЕРЕХОД НА МЕТКУ' <Имя метки внизу> | 'ПЕРЕХОД НА МЕТКУ ЦИКЛА' <Имя метки цикла> | 'ПЕРЕХОД НА МЕТКУ ПЕРЕХОДА' <Имя метки перехода>) ПС] ] }
<Икона ВЫБОР> ::= 'ВЫБОР' <Номер_выбора> <Тело иконы>
<Икона ВАРИАНТ> ::= 'ВАРИАНТ К ВЫБОРУ' <Номер_выбора> <Тело иконы>
Остальные секции строятся аналогичным образом. Надеюсь они будут когда-либо описаны : )
Ниже несколько примеров.