block FSA  //  Finite State Automaton


/* connector declarations outside this block:
connector InputInteger = input Integer;
connector OutputInteger = output Integer;
*/


InputInteger u; // external input
OutputInteger x; // state
parameter Real T = 1;


algorithm


when initial() then
x := 0;


elsewhen sample(0,T) then


if (pre(x) == 0) and (pre(u) == 0) then x := 3;
elseif (pre(x) == 0) and (pre(u) == 1) then x := 1;
elseif (pre(x) == 1) and (pre(u) == 0) then x := 3;
elseif (pre(x) == 1) and (pre(u) == 1) then x := 0;
elseif (pre(x) == 1) and (pre(u) == 2) then x := 0;
elseif (pre(x) == 2) and (pre(u) == 0) then x := 3;
elseif (pre(x) == 2) and (pre(u) == 2) then x := 4;
elseif (pre(x) == 3) and (pre(u) == 0) then x := 4;
elseif (pre(x) == 3) and (pre(u) == 1) then x := 4;
elseif (pre(x) == 3) and (pre(u) == 2) then x := 1;
elseif (pre(x) == 4) and (pre(u) == 1) then x := 1;
elseif (pre(x) == 4) and (pre(u) == 2) then x := 0;
else x := pre(x); // default
end if;


end when;
end FSA;