首页 > 解决方案 > 如何使用 ANTLR-Visitor 处理可选语法块?

问题描述

以前可能有人问过这个问题,但我找不到。所以如果你们发现类似的东西,请告诉我。

根据以下规则:

fix_body : ident  binders (annotation)? (':' term)? ':=' fix_body_term;

我有一个可选的注释和一个可选的术语。对应的 visitorRule 如下所示:

public FixBody visitFix_body(coqParser.Fix_bodyContext ctx)

我的问题是如何找出是否有术语?

有一种方法可以通过 using 达到术语ctx.term(),但是当没有给出术语时,该方法是否返回null?还是有完全不同的方法来解决这个问题?因为我正在使用一个大语法,所以我需要一段时间来测试这个,否则我会这样做。

标签: antlr4optionalvisitor-pattern

解决方案


那里没有陷阱...

如果该术语是可选的,您只需在调用accept(visitor)方法之前对其进行测试

在你的情况下

if(ctx.term() != null) ctx.term().accept(new TermVisitor())

例子:


推荐阅读