Giriş
Açıklaması şöyle
Kleene Star için şöyle yaparız.
Optional Operator (question mark) için şöyle
Örnek 1
Artı için şöyle yaparız.
Ayraç ile ayrılmış bir veya daha fazla kez tekrar eden şeyler için yani şu tür durumlar için
+ ile ayrılmış token'lar için şöyle yaparız.
A-Z ve a-z ve 0-9 arasındaki karakterleri kabul eder. Şununla aynı şeydir.
Şöyle yaparız.
Örnek
key/value map parse etmek için bir örnek şöyle.
Örnek - plus operator
Şöyle yaparız.
Şöyle yaparız..
Şöyle yaparız.
Şöyle yaparız.
Elimizde şöyle bir string olsun.
Şöyle yaparız.
Parse edilen alan verilen kurala uymuyorsa default değer atamak için şöyle yaparız.
Şöyle yaparız. Non-space printing characters yani boşluk olmayan metin için kullanılır.
Şöyle yaparız. out parametresi olarak bir karakter vector nesnesini doldurur.
Açıklaması şöyle
postfix operators as the Kleene Star (‘*’) and the Plus (‘+’) are moved to the front of the corresponding expression and written as prefix operators, and the optional operator (question mark) is rewritten using the unary minus (‘-‘).Kleeene Star
Kleene Star için şöyle yaparız.
key = qi::char_("a-zA-Z_") >> *qi::char_("a-zA-Z_0-9");
Optional OperatorOptional Operator (question mark) için şöyle
pair = key >> -('=' >> value);
One Or More OperatorÖrnek 1
Artı için şöyle yaparız.
value = +qi::char_("a-zA-Z_0-9");
Örnek 2Ayraç ile ayrılmış bir veya daha fazla kez tekrar eden şeyler için yani şu tür durumlar için
object.member().member().member()
Şöyle yaparız.member_access_rule =
symbol_rule >> +('.' >> symbol_rule) >> '(' >> ')';
Örnek 3+ ile ayrılmış token'lar için şöyle yaparız.
"X + Y + Z, A + B",
Token grupları da , karakteri ile ayrılmıştır.typedef std::vector<std::string> element_array;
elem = qi::lexeme [ +alpha ] % '+';
reaction = elem >> ',' >> elem;
qi::rule<Iterator, reaction_t(), qi::blank_type> reaction;
qi::rule<Iterator, element_array(), qi::blank_type> elem;
qi::alnumA-Z ve a-z ve 0-9 arasındaki karakterleri kabul eder. Şununla aynı şeydir.
+qi::char_("A-Za-z0-9")
'-' karakteri ile ayrılmış alfanümerik token için şöyle yaparız.rule = +qi::alnum % qi::char_('-')
Eğer alfanümerik token ve '-' karakteri istersek şöyle yaparız.+(qi::alnum | char_('-'))
Kural string döndürsün istersek şöyle yaparız.qi::rule<Iterator,std::string()> rule;
qi::alphaŞöyle yaparız.
...
id_p = +qi::alpha;
...
qi::rule <Iterator, std::string()> id_p;
Şöyle yaparız.variableName = qi::alpha >> +qi::alnum;
...
qi::rule<Iterator, std::string()> variableName;
Şöyle yaparız. "Xi +" string'ini parse eder.typedef std::vector<std::string> element_array;
elem = qi::lexeme [ +alpha ] % '+';
...
qi::rule<Iterator, element_array(), qi::blank_type> elem;
qi::char_Örnek
key/value map parse etmek için bir örnek şöyle.
Örnek - plus operator
Şöyle yaparız.
+ascii::char_("0-9")
Örnek - plus operatorŞöyle yaparız..
+ascii::char_("0-9a-fA-F-")
Örnek - plus operatorŞöyle yaparız.
+ascii::char_("0-9.:")
Örnek - setŞöyle yaparız.
ascii::char_('1', '2')
Örnek - variable bindElimizde şöyle bir string olsun.
a/b/c
Şöyle yaparız.char delim = '/';
qi::rule<It, std::string()> element = *~qi::char_(delim);
qi::rule<It, std::vector<std::string>()> path = element % qi::char_(delim);
// use it like:
std::vector<std::string> data;
bool ok = qi::parse(f, l, path, data);
Ya da şöyle yaparız. Bu sefer delim değişkeni dinamik olarak kullanılabilir.char delim = '/';
qi::rule<It, std::string()> element = *~qi::char_(boost::phoenix::ref(delim));
qi::rule<It, std::vector<std::string>()> path =
element % qi::char_(boost::phoenix::ref(delim));
// use it like:
std::vector<std::string> data;
bool ok = qi::parse(f, l, path, data);
Örnek - quoted stringŞöyle yaparız.
quoted_string = '"' >> +(qi::char_ - '"') >> '"';
qi::rule<Iterator, std::string()> quoted_string;
ÖrnekParse edilen alan verilen kurala uymuyorsa default değer atamak için şöyle yaparız.
+qi::char_("a-zA-Z0-9_ .()/-") | attr("(unspecified)");
qi::graphŞöyle yaparız. Non-space printing characters yani boşluk olmayan metin için kullanılır.
token = +qi::graph;
Şöyle yaparız.*qi::lexeme[+qi::graph]
qi::spaceŞöyle yaparız. out parametresi olarak bir karakter vector nesnesini doldurur.
+qi::space
Eğer şöyle yaparsak "-" karakteri yüzünden boost::optional "()" karakteri yüzüden boost::tuple nesnesi doldurur.-( +qi::space
>> qi::lit("C:")
>> qi::int_
)
Şunu kullanırız.boost::optional<
boost::tuple<std::vector<char>,int>;
Hiç yorum yok:
Yorum Gönder