private Estado Clench(Estado Actual_state, int begin, Lista_ER symbol, int Name) { Estado estado; if (Actual_state == null) { estado = new Estado(Name); estado.inserted.Add(begin); estado.key.Add(begin); Table_States.Add(estado); } else { estado = Actual_state; if (!estado.inserted.Contains(begin)) { estado.inserted.Add(begin); } } for (int i = 0; i < states.Count; i++) { if (states.ElementAt(i).Begin.Identifier == begin) { //Quizas lleve otra condicion if (states.ElementAt(i).Symbol.getDescripcion().Equals(symbol.getDescripcion()) && states.ElementAt(i).Symbol.getEtiqueta().Equals(symbol.getEtiqueta())) { if (!pending_states.Contains(states.ElementAt(i))) { pending_states.Push(states.ElementAt(i)); } } } } while (pending_states.Count > 0) { Clench(estado, pending_states.Pop().End.Identifier, symbol, estado.Identifier); } if (!AFD_pendent.Contains(estado)) { AFD_pendent.Enqueue(estado); } return(estado); }
private Estado Move(Estado state, Lista_ER symbol) { Estado temporary = new Estado(Table_States.Count + 1); for (int i = 0; i < state.inserted.Count; i++) { for (int j = 0; j < states.Count; j++) { if (state.inserted.ElementAt(i) == states.ElementAt(j).Begin.Identifier) { if (states.ElementAt(j).Symbol.getDescripcion().Equals(symbol.getDescripcion()) && states.ElementAt(j).Symbol.getEtiqueta().Equals(symbol.getEtiqueta())) { if (!temporary.inserted.Contains(states.ElementAt(j).End.Identifier)) { temporary.inserted.Add(states.ElementAt(j).End.Identifier); temporary.key.Add(states.ElementAt(j).End.Identifier); } } } } } temporary.key.Sort(); return(temporary); }