我编写了一个解析器来查找字符串连接表达式。我有一系列用括号括起来的字符串,主要来自函数调用。
例如,("one"+"two"+"three") -> ("one"|"two"|"three")
是一个简单的案例,我可以处理它。
一个更困难的情况是(null, "one"+"two"+"three", null) -> (null, "one"|"two"|"three", null)
,但我可以用boost::tokenizer
.
(null, "one"+"two"+"three,four", 1 /* third parameter can be: 1, 2, 3 */)
,在这样一个困难的例子中,我建议解析,boost::spirit
但我需要帮助来编写一些规则。
之后:
似乎escaped_list_separator
是boost::tokenizer
我需要的。但我有一个问题:
using namespace std;
using namespace boost;
string s = "Field 1,\"putting quotes around fields, allows commas\",Field 3";
tokenizer<escaped_list_separator<char> > tok(s,escaped_list_separator<char>("", ",", "\""));
for(tokenizer<escaped_list_separator<char> >::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout <<"~~~"<< *beg << "\n";
}
为我删除"
。可以像这样在输出中保留引号
Field 1
"putting quotes around fields, allows commas"
Field 3