我已经定义了自己的语法,我想解析一个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;
};