問題タブ [boost-spirit]
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++ - ブーストスピリットASTのヘルプ
大学の研究活動の一環として、単純な B マシン置換を分析するための小さなツールを作成しています。コードは mySubst := var1 + var2 の形式のテスト入力を正常に解析します。しかし、「このアプリケーションは、異常な方法でランタイムを終了するように要求しました。」というポップアップ エラー メッセージが表示されます。コマンド プロンプト ウィンドウに、「アサーション失敗メッセージ」が表示されます。主なプログラムを以下に示します。
BMachineTreeGrammar.hpp ファイルで定義されている文法を以下に示します。
プログラムの実行時に得られる出力は次のとおりです。
この問題を解決するための助けに感謝します。
c++ - C++ boost::lambda::ret はフェニックスで同等
ret<T>
ブースト ラムダにより、テンプレートを使用して推定された戻り値の型を上書きできます。フェニックスで同等のものを検索しようとしましたが、見つかりませんでした。
フェニックスに相当するものはありますか?私は自分で交換品を作る方法を知っていますが、むしろしたくありません。ありがとうございました
c++ - Boost.Spirit.Lex の Phoenix プレースホルダー _val のエラー :(
私はBoost.Spirit.Lexの初心者です。単純なレクサーのセマンティクス アクションで lex::_val を使用しようとするたびに、いくつかの奇妙なエラーが表示されます。
と
このコードは、コンパイル中に 167 行目の Boost ヘッダー 'boost/spirit/home/lex/argument.hpp' でエラーを引き起こします。
return: 'const boost::variant' を 'boost::variant &' に変換できません
lex::_val を使用しない場合、プログラムはエラーなしでコンパイルされます。
明らかに、私は _val を間違った方法で使用していますが、これを正しく行う方法がわかりません。助けてください!:)
PSそして私のひどい英語でごめんなさい…</p>
c++ - ブーストスピリット文法のビルドエラー (ブースト 1.43 および g++ 4.4.1)
小さな精神/気文法をコンパイルするのに問題があります。ビルド スタック トレースは、私には意味をなさないほど醜いです (そこに気づくことができるいくつかの assertion_failed にもかかわらず、それは多くの情報をもたらしませんでした)
入力文法ヘッダー:
inputGrammar.h
テスト ビルド プログラム: ビルドが qi::phrase_parse で失敗したようです。boost 1.43 と g++ 4.4.1 を使用しています。
最後に、ビルド エラーは次のとおりです。
c++ - ブーストスピリット文法(ブースト1.43およびg ++ 4.4.1)パートIIでのビルドエラー
小さなspirit/qi文法をコンパイルするのに問題があります。Boost1.43とg++4.4.1を使用しています。
入力文法ヘッダー:ビルドエラーは「命令」ルールの定義を指しているようです。おそらくそれは「[sp :: _ val = sp :: _ 1]」である可能性がありますが、これは多かれ少なかれ基づいています精神文書チュートリアルがxmlノードパーサーで何をしているのかについて
inputGrammar.h
テストビルドプログラム:
最後に、ビルドエラーは次のとおりです。
(完全なエラートレースは、stackoverflowの質問で許可されているサイズの20倍であるため、完全なバージョンをhttp://codepad.org/Q74IVCUcに投稿しました)
...より多くのエラーがありますが、30kの制限に合うように切り捨てる必要がありました
c++ - スピリットセマンティックアクションパラメータをブーストする
ブーストスピリットセマンティックアクションに関するこの記事では、
実際には、さらに2つの引数が渡されます。パーサーコンテキストとブール値の「ヒット」パラメーターへの参照です。パーサーコンテキストは、セマンティックアクションがルールの右側のどこかにアタッチされている場合にのみ意味があります。これについては、まもなく詳細を確認します。セマンティックアクション内でブール値をfalseに設定すると、遡及的に一致が無効になり、パーサーが失敗します。
すべて問題ありませんが、他のパラメーター(パーサーコンテキストとヒットブール値)を使用するセマンティックアクションとして関数オブジェクトを渡す例を見つけようとしましたが、見つかりませんでした。フェニックスのブードゥーをかろうじて理解することができないので、通常の関数または関数オブジェクトを使用した例を見てみたいと思います
c++ - Boost Spirit で文法を解析する
次のようなツリー式のような C 関数を解析しようとしています ( Spirit Parser Frameworkを使用):
このために、次の文法で 3 つの規則を使用しようとしています。
このタグ ルールは、式で使用される識別子 (「関数」名) を取得しようとするだけであることに注意してください。また、ほとんどの例のように、タグ ルールの署名がExpressionAST
ではなく を返すことにも注意してください。std::string
このようにしたい理由は、実際には非常に単純です。バリアントを使用するのが嫌いで、可能であれば使用しないようにします。ケーキを持っておいて、それを食べるのもいいと思います。
コマンドは、タグ (現在のノードの名前、AST ノードの最初の文字列フィールド) と括弧で囲まれた可変数の引数で開始する必要があり、各引数はタグ自体または別のコマンドにすることができます。
ただし、この例はまったく機能しません。それはすべてコンパイルされますが、実行時にすべてのテスト文字列の解析に失敗します。そして、私を本当に悩ませているのは、少なくとも単語の伝統的な意味では、上記のコードを実際にデバッグできないため、修正方法がわからないことです。基本的に、上記のコードを修正できる唯一の方法は、自分が間違っていることを知ることです。
したがって、問題は、上記のコードの何が問題なのかわからないということです。上記の文法をどのように定義しますか?
ExpressionAST
私が使用しているタイプは次のとおりです。
c++ - ブーストスピリット文法(ブースト1.43およびg ++ 4.4.1)パートIIIでのビルドエラー
Ok
文法を作成しようとしていますが、現在は次のようになっています。
ビルドエラーの一部は次のとおりです。基本的には、オブジェクトの順序を切り替えるphoenix :: bindのように、std :: vector <MockExpressionNode>を使用してMockExpressionNode&(おそらくpush_back引数)を初期化しようとしていることを示しています。パラメータ引数。
この元の形式を試した後でのみ、phoenix::bindをstd::vector::push_backに試しました。
代わりに、std :: vector :: push_back:に一致する関数がないことについて、このエラーが発生しました(最後の部分のみ)。
boost - カスタム属性解析によるブーストスピリットルール
テキストをこれらの構造体のベクトルに解析する Boost Spirit 文法を書いています。
この文法には次のような規則があります。
ただし、 の実際の文法pairSequence
は次のとおりです。
Pair
この文法でwitha
を double にb
等しく、なんらかの定数に等しくするようにしたいと考えています。私はこのようなことをしたい:
もちろん、上記はコンパイルされません。にコンストラクターを追加しようとしましたPair
が、まだコンパイル エラーが発生します ( 'Pair::Pair(const boost::phoenix::actor >&, double)' の呼び出しに一致する関数がありません)。