ASTNode的accept()方法做什么以及如何使用ASTVisitor?

时间:2010-12-01 13:30:06

标签: java abstract-syntax-tree visitor

ASTNode的accept方法做什么(javadoc没有帮助太多......)以及何时调用visit(Expression node)方法? 以下是我需要如何使用它的示例代码:

final List<Expression> listi = new ArrayList<Expression>();
String stringi = opi.generate(entryContract, true_false_maybe);
// stringi representes an expression, for example "g!=h".
parser.setSource(stringi.toCharArray());
unit = (CompilationUnit) parser.createAST(null); 
ASTNode astRoot = unit.getRoot();
astRoot.accept(new ASTVisitor() {
 public boolean visit(Expression node) {
  listi.add(node);
  return true;
 }
});

谢谢

1 个答案:

答案 0 :(得分:1)

我猜你的Expression类是ASTNode类的子类型,ASTVisitor类提供其他访问方法(肯定是空的),接受其他ASTNode {1}}子类。

这是GoF Visitor Design Pattern的实现(也在Wikipedia中描述)。

accept上的ASTNode方法只会在访问者实现上调用visit方法,将自身作为visit方法的参数传递。