text: import sys
  import antlr
        
  
  class Visitor(antlr.ASTVisitor):
     def __init__(self,*args):
        super(Visitor,self).__init__(*args)
        self.level = 0
        if not args:
           self.cout = sys.stdout
           return
        if isinstance(args[0],file):
           self.cout = args[0]
           return
        assert 0
  
     def tabs(self):
        print " " * self.level
  
     def printf(self,fmt,*args):
        if not args:
            sys.stdout.write(fmt)
            return
        argv = tuple(args)
        self.cout.write(fmt % argv)
  
     def flush(self):
        self.cout.flush()
  
     def visit1(self,node):
        if not node:
           self.printf(" nil ")
           return
  
        c = node.getType()
        t = node.getText()
        k = node.getFirstChild()
        s = node.getNextSibling()
      
        self.printf("( <%s> ",c)
        if t:
           self.printf(" %s ",t)
        self.visit1(k);
        self.visit1(s);
        self.printf(")")
  
     def visit(self,node):
        self.visit1(node);
        self.printf("\n")
        
  
  
  def main():
     import imagnode_l
     import imagnode_p
     import imagnode_w
     
     L = imagnode_l.Lexer() 
     P = imagnode_p.Parser(L)
     P.setFilename(L.getFilename())
  
     ### Parse the input expression
     try:
        P.block()
     except antlr.ANTLRException, ex:
        print "*** error(s) while parsing."
        print ">>> exit(1)"
        import sys
        sys.exit(1)
  
     
     ast = P.getAST()
     
     if not ast:
        print "stop - no AST generated."
        import sys
        sys.exit(1)
        
     ###show tree
     print "Tree: " + ast.toStringTree()
     print "List: " + ast.toStringList()
     print "Node: " + ast.toString()
     print "visit>>"
     visitor = Visitor()
     visitor.visit(ast);
     print "visit<<"
  
     W = imagnode_w.Walker()
     W.block(ast)
     print "Ast tree walked without problems."
  
  if __name__ == "__main__":
     main()
  