問題タブ [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.
boost-spirit-karma - Karma でのバリアント格納コンテナーの使用
結果は r = false、use = "" です。しかし、私は use = "test" を期待しています。
別の例があります
結果は依然として r = false です。use = "". でも。どうしたの?
c++ - 有効なジェネレーターを提供せずに属性を消費しないように boost::karma::rule に電話をかける方法は?
次のソースコードがあるとします。
karma
のいくつかの特性が欠けているため、これはコンパイルに失敗しますstd::nullptr_t
(それらはboost::spirit::traits::extract_c_string
andboost::spirit::traits::char traits
です)。より具体的にkarma
は、 type の属性のジェネレーターが見つからないために失敗しますstd::nullptr_t
。
それに対処する方法がいくつかあります。
- 文法定義で
std::nullptr_t
置き換えますkarma::unused_type
: この例では機能しますが、より複雑な文法ではあいまいさが生じる可能性があります。 - 特性の専門化の定義: 私の意見では、これは汚いものであり、一般的ではありません。さらに、すべての人に標準タイプの専門性が公開されるため、競合が発生する可能性があります。
- 属性変換の特殊化: 私のためだけに標準型を特殊化するのと同じ問題。
- カスタム ジェネレーターを作成する: これまでのところ最良の候補ですが、タスクの複雑さに比べて高度にテンプレート化されたコード行の負荷が大きくなります。
karma::unused_type
属性を持つ中間ルールを配置します。機能するが意味のない簡単な修正。
質問karma::rule
:単純なリテラルを生成し、属性のジェネレーターの有無を気にしないようにするにはどうすればよいですか?
c++ - ブーストカルマで解析された変数を再利用する
以下のコードとまったく同等のコードベースがあります。変数の内容が 2 倍のテキスト ファイルを生成しようとしています。答えはセマンティックアクションと _a と _val にあると思いますが、ドキュメントでもうまくいきません。
str に "toto" を出力するにはどうすればよいですか : toto some stuff toto
つまり、カルマで解析された変数を再利用する方法は?
解決策(以下の投稿によると:)
c++ - Boost Karma - 非消費述語
std::complex を出力する必要がありますが、ゼロの場合は虚数部を省略します。したがって、2 つのプロダクションを含むルールがあります。
このように、Karma は常に最初のプロダクションを選択するので、決定を行うある種の述語が必要です。Boost Karma チュートリアルには、std::complex を 3 要素タプルとして適応させる必要があるソリューションが付属しています。
残念ながら、他のコードは std::complex を2要素タプルとして使用しているため、それを行うことはできません。述語を Fusion アダプターに直接追加せずにその問題を解決する方法はありますか?
karma::eps ジェネレーターを述語として使用しようとしていました
しかし、eps( ... ) 内にどの Phoenix 式を配置すればよいかわかりません。また、Epsilon Generator は属性を消費しないため、そこから std::complex にアクセスできるかどうかわかりません。
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 つの質問は面白そうに見えましたが、私の問題を解決 しませんでしたブースト カルマで解析された変数を再利用 します ブースト::精神::カルマでネストされたオブジェクトのデータにアクセスする方法は?
c++ - メンバー関数を使用して、構造体のコレクションからスピリット カルマの生成を促進する
カルマを使用して、文字列を提供するメンバー関数を含む構造体のベクトルから、文字列のコンマ区切りリストを生成しようとしています。
phoenix::bind を使用して単一の文字列出力を生成することも、文字列のベクトルから csv 出力を生成することもできますが、2 つのアプローチを組み合わせるのに苦労しています。
次の例では、最初のルールは正常に機能しますが、2 番目のルールはコンパイルされず (VS2013、boost 1.57 を使用)、フェニックス エラーが発生します: 「'std::vector> *' から 'foo *' に変換できません」。この場合、構造体の単一のインスタンスに対して機能するセマンティック アクションは正しくありません。融合アダプターを使用する唯一の答えはありますか?