問題タブ [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.
c++ - ブーストスピリットカルマで子ルールに属性を渡すことはどのように可能ですか
qi を介してテキストを解析して AST に変換し、カルマを介してテキストを再度生成します。これは期待どおりに機能していますが、何らかの方法で、あるルールから別のルールに属性を渡す必要があります。
コメントから移植:
印刷します
しかし、私はそれを印刷したいと思います
これは可能ですか?
c++ - Boost.Spirit.Karma セット精度
Karma 生成機能を使用して、sprintf のような機能で double を char に変換し始めています。そのために、次の例を使用しています。
この例は正常に動作しますが、精度メソッドは静的であり、その値を動的に設定する方法がわかりませんでした。使用ごとに精度を指定し、実行時に変更したいと考えています。定義された数の精度が必要なので、最初にすべてのジェネレーターを作成してもかまいません。
問題は、それらの唯一の違いが返される数値である場合、各精度数値のクラスを作成する必要があるとは思わないことです。メンバー メソッドを使用してクラスをコンパイルしようとしました (これが私にとって十分なメンバー精度メソッドである場合)。このクラス メソッドの問題で立ち往生していると思います。
精度の異なるジェネレーター オブジェクトを作成し、複数のクラスを作成せずにそれらを使用するにはどうすればよいですか? ジェネレーターを 1 つだけ使用できる場合は、プロパティを変更するだけでさらに良くなります。
誰かが同じ問題を抱えていて、解決策を共有できる場合は非常に役立ちます.
ありがとう、
c++ - ブーストカルマからC++配列にどのように生成しますか?
std::stringのように、カルマを使用してメモリを管理するコンテナーを生成する方法がわかります。しかし、バッファー ( char[N] ) が事前に割り当てられている場合はどうでしょうか?
double を既存のバッファのアドレスに解析する方法を見つけたいと思います。この場合、バッファは十分な大きさであると仮定しても問題ありません。おそらく、根底にある質問は本当に - 出力反復子アダプターまたは使用できるネイティブ配列用のカルマの何かが既にありますか?
boost - ブースト カルマ セマンティック アクション コール マップ
値を std::string にマップする必要があります (次のマップと BOOST_FUSION_ADAPT_STRUCT を使用)
次のコードを使用して、出力を生成します。
しかし、それはコンパイルされません。
そして、次のようなヘッダーを書く方法はありますか:
c++ - Boost Karma オブジェクト メソッド呼び出し
私の質問とseheからの回答の延長として、出力の生成中に関数を呼び出したいと思います。
メソッドを追加しbool isRoby()
、emp ルールを変更しました。
Phoenix Lazyを見つけましたが、一致しないようです。
c++ - スピリットカルマのリアルジェネレーターのパフォーマンスを向上させる
ブースト スピリット カルマ ジェネレーターのパフォーマンスをチェックしていたとき、実数のポリシーを使用したときにパフォーマンスが低下して少し驚きました。Coliru
でのライブ
コードはブースト スピリットから取得され、いくつかのテスト機能が追加されました。Coliru の例は、使用されているタイマーを置き換えます。Coliru は実行時間の長いプログラムを中止するため、すべてのテストが終了しない場合があることに注意してください。
ご覧のとおり、ポリシーを使用するとパフォーマンスが 2 ~ 3 倍 (coliru では x10) 低下します。期待される動作ですか?
私の数字:
sprintf: 0.367
iostreams: 0.818
format: 1.036
karma: 0.087
(string): 0.152
karma (string) with policy: 0.396
karma (rule): 0.12
karma (direct): 0.083
karma (direct) string: 0.089
karma (direct) string withポリシー: 0.278
x64 VC14 で構築
c++ - Boost.Spirit を使用して多目的数学的 (AST) パターン マッチングと操作を行うことはできますか?
私は C++ でのパターン マッチングを調べていましたが、問題に対する機能的なアプローチであると思われるMach7や、最も一般的な分母であると思われるより一般的なVisitor Patternなどの中で、すべてを行うことができますが、優れているのは特定のケース。
数式を操作したいと思います (単純化、評価、および微分方程式の解法や積分などの計算を記号的に実行します)。はい、最終的にはコンピューター代数システムを目指しています。入力については、Boost.Spirit(X3)を使用して何らかの形式の入力を解析することを検討しています(現在、基本的なLaTeXサポートを取得して遊んでいますが、インデックスと下/上付きが問題です...)。
次に、 Boost.Spiritを使用して入力「テキスト」を解析するだけでなく、ライブラリの非パーサー コンポーネントを使用して、結果の AST に対して実際に数学的操作を実行する というクレイジーなアイデアに行き着きました。これは、私の目標に一致するパターンに十分な汎用性がありますか、それとも他のソリューションを検討する必要がありますか? 他の CAS が内部でどのように機能するかについてのドキュメントを見つけようとしましたが、Maximaのようなものの間違いなく素晴らしいコードを調べるまでは、数学的 AST の非常に単純な実装に関する情報を見つけることができないようです。そのため、Boost.Spirit が最終的に必要になることを実行できるかどうかを判断するための入力情報はほとんどありません。
c++ - ブーストカルマ: transform_attribute へのこの暗黙の呼び出しはどのように機能しますか? (またはしませんか?)
私は正常に動作するように見える次のコードを持っています ( boost karma を使用して解析された変数を再利用するセマンティックアクションに基づいています)。
いくつかのことを理解したいと思います:
karma::attr_cast
どこでも使用する必要がないのはなぜですか? 私のstart
ルールはのベクトルですstd::shared_ptr
が、elt
ルールは実際のオブジェクト const 参照で機能します。私は最初に試してみattr_cast
ましたが、どこにも行きませんでした.transform_attribute
カスタムを完全にコメントアウトしてもコンパイルされるのはなぜですか? デフォルトstd::shared_ptr<T>
->T&
transform_attribute は提供されていますか? あまり見つけられませんでしたが、適切な場所を探していないのでしょうか?transform_attribute
上記のようにcustom をコメントアウトすると、コードはコンパイルされたままになりますが、実行時にメモリが破損していることは明らかです。karma::string
ゴミを生成します。ある意味では、カルマに私shared_ptr
からオブジェクトに到達する方法さえ教えていないので、何か面白いことが起こっているに違いないことを理解できます。実際のエラー/バグをコンパイルするという事実ですか?
お時間をいただき、ありがとうございました。