public override IEnumerable <ICstNode> Resolve(ICstNonterminalNode node) { Func <ICstNonterminalNode, IEnumerable <ICstNode> > ret = cstNode => cstNode.Children.OfType <ICstNonterminalNode>().Where(o => o.Nonterminal.Name == NonTerminal).Cast <ICstNode>(); IEnumerable <ICstNode> result = new ICstNode[0]; if (Target != null) { foreach (ICstNonterminalNode current in Target.Resolve(node)) { result = result.Concat(ret(current)); } } else { result = result.Concat(ret(node)); } return(result); }
public override IEnumerable <ICstNode> Resolve(ICstNonterminalNode node) { IEnumerable <ICstNode> result = new ICstNode[0]; foreach (ConsumeExpression choice in Choices) { result = result.Concat(choice.Resolve(node)); } bool anyNull = result.Contains(null); return(result.Cast <ICstNonterminalNode>().OrderBy(o => o.AbsoluteIndex).Cast <ICstNode>()); }