65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 spirit 解析日期时间字符串

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (5投票s)

2008年3月20日

CPOL
viewsIcon

28878

downloadIcon

145

一个演示如何使用 boost spirit 框架解析日期的示例

引言

本文包含一个示例,展示如何使用 Boost Spirit 框架解析类似“1999-01-20T00:01:22”的日期时间字符串。

背景

XML 模式定义日期时间格式如下:“2000-01-30T00:10:20+1”。

使用代码

首先创建你的解析器

struct myparser: public grammar<myparser>
{
  template <typename ScannerT>
  struct definition
  {
    definition(myparser const& self)
    {
      first = int_p[assign(self.date_.year_)] >> "-" >> int_p[assign(self.date_.month_)] 
      >> "-" >> int_p[assign(self.date_.day_)] >> "T" >> int_p[assign(self.date_.hour_)] 
      >> ":" >> int_p[assign(self.date_.minute_)] >> ":" >> int_p[assign(self.date_.second_)] ;
    }
    rule<ScannerT> first;
    rule<ScannerT> const&
    start() const { return first; }
  };
  myparser(date& d):date_(d){};
  date& date_;
};        

然后调用解析器

bool parse_date(char const* str, date& d)
{
  myparser p(d);
  return parse(str, p).full;
}      

关注点

这个解析器可以改进以支持更灵活的格式

历史

© . All rights reserved.