1

私は独自の文法を定義しており、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;
};
4

0 に答える 0