Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 public MainWindowViewModel()
 {
     Graph = new TokenGraph();
     DrawTraverse(Graph, MainWindow.Tree, MainWindow.Parser);
 }