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文字。