문법이 작동하지 않아 정수 만 분석 할 때까지 단순화했습니다. 아직도 작동시킬 수는 없습니다. 그것은 다음과 같은 문법이다 :간단한 부스트 :: 스피릿 문법 사용하기?
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_ 사용하는 구문 분석 함수를 말할 수 알지만,이에 잘못 알고 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의 부스트 팀에서 일종의 갈라진 틈을 피우고 스피릿이 왜 그렇게 낮은 기록을 가지고 있는지 물었습니다. 그는 그것의 실제로 아주 잘 문서화 된 것을 외쳤습니다 ... +1 ANTLR을 사용합니다. – Kivin