StateCharts (Harel, 1987) is a visual formalism for declarative description of complex interactive systems. It extends the conventional state machine formalism with Hierarchy, Concurrency and Communication.
SCXML is a W3C standard based on StateCharts. This is a C++ library that implements the SCXML specification. Instead of XML, a StateChart is represented as a StateChart protobuf.
Many features from the SCXML standard have been implemented.
- Composite State
- Parallel State
- Datamodel
- Transitions (Conditional, Eventless)
- Executable Statements (Raise, Log, Assign, If, ForEach, Send)
- Serialize/Deserialize the state machine
- History
Here's an example of a StateChart that describes a Microwave.
You can see //statechart/example/microwave_example_main.cc for details on how to specify such a StateChart as a StateChart proto and how to use it in code.
To build the library you'll need bazel. You can download and install it from here.
# Download/Clone the repo.
git clone https://github.com/google/statechart.git
cd statechart
# Build the library
bazel build //statechart/...
# Run unit tests
bazel test //statechart/...
# Run the Microwave example
bazel run //statechart/example:microwave_example_main -- --alsologtostderr
This is not an officially supported Google product.