public static ScriptNode FindLastTerminal(this ScriptNode node) { if (node == null) { return(null); } if (node is IScriptTerminal) { return(node); } var count = node.ChildrenCount; for (int i = count - 1; i >= 0; i--) { var child = node.GetChildren(i); if (child != null) { // TODO: could be optimized with a stack var last = FindLastTerminal(child); if (last != null) { return(last); } } } return(null); }
protected virtual void DefaultVisit(ScriptNode node) { if (node == null) { return; } var childrenCount = node.ChildrenCount; for (int i = 0; i < childrenCount; i++) { var child = node.GetChildren(i); Visit(child); } }
public static ScriptNode FindFirstTerminal(this ScriptNode node) { if (node == null) return null; if (node is IScriptTerminal) { return node; } var count = node.ChildrenCount; for (int i = 0; i < count; i++) { var child = node.GetChildren(i); if (child != null) { // TODO: could be optimized with a stack var first = FindFirstTerminal(child); if (first != null) { return first; } } } return null; }