#include <iostream>
#include <string>
#include <vector>
#include <regex>
using namespace std;
int main() {
std::regex rx(R"(&&|\|\||[();])");
std::string exp = "a < b | c | d > e >> f && ((g) || h) ; i";
std::sregex_token_iterator srti(exp.begin(), exp.end(), rx, {-1, 0});
std::vector<std::string> tokens;
std::remove_copy_if(srti, std::sregex_token_iterator(),
std::back_inserter(tokens),
[](std::string const &s) { return s.empty(); });
for( auto & p : tokens ) std::cout <<"'"<< p <<"'"<< std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXN0ZDo6cmVnZXggcngoUiIoJiZ8XHxcfHxbKCk7XSkiKTsKCXN0ZDo6c3RyaW5nIGV4cCA9ICJhIDwgYiB8IGMgfCBkID4gZSA+PiBmICYmICgoZykgfHwgaCkgOyBpIjsKCXN0ZDo6c3JlZ2V4X3Rva2VuX2l0ZXJhdG9yIHNydGkoZXhwLmJlZ2luKCksIGV4cC5lbmQoKSwgcngsIHstMSwgMH0pOwoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRva2VuczsKCXN0ZDo6cmVtb3ZlX2NvcHlfaWYoc3J0aSwgc3RkOjpzcmVnZXhfdG9rZW5faXRlcmF0b3IoKSwgCiAgICAgICAgICAgICAgICAgICAgc3RkOjpiYWNrX2luc2VydGVyKHRva2VucyksCiAgICAgICAgICAgICAgICAgICAgW10oc3RkOjpzdHJpbmcgY29uc3QgJnMpIHsgcmV0dXJuIHMuZW1wdHkoKTsgfSk7CiAgICBmb3IoIGF1dG8gJiBwIDogdG9rZW5zICkgc3RkOjpjb3V0IDw8IiciPDwgcCA8PCInIjw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9