rewrite reader using boost::spirit