Czy znasz wszystkie generatory kodu stanu maszyny w stanie otwartym, które będą działać na Linuksie? Idealnie narzędzie wyprowadzałoby całą logikę maszyny stanów i kody pośredniczące. Ponadto akceptowałby UML lub pliki manifestu czytelne dla człowieka jako dane wejściowe.Generator maszyn stanu C++
Odpowiedz
Najbliższa rzecz, którą widziałem, może ci się przydać to StateProto. Ale generuje kod C#.
Powinieneś sprawdzić StateProto i QHSM. Projekt open source jest dostępny tutaj: http://code.google.com/p/gqhsm/
StateProto jest open source, a funkcje wyjściowe mogą być modyfikowane, aby wyprowadzić dla ciebie kod C++. Ale korzysta z delegatów.
Zalecam użycie zamiast tego projektu opartego na danych. StateProto wyprowadzi maszyny stanu XML i jest kod C# do załadowania XML i przeniesienia maszyny stanu z danych.
Możesz znaleźć wiele implementacji QHSM w języku C++. Nie wiem, czy są dostępne jakiekolwiek ładowarki XML.
Być może moje ramy STTCL są interesujące. Nie jest to generator, ale dostępne klasy (bazowe) bardzo dobrze odwzorowują definicje statystyk UML.
http://makulik.github.com/sttcl/
Spójrz na open source QP/C++ ramach machiny państwowej i darmowe narzędzie do modelowania QM (patrz http://www.state-machine.com). Środowisko QP/C++ obsługuje hierarchiczne maszyny stanów (tabele UML) i pozwala na równoczesne wykonywanie wielu takich maszyn stanów. QP/C++ został przeniesiony do systemu Linux (patrz http://www.state-machine.com/linux).
Teraz, jeśli chodzi o generator kodu, narzędzie do modelowania darmo QM (patrz http://www.state-machine.com/qm) pozwala rysować diagramy stanów maszynowych i generowania kodu C++ dla ram QP/C++. Sam QM jest wieloplatformowy i działa na systemie Linux, a także Windows i Mac OS X.
Zobacz na Thingml. Zapewnia tekstową składnię (niezależną od C) dla maszyn typu UML-podobnych. Coś jak:
import "../hardware/bricks/led.thingml"
thing Blink includes LedMsgs, TimerMsgs
{
required port HW
{
sends led_toggle, timer_start
receives timer_timeout
}
statechart BlinkImpl init Blinking
{
state Blinking
{
on entry HW!timer_start (1000)
transition -> Blinking
event HW?timer_timeout
action HW!led_toggle()
}
}
}
ThingML może generować kod C, które mogą być łatwo osadzony w programach C++. W rzeczywistości może wygenerować więcej niż stubs. Możemy rzeczywiście wygenerować pełny kod operationl. Oczywiście, jeśli chodzi o szczegóły implementacji niskiego poziomu, zapewniamy środek do mieszania kodu ThingML z kodem C.
Zauważ, że my również kierować Java i JavaScript
Należy przyjrzeć Yakindu: http://statecharts.org/
Pan spojrzał na [Boost.MSM] (http://www.boost.org/libs/ msm /)? Ma EDSL, który ma naśladować UML i ma doskonałą wydajność runtime. – ildjarn
lex i yacc zdecydowanie generują maszyny stanów, i g ++:) – perreal
Proponuję [SMC] (http://smc.sourceforge.net/), ale nie obsługuje UML. – tinman