文法を働かせることができませんでしたので、整数を解析するまで単純化しました。まだそれを働かせることはできません。これは、次の文法である:ちょうど、整数を解析することになっている簡単なBoost :: Spirit文法を使用していますか?
template<typename Iterator>
struct rangeGrammar : qi::grammar<Iterator, int()>
{
rangeGrammar() :
rangeGrammar::base_type(number)
{
using qi::int_;
using qi::_1;
using qi::_val;
number = int_[_val = _1];
}
qi::rule<Iterator, int()> number;
};
(私はちょうど文法としてINT_使用するparse関数を言うことができる知っているが、私はこれで間違っているかを知るためにwan't例)。
私の解析機能は次のとおりです。
/* n is a std::string provided by the user */
rangeGrammar<std::string::const_iterator> grammar;
int num = 0;
qi::phrase_parse(n.start(), n.end(), grammar, num);
std::cout << "Number: " << num << std::endl;
は、私は、次のコンパイラエラーを取得:
/boost/spirit/home/qi/reference.hpp: In member function ‘bool boost::spirit::qi::reference::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator >, Context = boost::spirit::context, boost::spirit::locals<> >, Skipper = boost::spirit::unused_type, Attribute = int, Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator >, int(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>]’: /boost/spirit/home/qi/parse.hpp:89:82: instantiated from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, Attr&) [with Iterator = __gnu_cxx::__normal_iterator >, Expr = rangeGrammar<__gnu_cxx::__normal_iterator > >, Attr = int]’ ../parameter_parser.h:95:46: instantiated from here boost/spirit/home/qi/reference.hpp:43:71: error: no matching function for call to ‘boost::spirit::qi::rule<__gnu_cxx::__normal_iterator >, int(), boost::spirit::unused_type, boost::spirit::unused_type, boost::spirit::unused_type>::parse(__gnu_cxx::__normal_iterator >&, const __gnu_cxx::__normal_iterator >&, boost::spirit::context, boost::spirit::locals<> >&, const boost::spirit::unused_type&, int&) const’ cc1plus: warnings being treated as errors /boost/spirit/home/qi/reference.hpp:44:9: error: control reaches end of non-void function * exit status 1 *
は、問題が何であるかを把握することはできません。どんな助けでも大歓迎です。
笑@「シンプルブースト::精神は文法」あなたが発見したよう –
を、単純なブーストスピリット文法はありません。代わりにANTLRを使用してください。 –
先日、私はIRCのブースト「チーム」から親切に話を聞き、スピリットがそのような低いドキュメンテーションカバレッジを持つ理由を尋ねました。彼はそれが実際に非常によく文書化されていると叫んだ... ANTLRの使用+1。 – Kivin