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