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()))); }
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)); }
/// <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); }
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()); } } } }