2012-05-05 80 views
0

我想使用boost::spirit將整數序列解析爲std::vector<int>。整數可以用分號或換行符分隔。使用boost :: spirit將分析元素分解爲矢量,使用分號或換行符作爲分隔符

不過此語法並不編譯:

typedef std::vector<int> IntVec; 
template <typename Iterator, typename Skipper> 
struct MyGrammar : qi::grammar<Iterator, IntVec(), Skipper> { 
    MyGrammar() : MyGrammar::base_type(start) { 
    start = +(qi::int_ 
       >> (";" | qi::no_skip(qi::eol))); 
    } 
    qi::rule<Iterator, IntVec(), Skipper> start; 
}; 

要清楚,我想分析如下輸入,例如,

1; 2; 3 
4 ; 5 

到一個載體中(1,2,3,4,5)。我該怎麼做,爲什麼我的版本不能編譯?

我可以以某種方式將分隔符(「分號或換行符」)寫爲自己的規則嗎?它的返回類型是什麼?某種null值?

+2

您的聲譽和徽章是如此特別:)我會打印屏幕! –

回答

2

看起來好像在檢查分號時正在應用隊長,所以一旦達到qi::no_skip[qi::eol]就跳過了字符(包括換行符)。以下是爲我工作,與no_skip令牌第一:

start = qi::int_ % (qi::no_skip[qi::eol] | ';'); 

我使用%使最終整數不需要跟一個分號或結束行。

相關問題