問題タブ [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 1.44 を使用しています。Spirit パーサーは数値の解析には適していますが、文字列の解析には注意が必要です。複数の区切り文字 ',' ,';' を使用して分割する文字列を解析しようとしています。また ' '。これを行うと、数値に対してうまく機能します(vect = vector < double >):
ベクトル、スペース);
ただし、vect = vector< string > を使用して文字列の文法を変更すると、
次のエラーが表示されます。
エラーを、文字列ではなく一連の文字として解釈される文法構文の最初の +char_ に絞り込みました。この問題を解決する方法はありますか?
ありがとう
c++ - スピリットは、単一要素の構造体 (または融合シーケンス) に属性を割り当てることができません
私の目標はqi::grammar
、属性を返すことです。ただし、これを行うのは非常に困難spirit::lexer
です。
以下の指定された文法で、 で呼び出した場合、 は解析された語彙素の内容を持っていると予想されますspirit::qi::parse(begin, end, grammar, output);
。struct ident output
エラーは主に次の行から流れているようです。start %= lexer.identifier;
システムノート
- ブースト 1.47.0
- Mac OS X 10.7.2
- clang++ または g++ (以下に示すエラーは clang++ によるものです)
コンパイル コマンド
ソースコード
2 件のエラーが報告されました
boost-spirit - Boost Spirit を持つ AST で属性が 1 つしかないクラスを使用するにはどうすればよいですか?
Boost Spirit を使用して、ファイルを解析して AST に変換したいと考えています。
私の AST のルートは、属性が 1 つだけのクラスです。
単一のルールを使用して解析する場合:
コンパイルされませんが、Program に単一の文字列名を追加すると、うまく機能します。ベクトルをルートとして使用することもできますが、Program クラスにいくつかのメソッドを追加したいので、クラスを使用したいと考えています。
編集 :
プログラムを中かっこで囲むと、うまく機能します。
コンパイルして正常に動作しますが、:
コンパイルされません...
このような単純なルールを使用することを妨げるブーストスピリットの何かがありますか?
c++ - 精霊文法マッチノイズ入力をブースト
ノイズの多い入力を解析しようとしています。理想的には、スタンザがルールに一致するかどうかを確認し、必要なデータを取得して残りを破棄することができます。
欲しいデータは以下の通りです。
イベントが新しい状態の場合に確認したい。
そして、チャンネルの状態が必要です。残りは(まだ)気にしないので、無視したいです。柔軟性があり、重要なものの間の古いがらくたを受け入れたいです。本当に、この行を無視するとは言いたくありませんが、無視しますイベントと、値をキャプチャするチャネル状態の終わりの間のすべて。
これまでのところ、私は持っています:
しかし、これは何らかの理由で機能しません。これを行うと、常に false が返されます。
編集: ブースト バージョン 1.42 コンパイラ g++ 4.4 スピリット 0x2020
c++ - ブーストスピリット:「セマンティックアクションは悪」ですか?
このプレゼンテーションを読んで見る
: http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/
セマンティック アクションを使用します。
私はすでにそのようなことを感じたことを認めなければなりません: セマンティックアクションを伴う文法は実際にはちょっと醜く見えます. そして、それらを拡張/変更する必要があるときは、セマンティックアクションを正確に使用した多くの「マイクロ管理」が必要でした. プレゼンテーションで示されている属性文法を使用したアプローチは、はるかにエレガントで有望なようです。
そこでお聞きしたいのですが、これは「公式」ポイントですか?属性文法の扱い方や、セマンティック アクションを避ける方法をもっと詳しく学ぶ必要がありますか? もしそうなら -- 私は = そのようなアプローチを示すいくつかの基本的な (おそらく些細な) 例を求めたいです -- LISP インタプリタは複雑すぎて私には理解できません...
c++ - boost::spiritパーサーからASTを取得しています
boost :: spiritのチュートリアルを読んだ後、パーサーコンビネーターの構文のおかげでとても気に入りました。パーサーの作成はとても簡単です。
残念ながら、チュートリアルは、パーサーから複雑なデータ構造を取得するという点でそれほど正確ではありませんでした。万華鏡ASTに行こうとしています。
とにかく、ここに私のASTコードがあります:
BOOST_FUSION_ADAPT_STRUCT
パーツは省略しましたが、あります。
そして、これは私の式パーサーです。
私が抱えている問題は、結果のに問題があるように見えることast::expression
です。コンパイルされたものは、200行を超える複雑なテンプレートエラーをスローします。情報をルールから外そうとしたのでbinop
はないかと思いますが、よくわかりません。
誰か助けてもらえますか?
c++ - Boost.Spiritを使用してHTMLから特定のタグ/属性を抽出する
そのため、多くのコードで正規表現の使用を置き換えるために、Boost.Spiritについて少し学びました。主な理由は純粋な速度です。Boost.Spiritは、いくつかの比較的単純なタスクでPCREよりも最大50倍高速であることがわかりました。
私のアプリの1つで大きなボトルネックになっているのは、HTMLを取得し、すべての「img」タグを見つけて、「src」属性を抽出することです。
これは私の現在の正規表現です:
私はSpiritで何かを機能させるためにそれをいじってみましたが、これまでのところ私は空っぽになっています。この正規表現と同じことを達成する一連のSpiritルールを作成する方法に関するヒントは素晴らしいでしょう。
c++ - 関数呼び出しが true に戻った場合、boost::spirit::qi の入力の一部をスキップします
私は最近、boost::spirit::qi をいじっていて、解析する独自の (非常に単純な) スクリプト言語を書こうとしています。スクリプトの if ステートメントに到達するときに問題が発生しました。関数呼び出しが true に戻った場合、入力の一部をスキップするパーサーが必要です。
たとえば、変数名 (a-zA-Z_) を受け入れるように定義されたトークンと、">" または "<" を受け入れるように設定された比較があります。コードの例を以下に示します。
関数compareがtrueに戻った場合、次のセクションをスキップするにはどうすればよいですか?
c++ - boost::spirit のクラス v/s 構造体
boost::spirit のドキュメントでは、文法は struct を使用して定義されています。例えば、
クラスを使用して記述できるかどうか疑問に思っています(そうでない場合は、なぜですか?)。私はこれをやっています。
ヘッダファイル内
そしてソースファイルで
名前空間は、typedef を使用して短縮されています。上記の方法を使用して書いていますが、コンパイラーが理解するのが難しいエラーが多すぎます。それは基本的に大丈夫ですか、それとも私は何か奇妙なことをしていますか?
誰かが構造体の代わりにクラスを使って文法を書いているコードを教えてもらえますか?
アップデート :
現在リンクできません。undefined reference to
dimacs_grammar<__gnu_cxx::__normal_iterator, std::allocator > > >::my_grammar()`と書かれています。問題は、構造体を使用しているときに書いていたことです
これと同等のクラス宣言と定義を書く方法がわかりませんか?
c++ - 文法に qi::symbols を追加する方法?
Boost.Spirit (V. 2.5) ライブラリを使用してミニ電卓を作成しようとしています。実装したい機能: - 基本的な微積分 (+、-、/、*) が機能する - 一部の関数 (min、max など) も機能する - double 変数の宣言/代入、および問題がある... 「[vars.add]」を追加すると、コンパイル エラーが発生します (テンプレート パラメータがあいまいです)。「add(char_(_1)」、「add(_1)」、...を試しましたが、何も機能していないようです。明らかに何かが欠けています(実際には何かを理解していません)。私に最も感謝しています!
ソースは次のとおりです。
私は次のようなことをしたいと思います: