問題タブ [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++ - Boost Spirit char パーサー
コードサンプルは次のとおりです。
これは正しく印刷され==== (1 A)
ますか?しかし、それは出力==== (1 )
するので、文字をスキップし'A'
ます。
ここで何が間違っていますか?
c++ - Boost.Spirit、xml解析を拡張する方法は?
Boost.Spiritを使用してxml解析を拡張し、xml属性の解析を追加したいと思います。
ここにライブラリからの例と私からのいくつかの変更があります:
これを試しましたが、「宣言されていない識別子'eps'の使用」というエラーでコンパイルされません。
誰かがそれを行う方法を知っていますか?xml属性を解析する機能を追加するにはどうすればよいですか?
c++ - Boost Spirit Ruleの代入演算子
ここで質問するのは初めてです。これを機能させるには、すでに多くの時間と調査が必要でしたが、できません。あなたが私を助けてくれることを本当に願っています。私は Spirit を使用する初心者です。すべての用語を完全には理解していません。ただし、大量の記事や投稿を読んだ後でも、何が欠けているのかわかりません。
したがって、ヘッダー ファイルに次の構造体とクラスがあります。
次に、.cpp ファイルに次のものがあります。
parse()
メソッドにコメントされていないコードは機能しません。Access Violation
パーサーがqg_string
ルールに到達するとすぐにエラーが発生します。ただし、コメントされているコードは完全に機能します。明らかな違いを除いて、私にはまったく同じに見えます。たぶん、私は非常に明白な何かを見逃していますが、それを見つけることができません。
すべてをローカル変数として使用した場合にコードが機能することを確認するのに、すでに多くの時間がかかりました。そして、まだ問題を見つけることができません。
よろしくお願いします。投稿に誤りがありましたら申し訳ありません(午前5時)。
c++ - boost::spirit::qi 文法を別の文法定義で再利用することは可能ですか?
文法を別の文法で再利用することは可能boost::spirit:qi
ですか (たとえば規則として)?
たとえば、テキスト行を住所を保持する構造に解析する文法を定義するとします。
その文法を他の 2 つの文法で再利用したい場合があります。たとえば、ファイルに格納されているアドレスのベクトルを解析する場合などです。別の再利用は、フィールドの 1 つがこの番地構造である、より複雑な構造である可能性があります。
文法全体を 1 か所で定義する代わりに、再利用可能な小さなブロックに分割することを考えています。それらが 1 つのヘッダー ファイル内にあれば問題ありません。私のデータ構造は少し複雑です (struct 内のいくつかのフィールドと他の構造のリストなど) ので、1 つの文法にまとめたくありません。
boost::spirit::qi
このように文法を再利用することは可能ですか?
編集:考えてみるとqi::rule
、名前空間で s を定義してから、必要なルールから文法を組み立てるだけですか?
c++ - boost::spirit でバイナリを解析するときに属性タイプを変更する
組み込みのパーサー ( 、など)boost::spirit::qi
で構成されるストリームを解析するために to を正常に使用しています。ただし、これらのカテゴリのいずれにも適切に分類されないデータを解析する必要があります。たとえば、16.16 の固定小数点 2 進数を double に変換したいと考えています。たとえば、a に続いて aを解析します (固定小数点数から解析します)。byte_
little_word
little_word << little_16p16
uint16_t
double
私は最初にセマンティック アクションを考えましたが、パーサーに関連付けられた属性の型を変更しないため、適切ではない (と思います...)。また、従業員の構造体解析の例をこの状況に適応させる方法もわかりません。これは、によって提供される暗黙のキャストに依存しているためboost::fusion
です。大きな問題を引き起こさずuint32_t
に toからの暗黙的なキャストを定義することは明らかにできないため、このアプローチはここでは機能しません。double
私の傾向は、組み込みのバイナリ プリミティブ パーサーをラップするか、ターミナル パーサーをゼロから作成するために非ターミナルを追加する必要があるということです。のソースを見た後でも、qi_binary.hpp
どうすればよいかわかりません。誰かがサンプルコードを提供したり、関連する参考文献を教えてくれたりできますか?
c++ - boost :: bindを使用すると、boost :: spirit :: qiセマンティックアクションが2つの引数で機能しないのはなぜですか?
ブーストセマンティックアクションを使用しようとしました。私の場合boost::bind
、最も簡単な解決策でした。最初の例はうまく機能しています。ここでは、セマンティックアクションで1つの引数のみを使用しています。
コードを拡張しようとしました。2番目のケースでは、バインドされた関数に2つの引数を渡したいのですが、コンパイラーはこのコードをコンパイルしません。何が失敗しますか?例は見つかりませんでした。2番目のコードはここにあります:
c++ - BOOST_PHOENIX_ARG_LIMIT を定義しても効果なし
セマンティック アクションのboost::Spirit::Qの文法では、多くの (10 以上の) 属性プレースホルダーが必要です。ドキュメントで推奨されているように、BOOST_PHOENIX_ARG_LIMIT変数を定義しようとしましたが、効果はありませんでした。誰かがそれを作る方法を知っているなら、教えてください。ブーストのバージョンは 1.48.0、コンパイラはMinGW GCC 4.4.0です。
c++ - boost:spirit::qiパーサーは複数の文法とphoenix::constructを使用します
別のQi文法を利用するQi文法を書くのに問題があります。ここでも同様の質問がありましたが、phoenix ::constructを使用しようとしていて、コンパイルが困難です。
これが私がやろうとしていることの簡略版です。この例はおそらくを使用して簡単に実行できることを理解していますBOOST_FUSION_ADAPT_STRUCT
が、実際のコードはより複雑なオブジェクトタイプを扱っているため、セマンティックアクションを使用してこれを実現する方法があることを期待しています。
Spiritのドキュメントに示されているphrase_parseアプローチを使用してComplexを解析することはできますが、Complex文法を他のパーサー(たとえば、式パーサー)に簡単に統合できるようにしたいと思います。他のルール/文法で効果的に使用しながら、RealオブジェクトとComplexオブジェクトを別個のエンティティとして解析できるようにするために欠けているものはありますか?
c++ - ブースト::精神順列
次のテキストを解析する必要があります
flex や bison を扱う必要がなかったので、boost:spirit を選択しました。
私はついにこの文法を持っていました
問題は、中括弧内の部分が交換される可能性さえあることです。順列演算子^について読んだことがありますが、オペランドの少なくとも 1 つが任意の順序で一致した場合に一致することを読みました。すべての文法が任意の順序で 1 回だけ一致する場合にのみ、文法が一致する必要があります。
誰か助けてくれませんか?
c++ - boost::spirit で引用符付き文字列を解析する
一部の文字列が引用符で囲まれていない、「引用されている」、または「引用されている」可能性がある文を解析したいと思います。以下のコードはほとんど機能しますが、閉じ引用符に一致しません。これはqq参照のせいだと思います。変更はコード内でコメント化されます。変更により、"quoted" または "quoted" も解析され、元の問題が終了引用符にあることを示すのに役立ちます。コードには、正確な文法も記述されています。
完全に明確にするために:引用符で囲まれていない文字列が解析されます。のような引用符で囲まれた文字列'hello'
は、開始引用符'
、すべての文字 hello
を解析しますが、最後の引用符の解析に失敗します'
。
ブーストチュートリアルの開始/終了タグの一致に似た別の試みをしましたが、成功しませんでした。
ボーナス クレジット: ローカル データ メンバーを回避するソリューション (char qq
上記の例など) が推奨されますが、実用的な観点から、機能するものは何でも使用します!