2012-03-15 31 views
7

¿Conocen los generadores de código de máquina de estado de código abierto (que funcionarán en Linux)? Lo ideal es que la herramienta genere toda la lógica de estado de la máquina y los stubs. También aceptaría UML o archivos de manifiesto legibles por humanos como entrada.Generador de máquinas de estado C++

+7

¿Ha mirado [Boost.MSM] (http://www.boost.org/libs/ msm /)? Tiene un EDSL destinado a imitar a UML y tiene un excelente rendimiento en tiempo de ejecución. – ildjarn

+5

lex y yacc definitivamente generan máquinas de estado, y g ++:) – perreal

+0

Sugeriría [SMC] (http://smc.sourceforge.net/) pero no es compatible con UML. – tinman

Respuesta

4

Ragel tiene una muy buena reputación.

(No tengo experiencia específica con él).

+0

+1 en Ragel: rendimiento decente del tiempo de ejecución con una implementación de KISS. – JimR

0

Lo más parecido que he visto que podría funcionar para usted es StateProto. Pero emite el código C#.

Debería echar un vistazo a StateProto y QHSM. El proyecto de código abierto está aquí: http://code.google.com/p/gqhsm/

StateProto es de código abierto y las funciones de salida se pueden modificar para producir código de C++ por usted. Pero usa delegados.

Yo recomendaría que utilice un diseño basado en datos en su lugar. StateProto generará máquinas de estado XML y existe un código C# para cargar el XML e impulsar la máquina de estado desde los datos.

Puede encontrar muchas implementaciones de QHSM en C++. No sé si alguno tiene cargadores XML disponibles.

1

Puede encontrar mi marco STTCL interesante. No es un generador, pero las clases disponibles (base) se corresponden muy bien con las definiciones de diagrama de estado UML.
http://makulik.github.com/sttcl/

0

Tome un vistazo a la QP C marco máquina de estados de código abierto/++ y la herramienta de modelado libre de QM (ver http://www.state-machine.com). El marco QP/C++ admite máquinas de estado jerárquico (gráficos de estado UML) y le permite ejecutar varias máquinas de estado al mismo tiempo. QP/C++ ha sido portado a Linux (ver http://www.state-machine.com/linux).

Ahora, con respecto al generador de código, la herramienta gratuita de modelado QM (ver http://www.state-machine.com/qm) le permite dibujar diagramas de máquina de estado y generar código C++ para el marco QP/C++. QM en sí mismo es multiplataforma y se ejecuta en Linux, así como en Windows y Mac OS X.

0

Eche un vistazo a Thingml. Proporciona una sintaxis textual (independiente de C) para máquinas de estados de tipo UML. Algo así como:

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 puede generar código C que puede ser fácilmente integrado en los programas en C++. En realidad, puede generar más de talones. De hecho, podemos generar un código completamente operativo. Por supuesto, cuando se trata de detalles de implementación de bajo nivel, proporcionamos un medio para mezclar código ThingML con código C.

Tenga en cuenta que también nos dirigimos a Java y JavaScript

Cuestiones relacionadas