次のような入力を解析するには、以下の文法が必要です
a_end
a_b_end
a_b_c_end
ただし、複数の があるものは解析しa_end
て失敗するだけ_
です。文法は次のとおりです。
template < typename Iterator >
struct recursive_parser : qi::grammar< Iterator >
{
qi::rule< Iterator > start;
qi::rule< Iterator > end;
recursive_parser() : recursive_parser::base_type( start )
{
using namespace qi;
end = string("_end") | start;
start = +(char_ - '_') >> end;
}
};
ルールは再帰的に使用するように設計されていませんか、それとももっと明白なものがありませんか?