gpt4 book ai didi

c++ - 带有 Boost::Spirit 的自定义跳过解析器

转载 作者:IT老高 更新时间:2023-10-28 22:01:38 30 4
gpt4 key购买 nike

标准的 ascii::space_type 跳过程序当然不会跳过我的评论。文档中提到您可以制作自己的跳过解析器,但没有实际操作的示例。

我只需要一个示例代码或任何东西,我已经在谷歌上搜索了 2 个小时。

请不要将我指向 examples , 几个有效的链接已经过时了,与 Spirit 1.6 打交道。

最佳答案

经过一些实验,我找到了一种指定自定义船长的方法,并将在此处概述:

template<typename Iterator>
struct pl0_skipper : public qi::grammar<Iterator> {

pl0_skipper() : pl0_skipper::base_type(skip, "PL/0") {
skip = ascii::space | ('{' >> *(qi::char_ - '}') >> '}');
}
qi::rule<Iterator> skip;
};

template<typename Iterator, typename Skipper = pl0_skipper<Iterator>>
struct pl0_grammar : public qi::grammar<Iterator, Skipper> {

/* The rules use our skipper */
qi::rule<Iterator, Skipper> start;
qi::rule<Iterator, Skipper> block;
qi::rule<Iterator, Skipper> statement;

};

secret 在于解析器的调用。出于某种原因,当您想使用 parse_phrase 解析它时,您必须提供一个skipper 语法对象。我不知道这一点:

typedef std::string::const_iterator iterator_t;
typedef parser::pl0_grammar<iterator_t> grammar;
typedef parser::pl0_skipper<iterator_t> skipper;

grammar g;
skipper ws;

iterator_t iter = str.begin();
iterator_t end = str.end();
bool r = phrase_parse(iter, end, g, ws);

这行得通。

关于c++ - 带有 Boost::Spirit 的自定义跳过解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521314/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com