Как вы уже реализовали, 2,3,4
- это один токен. Это не то, что вы хотите. Это действительно должно быть правило синтаксического анализатора:
list : DATA ',' DATA (',' DATA)*;
Возможно, вы хотите, чтобы ваши операторы сравнения имели одинаковый приоритет, поэтому вы можете заключить их в один альт:
expr : ID (GT | LT | GTEQ | LTEQ) DATA NEWLINE #exprComp
| ID IN list NEWLINE #exprIn
;
И #...
метки в конце правил приведут к замене void enterExpr(StudyParser.ExprContext ctx)
следующими 2 методами:
void enterExprComp(StudyParser.ExprCompContext ctx);
void enterExprIn(StudyParser.ExprInContext ctx);
В вашей реализации enterExprIn
вы можете теперь делать:
@Override
public void enterExprIn(StudyParser.ExprInContext ctx) {
for (TerminalNode node : ctx.list().DATA()) {
System.out.println(node.getText());
}
}