問題タブ [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.

0 投票する
1 に答える
554 参照

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 に分解するパーサーを作成するにはどうすればよいでしょうか。

0 投票する
2 に答える
282 参照

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

私は何を間違っていますか?

0 投票する
0 に答える
82 参照

c++ - 欠落しているオプションの boost::spirit::x3 ルールの属性値

いくつかのオプションパーツを備えた単純なパーサーがあります。また、カスタム構造体を属性として使用すると、省略された値がゼロで初期化されることに気付きました。

たとえば、解析f 1//100 2//200 3//300するfと次のようになります。1/0/100 2/0/200 3/0/300

ワンドボックスのデモ

この動作に依存できますか? それとも、将来のバージョンで壊れる可能性があるのは単なる偶然ですか?

0 投票する
1 に答える
213 参照

c++ - 精神 x3 ルールは、シーケンス パーサーでタイプ boost::iterator_range の属性を合成できません

簡単なパーサー テストLive On Coliruでは、

パーサー

type の属性を合成することになっていますboost::iterator_range<Iterator>。しかし、それはコンパイルできません。2 つの のいずれかを削除すると、x3::lit('x')コンパイルされます。Live on Coliru でも、同じコードが qi でコンパイルされます。