2012-01-09 13 views
0

私は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である)

答えて

1

ご質問はfrequently-asked(一番下)であることが判明しました。

文法はスキップパーサを持っているので、それは

phrase_parse() 

だけではなく(パース)で呼び出さなければなりません。例えば、

return phrase_parse(f, l, p, boost::spirit::ascii::space) && f == l; 
関連する問題