問題タブ [boost-spirit-qi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 代替パーサーの使用を改善する
スピリット マニュアルからミニ XML の例を拡張しました。
文法は、「/>」で閉じることができ、子ノードを持たないか、例のように閉じタグ「」で閉じられ、オプションで子を持つことができる xml タグを記述します。
attr(Children()) タグなしでこのルールを書くことは可能ですか? 多かれ少なかれパフォーマンスの遅れだと思います。代替パーサーのオプション属性を避けるために必要です。子タグがない場合、属性は空のベクターのみにする必要があります。
c++ - 気力ブースト再帰
boost::recursive_wrapper で何かを見逃したに違いありません。常にエラーが発生します。
エラー: 'boost::tuples::tuple、std::allocator >、client::compare_attr_op_t、std::basic_string、std::allocator >、boost::tuples::null_type、boost:: への呼び出しに一致する関数がありませんtuples::null_type、boost::tuples::null_type、boost::tuples::null_type、boost::tuples::null_type、boost::tuples::null_type、boost::tuples::null_type>::tuple(client ::expression_value&)'
文法で「式」を定義する行の場合:expression %= attribute_test | boolean_expression;
何か案が?
c++ - boost.spiritを使用してstd::stringを抽出するにはどうすればよいですか?
boost.spiritを使用して、フォームの単純なコマンドラインを解析しようとしますcommand:param1 param2...
そうするために、私はこのパーサーを作成しました:
2つの複合パーサーの属性タイプはベクトルであるため、cmdとparamsがベクトルタイプの場合はこれが機能します。ただし、タイプがstd :: stringの場合は、そうではありません。Webでこのソリューションを検索しているときに、文字列でも機能するはずだというヒントを見つけました。とにかく私はこれを文字列で動作させることができますか?
c++ - 「代替」と「オプション」を混在させる場合のBoost.Spiritのバグ?
私はBoost.Spirit(Boost 1.44から)を3日間だけ使用しており、RFC2822の正確な文法を使用して生の電子メールメッセージを解析しようとしています。私はそれを理解し始めてどこかに行き始めたと思っていましたが、それから私は問題に遭遇しました:
テスト#3が機能する場合、なぜテスト#5(2つの選択肢を逆にしたまったく同じテスト)が失敗するのでしょうか。
同様に、式を許す場合:テスト#4が機能し、先頭のスペースがオプションとしてマークされている場合、なぜテスト#5を実行するのですか(まったく同じ入力を使用したまったく同じテストです。入力に先頭のスペースがありません)失敗しますか?
そして最後に、これがBoost.Spiritのバグである場合(私が思うに)、どうすれば回避できますか?
c++ - ブーストスピリットでエスケープされた文字列を解析する
私はSpirit 2.4で作業していますが、次のような構造を解析したいと思います:
テキスト{text_field};
ポイントは、text_field が記号「{」、「}」および「\」を含むエスケープされた文字列であることです。このためのパーサーを qi を使用して作成したいと思います。私はこれを試してきました:
しかし、コンパイルさえしません。何か案が?
boost - ブースト::spirit:: qi::ruleをstd::listに保存する
boost :: spirit :: qi::ruleのコピーまたは参照セマンティクスに関する他のスレッドを読みました。Boost1.42を使用しています。
これは失敗します...
ルールをSTLリストまたは両端キューに保存する方法はありますか?(参照は削除されるまで死にません)。
c++ - Boost.Spirit.Qi:ルールの属性を取得し、それを囲んでいるルールの構造体属性のフィールドとして設定しますか?
これらの他の質問の多くと同様に、Boost.Spirit.Qiを使用して、単純な文法を構造体のツリーに解析しようとしています。
私がやろうとしていることを可能な限り単純なケースに蒸留しようと思います。私は持っています:
後で、文法構造体の中に、次のメンバー変数があります。
私が定義している
しかし、実際に整数を解析しようとすると、
myInteger.value
解析が成功すると、常に初期化されません。同様に、私は次の定義を試しました(明らかにコンパイルされないものは間違っています):
明らかに、私はスピリット、フェニックス、または他の何かについて何かを誤解しています。私の理解では、これがここでqi::_1
の最初の属性でありqi::int_
、角括弧内の部分が関数オブジェクトとして実行されるときに、解析された整数を表す必要があります。integer
次に、関数オブジェクトが囲んでいる属性を受け取りqi::_val
、解析された整数をそれに割り当てようとすると仮定しています。私の推測では、私のBOOST_FUSION_ADAPT_STRUCT
呼び出しのおかげで、この2つは互換性があり、静的分析の観点からは確かにそうであるように見えますが、データは保存されていません。
どこかに欠けている参照(&)指定はありますか?
boost - ブースト qi のプラス演算子が期待どおりに機能しない
これがサンプルコードです
次のエラーが表示されます。
/usr/local/include/boost/spirit/home/qi/nonterminal/rule.hpp:201: 「boost::spirit::qi::rule& boost::spirit::qi::rule::」からインスタンス化operator=(const Expr&) [with Expr = boost::proto::exprns_::expr&, const boost::proto::exprns_::expr&>, 1l>&, const boost::spirit::terminal&>, 2l> &, const boost::proto::exprns_::expr&>, 1l>&>, 2l>&, const boost::spirit::terminal&>, 2l>&>, 1l>&>, 2l>, イテレータ = __gnu_cxx ::__normal_iterator, std::allocator > >, T1 = unsigned int ()(), T2 = boost::fusion::unused_type, T3 = boost::fusion::unused_type, T4 = boost::fusion::unused_type] mini.c++:34: 「input::input() [with Iterator = __gnu_cxx::__normal_iterator, std::allocator > >]」からインスタンス化された mini.c++:49: ここからインスタンス化 /usr/local/include/boost/spirit/home/qi/operator/plus.hpp:62: エラー: 「struct boost::spirit」に「type」という名前の型がありません::traits::container_valueâ€</p>
奇妙な部分は、マイナス (-) 演算を使用する場合、つまり
...それは完全にうまくコンパイルされます!
gcc 4.3.4 でコンパイルします。
c++ - boost::spirit::qi と順不同の変数
私は辞書的アナライザーを書いています。英語の文字列を受け取り、それを一連の緯度/経度座標に変換します。Google Earth に少し似ています。
とにかく、記号表と文法を書き、書式設定されたデータを喜んで解析しています。
例: {"北", 23.59, "東", -30.82}
これが私の文法です:
緯度と経度は、省略形のコンパス方向から文字列にマップするシンボル テーブルです (例: "e" から "East")。
それで、私の質問に進みます:
緯度と経度の記号が反対の位置にある次の規則を文法に追加したいと思います。
これは解析しますが、degLat_ と degLong_ の値は文字列値と一緒に反転されません。それらは、文字列ラベルに関係なく、単純に構造体に直接解析されます。
解析するデータがシーケンシャルでない場合、構造体 (または boost::fusion ベクトル) を構築するにはどうすればよいですか?
boost - Spirit.Qi パーサーをコンパイルしようとする際の問題
以下は、完全に自己完結型の例です。問題は行 84 ~ 89 にあるようです。これらの行がコメント アウトされている場合、例はコンパイルされます。私が解析しようとしているのは、コロンで区切られた 5 つの項目を持つファイルの各行で、最後の 3 つの項目はオプションです。単一の関数は を受け取り、boost::filesystem::file
を使用してそれを吸い込みboost.interprocess
、解析します。
これを解析したいものの例:
a:1
a:2:c
a:3::d
a:4:::e
a:4:c:d:e
結果は に格納する必要がありvector<file_line>
、file_line
5 つのメンバーを持つ構造体であり、最後の 3 つはオプションです。コードとエラーは次のとおりです。
コード
MSVC 10 からのエラー メッセージ
質問は 30,000 文字に制限されているため、ここでは最初の数件のみを表示します。この例は、あなたのマシンで同じものをコンパイルして生成しようとするはずです。
...中略...