tklab-tud / uscxml

SCXML interpreter and transformer/compiler written in C/C++ with bindings to Java, C#, Python and Lua
Other
106 stars 54 forks source link
c c-plus-plus cpp ecmascript embedded interpreter java lua python scxml transformer w3c

uSCXML ReadMe

Build StatusBuild statusBuild statusCoverage Status

Quick Links

What is it?

uSCXML is a platform to work with state-charts given as SCXML files. It features the fastest microstep implementation available and consists of three principal components:

  1. libuscxml: C++ library containing an interpreter and accompanying functionality.

  2. uscxml-browser: A standards compliant command-line interpreter of SCXML documents.

  3. uscxml-transform: A collection of transformation implementations to transpile SCXML, e.g. onto ANSI-C and VHDL.

The status of the various datamodels, bindings and generators with regard to the W3C IRPtests can be checked in the test table.

Installation

There are no installers yet and we do not feature any releases. Just check for open issues and build from source. If you did download and build locally, you can create installers via make packages though.

Documentation

Documentation is available at our github pages. It is created from inline comments in the source along with some dedicated markdown pages via doxygen. We try to keep it current and will update it ever again. For the most current documentation, you can run make docs in your build directory.

Licensing

uSCXML itself is distributed under the Simplified BSD license as in, do not sue us and do not misrepresent authorship. There are currently four additional libraries that are required to compile uSCXML.

Project License Comment
libcurl MIT/X derivate Used in uSCXML to fetch remote content
Xerces-C++ Apache v2 XML parser and DOM implementation
libevent 3-clause BSD Delayed event queues
uriparser New BSD Referring and resolving URIs

At configure time, the uSCXML build-process will attempt to find and link several other libraries (e.g. Lua, v8) and additional licensing terms may apply.

Getting Started

For more detailled information, refer to the documentation.

Embedded as a Library

uscxml::Interpreter scxml = uscxml::Interpreter::fromURL("...");
scxml.on().enterState([](const std::string& sessionId,
                         const std::string& stateName,
                         const xercesc_3_1::DOMElement* state) {
    std::cout << "Entered " << stateName << std::endl;
});

while(scxml.step() != uscxml::USCXML_FINISHED) {
  ...
}

Examples:

On the Command-line

# interpret state-chart from url
$ uscxml-browser https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/null/test436.scxml

For Transformations

# transform given SCXML document into ANSI-C fragment
$ uscxml-transform -tc -i https://raw.githubusercontent.com/tklab-tud/uscxml/master/test/w3c/null/test436.scxml

Examples:

Changes