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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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;
                }
            }
        }