Как работать с дополнительными блоками грамматики с ANTLR-посетителем? - PullRequest
0 голосов
/ 27 июня 2018

Возможно, что этот вопрос уже задавался, но я не могу его найти. Так что, если вы, ребята, найдете что-то подобное, пожалуйста, дайте мне знать.

Согласно следующему правилу:

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

У меня есть дополнительная аннотация и дополнительный термин. Соответствующее visitorRule выглядит так:

public FixBody visitFix_body(coqParser.Fix_bodyContext ctx)

Мой вопрос: как мне узнать, был ли термин или нет?

Существует метод для достижения термина с помощью ctx.term(), но когда термин не указан, возвращает ли этот метод null? Или есть совершенно другой способ подойти к этому? Поскольку я работаю с большим грамматиком, мне понадобится время, чтобы проверить это, иначе я бы это сделал.

1 Ответ

0 голосов
/ 27 июня 2018

Там нет ловушки ...

Если термин не является обязательным, вам просто нужно проверить его перед вызовом accept(visitor) метода

В вашем случае

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

Пример:

...