This document is still underway.
If you're new to state machines, please read What Are State Machines instead. This document is a tutorial for the language, at high speed, for people who are already familiar with state machines; a full tutorial on state machines is over there, instead.
FSL
generally has state
s, transition
s, action
s, data
, and hook
s,
plus the various minor concepts.
Write states by their names, separated by arrows. Chains are valid. Finish with a semicolon.
The basic traffic light example looks like this:
Red -> Green -> Yellow -> Red;
With actions:
Red 'next' -> Green 'next' -> Yellow 'next' -> Red;
Writing three links to an off state using a list:
Red 'next' -> Green 'next' -> Yellow 'next' -> Red;
[Red Yellow Green] 'shut down' -> Off 'start' -> Red;
Hooking an edge, a state, and an action:
const TL = sm`
Red 'next' -> Green 'next' -> Yellow 'next' -> Red;
[Red Yellow Green] 'shut down' -> Off 'start' -> Red;
`;
TL.hook('Red', 'Green', () =>
console.log('Go go go!'));
TL.hook_entry('Off', () =>
console.log('Where did the power go?'));
TL.hook_global_action('next', () =>
console.log('next color now'));
It's honestly actually that easy. Let's get into the details.
FSL
is a string-based domain-specific language for finite state machines.
It's oriented towards brevity, readability, and expressive power.
jssm
is a parser and executing machine for FSL
language machines. It's
oriented towards heavy testing, speed, and ease of installation.
This document expresses the FSL language in its current state.
Generated using TypeDoc