Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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;
        }