1import sys 2import antlr 3 4 5class Visitor(antlr.ASTVisitor): 6 def __init__(self,*args): 7 super(Visitor,self).__init__(*args) 8 self.level = 0 9 if not args: 10 self.cout = sys.stdout 11 return 12 if isinstance(args[0],file): 13 self.cout = args[0] 14 return 15 assert 0 16 17 def tabs(self): 18 print " " * self.level 19 20 def printf(self,fmt,*args): 21 if not args: 22 sys.stdout.write(fmt) 23 return 24 argv = tuple(args) 25 self.cout.write(fmt % argv) 26 27 def flush(self): 28 self.cout.flush() 29 30 def visit1(self,node): 31 if not node: 32 self.printf(" nil ") 33 return 34 35 c = node.getType() 36 t = node.getText() 37 k = node.getFirstChild() 38 s = node.getNextSibling() 39 40 self.printf("( <%s> ",c) 41 if t: 42 self.printf(" %s ",t) 43 self.visit1(k); 44 self.visit1(s); 45 self.printf(")") 46 47 def visit(self,node): 48 self.visit1(node); 49 self.printf("\n") 50 51 52 53def main(): 54 import java_l 55 import java_p 56 import java_w 57 58 L = java_l.Lexer() 59 P = java_p.Parser(L) 60 P.setFilename(L.getFilename()) 61 62 ### Parse the input expression 63 try: 64 P.compilationUnit() 65 except antlr.ANTLRException, ex: 66 print "*** error(s) while parsing." 67 print ">>> exit(1)" 68 import sys 69 sys.exit(1) 70 71 72 ast = P.getAST() 73 74 if not ast: 75 print "stop - no AST generated." 76 import sys 77 sys.exit(1) 78 79 ###show tree 80 print "Tree: " + ast.toStringTree() 81 print "List: " + ast.toStringList() 82 print "Node: " + ast.toString() 83 print "visit>>" 84 visitor = Visitor() 85 visitor.visit(ast); 86 print "visit<<" 87 88 W = java_w.Walker() 89 W.compilationUnit(ast) 90 print "Ast tree walked without problems." 91 92if __name__ == "__main__": 93 main() 94