2012-03-15 16 views
7

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++

+7

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

+5

lex i yacc zdecydowanie generują maszyny stanów, i g ++:) – perreal

+0

Proponuję [SMC] (http://smc.sourceforge.net/), ale nie obsługuje UML. – tinman

Odpowiedz

4

Ragel ma całkiem niezłą reputację.

(Nie mam konkretnego doświadczenia z tym).

+0

+1 na Ragel - przyzwoity wydajność środowiska wykonawczego z implementacją KISS. – JimR

0

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.

0

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.

0

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