The SCCD (Statecharts + Class Diagrams) compiler and runtime.

Joeri Exelmans 99569186bb Nicer directory layout for digital watch example. 4 سال پیش
bsml_features e92f44ba01 Rename python src dirs to match installed names (can set to 'src' dir so you don't have to re-install after every change). Updated SCCD schema to accept all existing tests. Added XML namespace to tests. Compiler checks input file against SCCD schema. New compiler dependency 'lxml' (largely compatible with xml.etree) for dealing with XML namespaces and schemas. 5 سال پیش
examples 99569186bb Nicer directory layout for digital watch example. 4 سال پیش
rust 386dd1cf97 Finished digital watch example in browser, through Rust -> WebAssembly. Also: Re-implemented controller's event queue and timer cancellations. 4 سال پیش
src 386dd1cf97 Finished digital watch example in browser, through Rust -> WebAssembly. Also: Re-implemented controller's event queue and timer cancellations. 4 سال پیش
test_files 04d9e9557e Rust: Make generated in/out event types public 4 سال پیش
.gitignore c20f0c6633 Made IndentingWriter smarter 4 سال پیش
LICENSE 04ec602b01 initial commit (from svn repo) 9 سال پیش
README.md 57e1cb0e29 Update test framework to use Rust library. Fix TimerId error in generated code. 4 سال پیش
notes.txt aa5490f614 Fix some things + add test 4 سال پیش
shell.nix 29062d730c Add shell.nix file 4 سال پیش

README.md

Statechart interpreter (and compiler!) with semantic variation

Dependencies

Tip: Users of the Nix package manager can get a usable development environment through the supplied shell.nix file instead of manually installing all dependencies.

Mandatory

  • CPython >= 3.6 or PyPy >= 7.3.0 (Compatible with Python 3.6)
  • The following packages from PyPi:
    • lark-parser for parsing action language code and various fragments of the statechart language (such as target state references in an XPath-like syntax)
    • lxml, wraps the C-library libxml2, used for parsing the statechart XML input format
    • termcolor for colored terminal output
    • dataclasses standard library backport, not needed for Python >= 3.7.

Optional

Installation

There's a setup.py script in the src directory.

Alternatively, you can just set your PYTHONPATH environment variable to the absolute path of the src directory. This is recommended for development.

Running the tests

Assuming you followed the installation instructions above, run:

python -m sccd.test.cmd.run test/test_files

It will recursively visit the directory tree of test_files and look for XML files starting with with test_ (tests that should succeed) or fail_ (for tests that should fail), and execute them. The tree also contains XML files starting with statechart_: these are individual statechart models that are not directly executable, but are used by test files. The tree also contains SVG files: these contain automatically rendered images of statechart models.

Code generation with Rust

The test framework can also generate a Rust crate for each test, and then invokes Cargo (must be in your PATH as cargo) to compile to native code for your machine. The created crates and compilation artifacts are put in a temporary directory. The native code is then run (the main-function of the generated code executes the test).

Add the --rust flag to the test command to try it:

python -m sccd.test.cmd.run --rust test/test_files

Rust code generation is a work-in-progress. Some tests may fail, or be skipped.

Runtime environment variables

The following environment variables can be set to change the behavior of the runtime. These options can be set while running the tests, or while running one of the examples.

  • SCCDDEBUG: When set, additional debug information is printed, such as a trace of the individual transitions taken.
  • SCCDTIMINGS: When set, at exit, the runtime will print information about how much time in total was spent during various parts of its execution, such as loading the model, generating transition candidates, executing transitions, executing actions, and more.

Included tools

The following Python modules are runnable from terminal:

  • sccd.test.cmd.run, already mentioned, runs tests.
  • sccd.statechart.cmd.render will render test files and statecharts as SVG images. Depends on state-machine-cat command. Example of a rendered file
  • sccd.statechart.cmd.render_priorities will render the statechart's transition priorities, as determined by the chosen semantics, as a graph. Depends on dot command. Example of a rendered file
  • sccd.statechart.cmd.check_model will check if a model is valid.
  • sccd.action_lang.cmd.prompt is an interactive prompt for the action language that is part of the statechart language.