2012-01-28 19 views
0

私はプロジェクトにブースト::精神を実施してきたし、私の課題の一つは、タイプの容器に直接解析することです:デフォルト値を提供する::精神

map<string, string> 

Iほとんどそこにいる。私が実行した問題は、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 

要素が返されます:私は、入力されたのだかのように、キーとしてパーサ挿入「コマンド」を持っています「選択」の値

問題は、qi :: attr()を使ってジョブを実行できないということです。つまり、「コマンド選択」とタイプすると機能しますが、「選択」だけではありません。

答えて

0

私は必要以上に難しいと思っていたようです。

解決策は、私が引用しなかったコードの一部にあります。私はphrase_parse()ではなくparseを使って文法を呼んでいました。自動スペーススキップを有効にします。

関連する問題