私はSpiritライブラリを初めて使用しようとしています。私は今までそれを楽しんでいますが、ドキュメンテーションに大きな影響を受けた例を試しても、あらかじめ定義されたルールから文法を構築することはできません。ここでルールから文法を作ることができませんboost :: spirit :: qi
は私の問題の核心である:
#include <boost/spirit/home/qi.hpp>
using boost::spirit::qi::ascii::space_type;
using boost::spirit::qi::grammar;
using boost::spirit::qi::phrase_parse;
template<typename P>
bool test_parser(char const* input, P const& p) {
char const* f(input);
char const* l(f + strlen(f));
return parse(f, l, p) && f == l;
}
struct my_grammar : grammar<char const*, space_type> {
my_grammar() : base_type(r) {
r = boost::spirit::qi::int_;
}
rule<char const*, space_type> r;
} g;
bool b = test_phrase_parser("5", g);
そしてこれは、コンパイラは述べていました:
error: no matching function for call to ‘test_phrase_parser(const char [6], ph_files_parsing::process_parsing::test_method()::my_grammar&)’
note: candidate is:
note: template bool test_phrase_parser(const char*, const P&)
私は
bool b = test_phrase_parser("5", g);
を交換した場合それはすべてが正常に動作します
によって
助けることができる誰にも事前にbool b = test_phrase_parser("5", boost::spirit::qi::int_);
感謝します。
(ブーストのバージョンが1.48である)