2017-02-15 17 views
3

(免責聲明,我的學習提升精神)試圖解析整數字符串(齊:: as_wstring)

我試圖解析像這樣的表達式: F(1)

和想要得到1作爲一個字符串(「1」而不是一個數字(它與qi :: int_一起使用))。

我想這樣的事情(這是不對的,但也許我是在正確的方向),但由此產生的字符串是「\ X1」,而不僅僅是「」

任何洞察力需要什麼來解析一個數字到一個字符串?

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_)'(一個或多個整數)。請注意,它不會做'int_'(沒有範圍檢查,沒有+/-符號)。如果你想捕獲由int_識別的輸入,你可以嘗試使用raw指令:'raw [int_]'http://www.boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit /qi/reference/directive/raw.html –

+0

(回到項目)嘿@BorisGlick,你可以把它作爲答案,所以我可以接受這個答案?謝謝。 – Max

回答

1

我想你的意思是寫+(digit)(一個或多個數字),而不是+(int_)(一個或多個整數)。請注意,+(digit)不會與qi::int_(沒有範圍檢查,沒有+/-符號,沒有數字位數限制,接受輸入如"000"等)相同。

如果你想捕捉qi::int_認可的輸入,你可以嘗試使用原始指令:raw[int_]http://www.boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit/qi/reference/directive/raw.html

如果有必要,有可能節省解析值和qi::int_解析器的原始輸入,看到這裏:qi::rule with inherited attribute as inherited attribute

+0

謝謝。我得到了簡單的工作,但我仍然在學習精神解析器。 – Max

+0

不客氣!我一直在使用它,但仍處於「學習」階段。 –