2012-03-15 43 views
7

Bạn có biết về bất kỳ máy phát điện mã nguồn mở c + + trạng thái nào (sẽ hoạt động trên linux) không? Lý tưởng nhất là công cụ sẽ xuất tất cả các logic máy nhà nước và các sơ khai. Ngoài ra nó sẽ chấp nhận UML hoặc tệp kê khai có thể đọc được của con người làm đầu vào.C++ máy tạo trạng thái máy

+7

Bạn đã nhìn [Boost.MSM] (http://www.boost.org/libs/ msm /)? Nó có một EDSL có nghĩa là bắt chước UML và có hiệu suất thời gian chạy tuyệt vời. – ildjarn

+5

lex và yacc chắc chắn tạo các máy trạng thái, và g ++:) – perreal

+0

Tôi sẽ đề xuất [SMC] (http://smc.sourceforge.net/) nhưng nó không hỗ trợ UML. – tinman

Trả lời

4

Ragel có danh tiếng khá tốt.

(Tôi không có kinh nghiệm cụ thể với nó).

+0

+1 về hiệu suất thời gian chạy của Ragel - phong nha với việc thực hiện KISS. – JimR

0

Điều gần nhất tôi thấy có thể phù hợp với bạn là StateProto. Nhưng nó xuất ra mã C#.

Bạn nên xem StateProto và QHSM. Dự án mã nguồn mở ở đây: http://code.google.com/p/gqhsm/

StateProto là mã nguồn mở và các hàm đầu ra có thể được sửa đổi thành mã C++ đầu ra cho bạn. Nhưng nó sử dụng các đại biểu.

Tôi khuyên bạn nên sử dụng thiết kế theo hướng dữ liệu để thay thế. StateProto sẽ xuất ra các máy trạng thái XML và có mã C# để tải XML và điều khiển máy trạng thái từ dữ liệu.

Bạn có thể tìm thấy nhiều triển khai QHSM trong C++. Tôi không biết liệu có trình tải XML nào có sẵn hay không.

1

Bạn có thể thấy khung STTCL thú vị của mình. Nó không phải là một máy phát, nhưng các lớp (cơ sở) có sẵn ánh xạ rất tốt với các định nghĩa thống kê UML.
http://makulik.github.com/sttcl/

0

Hãy nhìn vào các QP C++ khuôn khổ mã nguồn mở/máy nhà nước và các công cụ mô hình QM miễn phí (xem http://www.state-machine.com). Khung công tác QP/C++ hỗ trợ các máy trạng thái phân cấp (các thống kê UML) và cho phép bạn thực hiện đồng thời nhiều máy trạng thái như vậy. QP/C++ đã được chuyển sang Linux (xem http://www.state-machine.com/linux).

Bây giờ, liên quan đến trình tạo mã, công cụ mô hình QM miễn phí (xem http://www.state-machine.com/qm) cho phép bạn vẽ sơ đồ trạng thái máy và tạo mã C++ cho khung công tác QP/C++. QM chính nó là nền tảng chéo và chạy trên Linux, cũng như Windows và Mac OS X.

0

Hãy xem Thingml. Nó cung cấp một cú pháp văn bản (độc lập với C) cho các máy trạng thái giống UML. Một cái gì đó như:

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 có thể tạo mã C dễ dàng nhúng vào chương trình C++. Nó thực sự có thể tạo ra nhiều hơn sơ khai. Chúng tôi thực sự có thể tạo ra mã hoạt động đầy đủ. Tất nhiên, khi nói đến chi tiết thực hiện ở mức độ thấp, chúng tôi cung cấp một phương tiện để trộn mã ThingML với mã C.

Lưu ý rằng chúng tôi cũng nhắm mục tiêu Java và JavaScript

Các vấn đề liên quan