2012-01-28 100 views
0

我一直在推行的boost ::精神到項目中,我的挑戰之一是直接解析成類型的容器:提供了默認值提升爲解析器屬性::精神

map<string, string> 

我幾乎在那裏。我遇到的問題是自動分配std :: pair的鍵值。也就是說,我輸入字符串中的每個標記都有一個預定義的關鍵字,並且我希望在解析標記時自動將其插入對中。

我想我接近,但也許不是......這裏的(截)語法:

 command = 
      string("select") 
      ; 

     key = string("command") | qi::attr(std::string("command")); 

     command_pair = key >> ' ' >> command; 

     start = 
      command_pair >> *command_pair 
      ; 
    qi::rule<Iterator, std::string()> command; 
    qi::rule<Iterator, std::pair<std::string, std::string>()> command_pair; 
    qi::rule<Iterator,parserMap()> start; 

最終的結果是在命令行上鍵入:

select 

和解析器插入「命令」作爲鍵,就像我輸入的那樣:

command select 

因此,訪問map [「command」]元素將返回一個「選擇」的值。

問題是,我無法獲取qi :: attr()來完成這項工作。也就是說,如果我輸入「command select」,而不是「select」,它會起作用。

回答

0

看來我會讓它比需要更困難。

解決方案在於我沒有引用的代碼的一部分。我使用parse而不是phrase_parse()來調用我的語法。啓用自動空間跳過。