1

我已经定义了自己的语法,我想解析一个 cstring(技术上转换为 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;
};
4

0 回答 0