提升精神获得匹配的位置

时间:2013-02-25 17:17:25

标签: c++ boost boost-spirit boost-spirit-qi

我已经定义了自己的语法,我想解析一个cstring(技术上为mmaped的文件转换为char *)。我可以对我的语法中的每个匹配做出反应(我已经定义了一些有趣的动作)并且它工作正常,但我不知道如何将每个匹配与输入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;
};

0 个答案:

没有答案