Я смотрю на написание лексера с использованием boost :: spirit :: lex, но все примеры, которые я могу найти, предполагают, что вы сначала прочитали весь файл в ОЗУ.Я хотел бы написать лексер, который не требует, чтобы вся строка была в ОЗУ, это возможно?Или мне нужно использовать что-то еще?
Я пытался использовать istream_iterator, но boost дает мне ошибку компиляции, если я не использую const char * в качестве типов итераторов.
например, все примеры, которые я могу найти, в основном делают это:
lex_functor_type< lex::lexertl::lexer<> > lex_functor;
// assumes entire file is in memory
char const* first = str.c_str();
char const* last = &first[str.size()];
bool r = lex::tokenize(first, last, lex_functor,
boost::bind(lex_callback_functor(), _1, ... ));
Кроме того, можно ли как-то определить номера строк / столбцов из лекс-токенов?
Спасибо!