如何使用 ANTLR-Visitor 处理可选语法块?

How to handle Optional Grammar Blocks with a ANTLR-Visitor?

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

根据以下规则:

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

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

public FixBody visitFix_body(coqParser.Fix_bodyContext ctx)

我的问题是如何知道是否有术语?

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

那里没有陷阱...

如果这个词是可选的,你只需要在调用accept(visitor)方法之前测试它

你的情况

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

示例: