comp.lang.ada
 help / color / mirror / Atom feed
From: "W. Wesley Groleau (Wes)" <wwgrol@PSESERV3.FW.HAC.COM>
Subject: GoTo in FSM (was Help with Exceptions)
Date: 1996/05/15
Date: 1996-05-15T00:00:00+00:00	[thread overview]
Message-ID: <9605151336.AA03830@most> (raw)


I keep hearing about the value of GoTo for a finite state machine.
Perhaps my understanding of an FSM is incorrect, but every time I've
coded what I THOUGHT was a state machine, I used neither GoTo nor recursion
and didn't think the code was exceptionally ugly.  With Ada 83 the awkward
part was defining (and _maintaining_) an enumerated type with one literal
for each action (plus error).  Another type enumerated the states.  A record
 type
contains one of each.

If the conditions that trigger the transition/actions are not discrete,
another awkward part is mapping each condition to an enumeration.

Now you have an array indexed by trigger and current state of those records.
Very readable if line length and size of table don't prevent it.  (Which they
often do--sigh)

loop
   Trigger := Check_Condition_Or_Input;
   case State_Transition ( Current_State, Trigger ).Action is
     when {action_name} =>
       Do_{action_name} (...);
     when ...
     when Error =>
       Do_Error_Stuff (...);
   end case;
   Current_State := State_Transition ( Current_State, Trigger ).Next_State;
end loop;

Now I wouldn't call that beautiful, but I wouldn't call it ugly either.

And now we have access-to-subprogram, so we can eliminate the case statement
and the first enumerated type!

(But I'm still opposed to making rules a substitute for thinking--even
 a rule against GoTo.)

--
---------------------------------------------------------------------------
W. Wesley Groleau (Wes)                                Office: 219-429-4923
Magnavox - Mail Stop 10-40                               Home: 219-471-7206
Fort Wayne,  IN   46808              elm (Unix): wwgrol@pseserv3.fw.hac.com
---------------------------------------------------------------------------




             reply	other threads:[~1996-05-15  0:00 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-05-15  0:00 W. Wesley Groleau (Wes) [this message]
1996-05-15  0:00 ` GoTo in FSM (was Help with Exceptions) Robert I. Eachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox