Не надо забывать, что кроме TextMappers.Scanner есть TextModels.Reader, который лучше подходит для работы с отдельными символами. ИМХО, сделать можно так:
- запомнили позицию pos
- дочитали до ; или до конца
- создали массив длины r.Pos() - pos + 1
- зачитали в него запрос
...