2017-07-25 6 views
-1

ファイルが期待通りのルールの途中で終了すると、期待値エラーが発生しません(もちろん解析できません)。入力は、最終の期待誤差は}がトリガされていないだけブーストスピリットQiパーサーでファイルが終了すると期待されたエラーが発生しない

data { 

予想される場合

data_var_decls_r 
    %= (lit("data") 
     > lit('{')) 
    > lit('}'); 

:動作をトリガ

簡略化した例はこれです。

ファイルの終わりを過ぎた期待エラーを処理する方法はありますか?

+1

簡単なスタンドアロン例えば – sehe

答えて

2

自己完結型の例にそれを作る:

は、それがLive On Wandbox

#include <boost/spirit/include/qi.hpp> 

namespace test { 
    using namespace boost::spirit::qi; 

    rule<std::string::const_iterator> rule = lit("data") > '{' > '}'; 
} 

int main() { 
    std::string const input("data{"); 

    bool ok = parse(input.begin(), input.end(), test::rule); 
} 

スロー期待の失敗を参照してくださいい。スペースのスキッパーを使用した場合

はでも、それはまだスロー:

はそれをLive On Wandboxを参照してくださいあまりにも

#include <boost/spirit/include/qi.hpp> 

namespace test { 
    using namespace boost::spirit::qi; 

    rule<std::string::const_iterator, space_type> rule = lit("data") > '{' > '}'; 
} 

int main() { 
    std::string const input("data{"); 

    bool ok = phrase_parse(input.begin(), input.end(), test::rule, test::space); 
} 
+0

おかげで自己完結例はないこと。私はそれが既知の解決策の既知の問題であると考えていました。私は数十のファイルと文法をその問題を示す例に単純化しようとします。文法がこの時点で本当に巨大なので、私はこの問題がどこから来ているのか分かりません。どこかでSpirit Qi文法をデバッグするための一般的なヒントはありますか?進行状況を出力するためにコールバックセマンティックアクションをたくさん書くだけですが、それは非常に時間がかかるプロセスです。 –

+0

そんなにたくさんの人がいます(私の答えを検索するだけです...)。一般公開レポへのリンクが役立ちます。 'BOOST_SPIRIT_DEBUG *'マクロを見てください。そして、[セマンティックアクションを複雑にしないでください。:(](https://stackoverflow.com/questions/8259440/boost-spirit-semantic-actions-are-evil) – sehe

+0

また、新しい質問を投稿するだけですか私は最初の質問が誰かにそれをdownvoteするのに迷惑をかけているのを見ることができ、私は迷惑にならないようにしたくありません。 –

関連する問題