0
我有datetime parser和datetime数组解析器。相同的字符串被不同地解析
datetime_ = qi::eps[at_c<0>(qi::_val) = type::datetime] >>
dt_string[at_c<1>(qi::_val) = qi::_1];
dt_string = (/*qi::lit("d") >>*/ qi::int_ >> "-" >> qi::int_ >> "-" >> qi::int_ >> "T" >>
qi::int_ >> ":" >> qi::int_ >> ":" >> qi::int_ >> -("." >> qi::int_))
[qi::_val = construct<datetime>(qi::_1, qi::_2, qi::_3,
qi::_4, qi::_5, qi::_6)];
dt_array_ = qi::eps[at_c<0>(qi::_val) = type::datetime_array] >>
dt_array_lit[at_c<1>(qi::_val) = qi::_1];
dt_array_lit = "[" >> +(dt_string % ',') >> ']';
阵列解析器工作正常,但单日文本分析器在第4位(“2010-09-23 ......”)给出了解析错误。我认为这是因为还有数字解析器定义,并且它在数字后面找到“ - ”时失败。
number %= qi::attr(type::number) >> qi::double_;
但是数组数组解析器也存在,它不会与日期时间数组解析器发生冲突。
number_array_ = qi::eps[at_c<0>(qi::_val) = type::number_array] >>
number_array_lit[at_c<1>(qi::_val) = qi::_1];
number_array_lit = "[" >> +(qi::double_ % ',') >> ']';
现在我使用变通方法,在日期时间字面值之前加上前缀“d”。你可以看到它在第一个片段中评论。但如果可能的话,我希望在所有上下文中正确解析UTC datetime文字。