<> <> <> 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.