使用BOOST Tokenizer显示分隔符并且不用引号中的字符串标记

时间:2014-03-01 21:52:06

标签: c++ boost boost-tokenizer

我正在使用BOOST Tokenizer将字符串分解为toekn。基本上,令牌将用于基于c / c ++为VSL创建编译器。我想问的是,使用

定义的定界符是可能的
char_separator<char> sep("; << "); 

也会显示 例如,如果我在字符串

上使用Boost tokenizer
string s= "cout<<hello;"

它应该生成以下标记

cout
<<
hello
;

另外,我如何确保它不会在引号中转换标记化内容 像

string s= "hello my \"name is\" Hassan"

应转换为以下标记

hello
my
name is
Hassan

1 个答案:

答案 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'