コード例 #1
0
        public void TestRoundTrip()
        {
            var wn1 = new WordNode("Get", PartOfSpeechTag.Verb);
            var wn2 = new WordNode("Fixed", PartOfSpeechTag.NounModifier);
            var wn3 = new WordNode("Hydro", PartOfSpeechTag.NounModifier);
            var wn4 = new WordNode("Schedule", PartOfSpeechTag.Noun);
            var pn  = new PhraseNode(new[] { wn1, wn2, wn3, wn4 }, Location.Name, false);

            Assert.IsTrue(PhraseNodesAreEqual(pn, PhraseNode.Parse(pn.ToString())));
        }
コード例 #2
0
        public void TestParse()
        {
            var wn1      = new WordNode("Eat", PartOfSpeechTag.Verb);
            var wn2      = new WordNode("More", PartOfSpeechTag.NounModifier);
            var wn3      = new WordNode("Chicken", PartOfSpeechTag.Noun);
            var words    = new WordNode[] { wn1, wn2, wn3 };
            var expected = new PhraseNode(words, Location.Name, false);

            var actual = PhraseNode.Parse("Eat(Verb) More(NounModifier) Chicken(Noun)");

            Assert.IsTrue(PhraseNodesAreEqual(actual, expected));
        }
コード例 #3
0
ファイル: SwumDataRecord.cs プロジェクト: abb-iss/Sando
        /// <summary>
        /// Creates a SwumDataRecord from a string representation
        /// </summary>
        /// <param name="source">The string to parse the SwumDataRecord from.</param>
        /// <returns>A new SwumDataRecord.</returns>
        public static SwumDataRecord Parse(string source)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }

            string[] fields = source.Split('|');
            if (fields.Length != 5)
            {
                throw new FormatException(string.Format("Wrong number of |-separated fields. Expected 4, saw {0}", fields.Length));
            }
            var sdr = new SwumDataRecord();

            if (!string.IsNullOrWhiteSpace(fields[0]))
            {
                sdr.ParsedAction = PhraseNode.Parse(fields[0].Trim());
                sdr.Action       = sdr.ParsedAction.ToPlainString();
            }
            if (!string.IsNullOrWhiteSpace(fields[1]))
            {
                sdr.ParsedTheme = PhraseNode.Parse(fields[1].Trim());
                sdr.Theme       = sdr.ParsedTheme.ToPlainString();
            }
            if (!string.IsNullOrWhiteSpace(fields[2]))
            {
                sdr.ParsedIndirectObject = PhraseNode.Parse(fields[2].Trim());
                sdr.IndirectObject       = sdr.ParsedIndirectObject.ToPlainString();
            }
            if (!string.IsNullOrWhiteSpace(fields[3]))
            {
                foreach (var file in fields[3].Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    sdr.FileNames.Add(file);
                }
            }
            if (!string.IsNullOrWhiteSpace(fields[4]))
            {
                sdr.SwumNode = new MethodDeclarationNode(fields[4]);
            }
            return(sdr);
        }
コード例 #4
0
        public void GenerateVoidReturnSUnit()
        {
            var dataProject = new DataProject <CompleteWorkingSet>(folderName,
                                                                   Path.GetFullPath(fullFilePath),
                                                                   "..//..//..//SrcML");

            dataProject.UpdateAsync().Wait();

            //get srcml stuff in order
            NamespaceDefinition globalNamespace;

            Assert.That(dataProject.WorkingSet.TryObtainReadLock(5000, out globalNamespace));

            //initialize swum stuff
            splitter = new ConservativeIdSplitter();
            tagger   = new UnigramTagger();
            posData  = new PCKimmoPartOfSpeechData();

            //find an example method
            var guiMethod         = globalNamespace.GetDescendants <MethodDefinition>().Where(m => m.Name == methodName).First();
            var guiMethodXElement = DataHelpers.GetElement(dataProject.SourceArchive, guiMethod.PrimaryLocation);

            // forget that, find ALL the methods
            var methods = globalNamespace.GetDescendants <MethodDefinition>().Where(m => m.Name == methodName);

            foreach (MethodDefinition method in methods)
            {
                //Console.WriteLine(method.ToString());
                var statements = method.ChildStatements;
                foreach (Statement statement in statements)
                {
                    var expressions = statement.GetExpressions();
                    foreach (Expression expression in expressions)
                    {
                        // Skip any expression that contains an assignment
                        if (expression.ToString().Contains(" =") || expression.ToString().Contains(" ->"))
                        {
                            continue;
                        }

                        // Print whatever's left. It should be a void return.
                        Console.WriteLine(expression.ToString());

                        // *** PoS tag it ***
                        // convert the string to 'PhraseNode' objects so we can feed them to SWUM
                        var pn = PhraseNode.Parse(new WordNode(expression.ToString()).ToString());

                        Console.WriteLine(pn.ToString());

                        // construct the "rule" to break up method names into sentences
                        BaseVerbRule thisrule = new BaseVerbRule(posData, tagger, splitter);

                        var methodNode = new MethodDeclarationNode(expression.ToString());

                        thisrule.ConstructSwum(methodNode);

                        Console.WriteLine(methodNode.ToString());
                    }
                }
            }
        }