2017-02-15 8 views
3

(면책 조항, 내가 배우고 부스트 정신)이 문자열로 정수를 구문 분석하려고 (치 : as_wstring)

나는 이런 식 구문 분석을 시도하고있다 : F (1)

및 1을 문자열 ("qi :: int_와 작동하는 숫자"대신 "1")로 가져 오려고합니다.

나는 이런 식으로 뭔가 시도 (잘못이지만, 어쩌면 내가 올바른 방향입니다)하지만, 결과 문자열은 "1 개 \ "대신 그냥 "1"

어떤 통찰력있는 그대로 숫자를 문자열로 파싱하는 데 필요한 것은 무엇입니까?

template <typename Iterator> 
struct range_parser : boost::spirit::qi::grammar<Iterator, RangeResult(), iso8859_1::space_type> 
{ 
    range_parser() : range_parser::base_type(start) 
    { 
     using qi::lexeme; 
     using qi::int_; 
     using iso8859_1::digit; 

     number_as_string %= lexeme[ +(int_) ]; 

     start %= 
      qi::lit("F") 
      >> '(' 
      >> number_as_string 
      >> ")" 
      ; 
    } 

    qi::rule<Iterator, std::wstring(), iso8859_1::space_type> number_as_string; 
    qi::rule<Iterator, RangeResult(), iso8859_1::space_type> start; 
}; 
+0

누군가 qi :: as_wstring 부분을 제거하기 위해 제목을 편집 할 수 있습니까? (나는 생각한다) – Max

+4

'+ (int_) '(하나 이상의 정수) 대신에'+ (digit)'(하나 이상의 숫자)를 써야한다고 생각한다. 'int_' (범위 체크가 없으며, +/- 부호 없음)와 같은 일을하지 않습니다. int_가 인식하는 입력을 캡쳐하려면 원시 지시어 인'raw [int_]'를 사용해보십시오. http://www.boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit /qi/reference/directive/raw.html –

+0

(프로젝트에 다시 돌아 왔습니다.) 안녕하세요. @ 보리스 글릭, 답변으로 제출하여 답변으로 받아 들일 수 있습니까? 감사. – Max

답변

1

내가 대신 +(int_) (하나 또는 그 이상의 정수)의 +(digit) (하나 또는 그 이상의 자리)를 작성하는 의미 생각합니다. +(digit)qi::int_ (범위 체크 없음, +/- 부호 없음, 숫자 제한 없음, "000"과 같은 입력 허용 등)과 동일한 작업을 수행하지 않습니다.

당신이 qi::int_ 인식 입력을 캡처하려면 원시 지시문을 사용하여 시도 할 수 있습니다 : 그것은 에게 구문 분석 된 값과 qi::int_ 파서의 원시 입력을 절약 할 수있어, raw[int_]http://www.boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit/qi/reference/directive/raw.html

필요한 경우를 , 여기를 참조하십시오 : qi::rule with inherited attribute as inherited attribute

+0

감사합니다. 나는 간단한 일을하고 있지만, 나는 아직도 정신 파서를 배우고있다. – Max

+0

여러분을 환영합니다! 나는 잠시 동안 그것을 사용했지만 여전히 "학습"단계에 있습니다. –