2016-07-24 98 views
1

我想用spirit x3將各種數字解析成一個字符串。我試圖這樣做,但它不起作用。用boost spirit x3解析一個數字到一個字符串

typedef x3::rule<class int_parser_id, std::string> int_parser_type; 
const int_parser_type int_parser = "int_parser"; 
auto const int_parser_def = x3::int32; 

我能做些什麼來解析一個INT與x3 :: int32分析器到一個字符串?

+2

只是說「它不起作用」並沒有告訴我們任何可以幫助你的東西。請描述***如何「它不起作用」。你有構建錯誤嗎?在運行時崩潰?錯誤的結果?越詳細越好。如果出現構建錯誤,您應該將錯誤(全部和完整)*作爲文本*未經編輯複製粘貼到問題的正文中。如果您收到意想不到的結果,請告訴我們您的輸入以及實際的*和預期的*輸出。如果發生崩潰,則在調試器中運行以查找崩潰。另請[請閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

+0

@JoachimPileborg:在這種情況下,它不起作用,就像我的車不會游泳一樣 - 圖書館不是這樣的。但是,如果OP知道,他們不會首先問這個問題......; - ] – ildjarn

+2

這個解析器應該將一系列數字解析爲一個字符串: std :: string input =「1234」; std :: string out; x3 :: phrase_parse(input.begin(),input.end(),+ x3 :: digit,x3 :: space,out); assert(輸出==輸入); (意思是一個或多個數字,'digit'分析器的屬性是'char',所以當你在前面加一個加號時,你會得到一個char或string的向量)。 – matiu

回答

1

解析正在掃描字符串以產生具體類型或類型集合的對象;你要求的是與Spirit相反的那種,Spirit稱之爲「一代」。 Spirit.X3只執行解析,所以對你的直接問題的答案是:你不能。

但是,Spirit確實附帶了一個用於生成的獨立組件:Spirit.Karma

namespace karma = boost::spirit::karma; 

int const i = /*...*/; 
std::string str; 
karma::generate(std::back_inserter(str), karma::int_, i); 

Online Demo

必須指出的是,噶是一個C++代碼庫03,因此具有更長的編譯時間比X3 - 強烈建議使用預編譯頭!

相關問題