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

发布于 2024-10-05 08:54:00 字数 600 浏览 4 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

对你再特殊 2024-10-12 08:54:04

我猜你的Expression类是ASTNode类的子类型,而ASTVisitor类提供了其他访问方法(肯定是空的),接受其他 ASTNode 子类作为参数。

它是 GoF 访客设计模式 的实现(也可在 维基百科)。

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

I guess your Expression class is a subtype of the ASTNode class, and the ASTVisitor class present other visit methods (which surely will be empty), accepting as an argument other ASTNode subclasses.

It's an implementation of the GoF Visitor Design Pattern (also described at Wikipedia).

The accept method on ASTNode will just invoke the visit method on the visitor implementation, passing itself as parameter for the visit method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文