当前位置: 首页>>代码示例>>C#>>正文


C# IParseTreeListener.VisitTerminal方法代码示例

本文整理汇总了C#中IParseTreeListener.VisitTerminal方法的典型用法代码示例。如果您正苦于以下问题:C# IParseTreeListener.VisitTerminal方法的具体用法?C# IParseTreeListener.VisitTerminal怎么用?C# IParseTreeListener.VisitTerminal使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IParseTreeListener的用法示例。


在下文中一共展示了IParseTreeListener.VisitTerminal方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Walk

 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);
 }
开发者ID:RainerBosch,项目名称:antlr4,代码行数:24,代码来源:ParseTreeWalker.cs

示例2: Walk

 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);
     }
 }
开发者ID:sharwell,项目名称:antlr4cs,代码行数:62,代码来源:ParseTreeWalker.cs


注:本文中的IParseTreeListener.VisitTerminal方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。