Я пытаюсь получить номера строк для более конкретных сообщений об ошибках в моем ParserVisitor (посещает дерево разбора, созданное antlr). Тем не менее, все, что у меня есть в этом классе, это контекст ctx
, и я могу делать такие вещи, как ctx.getText()
, но не getLine()
. Есть ли способ сделать это?
Может ли ctx.getPayload()
использоваться здесь? Если да, то как?
Изменить: я использую ANTLR 4 для создания java файлов.
Попытка получить доступ к номеру строки посетителю в методе, например:
@Override
public Type visitStatAssign(@NotNull BasicParser.StatAssignContext ctx) {
...
// some semantic error detected
int lineNo = ...
System.err.("Semantic error at line " + lineNo);
}
Изменить 2: Мои правила lexer и parser довольно стандартизированы, например, в lexer:
INT : 'int' ;
CHAR : 'char' ;
BOOL : 'bool' ;
STRING : 'string' ;
... находится в правиле правила анализатораType:
baseType : INT | CHAR | BOOL | STRING ;