public static Result VisitTerminalInContext <E, Result>(this AbstractParseTreeVisitor <Result> t, ParserRuleContext tokenParent, IToken node, Stack <E> s, E context) where E : System.Enum
        {
            s.Push(context);
            Result res = t.Visit(GetTerminalNode <Result>(t, tokenParent, node));

            s.Pop();
            return(res);
        }
        public static Result VisitElementInContext <E, Result>(this AbstractParseTreeVisitor <Result> t, ParserRuleContext node, Stack <E> s, E context) where E : System.Enum
        {
            s.Push(context);
            Result res = t.Visit(node);

            s.Pop();
            return(res);
        }
        public void Extend(IParseTree tree, AbstractParseTreeVisitor <ASTNode> visitor, int index)
        {
            FileNode fileNode = (FileNode)visitor.Visit(tree);

            fileNode.Content = FilesContents[index];
            RootNodes.Add(fileNode);
            ReferenceNodes.AddRange(((ICommonDaedalusParseTreeVisitor)visitor).ReferenceNodes);
        }
        public static Result VisitElementsInContext <E, Result>(this AbstractParseTreeVisitor <Result> t, IEnumerable <IParseTree> nodeset, Stack <E> s, E context) where E : Enum
        {
            Result res = default(Result);

            s.Push(context);
            foreach (IParseTree node in nodeset)
            {
                res = t.Visit(node);
            }
            s.Pop();
            return(res);
        }
 private static ITerminalNode GetTerminalNode <Result>(this AbstractParseTreeVisitor <Result> t, ParserRuleContext node, IToken terminal)
 {
     for (int i = 0; i < node.ChildCount; i++)
     {
         ITerminalNode child = node.GetChild(i) as ITerminalNode;
         if (child != null)
         {
             if (child.Symbol == terminal)
             {
                 return(child);
             }
         }
     }
     return(null);
 }