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

c++ - 変数テンプレートの特殊化に格納された Spirit-X3 パーサーが Clang で機能しない

ドラフトとチェッカーの位置を設定するために、密接に関連する2つの文法を解析できる、動作中のSpirit-X3パーサーがあります。文法の 2 つの方言のパーサーとして、2つの変数テンプレートの特殊化を定義します。

このコードは、 Clangg++の両方で、テスト入力をコンパイルして正しく解析し ます。

2 つの変数テンプレートの特殊化はまったく同じ形式でテンプレート パラメーターに依存するため、それらを一般的な変数テンプレートに統合したいと考えています。

これは、 g++に対しても正しくコンパイルおよび解析します。Clang 用にもコンパイルされますが、Coliruではなく、Wandboxでの入力のみを正しく解析します。apt.llvm.orgの clang-3.8.0 を使用した私自身の開発ボックスでは、 Coliruと同じ誤った動作が発生します。

質問: 変数テンプレートの特殊化に関する Clang のバグはありますか? そのバグを回避するために、Wandbox と同じ方法で Clang を構成するにはどうすればよいですか? それともSpirit-X3関連のバグですか?

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

c++ - Boost.x3: 属性は代替間で蓄積されます

識別子を解析するためのパーサーと、foo, bar, bazネストされた識別子を解析するためのパーサーがあります。foo::bar, foo::bar.baz, foo::bar.baz.baham これらは両方とも、次のように同じ ast 構造体に解析されます。

のパーサーはidentifier次のようになります。

そして、このnested_identifierようなもののために:

私はマクロの恥を知っています。識別子パーサーは正常に 動作しますが、パーサーから外れる ast オブジェクトのnested_identifierようなものを解析しようとすると、奇妙な動作が発生し、すべての名前空間 (この場合はベクター内に2 回) があります。ここに、この奇妙な動作の小さな例があり ます。なぜこれが起こるのか、どうすればこれを回避できるのか、誰か説明してもらえますか?foo::bar::bazfoobarnamespaces

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

boost - Spirit X3 文法の (予想される) 属性のタイプを推測することは可能ですか?

私はこの典型的なスピリットコードを持っています。

文法から期待される属性のタイプを推測することは可能ですか?

何かのようなもの

を推測しboost::fusion::vector<double, double>ます。

私はこれを見つけましたhttp://boost-spirit.com/home/2010/01/31/what-is-the-attribute-type-exposed-by-a-parser/しかし、それは動作しないx3か、そうではありません正しいヘッダーを含みます。

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

c++ - シーケンスパーサーの属性が間違っています

Spirit x3 docsから次の例を試しました

私が得るエラーは

pタイプに変更すると、doubleコンパイルして一致し2.0ます。これは明らかに私の意図ではありません。複数のバージョンの gcc (4.9、6.2、トランク) とブースト バージョン 1.61.0 でこれを試しました。誰かがコードのエラーを見つけない限り、これは構成の問題であるべきだと思います。

誰かが似たようなことを経験し、問題がどこにあるかを知っていますか?

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

c++ - 文字列のペアの解析に失敗しました。悪霊×3 文法

文字列を文字列にマッピングして、キーと値のペアを解析したいと思います。右手側のブロックをサポートしたいので{ ... }、最初に簡単な文法を考え出しました

しかし、expression の属性を に変更しない限り、組み合わせてコンパイルできませんstd::string

エラーが発生します

から

次の式を試しても同じことが起こります

私は数日以来それに来ていますが、それを正しく行う方法を見つけることができません. 助けていただければ幸いです... :^)

boost-1.60{-62} と gcc 6.1.1、6.2、およびそれよりも新しいバージョンのトランクでテストしました。

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

c++ - ブーストスピリット x3 を使用して再帰バリアントに解析する際の問題

x3::variant現在、ブースト スピリット x3 を使用して に解析しようとしています。バリアントは次のようになります。

LambdaType と ClassType は次のようになります。

const boost::spirit::x3::char_classType、またはこれらの構造体の 1 つに解析しようとすると、コンパイラ エラーが発生しTypeますconst boost::spirit::x3::char_classここにライブの例があります。これにはパーサーがあり、コンパイルしようとすると問題とエラーが表示されます。私は一日中この問題を解決しようとしていますが、なぜこれがうまくいかないのか分かりません。これについて何か助けがあれば、私は感謝しています。

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

c++ - ブーストスピリット x3 使用中の内部コンパイラ エラー

私は現在、ブースト スピリット X3 を使用して、DSL の式と演算子階層を実装しています。

私のパーサーは意味論的に正しいと思いますが、コンパイルしようとすると、gcc と clang は膨大なメモリ フットプリントを持ち、コンパイルに無限の時間がかかり、「g++: 内部コンパイラ エラー: 強制終了 (プログラム cc1plus) )」。

式パーサーの周りのコードを最小限に抑えようとしましたが、どういうわけかそれほど簡単ではありません

これがデモです。

ここで私が間違っていることを誰かに教えてもらえますか、それともバグですか?

編集:問題はどこかにあると思います:

に変更(idx|func|data)すると(idx|func)、それも永久にコンパイルされ、最大 16GB の RAM を使用しますが、gcc はそれをコンパイルでき、パーサーは本来の動作をします。

EDIT II:上記のリンクを見てください。エラーの原因となる私の例があります。