Estoy buscando escribir un lexer usando boost :: spirit :: lex, pero todos los ejemplos que puedo encontrar parecen suponer que primero has leído el archivo completo en la memoria RAM. Me gustaría escribir un lexer que no requiera que toda la cadena esté en RAM, ¿es posible? ¿O necesito usar algo más?¿Cómo usar Boost :: Spirit :: Lex para leer un archivo sin leer todo el archivo en la memoria primero?
Intenté usar istream_iterator, pero boost me da un error de compilación a menos que use const char * como tipos de iterador.
p. Ej. Todos los ejemplos que puedo encontrar, básicamente, hacer esto:
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, ...));
Además, es posible determinar los números de línea/columna de fichas lex alguna manera?
Gracias!
+1, sí, los nuevos ejemplos en la documentación de Spirit serían geniales :) – Viet
Lo hice, en realidad. Boost V1.47 tendrá un tipo de token y un nuevo ejemplo que demuestre cómo usarlo. – hkaiser
¡Gracias, Harmut! ¡Muy ansioso por la versión Boost 1.47 con el nuevo Spirit! – Viet