示例#1
0
        public static ExtractFromSource SourceExtractor(
            this IParseTree <TokenType, ParserRuleType> mapping)
        {
            var source = mapping.Rule(ParserRuleType.Source);

            if (source == null)
            {
                // If source is not defined we want the entire source object
                return(o => new[] { new SourceMatch(o) });
            }

            return(new Extractor(
                       source.Elements
                       .Cast <IParseTreeRule <TokenType, ParserRuleType> >()
                       .Select(o => (Func <SourceMatch, IEnumerable <SourceMatch> >)MapNode(o).Extract)
                       .ToList())
                   .Extract);
        }
示例#2
0
        public static UpdateTarget TargetUpdater(
            this IParseTree <TokenType, ParserRuleType> mapping)
        {
            var target = mapping.Rule(ParserRuleType.Target);

            if (target == null)
            {
                return(Merging.MergeObjects);
            }

            NodeUpdaterBase updater = new FinalNodeUpdater(
                (IParseTreeRule <TokenType, ParserRuleType>)target.Elements.Last());

            for (int i = target.Elements.Count - 2; i >= 0; --i)
            {
                updater = new NodeUpdater(
                    (IParseTreeRule <TokenType, ParserRuleType>)target.Elements[i],
                    updater);
            }

            return(new Updater(updater).Update);
        }