Я посмотрел на источник Lexer. Лексер отвечает на вызовы nextToken() (от парсера). Я не обнаружил, что он отслеживает предыдущие токены. И нет прямого доступа к CARET. Учитывая этот ввод:
xyz ^abc
и эта грамматика:
lexer grammar TLexer;
ID : [a-zA-Z] [a-zA-Z0-9]* {System.out.println("ID ");} ;
CARET : '^' {System.out.println("CARET ");} ;
WS : [ \r\n] ;
RTN : CARET ID {System.out.println("RTN " + _tokenStartCharIndex);} ;
вывод:
$ antlr4 TLexer.g4
$ javac TLexer.java
$ grun TLexer tokens -tokens -diagnostics -trace input.txt
ID
RTN 4
[@0,0:2='xyz',<1>,1:0]
[@1,3:3=' ',<3>,1:3]
[@2,4:7='^abc',<4>,1:4]
[@3,8:8='\n',<3>,1:8]
[@4,9:8='<EOF>',<-1>,2:9]
Лексер дает вам один маркер типа ‹4> (RTN) для ввода ^abc
.
person
BernardK
schedule
11.01.2013