/* * private void CoalesceAndConvert(object astNode, PropertyInfo property, ICstNode cstNode, Type typeConverter, object converterArgs) * { * string value = cstNode.Coalesce(); * ITypeConverter converter = (ITypeConverter)Activator.CreateInstance(typeConverter); * object o = converter.Convert(value, property.PropertyType, converterArgs); * property.SetValue(astNode, o, null); * } */ private IEnumerable <ICstNonterminalNode> GetChildrenByAstExpression(ICstNonterminalNode node, ConsumeExpression[] expressions) { IEnumerable <ICstNonterminalNode> result = new ICstNonterminalNode[0]; foreach (var exp in expressions) { result = result.Concat(exp.Resolve(node).Cast <ICstNonterminalNode>()); } return(result); }
public override IEnumerable <ICstNode> Resolve(ICstNonterminalNode node) { if (Predicate == null || Predicate.Resolve(node) != null) { return(Expression.Resolve(node)); } else { return(new ICstNode[0]); } }
private IEnumerable <ICstNonterminalNode> GetChildrenByNonterminal(ICstNonterminalNode node, Nonterminal nonterminal) { IEnumerable <ICstNonterminalNode> result = new ICstNonterminalNode[0]; foreach (var childNode in node.Children .OfType <ICstNonterminalNode>() .Where(o => o.Nonterminal.Name == nonterminal.Name)) { yield return(childNode); } }
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>()); }
public string ResolveAsString(ICstNonterminalNode node) { var result = Resolve(node); if (result.Any()) { return(result.First().Coalesce()); } else { return(null); } }
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) { if (Index < 1) { throw new InvalidOperationException("Indices in consume attributes are 1-based: " + this); } ConsumeReferenceExpression targetAsReference = (ConsumeReferenceExpression)Target; Func <ICstNonterminalNode, ICstNode> ret = cstNode => cstNode.Children.OfType <CstNonterminalNode>().Where(o => o.Nonterminal.Name == targetAsReference.NonTerminal).ElementAtOrDefault(Index - 1); IEnumerable <ICstNode> result = new ICstNode[0]; if (targetAsReference.Target != null) { foreach (ICstNonterminalNode child in targetAsReference.Target.Resolve(node)) { if (child != null) { ICstNode element = ret(child); if (element != null) { result = result.Union(element); } } } } else { ICstNode element = ret(node); if (element != null) { result = result.Union(element); } } return(result); }
public abstract IEnumerable <ICstNode> Resolve(ICstNonterminalNode node);