首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态和访问者模式

状态和访问者模式
EN

Stack Overflow用户
提问于 2020-06-26 07:59:13
回答 1查看 73关注 0票数 0

在我正在构建的一个应用程序中,我试图使用访问者模式收集大量的状态,稍后将对其进行操作。这是使用ANTLR4收集状态的典型方式,还是反模式?如果不是,你能提供一个如何处理状态的例子吗?

另外,您是应该在遍历域对象时更新域对象,还是应该在遍历访客外部之后实现所有业务逻辑?

我看到的所有ANTLR 4示例都太小了,我真的很想看看它在现实世界中是如何使用的。

谢谢。

代码语言:javascript
复制
public class JavaClassVisitor extends JavaBaseVisitor < String > {

    private JavaClassVisitorState jcvs = new JavaClassVisitorState();

    @Override
    public List < String > visitParseContext(ParseContext ctx) {
        visitChildren(ctx);
        return jvcs.getAccessSpecifiers().toString();
    }

    @Override
    public List < String > visitClassDeclaration(ClassDeclarationContext ctx) {
        IdentifierContext idCtx = ctx.Identifier();
        if (idCtx != null) {
            String accessSpecifier = idCtx.getText();
            List < String > accessSpecifiers = jcvs.getAccessSpecifiers();
            accessSpecifiers.add(accessSpecifier);
        }
        return visitChildren(ctx);
    }

    @Override
    public List < String > visitMethodDeclaration(MethodDeclarationContext ctx) {
        IdentifierContext idCtx = ctx.Identifier();
        if (idCtx != null) {
            String accessSpecifier = idCtx.getText();
            List < String > accessSpecifiers = jcvs.getAccessSpecifiers();
            accessSpecifiers.add(accessSpecifier);
        }
        return visitChildren(ctx);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-26 15:11:41

为了保持Stackoverflow的典型问答风格,我回答了一个问题,这是这里的核心。

我不知道ANTLR4有什么“典型”的访问者模式。这完全取决于上下文和您试图实现的目标。如果您需要更新域对象并决定在访问者中执行此操作,那么就这样做吧。

访问者模式并不仅限于收集数据。更新也是一个有效的操作。ANTLR4中的访问者和监听器的工作方式非常相似,都是在解析树上进行深度优先遍历。这两个方法都调用它们在树中看到的每个解析上下文特定的方法。主要区别在于侦听器执行一般的遍历,而访问者可以返回自定义值(适用于诸如计算器之类的东西,即使您也可以将中间值保留在访问者的成员变量中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62586042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档