public List <LSyntagm> Match(LSyntagm querySyntagm) { LSyntagm jokerSyntagm = this.FindJokerStart(querySyntagm); string[] startingPrimWords = jokerSyntagm.ToString().Split(' ').Where(w => w != Constants.SAFE_JOKER_TOKEN).ToArray(); List <LSyntagm> prims = new List <LSyntagm>(); foreach (string word in startingPrimWords) { if (this.Primaries.ContainsKey(word)) { prims.Add(this.Primaries[word]); } } List <LSyntagm> primParents = new List <LSyntagm>(); foreach (var prim in prims) { foreach (var parent in prim.Parents) { if (!primParents.Contains(parent) && jokerSyntagm.Equals(parent)) { primParents.Add(parent); } } } List <LSyntagm> finalResult = new List <LSyntagm>(); finalResult.AddRange(this.RecursiveQuery(jokerSyntagm, primParents)); return(finalResult.Distinct().ToList()); }
private LSyntagm FindJokerStart(LSyntagm querySyntagm) { if (querySyntagm.ToString() == Constants.SAFE_JOKER_TOKEN) { return(querySyntagm.Parents.First()); } foreach (var child in querySyntagm.Children) { LSyntagm result = FindJokerStart(child); if (result != null) { return(result); } } return(null); }