private void InitializePatternGraph() { using (Trace.Entering()) { // Defines how patterns connect grammar characters. PatternGraph = new DirectedGraph <GrammarCharacter, Pattern>(); PatternGraph.AddVertices(GrammarCharacterExt.GetValues()); foreach (Pattern pattern in Patterns) { // If the pattern connects two grammar characters. bool isEdge = pattern.LeftRule.GrammarCharacter != GrammarCharacter.e && pattern.RightRule.GrammarCharacter != GrammarCharacter.e; if (isEdge) { PatternGraph.AddEdge(pattern.LeftRule.GrammarCharacter, pattern.RightRule.GrammarCharacter, pattern); if (pattern.LeftRule.GrammarCharacter != pattern.RightRule.GrammarCharacter) { PatternGraph.AddEdge(pattern.RightRule.GrammarCharacter, pattern.LeftRule.GrammarCharacter, pattern); } } } } }