Exemplo n.º 1
0
        private void btnApply_OnClick(object sender, RoutedEventArgs e)
        {
            try
            {
                this.ClearLog();

                _fabric           = null;
                this.CurrentRules = null;

                var grammarResult = DefinitionGrammar.Parse(txtGrammar.Text, this.EnableGrammarParsingLog);
                this.AppendLog(grammarResult.ParsingResult.GetDebugInfo());
                this.AppendLog("Parsed in " + grammarResult.Statistics);

                this.SetTrees(grammarResult.ParsingResult.Tree, new StringSourceTextReader(txtGrammar.Text));
                this.CurrentRules = grammarResult.Rules.Cast <RuleSet>().ToArray();

                var sw = new System.Diagnostics.Stopwatch();
                sw.Start();
                _fabric = Parsers.CreateFabric(this.CurrentRules.First().Name, this.CurrentRules);
                sw.Stop();

                this.AppendLog("Analyzer built in " + sw.Elapsed);
                this.AppendLog();
                this.AppendLog(_fabric.GetDebugInfo());

                this.AppendLog();
            }
            catch (Exception ex)
            {
                this.AppendLog(ex.ToString());
            }
        }
Exemplo n.º 2
0
        public XmlParser()
        {
            var tr      = DefinitionGrammar.Parse(XmlResources.OldXmlDocumentGrammar);
            var ruleSet = tr.Rules.OfType <RuleSet>().First(rs => rs.Name == "XmlDoc");

            _xmlGrammar = Parsers.CreateFabric(ruleSet).CreateTreeParser();

            //var map = new Mapping<ISourceTextReader>();
            //map.Set(ruleSet.Rules["%%"], (s, c) => c.Map<XmlDocument>(s.EnumerateRuleChilds().First(n => n.Rule.Name == "doc")));
            //map.Set(ruleSet.Rules["doc"], (s, c) => new XmlDocument(c.Map<XmlDeclaration>(s.EnumerateRuleChilds().First(n => n.Rule.Name == "decl")), c.Map<XmlElement>(s.EnumerateRuleChilds().First(n => n.Rule.Name == "element")), c.Map<XmlComment[]>(s.EnumerateRuleChilds().First(n => n.Rule.Name == "comments")), c.Map<XmlComment[]>(s.EnumerateRuleChilds().Where(n => n.Rule.Name == "comments").Skip(1).First())));
            //map.Set(ruleSet.Rules["comments"], (s, c) => s.EnumerateRuleChilds().Select(cs => c.Map<XmlComment>(cs)).ToArray());
            //map.Set(ruleSet.Rules["comment"], (s, c) => new XmlComment(s.EnumerateRuleChilds().First(n => n.Rule.Name == "ctext").GetContent(c.Context)));
            //map.Set(ruleSet.Rules["cdata"], (s, c) => new XmlCData(s.EnumerateRuleChilds().First(n => n.Rule.Name == "dtext").GetContent(c.Context)));
            //map.Set(ruleSet.Rules["text"], (s, c) => new XmlText(s.GetContent(c.Context)));
            //map.Set(ruleSet.Rules["decl"], (s, c) => new XmlDeclaration());
            //map.Set(ruleSet.Rules["name"], (s, c) => {
            //    var prefix = s[0].Content.Content.Length < s[0][0].Content.Content.Length ? null : s[0][0].Content.Content;
            //    return new XmlNodeName(prefix, s.EnumerateRuleChilds().First(n => n.Rule.Name == "identifier").GetContent(c.Context));
            //});
            //map.Set(ruleSet.Rules["element"], (s, c) => {
            //    if (s.ChildsCount > 2 && s["name"].Content.Content != s["name", 1].Content.Content)
            //        throw new InvalidOperationException(string.Format("Unmatched xml element close tag '{0}'!", s["name", 1].Content.Content));

            //    return s.ChildsCount < 3 ? new XmlElement(c.Map<XmlNodeName>(s["name"]), c.Map<XmlAttribute[]>(s["attrs"]))
            //                             : new XmlElement(c.Map<XmlNodeName>(s["name"]), c.Map<XmlAttribute[]>(s["attrs"]), c.Map<IXmlElementItem[]>(s["elContent"]));
            //});
            //map.Set(ruleSet.Rules["attrs"], (s, c) => s.Select(cs => c.Map<XmlAttribute>(cs)).ToArray());
            //map.Set(ruleSet.Rules["attr"], (s, c) => new XmlAttribute(c.Map<XmlNodeName>(s["name"]), s["avalue"].Content.Content));
            //map.Set(ruleSet.Rules["elContent"], (s, c) => s.Select(cs => c.Map<IXmlElementItem>(cs)).ToArray());

            //_xmlMapping = map;

            throw new NotImplementedException("");
        }