2011-12-20 4 views
2

最近私はboost :: spirit :: qiで遊んでいて、自分自身を書こうとしています単純な)スクリプト言語を使用して解析します。私はスクリプトのif文にアクセスしたときに問題が発生しました。関数呼び出しが真の場合、パーサーが入力の一部をスキップする必要があります。boost :: spirit :: qiの入力部分をスキップすると、関数呼び出しが真に戻ってくる

たとえば、変数名(a-zA-Z_)を受け入れるようにトークンを定義し、 ">"または "<"を受け入れるように比較を設定しました。コードの例を以下に示します。

機能の比較が真実に戻ったら、次のセクションをスキップする方法はありますか?

+1

これはまさに[イプシロンパーサー(http://www.boost.org/libs/spirit/doc/html/spirit/qi/reference/auxiliary/epsあります.html)はのためです。あなたはそれを試してみましたか? – ildjarn

+0

いいえ、私はブーストには新しく、これは見たことがありません。私はドキュメントを見てきましたが、ちょっと混乱しています。それを使用する方法の例を教えていただけますか?ありがとう:) – Codahk

+0

"セマンティック述語"段落_is_関連する例。 – ildjarn

答えて

3

パーサー内の条件は、Epsilon Parserを使用して書き込むことができます。これはあなたが指定した関数を呼び出し、その関数がfalseを返すとその特定のチェックに失敗し、次のまたはに進みます。例えば

qi::rule<Iterator, std::string(), ascii::space_type> rool; 
rool = a | b | eps(f) | d 
関連する問題