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 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); }