Ejemplo n.º 1
0
        private static string TranstionToString(MachineState state, MachineTransition transition)
        {
            const string formato = "{0},{1},{2},{3},{4}";

            string direction = transition.Direction == Direction.Right ? "D" : "E";

            return(string.Format(formato, state.Name, transition.TargetState.Name, transition.SymbolRead,
                                 transition.SymbolWrite, direction));
        }
Ejemplo n.º 2
0
        // Deterministically Get Next State
        public ProcessState GetNext(ProcessTransitions procTransitions)
        {
            MachineTransition transition = new MachineTransition(CurrentState, procTransitions);
            ProcessState      nextProcState;

            if (!transitions.TryGetValue(transition, out nextProcState))
            {
                throw new Exception("No known Transition: " + CurrentState + "->" + procTransitions);
            }
            return(nextProcState);
        }
Ejemplo n.º 3
0
 private void RunStepByStep()
 {
     if (!WordAccepted.HasValue)
     {
         int               tapeSelectionIndex = CurrentTapeSelectionIndex = Math.Max(CurrentTapeSelectionIndex, 0);
         string            currentSymbol      = CurrentTape[tapeSelectionIndex];
         MachineTransition machineTransition  = CurrentState.Transitions.FirstOrDefault(t => t.SymbolRead == currentSymbol);
         if (machineTransition != null)
         {
             CurrentTape[tapeSelectionIndex] = machineTransition.SymbolWrite;
             CurrentTapeSelectionIndex       = tapeSelectionIndex + (int)machineTransition.Direction;
             CurrentState = machineTransition.TargetState;
             if (CurrentState.Equals(FinalState))
             {
                 WordAccepted = true;
             }
         }
         else
         {
             WordAccepted = false;
         }
     }
 }
Ejemplo n.º 4
0
            public override bool Equals(object obj)
            {
                MachineTransition mt = obj as MachineTransition;

                return(mt != null && (this.CurrentState == mt.CurrentState) && (this.Transitions == mt.Transitions));
            }