問題タブ [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 に答える
676 参照

c++ - コンパイル時に既知の N で std::tuple に繰り返す

コンパイル時に指定した要素数を解析したい。repeat()[]ディレクティブを試しました。次のコードは私のケースを示しています。

コンパイラ エラー メッセージ:

私がそれを書き出すとうまくいきます:

しかし、多数の要素があると混乱します。

「 repeat」ディレクティブを使用して文法を短縮する方法はありますか?

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

c++ - Spirit X3 でインデントベースの文法を解析する

インデントベースの言語 (python、yaml、coffee など) を解析する必要があり、spirit X3 の使用を検討しています。

インデント/デデント トークンを生成するために、Spirit Lex やその他のレクサー ライブラリを使用できることはわかっています。

X3 は、追加のライブラリを使用せずにこれを達成する別の方法を提供していますか?

同様の言語の X3 文法は既に実装されていますか?

考えられる他の解決策を探しているときに、このブログ投稿とメーリング リストの関連スレッドを見つけまし

そのままSpirit.Qiを使用してpythonを解析することは可能ですが、解析レベルで低レベルのインデント処理を混在させると面倒に見えます。

これはSpirit Qiに関するものですが、次のとおりです。

  • lexなしでどのように実行できるかについての具体的な答えは提供していません。
  • Qi や X3 にはあまり詳しくありませんが、ドキュメントに基づいて、Lex なしでこの機能を実装する方法がわかりません。

私は必ずしも完全な解決策を探しているわけではなく、正しい方向へのいくつかの指針を探しているだけです。

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

c++ - スピリットX3で条件付き期待値を追加するにはどうすればよいですか

現在、X3 の文法に期待値を追加しています。今、私はこのようなルールに出くわしました。

このルールに条件付き期待値を追加する方法を考えています。「"::" がある場合はid_string" または " が続く場合は ".が続く必要があるid_string」などのように。そのようなルールでそのような動作を実現するにはどうすればよいですか?

0 投票する
3 に答える
189 参照

c++ - この Boost.Spirit x3 ルールが山かっこでは正しく解析されるのに、引用符では正しく解析されないのはなぜですか?

"my/file.hpp"以下のプログラムは、やなどの C++ ヘッダー インクルード文字列を解析しようとします<my/file.hpp>。理由がわかりませんが、私のコードは"ヘッダーを解析できません。これはスピリットのバグですか、それとも明らかな何かが欠けていますか?

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

c++ - ネストされたマップへの属性の伝播

次を解析したい (最初の列は識別子、2 番目の列 (日付) は識別子ごとに一意であり、その後にフロートのタプルが続く):

私の好きな構造は

属性の伝播を伴う有効な文法を作成することは可能ですか (セマンティック アクションおよび/または後でこの構造にコピーする必要はありません) ?

構文解析は次のようになります。

コリルでライブの例が動かない

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

c++ - コンテナーを使用して単一の値を ast ノードに解析する

私の問題は次のとおりです。次のように定義されたastノードがあります。

そして、構造体に解析するためのこのようなパーサーがあります。これは正常に機能します。

ここで、パーサーが括弧なしで も解析することを達成したいと考えてい"bar"ますが、それが単一のバーである場合に限ります。私はこのようにそれをやろうとしました:

しかし、これはコンパイル時エラーを引き起こしx3::string("bar")ますstd::vector<std::string>。私の質問は、x3::string("bar")パーサー (および文字列を返す他のすべてのパーサー) がベクトルに解析することをどのように達成できますか?

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

c++ - boost::spirit::x3 キー値パーサーのパフォーマンスを改善する方法

を使用してキーと値のペア (HTTP ヘッダーに似ています) を解析していますboost::spirit::x3。パフォーマンスを私の手書きパーサーと比較すると、boost::spirit::x3それよりも約 10% 遅くなります。

ブースト 1.61 と GCC 6.1 を使用しています。

boost::spirit::x3ベースのパーサーのパフォーマンスを改善するにはどうすればよいですか?

実際の例

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

c++ - boost::spirit::x3 を使用して std::string から boost::string_view に解析する

の以前の質問では、ディレクティブを使用してboost::spirit::x3解析することでパーサーのパフォーマンスを改善できることが示唆されました。boost::string_viewraw

ただし、コンパイルするのに苦労しています。これは私が見つけたものです:

  • 以前は、ディレクティブを処理するx3ために特殊化する必要がありましたassign_to_attribute_from_iterators(たとえば、この SO の回答を参照)。raw

  • x3move_to代わりに free 関数を使用するようになりました (たとえば、この SO answerを参照してください)。

したがって、move_toから解析すると機能するオーバーロードを追加しましたchar*

実際の例

ただし、コンパイルされません。

1)を使用して解析する場合std::string::const_iterator

いずれかのコンストラクターは、または をboost::string_view想定しています。const char*std::string&

実際の例

boost::string_viewfromをインスタンス化するにはどうすればよいstd::string::const_iteratorですか?

2)オーバーロードboost/spirit/home/x3.hppの前に含まれている場合move_to

実際の例

オーバーロードが選択されないのはなぜですか? で定義されているものよりも優れたオーバーロードではありませんboost/spirit/home/x3/support/traits/move_to.hppか? 含める順序に関係なく、オーバーロードが選択されていることを確認するにはどうすればよいですか?