C语言实现有限自动机FSM(三)

2013-10-17 09:05:35 · 作者: · 浏览: 387

 

  void action1(state mystate,condition myconditon);

  void action2(state mystate,condition myconditon);

  void action3(state mystate,condition myconditon);

  void actiontrap(state mystate,condition myconditon);

  trasition t1={

  STATE2,action1

  };

  trasition t2={

  STATE3,action2

  };

  trasition t3={

  STATE2,action3

  };

  trasition tt={

  STATETRAP,actiontrap

  };

  void action1(state mystate,condition myconditon){

  printf("action1 one triggered\n");

  }

  void action2(state mystate,condition myconditon){

  printf("action2 one triggered\n");

  }

  void action3(state mystate,condition myconditon){

  printf("action3 one triggered\n");

  }

  void actiontrap(state mystate,condition myconditon){

  printf("actiontrap one triggered\n");

  }

  ptrasition transition_table[STATENUM][CONDITIONS] = {

  /*      c1,  c2*/

  /* s1 */&t1, &tt,

  /* s2 */&tt, &t2,

  /* s3 */&t3, &tt,

  /* st */&tt, &tt,

  };

  typedef struct

  {

  state current;

  } StateMachine, * pStateMachine;

  state step(pStateMachine machine, condition mycondition)

  {

  ptrasition t = transition_table[machine->current][mycondition];

  (*(t->action))(machine->current, mycondition);

  machine->current = t->next;

  printf("the current state is %d\n",t->next );

  return machine->current;

  }

  int main(int argc, char *argv[])

  {

  StateMachine mymachine;

  mymachine.current=STATE1;

  int mycon;

  char ch;

  while(1){

  scanf("%d",&mycon);

  step(&mymachine,mycon);

  }

  return 0;

  }