問題タブ [boost-spirit-x3]
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++ - ブーストスピリット×3で数字を文字列にパースする
精神x3で色々な数字を文字列にパースしたいと思います。私はこのようにしようとしましたが、うまくいきません。
x3::int32 パーサーを使用して Int を文字列に解析するにはどうすればよいですか?
c++ - 貪欲な rd を回避する方法は?
「-」を含むことができるが、それで開始または終了しない文字列を解析したい。
私はこのパーサーが動作することを期待していました:
しかし、私のテスト入力「何か」では、「そう」のみを解析し、残りは食べません。
問題は、中央のビット*(alnum | char_('-'))
が最後まで食い尽くすことです (最後の文字を含むため、オプションのブラケット全体が失敗します)。
私が知りたいのは、どうすればそれを回避してこのパーサーを作成できるかということです。
ライブでご覧ください: http://coliru.stacked-crooked.com/a/833cc2aac7ba5e27
c++ - スピリットX3からスタート
Spirit X3 を使い始めたばかりで、最初のテストに関して少し質問があります。この関数が「false」を返す理由を知っていますか?
問題が文法の書き方に関連しているのを見てきました。これに置き換えると、「true」が返されます
Boost 1.61.0に含まれるSpiritバージョンを使用しています。
前もって感謝します、
セン
c++ - コンパイラの違い: x3::variant を拡張するには、コピー コンストラクター、コピー代入演算子、および gcc を使用するデフォルト コンストラクターの定義が必要ですが、clang は必要ありません。
x3 のドキュメント ( http://ciere.com/cppnow15/x3_docs/spirit/tutorials/rexpr.html )の例を適用して、単純なバイナリ プレフィックス表記の文法を解析したところ、コピー コンを定義する必要があることがわかりました。のコンストラクbase_type
ターと代入演算子をusing
. 次に、 clang 3.8.1 で期待どおりにコンパイルされるという事実に遭遇しました。コードの重要な部分を投稿します。エラーを示す AST プリンターを使用したg++ の完全な例を次に示します。
g++ は、move コンストラクターまたは move 代入演算子が定義されているため、コピー コンが削除されたと考えているようですが、なぜ clang でコンパイルされるのでしょうか。どのコンパイラが正しいですか?
c++ - 2 つの整数のシーケンスを `std::pair に一致させる`
Boost.Sprit x3を使用して、2 つの整数のシーケンスをstd::pair<int, int>
. ドキュメントから判断すると、次のコードがコンパイルされるはずです。
ただし、最初の整数にのみ一致します。に変更std::pair<int, int> result;
しint result;
てから print すると、出力としてresult
取得1
されます。
なぜそれが起こっているのですか?2 つの整数int_ >> int_
に一致する(そして属性として設定する)パーサーを定義する正しい方法ではありませんか?
c++ - 期待演算子を使用すると、spirit X3 を使用してより高速なパーサーを取得できますか?
X3 の精神では、次のようなパーサーを構築できます。
Number
文字列の後に int が来て、文字列の後String
に常に続くことがわかっている場合は、 を使用して、数字だけが来るなど>
と言うことができます。Number
私にとっての違いは、パーサーが入力の解析に失敗した場合に例外がスローされることです。
ここで私の質問は、可能な限り>
演算子よりも演算子を使用する必要があるかどうかです。>>
生成されるパーサーは、演算子>
のみを使用するパーサーよりも高速ですか?>>
boost-spirit-x3 - パーサーは失敗せず、スキッパーはスキップしません
文法に問題があります。日付が解析される理由と、語彙素パーサーが必要ない理由がわかりません。
完全な例
出力:
語彙素パーサーを使用しない場合:
ルール term_ を次のように変更しました:
スキッパーは lit() の後にスキップしようとするだろうと思いましたか?
c++ - 正確にはいつ期待演算子を使用できますか?
ブーストスピリットx3のパーサーに取り組んでいます。文法を終了すると、パーサーは期待どおりに解析します。エラー処理を追加したいので、文法に期待値を追加する必要があります。>
私の質問は、「フォローされた」演算子の代わりに期待演算子をいつ正確に使用できるかということ>>
です。文法の別の部分で決して起こらない場合のa > b
ようにのみ使用できますか?a >> b