Exemple #1
0
        public virtual void Walk(IParseTreeListener listener, IParseTree t)
        {
            if (t is IErrorNode)
            {
                listener.VisitErrorNode((IErrorNode)t);
                return;
            }
            else
            {
                if (t is ITerminalNode)
                {
                    listener.VisitTerminal((ITerminalNode)t);
                    return;
                }
            }
            IRuleNode r = (IRuleNode)t;

            EnterRule(listener, r);
            int n = r.ChildCount;

            for (int i = 0; i < n; i++)
            {
                Walk(listener, r.GetChild(i));
            }
            ExitRule(listener, r);
        }
            public virtual string Walk(IParseTreeListener listener, IParseTree t)
            {
                counter++;
                if (t is IErrorNode)
                {
                    listener.VisitErrorNode((IErrorNode)t);
                    txt = txt + t.ToString();
                    return(txt);
                }
                else
                {
                    if (t is ITerminalNode)
                    {
                        listener.VisitTerminal((ITerminalNode)t);
                        return(txt);
                    }
                }
                IRuleNode r          = (IRuleNode)t;
                string    parentname = r.GetText();

                //Console.WriteLine("##### PARENT " + counter + "####" + parentname + "#####");
                EnterRule(listener, r);
                int n = r.ChildCount;

                for (int i = 0; i < n; i++)
                {
                    Walk(listener, r.GetChild(i));

                    Console.WriteLine("##### CHILD " + i + " of " + parentname + "####" + r.GetChild(i).GetText() + "#####");
                }

                ExitRule(listener, r);
                return(txt);
            }
 public virtual void Walk(IParseTreeListener listener, IParseTree t)
 {
     if (t is IErrorNode)
     {
         listener.VisitErrorNode((IErrorNode)t);
         return;
     }
     else
     {
         if (t is ITerminalNode)
         {
             listener.VisitTerminal((ITerminalNode)t);
             return;
         }
     }
     IRuleNode r = (IRuleNode)t;
     EnterRule(listener, r);
     int n = r.ChildCount;
     for (int i = 0; i < n; i++)
     {
         Walk(listener, r.GetChild(i));
     }
     ExitRule(listener, r);
 }
Exemple #4
0
 public virtual void Walk(IParseTreeListener listener, IParseTree t)
 {
     Stack<IParseTree> nodeStack = new Stack<IParseTree>();
     Stack<int> indexStack = new Stack<int>();
     IParseTree currentNode = t;
     int currentIndex = 0;
     while (currentNode != null)
     {
         // pre-order visit
         if (currentNode is IErrorNode)
         {
             listener.VisitErrorNode((IErrorNode)currentNode);
         }
         else
         {
             if (currentNode is ITerminalNode)
             {
                 listener.VisitTerminal((ITerminalNode)currentNode);
             }
             else
             {
                 IRuleNode r = (IRuleNode)currentNode;
                 EnterRule(listener, r);
             }
         }
         // Move down to first child, if exists
         if (currentNode.ChildCount > 0)
         {
             nodeStack.Push(currentNode);
             indexStack.Push(currentIndex);
             currentIndex = 0;
             currentNode = currentNode.GetChild(0);
             continue;
         }
         do
         {
             // No child nodes, so walk tree
             // post-order visit
             if (currentNode is IRuleNode)
             {
                 ExitRule(listener, (IRuleNode)currentNode);
             }
             // No parent, so no siblings
             if (nodeStack.Count == 0)
             {
                 currentNode = null;
                 currentIndex = 0;
                 break;
             }
             // Move to next sibling if possible
             currentNode = nodeStack.Peek().GetChild(++currentIndex);
             if (currentNode != null)
             {
                 break;
             }
             // No next sibling, so move up
             currentNode = nodeStack.Pop();
             currentIndex = indexStack.Pop();
         }
         while (currentNode != null);
     }
 }
        public virtual void Walk(IParseTreeListener listener, IParseTree t)
        {
            Stack <IParseTree> nodeStack   = new Stack <IParseTree>();
            Stack <int>        indexStack  = new Stack <int>();
            IParseTree         currentNode = t;
            int currentIndex = 0;

            while (currentNode != null)
            {
                // pre-order visit
                if (currentNode is IErrorNode)
                {
                    listener.VisitErrorNode((IErrorNode)currentNode);
                }
                else
                {
                    if (currentNode is ITerminalNode)
                    {
                        listener.VisitTerminal((ITerminalNode)currentNode);
                    }
                    else
                    {
                        IRuleNode r = (IRuleNode)currentNode;
                        EnterRule(listener, r);
                    }
                }
                // Move down to first child, if exists
                if (currentNode.ChildCount > 0)
                {
                    nodeStack.Push(currentNode);
                    indexStack.Push(currentIndex);
                    currentIndex = 0;
                    currentNode  = currentNode.GetChild(0);
                    continue;
                }
                do
                {
                    // No child nodes, so walk tree
                    // post-order visit
                    if (currentNode is IRuleNode)
                    {
                        ExitRule(listener, (IRuleNode)currentNode);
                    }
                    // No parent, so no siblings
                    if (nodeStack.Count == 0)
                    {
                        currentNode  = null;
                        currentIndex = 0;
                        break;
                    }
                    // Move to next sibling if possible
                    currentNode = nodeStack.Peek().GetChild(++currentIndex);
                    if (currentNode != null)
                    {
                        break;
                    }
                    // No next sibling, so move up
                    currentNode  = nodeStack.Pop();
                    currentIndex = indexStack.Pop();
                }while (currentNode != null);
            }
        }