Использование BOOST Tokenizer для отображения разделителя и не токенизации строки в кавычках

Я использую BOOST Tokenizer, чтобы разбить строку в toekn. По сути, токены будут использоваться для создания компилятора для VSL на основе c / c ++. То, что я хотел спросить, возможно ли, что определенный разделитель создан с использованием

char_separator<char> sep("; << ");

также отображаться
например, если я использую токенайзер Boost на строку

string s= "cout<<hello;"

он должен сделать следующие токены

cout
<<
hello
;

Также, как я могу убедиться, что он не конвертирует токенизировать что-то в кавычки
лайк

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

следует преобразовать в следующие токены

hello
my
name is
Hassan

3

Решение

Я предлагаю повысить дух: Жить на Колиру

редактировать Смотрите также 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'
3

Другие решения

Других решений пока нет …