public virtual bool Accept(Func<IAstNode, object, bool> visitor, object parameter) { if (visitor != null && visitor(this, parameter)) { foreach (IAstNode child in Children) { if (!child.Accept(visitor, parameter)) return false; } return true; } return false; } #endregion
public static IAstNode FindFirstElement(this AstNode tree, Func <IAstNode, bool> filter) { var finder = new SingleElementFinder(filter); tree.Accept(finder, null); return(finder.Result); }