Опитвам се да получа начална и крайна позиция (ред и колона) на контекст в ANTLR4. Работя с тази граматика на Python3. Написах слушател, който отпечатва начален и краен ред:
class MyListener extends Python3BaseListener {
@Override
public void enterFuncdef(@NotNull Python3Parser.FuncdefContext ctx) {
Token start = ctx.getStart();
System.out.print("start: ");
System.out.print(start.getText());
System.out.print(": ");
System.out.println(start.getLine());
Token stop = ctx.getStop();
System.out.print("stop: ");
System.out.print(stop.getText());
System.out.print(": ");
System.out.println(stop.getLine());
}
}
Моят тестов вход:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
def iterative_factorial(n):
result = 1
for i in range(2,n+1):
result *= i
return result
Моят слушател отпечатва
start: def: 1
stop: DEDENT: 0
start: def: 7
stop: DEDENT: 0
но очаквам
start: def: 1
stop: DEDENT: 5
start: def: 7
stop: DEDENT: 11
Какво не е наред?