私は独自の文法を定義しており、cstring (技術的には char* にキャストされた mmaped ファイル) を解析したいと考えています。私は自分の文法のすべての一致に反応することができ(興味深いものに対してアクションを定義しました)、うまく機能しますが、すべての一致を入力 cstring 内の位置と組み合わせる方法がわかりません。各部分が独立した qi::rule として定義されている部分一致ごとに対応する必要があります。
解析中にエラーの位置を取得する方法についていくつかのチュートリアルを見つけましたが、そのトピックをカバーするものは何もありませんでした。
例:
class MyGrammar : public qi::grammar<iterator_t, std::string()>
{
public:
MyGrammar(): base_type(main)
{
main = *(qi::as_string
[qi::raw
[
(some_rule >> another_rule)
]
][boost::bind(&MyGrammar::match, this, _1)])
}
match(const std::string &match)
{
//I'd like to have an position of match inside a passed iterator
}
private:
qi::rule<iterator_t, std::string()> main;
};