В конце я просто поместил адаптер между сгенерированным лексером и его потребителем, который заменяет функциональность метода advance () лексера.Если EOF был достигнут, то в следующий раз он вернет ноль.Примерно так:
`override fun advance(): IElementType? {
val t: IElementType? = lexer.advance()
return when {
eofReached -> null
t == VUCLTypes.EOF -> {
eofReached = true
t
}
else -> t
}
}`
eofReached
- это флаг, который устанавливается в значение false при инициализации и при произвольном вызове метода reset()
лексера.
`override fun reset(p0: CharSequence, p1: Int, p2: Int, p3: Int) {
eofReached = false
lexer.reset(p0, p1, p2, p3)
}`
Надеюсь, яничего не пропустил ..