public static List <RelationshipToken> GetConflicts() { Dictionary <RelationshipToken, RelationshipToken> conflicts = new Dictionary <RelationshipToken, RelationshipToken>(); foreach (var token in Table) { RelationshipToken conflict = Table.FirstOrDefault(c => c.FirstLinguisticUnit.Name == token.FirstLinguisticUnit.Name && c.SecondLinguisticUnit.Name == token.SecondLinguisticUnit.Name && c.Relationship != token.Relationship); if (conflict != null && !conflicts.Any(c => c.Key.FirstLinguisticUnit.Name == conflict.FirstLinguisticUnit.Name && c.Key.SecondLinguisticUnit.Name == conflict.SecondLinguisticUnit.Name && c.Key.Relationship == conflict.Relationship) && !conflicts.Any(c => c.Key.FirstLinguisticUnit.Name == token.FirstLinguisticUnit.Name && c.Key.SecondLinguisticUnit.Name == token.SecondLinguisticUnit.Name && c.Key.Relationship == token.Relationship)) { conflicts.Add(token, conflict); } } string str = string.Empty; foreach (var conflict in conflicts) { str += $"|\t{conflict.Key.FirstLinguisticUnit.Name}\t[ {conflict.Key.Relationship} ]\t{conflict.Key.SecondLinguisticUnit.Name}\t|"; str += $"\t{conflict.Value.FirstLinguisticUnit.Name}\t[ {conflict.Value.Relationship} ]\t{conflict.Value.SecondLinguisticUnit.Name}\t|{Environment.NewLine}"; } File.WriteAllText($@"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}\conflicts.txt", str); return(new List <RelationshipToken>()); }
public static void BuildTable() { LinguisticUnit dollar = new LinguisticUnit { Name = "$" }; void AddToRelationshipsTable(RelationshipToken relationshipToken) { if (Table.FirstOrDefault(rt => rt.FirstLinguisticUnit.Name.Equals(relationshipToken.FirstLinguisticUnit.Name) && rt.Relationship.Equals(relationshipToken.Relationship) && rt.SecondLinguisticUnit.Name.Equals(relationshipToken.SecondLinguisticUnit.Name)) is null) { Table.Add(relationshipToken); } } foreach (var rule in Grammar) { foreach (var rightPart in rule.RightParts) { for (int i = 0; i < rightPart.LinguisticUnits.Count; i++) { if (i + 1 < rightPart.LinguisticUnits.Count) { var equalRelation = new RelationshipToken { FirstLinguisticUnit = rightPart.LinguisticUnits[i], SecondLinguisticUnit = rightPart.LinguisticUnits[i + 1], Relationship = "=" }; AddToRelationshipsTable(equalRelation); if (equalRelation.SecondLinguisticUnit.Type == LinguisticUnitType.NonTerminal) { var firstPlus = GetFirstPlus(equalRelation.SecondLinguisticUnit); foreach (var first in firstPlus) { var lowerRelation = new RelationshipToken { FirstLinguisticUnit = equalRelation.FirstLinguisticUnit, SecondLinguisticUnit = first, Relationship = "<" }; AddToRelationshipsTable(lowerRelation); } } if (equalRelation.FirstLinguisticUnit.Type == LinguisticUnitType.NonTerminal) { var lastPlus = GetLastPlus(equalRelation.FirstLinguisticUnit); foreach (var last in lastPlus) { var higherRelation = new RelationshipToken { FirstLinguisticUnit = last, SecondLinguisticUnit = equalRelation.SecondLinguisticUnit, Relationship = ">" }; AddToRelationshipsTable(higherRelation); } } if (equalRelation.FirstLinguisticUnit.Type == LinguisticUnitType.NonTerminal && equalRelation.SecondLinguisticUnit.Type == LinguisticUnitType.NonTerminal) { var lastPlus = GetLastPlus(equalRelation.FirstLinguisticUnit); var firstPlus = GetFirstPlus(equalRelation.SecondLinguisticUnit); foreach (var last in lastPlus) { foreach (var first in firstPlus) { AddToRelationshipsTable(new RelationshipToken { FirstLinguisticUnit = last, SecondLinguisticUnit = first, Relationship = ">" }); } } } } AddToRelationshipsTable(new RelationshipToken { FirstLinguisticUnit = rightPart.LinguisticUnits[i], SecondLinguisticUnit = dollar, Relationship = ">" }); AddToRelationshipsTable(new RelationshipToken { FirstLinguisticUnit = dollar, SecondLinguisticUnit = rightPart.LinguisticUnits[i], Relationship = "<" }); } } } AddToRelationshipsTable(new RelationshipToken { FirstLinguisticUnit = dollar, SecondLinguisticUnit = Grammar.First().LeftPart, Relationship = "<" }); AddToRelationshipsTable(new RelationshipToken { FirstLinguisticUnit = Grammar.First().LeftPart, SecondLinguisticUnit = dollar, Relationship = ">" }); }