C++ 提升精神,获得匹配位置

C++ 提升精神,获得匹配位置,c++,boost,boost-spirit,boost-spirit-qi,C++,Boost,Boost Spirit,Boost Spirit Qi,我已经定义了自己的语法,我想解析一个cstring(从技术上讲,是转换成char*的mmaped文件)。我可以对语法中的每一个匹配做出反应(我为有趣的匹配定义了一个动作),而且效果很好,但我不知道如何将每个匹配与它在输入字符串中的位置结合起来。我必须对每个部分匹配做出反应,其中每个部分都被定义为一个独立的qi::规则 我了解了一些如何在解析过程中获取错误位置的教程,但没有任何内容涵盖该主题 例如: class MyGrammar : public qi::grammar<iterator_

我已经定义了自己的语法,我想解析一个cstring(从技术上讲,是转换成char*的mmaped文件)。我可以对语法中的每一个匹配做出反应(我为有趣的匹配定义了一个动作),而且效果很好,但我不知道如何将每个匹配与它在输入字符串中的位置结合起来。我必须对每个部分匹配做出反应,其中每个部分都被定义为一个独立的qi::规则

我了解了一些如何在解析过程中获取错误位置的教程,但没有任何内容涵盖该主题

例如:

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;
};
class MyGrammar:public qi::grammar
{
公众:
MyGrammar():基本类型(主)
{
main=*(qi::as_字符串
[齐:生的
[
(一些规则>>另一个规则)
]
][boost::bind(&MyGrammar::match,this,_1)])
}
匹配(常量标准::字符串和匹配)
{
//我希望在传递的迭代器中有一个匹配的位置
}
私人:
齐:主规则;
};

boost::spirit::qi::parse
应将开始迭代器变异到要停止的位置。如果开始迭代器的类型为const char*,如何可能?是。如果您执行了
std::copy(第一个、最后一个std::ostream\u迭代器(std::cout,”);调用
qi::parse`后,第一个迭代器也应该移动到它所在的位置。@devwi
const char*
char const*
,而不是
char*const
char const*const
。例如:如果我正确理解了你的问题(当你在代码中添加一个简单的例子时总是比较容易),这可能会有所帮助。您只需使用
boost::spirit::repository::qi::iter\u pos
即可捕获当前位置。