How to generate Lua Code from State Diagrams

Lua is a powerful, efficient, lightweight, embeddable scripting language (http://www.lua.org/). To generate Lua code call the code generator with the command line flag -l lua .

The generator generates one Lua module which implements the complete state machine. Take this simple state machine as example.

Image of an example statemachine to generate LUA code

For a simple state machine with 4 states and 2 events the generated module looks like this:

function testcase:new() local new_inst = {} setmetatable( new_inst, testcase) -- machine states new_inst.states = { S1="S1", S11="S11", S12="S12", S3="S3", __UNKNOWN_STATE__="__UNKNOWN_STATE__" } -- machine events new_inst.events = { evB="evB", evA="evA", TESTCASE_NO_MSG="TESTCASE_NO_MSG" } -- Set state vars to default states new_inst.stateVar = new_inst.states.S1 new_inst.stateVarS1 = new_inst.states.S11 -- set init state of S1 new_inst.init=false return new_inst end function testcase:processEvent(Event) ... return evConsumed; end return testcase

The statemachine can be used as follows:

testcase = require "testcase" local testcase1 = testcase:new() Event = {event = testcase1.events.TESTCASE_NO_MSG, condition=false}; testcase1:processEvent(Event) Event.event=testcase1.events.evA; testcase1:processEvent(Event)

The following state machine features are supported:

States and sub-states

Deep – and flat hierarchy

Entry, Exit and Action code of states

Regions are supported and implemented as sub-functions called from the main state machine handler

Choice pseudo-states

The complete example is available in the examples/microwave_handbook_lua folder.

Any feedback is highly welcome!