小编Bri*_*ian的帖子

如何使用Boost :: Spirit :: Lex来调用文件而不先将整个文件读入内存?

我正在寻找使用boost :: spirit :: lex编写词法分析器,但我能找到的所有示例似乎都假设您已将整个文件首先读入RAM.我想写一个不需要整个字符串在RAM中的词法分析器,这可能吗?或者我需要使用其他东西吗?

我尝试使用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, ... ));
Run Code Online (Sandbox Code Playgroud)

另外,是否有可能以某种方式确定lex令牌的行/列号?

谢谢!

c++ boost lex boost-spirit

6
推荐指数
1
解决办法
1259
查看次数

标签 统计

boost ×1

boost-spirit ×1

c++ ×1

lex ×1