2 Kasım 2016 Çarşamba

spirit qi parse metodu

Giriş
Şu satırı dahil ederiz.
#include <boost/spirit/include/qi.hpp>
Kolay kullanım için şu satırı dahil ederiz.
namespace qi = boost::spirit::qi;
Birinci parametre iterator, ikinci parametre iterator, üçüncü parametre qi::rule tipidir.
Diğer parametreler out tipindendir.

qi::phrase_parse metodundan farklı olarak bir skipper parametresi almaz. Boşlukları gramer'in ele alacağı varsayılır.

parse - iterator + iterator + rule + out1 + out2 + out3
Şöyle yaparız.
std::string s = "A:1   B:2          C:3";

int a, b;
boost::optional<int> c;

if (!qi::parse(s.begin(), s.end(),
     qi::lit("A:") >> qi::int_ >> +qi::space >> "B:" >> qi::int_ >> 
            -(+qi::space >> "C:" >> qi::int_), a, b, c))
{
  std::cout << "failed to parse" << std::endl;
}
Return Type
bool döner. Şöyle yaparız.
qi::rule<std::string::const_iterator, std::string> term = ...;

std::string str = ...
std::string h;

auto f = str.begin(), l = str.end();
bool ok = qi::parse(f, l, term(0u), h);
if (ok)
  std::cout << "Ok: " << h << "\n";
else
  std::cout << "Fail\n";

if (f != l)
  std::cout << "Remaining  unparsed: '" << std::string(f, std::min(f + 40, l));

Hiç yorum yok:

Yorum Gönder