몇 가지 실험 후, 나는 사용자 정의 선장을 지정하는 방법을 발견하고 여기 개설 할 것이다 :
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;
};
비밀 거짓말을 파서의 호출. 웬일인지 parse_phrase
을 사용하여 구문 분석을 수행하려면 선장 문법 개체를 제공해야합니다. 나는 이것을 알지 못했습니다 :
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);
이것은 작동합니다.
Boost 배포와 함께 제공되는 예제를 보았습니까? –