public void Add(Taal taal) { foreach (var item in taal) { this.Add(item); } }
public SortedSet <T> epsilonClosure2(SortedSet <T> fromStates) { var reachable = new SortedSet <T>(); var newFound = new SortedSet <T>(); do { foreach (var item in fromStates) { reachable.Add(item); } newFound = new SortedSet <T>(); foreach (T fromState in fromStates) { foreach (var t in transitions) { if ((t.FromState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, Transition <T> .EPSILON) && !fromStates.Contains(t.ToState)) { newFound.Add(t.ToState); } } } foreach (var item in newFound) { fromStates.Add(item); } reachable = newFound; }while (newFound.Count > 0); return(fromStates); }
private Taal getLanguageInner(String start, int maxLen) { var result = new Taal(); if (start.Length == maxLen) { return(result); } foreach (var item in alphabet) { String str = start + item; if (Accept(str)) { result.Add(str); } result.Add(getLanguageInner(str, maxLen)); } return(result); }
public SortedSet <T> GetToStates2(T from, char symbol) { var fromStates = new SortedSet <T>(); fromStates.Add(from); fromStates = epsilonClosure2(fromStates); var toStates = new SortedSet <T>(); foreach (T fromState in fromStates) { foreach (var t in transitions) { if ((t.ToState.CompareTo(fromState) == 0) && Taal.IsSameLetterAs(t.Symbol, symbol)) { toStates.Add(t.ToState); } } } return(epsilonClosure2(toStates)); }
public SortedSet <Transition <T> > GetToStates(T currentState, char symbol) { var result = new SortedSet <Transition <T> >(); var fromStates = epsilonClosure(currentState); var tempResult = transitions.Where(t => (fromStates.Contains(t.FromState)) && ((Taal.IsSameLetterAs(t.Symbol, symbol)))); // var tempResult = transitions.Where(t => (t.FromState.CompareTo(currentState) == 0) && ((Taal.IsSameLetterAs(t.Symbol, symbol)))); foreach (var item in tempResult) { result.Add(item); } return(result); }
public Taal GetLanguage(int maxSteps) { var emptyLanguage = new Taal(comperator); var languageResult = new Taal(comperator); Taal languageLeft, languageRight; if (maxSteps < 1) { return(emptyLanguage); } switch (opr) { case Operator.ONE: { languageResult.Add(terminals); break; } case Operator.OR: { languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1); //languageResult.addAll (languageLeft); foreach (var item in languageLeft) { languageResult.Add(item); } //languageResult.addAll (languageRight); foreach (var item in languageRight) { languageResult.Add(item); } break; } case Operator.DOT: { languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); languageRight = right == null ? emptyLanguage : right.GetLanguage(maxSteps - 1); foreach (var s1 in languageLeft) { foreach (var s2 in languageRight) { languageResult.Add(s1 + s2); } } break; } // STAR(*) en PLUS(+) kunnen we bijna op dezelfde manier uitwerken: case Operator.STAR: case Operator.PLUS: { languageLeft = left == null ? emptyLanguage : left.GetLanguage(maxSteps - 1); //languageResult.addAll(languageLeft); foreach (var item in languageLeft) { languageResult.Add(item); } for (int i = 1; i < maxSteps; i++) { var languageTemp = new HashSet <String>(languageResult); foreach (var s1 in languageLeft) { foreach (var s2 in languageTemp) { languageResult.Add(s1 + s2); } } } if (this.opr == Operator.STAR) { languageResult.Add(""); } break; } default: { Console.WriteLine("getLanguage is nog niet gedefinieerd voor de operator: " + this.opr); break; } } return(languageResult); }