Boost :: spirit :: lex kullanarak bir lexer yazıyorum, ancak bulabildiğim tüm örnekler önce tüm dosyayı RAM'e okuduğunuzu varsayıyor gibi görünüyor. Bütün dizinin RAM'e girmesini gerektirmeyen bir lexer yazmak istiyorum, bu mümkün mü? Yoksa başka bir şey mi kullanmalıyım?Boost :: Spirit :: Lex, tüm dosyayı önce belleğe okumadan bir dosyaya nasıl kullanılır?
Istream_iterator kullanmayı denedim, ancak const char * seçeneğini yineleme türleri olarak kullanmadıkça, bir derleme hatası verir.
örn. Bulabileceğim Bütün örnekler temelde bu yapın:
Ayrıcalex_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, ...));
, bir şekilde lex jeton satır/sütun numaralarını belirlemek mümkündür?
Teşekkürler!
+1, evet, Ruh belgelerindeki yeni örnekler harika olurdu :) – Viet
Bunu gerçekten yaptım. Yükseltme V1.47 böyle bir simge tipine ve nasıl kullanılacağını gösteren yeni bir örneğe sahip olacaktır. – hkaiser
Teşekkürler Harmut! Yeni Ruh ile 1.47 serbest bırakmak için çok sabırsızlanıyoruz! – Viet