Диаграмма активности UML как DSL; преобразование в переполнение стека

Я должен написать коррелятор событий. Фундаментальной частью системы будет огромное дерево решений, которое распознает причину ошибки, основываясь на записанных состояниях и файлах журналов, и одной из главных задач было сохранение этого дерева поддерживаемым — записанным в формате, понятном и редактируемом для программиста. ,

Так как вложенный if () с 7 уровнями не является моей идеей «обслуживаемости и простоты понимания», я спросил за идеи, как представить его в форме, которая является хорошим промежуточным звеном между машинным, удобным и экономичным. Очевидным ответом было использование предметно-ориентированного языка, который можно было бы компилировать в C ++, на котором будет записан фактический коррелятор событий. Очевидный вопрос заключался в том, как должен выглядеть этот DSL.

Предложение, которое мне понравилось больше всего, состояло в том, чтобы использовать диаграмму активности UML и скомпилировать ее в C ++. Диаграмма, скорее всего, будет состоять почти строго из решений, с действиями только на листьях дерева, как выводы, сделанные процессом принятия решений. По сути, диаграмма — это мой графический DSL, который затем должен быть скомпилирован в эту огромную группу if () в C ++. И хотя мне все еще придется создавать все условные функции вручную, по крайней мере, взаимосвязь между условиями должна обрабатываться системой.

Теперь, какой инструмент я должен использовать для создания этой диаграммы?

Так как «свернуть свои собственные» не является моей идеей рентабельного подхода, учитывая, что в конечном итоге необходимо создать одну единую диаграмму для одного устройства (даже если она, вероятно, будет редактироваться вечно, так как будут обнаружены новые способы отказа), у меня было взгляд на Список инструментов Unified Modeling Language.

Многие из них, включая те, которые имеют «C ++», перечисленные в «Сгенерированных языках», но я знаю, что реальность никогда не бывает так хороша — меня не интересует куча заголовочных файлов, предварительно заполненных определениями классов в соответствии с диаграмма классов. Мне нужен файл, содержащий мое дерево решений; куча условных операторов с условиями, предварительно заполненными вызовами функций принятия решений, которые я должен написать вручную, и результатами в виде вызовов конкретных функций вывода.

Теперь мой вопрос в том, какие из них могут сделать это, не слишком сложны в использовании и не слишком дороги — предпочтительны бесплатные инструменты, но коммерческие инструменты по разумной цене тоже подойдут.

В качестве альтернативы, если это не удастся — какие из них могут сохранить эту диаграмму в форме, которую я мог бы проанализировать с помощью собственного «компилятора», и как подойти к созданию этого компилятора.

Конечно, приветствуются и другие предложения — может быть, инструмент для старомодной блок-схемы, который может генерировать такой код? Может быть, выделенный DSL для создания того, что мне нужно, уже существует?

1

Решение

Enterprise Architect может генерировать код C ++ из поведенческих диаграмм, включая диаграммы деятельности. Это предлагается в нескольких выпусках; Самая низкая версия для поддержки генерации поведенческого кода стоит 599 долларов. Вот раздел руководства пользователя: Генерировать из поведенческих моделей. Помимо генерации кода, EA предлагает моделирование, прослеживаемость и многие другие тонкости.

Если вместо этого вы можете реализовать свою логику в Statechart, вы можете использовать бесплатный QM Modeler. Он генерирует код C ++. Он предназначен для работы с Фреймворк активного объекта QP, но вы можете использовать QM, не полагаясь на QP. (Вы также можете использовать Enterprise Architect для генерации кода из диаграмм состояний.)

1

Другие решения

Этот URL-адрес гласит, что UML представлен как «формат XMI» — своего рода XML
стандарт для представления UML.

http://documentation.softwareag.com/webmethods/tamino/ins441/advconc/FromUMLtoXML.htm

Если бы вы использовали этот стандарт, ваши данные могли бы быть более совместимыми с
другие инструменты CASE:

Большинство инструментов UML предоставляют функцию для сериализации модели в формат XMI. XMI является отраслевым стандартом на основе XML для обмена метаданными между инструментами CASE. Поскольку он основан на XML, XMI может быть преобразован с помощью таблиц стилей XSLT в другие форматы, такие как XML-схема. Пример такой таблицы стилей можно найти на http://www.aomodeling.org/.

Я предполагаю, что этот XML может быть проанализирован с помощью обычного синтаксического анализатора C ++ XML, такого как
Xerces или (для Windows) MSXML / XML DOM.

1

По вопросам рекламы [email protected]