問題タブ [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.

0 投票する
1 に答える
1456 参照

c++ - 精神期待の失敗を後押しする

次の構造体のベクトルを解析したいと思います。

私の文法は次のようになります。

私のHarnassは次のようになります。

ルール仕様をクリーネ閉包仕様からシーケンス一致に切り替えても、エラーは発生しません。

そうしないと、例文(harnassに表示)を解析しようとしたときに期待値エラーが発生します。

理想的には、このようなルールを書きたいと思いますdm_lines = +(data_member_line)(これも機能しません)。'*'および'+'演算子を使用すると、期待に失敗する原因は何ですか?しかし、シーケンスを照合するときはそうではありませんか?そして、どうすれば修正できますか。

0 投票する
2 に答える
3034 参照

c++ - C ++ / Boost:より強力なsscanf置換を作成する

一致をイテレータに割り当てるCのsscanfを置き換える関数をC++で記述したいと思います。

基本的に、私は次のようなものが欲しいです:

正確な詳細は異なる場合がありますが、あなたはその考えを理解します。実装のアイデアはありますか?

これまでのオプションとこれまでの問題:

  • std :: istringstream:定数式を照合するためのマニピュレーターはありません
  • Boost.Regex:これが機能するかどうかわからないため、これに必要なものよりもはるかに複雑に見える
  • Boost.Spirit:これが動的に生成されたフォーマット文字列に対して機能するとは思わない。また、必要以上に複雑に見える
  • sscanf:動作しますが、非標準などであり、引数の数はコンパイル時に決定されるため、これを使用すると多くのオーバーヘッドが必要になります。
0 投票する
1 に答える
1967 参照

c++ - ブーストスピリットチーは、カスタムスキップ文法でスキップを再確立します

boost::spirit::ascii::spaceこれまで、標準/boost::spirit::ascii::space_typeスキッパーを使用してきた文法があります。

スキッパーを使用するルールと使用しないルールがあります。

termスキップする非終端記号(like )の内部で非スキップの非終端記号(like)を使用するとexpression、すべてが期待どおりに機能します。空白はterm非終端記号の内部でのみ重要です。

さらに、これまでは、スキッパーを再確立するために使用しない非終端記号の内部にスキッパーを使用する非終端記号を含めても問題ありませんでしqi::skipた。

このように、空白は[]中括弧の内側では重要ではありませんが、外側では重要です。

ただし、ここで、独自のカスタムスキッパーを追加します(改行を重要にし、後でコメントスキップを追加します)。私のスキッパー文法は次のようになります。

私はそれを私のルール定義にうまく追加することができました

qi::skipしかし、スキップ文法を引数として使用する方法(および置換する方法)を理解できないようですascii::space。タイプ、ローカルインスタンス変数、およびグローバルインスタンス変数を使用してみました。私が得た最も遠いのは、私のskip_grammarにコピーコンストラクターが必要であるとclangに文句を言わせることです。そこで、スキップ文法にコピーコンストラクターを追加しようとしましたがboost::noncopyable、バイナリsegfaultがほぼすぐに発生したため、基本クラスが存在するようです。

これをどのように使用すればよいですか?

ありがとう

0 投票する
2 に答える
1528 参照

c++ - Spirit::Qiルールからboost::variantメンバーにアクセスするには?

Spirit-Qi 文法で boost::phoenix を使用して、boost::variant のメンバーにアクセスする適切な方法が見つかりません。これは、私が達成しようとしている簡単な例です。(私の文法全体ははるかに複雑です。これは、言及された問題をテストしている単純なフラグメントです)。

しかし、phoenix::get<> や、Phoenix を使用して boost::variant にアクセスする同様の方法が見つかりません。phoenix::get<> が必要な理由は、特定の型のリストにバリアントを挿入し、この特定の型を継承された属性として子ルールへの参照として渡す必要があるためです。

このような動作を実現する方法はありますか?

返信ありがとうございます

リック

0 投票する
1 に答える
1003 参照

c++ - Boost.Spiritのセマンティックアクションにファイルパス文字列を渡す

Boost.Spiritは初めてですが、ライブラリを使用して実装しようとしているミニインタープリターに関する質問があります。言語を解析するサブタスクとして、フォームの入力からファイルパスを抽出する必要があります。

そして、それを文字列(引用符なし)としてセマンティックアクションに渡します。

このタイプの入力を解析できるコードをいくつか作成しましたが、おそらくBoost.Spiritの経験が不足しているため、解析された文字列を渡すと期待どおりに機能しません。

誰か助けてもらえますか?

実際には、私の文法はもっと複雑ですが、問題を次のように切り分けました。

出力は次のとおりです。

しかし、私は取得したいと思います:

0 投票する
1 に答える
769 参照

c++ - boost::spiritでパーサーへのポインターを使用する

基本的に、私は式パーサーを実行しています。可能な限り優れたパフォーマンスが必要であり、ドキュメントによると、文法の構築がかなり遅くなる可能性があるため、解析の直前に文法を再利用してシンボルテーブルをバインドしたいと思います。文法のクライアントは、構文解析の前に作成および維持されるシンボルテーブルを持っている可能性が高いため、理想的には、実際のテーブルのコピーも避けたいと思います。これにより、用語を変換するための次のコード(簡略化)が表示されます。

ここでの問題はm_Symbolsです。私が欲しいのは、m_Valに参照によってm_Symbolsを保持することです。これは、シンボルテーブルをバインドするときに、ポインターを自然に変更しているためです。これは、boost :: phoenix :: refを使用することで解決できると思いますか?しかし、より大きな問題は、新しいパーサーを合成するときにパーサーへのポインターを使用できないように見えることです。式で逆参照を使用すると、m_Symbolsがすぐに逆参照されますが、これは不要です。逆参照を遅らせて、時間を解析したいと思います。

0 投票する
1 に答える
444 参照

c++ - このような XML を boost.Qi で解析し、タグとして名前が付けられた関数を呼び出す方法は?

したがって、 Boost.Qi XML 解析に関する公式のチュートリアルがあることは知っていますが、そのような XML を解析する方法がまったくわかりません。

それは非常に単純に見えますが、私は自分のxmlを解析する方法を知りません..(必要なのは単純です-関数を呼び出します(ホスト()のファイル()のようなタグと同じ名前で呼び出されます)関数オブジェクトに送信する必要がありますお気に入り:

それでは - boost.Qi で XML を解析し、解析中に関数を呼び出す方法を教えてください。

0 投票する
1 に答える
300 参照

boost-spirit - boost::spirit::qi および std::list コンテナーのストリーミング演算子を定義する方法

私のルールの 1 つに qi::locals<> があり、 stl コンテナーがパラメーターとして指定されています。BOOST_SPIRIT_QI_DEBUG を使用せずにプログラムをコンパイルすると、すべて正常に動作します。しかし、BOOST_SPIRIT_QI_DEBUG をオンにすると、演算子 << がないためにプログラムをコンパイルできません。

簡略化されたスニペット:

エラー:

TlstValues のストリーミング演算子を定義しようとしましたが、効果がありませんでした。エラーはまだ同じでした。私の演算子の定義:

BOOST_SPIRIT_DEBUG を機能させるために必要な演算子を定義する方法を教えてください。

ありがとう、よろしくリック

0 投票する
1 に答える
631 参照

c++ - Boost :: Spirit::Qi自動ルールと条件付きアクション

これはおそらく悲惨なほど簡単な質問です。特に、QIを使用して単純な構造を解析することに成功しており、おそらくすでに答えを知っているはずですが、それでもわかりません...

次のようなコンテナがあるとします。

とのような入力ファイル

特定のカテゴリのオブジェクトが任意の順序で表示され、すべてのオブジェクトが表示されるとは限りません。

ここではFusionの適応をスキップしますが、文字列の2つのベクトルになります。

私の問題は、そのような条件付きコンテナを満たす文法を構築することです。これまで、特殊な文法を使用して入力を複数回解析することで、この問題を回避してきました。この例では、それは男性と女性になります。

QI mini-XMLチュートリアルでは、自動ルールがセマンティックアクションを取り除くという印象を受けましたが、確かに、私は新人であり、QIが使用するようなハードコア(テンプレート)マジックAPIにまだ恐れを感じています。それで、私はそれが悪い、悪い形であることを知っていても...私はヘッドライトの閉塞でいくつかの主要な鹿を経験しているので、ここで実際の実用的な例を得ることができて本当に感謝しています。編集:この構造体に正確に対応している必要はありません。自動ルールを使用し、適切なバケットに配置する文法の実際的な例です。