問題タブ [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++ - ブーストスピリットx3を使用してカンマ区切りの0以上のリストを解析する
0 or more list
ブーストスピリットx3で区切られたコンマを解析する必要があることがよくあります。%-operator
を解析して1 or more list
を に変換するを知っていstd::vector
ます。が必要なときは、0 or more list
現在 this のようにしていますが-(element_parser % separator)
、これは私が望んでいることboost::optional<std::vector>
ではありませんが、 a に解析されます。0 or more list
では、ブースト スピリット x3 を使用してコンマをプレーンな std::vector に分解するパーサーを作成するにはどうすればよいでしょうか。
c++ - ブーストスピリット x3 (A | A) 属性タイプはバリアントですAの代わりに
を使用して、2 つの可能な文字のいずれかを取る単純なパーサーを作成しようとしていますboost::spirit::x3
。問題はx3::char_('#') | x3::char_('.')
、 type の属性を持っているように見えることですboost::variant<char, ?>
。これは、 で使用する必要があることを意味しますboost::get<char>
が、_attr
に直接変換できる必要がありますchar
。
http://ciere.com/cppnow15/x3_docs/spirit/quick_reference/compound_attribute_rules.html、それは言うA | A -> A
のコメントアウトされたバージョンmapChars
が使用されている場合、 に変換できますchar
が、 . には変換できません|
。
私はブースト バージョン 1.63.0 と Linux を使用しています。コードは g++ と clang++ の両方でコンパイルに失敗します-std=c++14
。
私は何を間違っていますか?
c++ - 欠落しているオプションの boost::spirit::x3 ルールの属性値
いくつかのオプションパーツを備えた単純なパーサーがあります。また、カスタム構造体を属性として使用すると、省略された値がゼロで初期化されることに気付きました。
たとえば、解析f 1//100 2//200 3//300
するf
と次のようになります。1/0/100 2/0/200 3/0/300
この動作に依存できますか? それとも、将来のバージョンで壊れる可能性があるのは単なる偶然ですか?
c++ - 精神 x3 ルールは、シーケンス パーサーでタイプ boost::iterator_range の属性を合成できません
簡単なパーサー テストLive On Coliruでは、
パーサー
type の属性を合成することになっていますboost::iterator_range<Iterator>
。しかし、それはコンパイルできません。2 つの のいずれかを削除すると、x3::lit('x')
コンパイルされます。Live on Coliru でも、同じコードが qi でコンパイルされます。