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

时间:2018-06-27 13:10:42

标签: antlr4 optional visitor-pattern

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

根据以下规则:

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

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

public FixBody visitFix_body(coqParser.Fix_bodyContext ctx)

我的问题是,如果有术语,我该如何查找?

有一种使用ctx.term()来达到条件的方法,但是当没有给出条件时,该方法是否返回null?还是有完全不同的方法来解决这个问题?由于我正在使用大型语法分析器,因此需要一段时间才能对其进行测试,否则我会这样做。

1 个答案:

答案 0 :(得分:1)

那里没有陷阱...

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

以您的情况

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

示例: