private PayloadVertex DrawTraverse(TokenGraph graph, ITree tree, Parser parser) { PayloadVertex vertex; if (tree is IErrorNode) { vertex = new ErrorVertex((IErrorNode)tree); } else if (tree is IRuleNode) { vertex = new RuleVertex((IRuleNode)tree.Payload); } else if (tree.Payload is IToken) { vertex = new TokenVertex((IToken)tree.Payload); } else { throw new ArgumentException(); } graph.AddVertex(vertex); for (int i = 0; i < tree.ChildCount; i++) { var childVertex = this.DrawTraverse(graph, tree.GetChild(i), parser); var edge = new TokenEdge(vertex, childVertex); graph.AddEdge(edge); } return(vertex); }
public Clause LoadClause(string fileName) { XmlSerializer serializer = new XmlSerializer(typeof(PersistedClause)); StreamReader reader = new StreamReader(fileName); var record = (PersistedClause)serializer.Deserialize(reader); var phrasalStructure = new TokenGraph(phraseStructure: true); foreach (VertexEntry entry in record.PersistedPhraseGraphVertexes) { phrasalStructure.AddOrUpdateVertex((int)entry.Key, ((Vertex)entry.Value).Value, ((Vertex)entry.Value).Tag, ((Vertex)entry.Value).Token); } foreach (EdgeEntry entry in record.PersistedPhraseGraphEdges) { var src = (int)entry.Key; var tgt = (int)entry.Value; var rel = (string)entry.Relation; phrasalStructure.AddEdge( src, phrasalStructure.Vertexes[src].Value, phrasalStructure.Vertexes[src].Tag, phrasalStructure.Vertexes[src].Token, tgt, phrasalStructure.Vertexes[tgt].Value, phrasalStructure.Vertexes[tgt].Tag, phrasalStructure.Vertexes[tgt].Token, rel ); } var grammarStructure = new TokenGraph(phraseStructure: false); foreach (VertexEntry entry in record.PersistedGrammarGraphVertexes) { grammarStructure.AddOrUpdateVertex((int)entry.Key, ((Vertex)entry.Value).Value, ((Vertex)entry.Value).Tag, ((Vertex)entry.Value).Token); } foreach (EdgeEntry entry in record.PersistedGrammarGraphEdges) { var src = (int)entry.Key; var tgt = (int)entry.Value; var rel = (string)entry.Relation; grammarStructure.AddEdge( src, grammarStructure.Vertexes[src].Value, grammarStructure.Vertexes[src].Tag, grammarStructure.Vertexes[src].Token, tgt, grammarStructure.Vertexes[tgt].Value, grammarStructure.Vertexes[tgt].Tag, grammarStructure.Vertexes[tgt].Token, rel ); } var clause = new Clause(record.Text); clause.Graph.Owner = clause; clause.Graph.PhrasalStructure = phrasalStructure; clause.Graph.PhraseRepresentation = record.PhraseRepresentation; clause.Graph.GrammaticalStructure = grammarStructure; clause.Graph.GrammaticalRepresentation = record.GrammaticalRepresentation; return(clause); }