ASTNode 的accept() 方法有什么作用以及它如何使用ASTVisitor?
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;
}
});
谢谢
What does the accept
method of ASTNode do (The javadoc didn't help too much...) and when will the visit(Expression node)
method be called?
Here is an example code of how I need to use it:
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;
}
});
Thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我猜你的
Expression
类是ASTNode
类的子类型,而ASTVisitor
类提供了其他访问方法(肯定是空的),接受其他 ASTNode 子类作为参数。它是 GoF 访客设计模式 的实现(也可在 维基百科)。
ASTNode
上的accept
方法只会调用访问者实现上的visit
方法,并将其自身作为visit
的参数传递> 方法。I guess your
Expression
class is a subtype of theASTNode
class, and theASTVisitor
class present other visit methods (which surely will be empty), accepting as an argument otherASTNode
subclasses.It's an implementation of the GoF Visitor Design Pattern (also described at Wikipedia).
The
accept
method onASTNode
will just invoke thevisit
method on the visitor implementation, passing itself as parameter for thevisit
method.