Giriş
String Parser sınıfları ile kardeştirler.
qi::symbols
Bu sınıf qi::grammar ile beraber kullanılır. Belirtilen sembol dizisi ile eşleşir.
Tanımlama
Örnek
Elimizde AST isim alanında şöyle bir tanım olsun
Elimizde AST isim alanında şöyle bir tanım olsun
Şöyle yaparız.
Şöyle yaparız.
add metodu ile aynıdır. Şöyle yaparız.
String Parser sınıfları ile kardeştirler.
qi::symbols
Bu sınıf qi::grammar ile beraber kullanılır. Belirtilen sembol dizisi ile eşleşir.
Tanımlama
Örnek
Elimizde AST isim alanında şöyle bir tanım olsun
namespace AST {
struct TimeSample {
enum Direction { up, down } direction; // + or -
...
}
}
Şöyle yaparız.struct directions : qi::symbols<char, AST::TimeSample::Direction> {
directions() { add("+", AST::TimeSample::up)("-", AST::TimeSample::down); }
} direction_;
Örnek Elimizde AST isim alanında şöyle bir tanım olsun
namespace AST {
using clock = std::chrono::high_resolution_clock;
...
}
Şöyle yaparız.struct units : qi::symbols<char, AST::clock::duration> {
units() {
using namespace std::literals::chrono_literals;
add("s", 1s)("ms", 1ms)("us", 1us)("µs", 1us)("ns", 1ns);
}
} units_;
add metoduŞöyle yaparız.
qi::symbols<char> much;
for (auto kw : {"bar", "baz", "qux", "quux", "corge", "grault", "garply",
"waldo", "fred", "plugh", "xyzzy", "thud"})
much.add(kw);
for_each metoduŞöyle yaparız.
qi::rule<It, std::string()> match_much = qi::raw [ much ];
much.for_each([&](std::string const& kw, qi::unused_type) {
std::string matched;
assert(qi::parse(kw.begin(), kw.end(), match_much, matched));
assert(kw == matched);
});
operator+= metodu
add metodu ile aynıdır. Şöyle yaparız.
qi::symbols<char> find_list;
find_list += "des", "ffe", "asaa";
Şöyle yaparız.std::string const test = "abc def aaa ffew";
std::string result;
if (qi::parse(test.begin(), test.end(), qr::seek[qi::raw[find_list]], result)) {
std::cout << result << std::endl;
} else {
std::cout << "failed." << std::endl;
}
Çıktı olarak şunu alırız.ffe
Hiç yorum yok:
Yorum Gönder