問題タブ [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++ - コンパイル時に既知の N で std::tuple に繰り返す
コンパイル時に指定した要素数を解析したい。repeat()[]
ディレクティブを試しました。次のコードは私のケースを示しています。
コンパイラ エラー メッセージ:
私がそれを書き出すとうまくいきます:
しかし、多数の要素があると混乱します。
「 repeat」ディレクティブを使用して文法を短縮する方法はありますか?
c++ - Spirit X3 でインデントベースの文法を解析する
インデントベースの言語 (python、yaml、coffee など) を解析する必要があり、spirit X3 の使用を検討しています。
インデント/デデント トークンを生成するために、Spirit Lex やその他のレクサー ライブラリを使用できることはわかっています。
X3 は、追加のライブラリを使用せずにこれを達成する別の方法を提供していますか?
同様の言語の X3 文法は既に実装されていますか?
考えられる他の解決策を探しているときに、このブログ投稿とメーリング リストの関連スレッドを見つけました。
そのままSpirit.Qiを使用してpythonを解析することは可能ですが、解析レベルで低レベルのインデント処理を混在させると面倒に見えます。
これはSpirit Qiに関するものですが、次のとおりです。
- lexなしでどのように実行できるかについての具体的な答えは提供していません。
- Qi や X3 にはあまり詳しくありませんが、ドキュメントに基づいて、Lex なしでこの機能を実装する方法がわかりません。
私は必ずしも完全な解決策を探しているわけではなく、正しい方向へのいくつかの指針を探しているだけです。
c++ - スピリットX3で条件付き期待値を追加するにはどうすればよいですか
現在、X3 の文法に期待値を追加しています。今、私はこのようなルールに出くわしました。
このルールに条件付き期待値を追加する方法を考えています。「"::" がある場合はid_string
" または " が続く場合は ".
が続く必要があるid_string
」などのように。そのようなルールでそのような動作を実現するにはどうすればよいですか?
c++ - この Boost.Spirit x3 ルールが山かっこでは正しく解析されるのに、引用符では正しく解析されないのはなぜですか?
"my/file.hpp"
以下のプログラムは、やなどの C++ ヘッダー インクルード文字列を解析しようとします<my/file.hpp>
。理由がわかりませんが、私のコードは"
ヘッダーを解析できません。これはスピリットのバグですか、それとも明らかな何かが欠けていますか?
c++ - ネストされたマップへの属性の伝播
次を解析したい (最初の列は識別子、2 番目の列 (日付) は識別子ごとに一意であり、その後にフロートのタプルが続く):
私の好きな構造は
属性の伝播を伴う有効な文法を作成することは可能ですか (セマンティック アクションおよび/または後でこの構造にコピーする必要はありません) ?
構文解析は次のようになります。
c++ - コンテナーを使用して単一の値を ast ノードに解析する
私の問題は次のとおりです。次のように定義されたastノードがあります。
そして、構造体に解析するためのこのようなパーサーがあります。これは正常に機能します。
ここで、パーサーが括弧なしで も解析することを達成したいと考えてい"bar"
ますが、それが単一のバーである場合に限ります。私はこのようにそれをやろうとしました:
しかし、これはコンパイル時エラーを引き起こしx3::string("bar")
ますstd::vector<std::string>
。私の質問は、x3::string("bar")
パーサー (および文字列を返す他のすべてのパーサー) がベクトルに解析することをどのように達成できますか?
c++ - boost::spirit::x3 キー値パーサーのパフォーマンスを改善する方法
を使用してキーと値のペア (HTTP ヘッダーに似ています) を解析していますboost::spirit::x3
。パフォーマンスを私の手書きパーサーと比較すると、boost::spirit::x3
それよりも約 10% 遅くなります。
ブースト 1.61 と GCC 6.1 を使用しています。
boost::spirit::x3
ベースのパーサーのパフォーマンスを改善するにはどうすればよいですか?
c++ - boost::spirit::x3 を使用して std::string から boost::string_view に解析する
私の以前の質問では、ディレクティブを使用してboost::spirit::x3
解析することでパーサーのパフォーマンスを改善できることが示唆されました。boost::string_view
raw
ただし、コンパイルするのに苦労しています。これは私が見つけたものです:
以前は、ディレクティブを処理する
x3
ために特殊化する必要がありましたassign_to_attribute_from_iterators
(たとえば、この SO の回答を参照)。raw
x3
move_to
代わりに free 関数を使用するようになりました (たとえば、この SO answerを参照してください)。
したがって、move_to
から解析すると機能するオーバーロードを追加しましたchar*
:
ただし、コンパイルされません。
1)を使用して解析する場合std::string::const_iterator
いずれかのコンストラクターは、または をboost::string_view
想定しています。const char*
std::string&
boost::string_view
fromをインスタンス化するにはどうすればよいstd::string::const_iterator
ですか?
2)オーバーロードboost/spirit/home/x3.hpp
の前に含まれている場合move_to
オーバーロードが選択されないのはなぜですか? で定義されているものよりも優れたオーバーロードではありませんboost/spirit/home/x3/support/traits/move_to.hpp
か? 含める順序に関係なく、オーバーロードが選択されていることを確認するにはどうすればよいですか?