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