Ejemplo n.º 1
0
 /// <summary>
 /// Called when the walker walks into a node.
 /// </summary>
 /// <param name="node"></param>
 protected override void DefaultVisit(LuaSyntaxNode node)
 {
     foreach (var child in node.ChildNodesAndTokens())
     {
         if (child.IsToken)
         {
             if (Depth >= SyntaxWalkerDepth.Token)
             {
                 Visit((SyntaxToken)child);
             }
         }
         else
         {
             if (Depth >= SyntaxWalkerDepth.Node)
             {
                 Visit((LuaSyntaxNode)child);
             }
         }
     }
 }
Ejemplo n.º 2
0
        private IEnumerable <SyntaxNodeOrToken> EnumerateNodes(LuaSyntaxNode node, bool dump)
        {
            Print(node, dump);
            yield return(node);

            var stack = new Stack <ChildSyntaxList.Enumerator>(24);

            stack.Push(node.ChildNodesAndTokens().GetEnumerator());
            Open(dump);

            while (stack.Count > 0)
            {
                var en = stack.Pop();
                if (!en.MoveNext())
                {
                    // no more down this branch
                    Close(dump);
                    continue;
                }

                var current = en.Current;
                stack.Push(en); // put it back on stack (struct enumerator)

                Print(current, dump);
                yield return(current);

                if (current.IsNode)
                {
                    // not token, so consider children
                    stack.Push(current.ChildNodesAndTokens().GetEnumerator());
                    Open(dump);
                    continue;
                }
            }

            Done(dump);
        }