問題タブ [boost-spirit-karma]

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 に答える
88 参照

boost-spirit-karma - Karma でのバリアント格納コンテナーの使用

結果は r = false、use = "" です。しかし、私は use = "test" を期待しています。

別の例があります

結果は依然として r = false です。use = "". でも。どうしたの?

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

c++ - 有効なジェネレーターを提供せずに属性を消費しないように boost::karma::rule に電話をかける方法は?

次のソースコードがあるとします。

karmaのいくつかの特性が欠けているため、これはコンパイルに失敗しますstd::nullptr_t(それらはboost::spirit::traits::extract_c_stringandboost::spirit::traits::char traitsです)。より具体的にkarmaは、 type の属性のジェネレーターが見つからないために失敗しますstd::nullptr_t

それに対処する方法がいくつかあります。

  1. 文法定義でstd::nullptr_t置き換えますkarma::unused_type: この例では機能しますが、より複雑な文法ではあいまいさが生じる可能性があります。
  2. 特性の専門化の定義: 私の意見では、これは汚いものであり、一般的ではありません。さらに、すべての人に標準タイプの専門性が公開されるため、競合が発生する可能性があります。
  3. 属性変換の特殊化: 私のためだけに標準型を特殊化するのと同じ問題。
  4. カスタム ジェネレーターを作成する: これまでのところ最良の候補ですが、タスクの複雑さに比べて高度にテンプレート化されたコード行の負荷が大きくなります。
  5. karma::unused_type属性を持つ中間ルールを配置します。機能するが意味のない簡単な修正。

質問karma::rule:単純なリテラルを生成し、属性のジェネレーターの有無を気にしないようにするにはどうすればよいですか?

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

c++ - ブーストカルマで解析された変数を再利用する

以下のコードとまったく同等のコードベースがあります。変数の内容が 2 倍のテキスト ファイルを生成しようとしています。答えはセマンティックアクションと _a と _val にあると思いますが、ドキュメントでもうまくいきません。

str に "toto" を出力するにはどうすればよいですか : toto some stuff toto

つまり、カルマで解析された変数を再利用する方法は?

解決策(以下の投稿によると:)

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

c++ - Boost Karma - 非消費述語

std::complex を出力する必要がありますが、ゼロの場合は虚数部を省略します。したがって、2 つのプロダクションを含むルールがあります。

このように、Karma は常に最初のプロダクションを選択するので、決定を行うある種の述語が必要です。Boost Karma チュートリアルには、std::complex を 3 要素タプルとして適応させる必要があるソリューションが付属しています。

残念ながら、他のコードは std::complex を2要素タプルとして使用しているため、それを行うことはできません。述語を Fusion アダプターに直接追加せずにその問題を解決する方法はありますか?

karma::eps ジェネレーターを述語として使用しようとしていました

しかし、eps( ... ) 内にどの Phoenix 式を配置すればよいかわかりません。また、Epsilon Generator は属性を消費しないため、そこから std::complex にアクセスできるかどうかわかりません。

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

c++ - ブースト カルマ - 1 つの属性から複数の文字列を生成する

ペアのベクトルを消費するカルマジェネレーターを使用しています-http://boost-spirit.com/home/articles/karma-examples/output-generation-from-a-list-of-key-value-pairsに似ています-使用精神カルマ/

上記の記事に従って、私の問題を示す例を作成しました

私が達成しようとしているのは、 "value1 key1 value1" のような出力です。通常、それは「key1 value1」を出力します(ただし、私の例では3番目のカルマ::文字列を削除した場合のみ)私はすでにセマンティックアクションで多くのものを試しました.

しかし、それはうまくいきません。std::pair から値を取得するには、おそらく何か他のものが必要です。

これらの 2 つの質問は面白そうに見えましたが、私の問題を解決 しませんでしたブースト カルマで解析された変数を再利用 します ブースト::精神::カルマでネストされたオブジェクトのデータにアクセスする方法は?

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

c++ - メンバー関数を使用して、構造体のコレクションからスピリット カルマの生成を促進する

カルマを使用して、文字列を提供するメンバー関数を含む構造体のベクトルから、文字列のコンマ区切りリストを生成しようとしています。

phoenix::bind を使用して単一の文字列出力を生成することも、文字列のベクトルから csv 出力を生成することもできますが、2 つのアプローチを組み合わせるのに苦労しています。

次の例では、最初のルールは正常に機能しますが、2 番目のルールはコンパイルされず (VS2013、boost 1.57 を使用)、フェニックス エラーが発生します: 「'std::vector> *' から 'foo *' に変換できません」。この場合、構造体の単一のインスタンスに対して機能するセマンティック アクションは正しくありません。融合アダプターを使用する唯一の答えはありますか?