FSMPrint.mesa
Don Curry January 25, 1989 9:20:24 am PST
A bit of unfinished code.
DIRECTORY
FSM, IO, RefTab, TerminalIO;
FSMPrint: CEDAR PROGRAM
IMPORTS IO, RefTab, TerminalIO
~ BEGIN
PrintFSM: PROC[fsm: FSM.FSMData] = {
visited: RefTab.Ref ← RefTab.Create[];
PrintState[fsm.initialState, 0, RefTab.Create[]]};
PrintState: PROC[state: FSM.State, level: INT, visited: RefTab.Ref] = {
FOR i: INT IN [0..level) DO TerminalIO.PutRope[" "] ENDLOOP;
TerminalIO.PutF["%g\n", IO.rope[state.name]];
IF RefTab.Store[visited, state, state] THEN {
FOR trans: FSM.Transitions ← state.outTrans, trans.rest WHILE trans#NIL DO
PrintState[trans.first.target, level+1, visited] ENDLOOP} };
END.