Hello, I'm pleased to announce Guile State Machine Compiler (Guile-SMC), version 0.4.0: https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.4.0 * What is Guile-SMC? Guile-SMC is a state machine compiler that allows to describe finite state machines (FSMs) in Scheme in terms of transition tables. It is capable to generate such transition tables from a PlantUML state diagrams. [1] A transition table can be verified and checked for dead-ends and infinite loops. Also Guile-SMC FSMs gather statistics when they run. Guile-SMC comes with a Scheme program called 'smc' -- a state machine compiler itself. It produces a Scheme code for an FSM from the PlantUML format. This tool is meant to be called on a PlantUML file when a program with a FSM is being built (for example, from a Makefile.) I'm hoping that it will ease the burden of writing format parsers and other useful GNU Guile libraries for the community. * User-visible changes --8<---------------cut here---------------start------------->8--- * Version 0.4.0 (2022-03-11) ** Add FSM profiler Add =smc profile= command. Currently the profiler allows to measure the time a FSM spends in each state. ** Add =guile-standalone= compilation target This compilation target produces GNU Guile FSM code in a single file that does not dependent on Guile-SMC. All required Guile-SMC procedures will be copied to the output stream, and the extra procedures that are not used in the output code are removed by pruning. Here's an example of an output FSM (without the auxiliary code copied from Guile-SMC that normally goes before this procedure): ** Add =guile-standalone-copy= compilation target The compiler can be configured in such way that it will copy all the modules that are needed to run the output FSM so the FSM will not depend on Guile-SMC. ** =smc compile= now accepts =--target= option This option allows to set the compilation target. Allowed targets are: - guile - guile-standalone - guile-standalone-copy ** =smc compile= now allows to pass input file as an argument ** =smc= now handles =--version= option The state machine compiler now either read input FSM description in PlantUML format from the standard input or from a file specified as an argument. ** Optimize the PlantUML parser PlantUML parser now about 25% faster. ** Add new examples ** Add =smc= man page ** Update/expand the documentation --8<---------------cut here---------------end--------------->8--- * Usage examples I wrote an INI[2] format parser to test the foundation ideas behind Guile-SMC from the practical perspective: https://github.com/artyom-poptsov/guile-ini Also I wrote a simple PNG[3] format parser that uses Guile-SMC as well: https://github.com/artyom-poptsov/guile-png Happy hacking, - Artyom References: 1: https://plantuml.com/state-diagram 2: https://en.wikipedia.org/wiki/INI_file 3: https://en.wikipedia.org/wiki/Portable_Network_Graphics -- Artyom "avp" Poptsov Home page: https://memory-heap.org/~avp/ CADR Hackerspace co-founder: https://cadrspace.ru/ GPG: D0C2 EAC1 3310 822D 98DE B57C E9C5 A2D9 0898 A02F