private void TestParser(string source, StatementNodeBuilder expected) { // When parsing, the tree always starts with a magical "swix" node... var swixNode = new StatementNodeBuilder(); swixNode.StatementNode(-1, StatementType.Object, Token(ParserTokenType.Object, "swix"), expected); RtypeParser parser = new RtypeParser("test"); var actual = parser.Parse(source); Assert.Equal(swixNode.First(), actual, this.statementNodeComparer); }
public void Parse(IO.TextReader textReader, string path) { StatementNode rootStatementNode = null; string fileExtension = IO.Path.GetExtension(path); //XamlReader reader; if (fileExtension.Equals(".swx", StringComparison.OrdinalIgnoreCase)) { var parser = new XmlParser(path); rootStatementNode = parser.Parse(textReader); } else { var parser = new RtypeParser(path); rootStatementNode = parser.Parse(textReader); } // Preprocess all values this.ProcessStatementSubstitutions(path, rootStatementNode); if (this.EncounteredError) { // TODO: Should we show error that compiler aborted early because // substitutions could not all be processed? return; } // Now create objects. List <object> items = this.InstantiateObjects(path, rootStatementNode); foreach (object item in items) { if (item is PackageItem) { PackageItem packageItem = (PackageItem)item; this.AddItem(packageItem.LineNumber, packageItem); } else if (item is Swix) { this.roots.Add((Swix)item); } } }
private void BuildObjectTree() { using (TextSnapshotToTextReader snapshotReader = new TextSnapshotToTextReader(this.snapshot)) { switch (this.language) { case ParserLanguage.Rtype: var rtype = new RtypeParser(null); this.statementNodeRoot = rtype.Parse(snapshotReader); break; case ParserLanguage.Xml: var xml = new XmlParser(null); this.statementNodeRoot = xml.Parse(snapshotReader); break; default: break; } } }