Генерация кода из графа: интересно, так кто-нибудь делает? Рисуем граф. В удобном редакторе. Состоящий из узлов и переходов.
Узел имеет:
* входные порты - сюда попадают переходы из других узлов. В общем случае может использоваться для контроля - а правильно ли программа сюда попала?
* выходные порты - при наступлении некоторых событий программа переходит из этого узла куда-то еще
* глобальные переменные, которые он читает
* глобальные переменные, которые он модифицирует
Ребро графа соединяет выходной и входной порты какого-то узла.
Внутри узла содержится С код, который, кроме описанного выше, делает еще какие-то действия. Действия, кроме глобальных переменных, локальны.
Есть иерархия. Совокупность узлов является субграфом и узлом в графе верхнего уровня. Субграф имеет входные и выходные порты, локальные переменные, и доступ к глобальным переменным графа верхнего уровня.
Есть контроль реального времени. Есть механизм, который контролирует реальное время и детектирует ситуации, когда кто-то не успел.
После того, как осмыслили весь граф, жмем батон, и С код геренерится автоматически и изоморфно (1:1 отображение) по этому графу.
Глядя на граф, пришем test suite с воздействиями для проверки. Прогоняем сгененированный исходник на реальной платофрме и смотрим правильность отработки тестовых воздействий и допустмость времени.
Субграф - это два уровня вложенности (в общем случае). Есть main_subgraph (), в которой есть switch на состояния глобальных переменных. Каждый узел - функция. Switch сработал - фунукция вызвалась. Она изменила переменные субграфа. Break, снова switch - и понеслась. Быть может, функция вызва еще какие функуции, но это не суть.
Как сделать удобный редактор графов, я, похоже, придумал.
Что-то похожее уже есть?
-
- Суммарный ответ на высказанные ранее мнения: "Нет ребята все не так! Все не так ребята." Evgeny_CD(1622 знак., 27.06.2009 11:48)
- Вот такое старое средство есть (Libero) - amusin(27.06.2009 07:41, ссылка)