我正在使用BOOST Tokenizer将字符串分解为toekn。基本上,令牌将用于基于c / c ++为VSL创建编译器。我想问的是,使用
定义的定界符是可能的char_separator<char> sep("; << ");
也会显示 例如,如果我在字符串
上使用Boost tokenizerstring s= "cout<<hello;"
它应该生成以下标记
cout
<<
hello
;
另外,我如何确保它不会在引号中转换标记化内容 像
string s= "hello my \"name is\" Hassan"
应转换为以下标记
hello
my
name is
Hassan
答案 0 :(得分:3)
我建议提升精神: Live On Coliru
修改另请参阅http://www.boost.org/doc/libs/1_55_0/libs/spirit/example/qi/compiler_tutorial
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
int main(int argc, char** argv)
{
typedef std::string::const_iterator It;
std::string const input = "cout<<hello;my \"name is\" Hassan";
qi::rule<It, std::string()> delimiter = qi::char_("; ") | qi::string("<<");
qi::rule<It, std::string()> quoted = '"' >> *~qi::char_('"') > '"';
qi::rule<It, std::string()> word = +((quoted | qi::char_) - delimiter);
std::vector<std::string> tokens;
if (qi::parse(input.begin(), input.end(), *(word >> delimiter), tokens))
{
for(auto& token : tokens)
std::cout << "'" << token << "'\n";
}
}
输出:
'cout'
'<<'
'hello'
';'
'my'
' '
'name is'
' '
'Hassan'