問題タブ [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++ - 変数テンプレートの特殊化に格納された Spirit-X3 パーサーが Clang で機能しない
ドラフトとチェッカーの位置を設定するために、密接に関連する2つの文法を解析できる、動作中のSpirit-X3パーサーがあります。文法の 2 つの方言のパーサーとして、2つの変数テンプレートの特殊化を定義します。
このコードは、 Clangとg++の両方で、テスト入力をコンパイルして正しく解析し ます。
2 つの変数テンプレートの特殊化はまったく同じ形式でテンプレート パラメーターに依存するため、それらを一般的な変数テンプレートに統合したいと考えています。
これは、 g++に対しても正しくコンパイルおよび解析します。Clang 用にもコンパイルされますが、Coliruではなく、Wandboxでの入力のみを正しく解析します。apt.llvm.orgの clang-3.8.0 を使用した私自身の開発ボックスでは、 Coliruと同じ誤った動作が発生します。
質問: 変数テンプレートの特殊化に関する Clang のバグはありますか? そのバグを回避するために、Wandbox と同じ方法で Clang を構成するにはどうすればよいですか? それともSpirit-X3関連のバグですか?
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::baz
foo
bar
namespaces
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
か、そうではありません正しいヘッダーを含みます。
c++ - シーケンスパーサーの属性が間違っています
Spirit x3 docsから次の例を試しました
私が得るエラーは
p
タイプに変更すると、double
コンパイルして一致し2.0
ます。これは明らかに私の意図ではありません。複数のバージョンの gcc (4.9、6.2、トランク) とブースト バージョン 1.61.0 でこれを試しました。誰かがコードのエラーを見つけない限り、これは構成の問題であるべきだと思います。
誰かが似たようなことを経験し、問題がどこにあるかを知っていますか?
c++ - 文字列のペアの解析に失敗しました。悪霊×3 文法
文字列を文字列にマッピングして、キーと値のペアを解析したいと思います。右手側のブロックをサポートしたいので{ ... }
、最初に簡単な文法を考え出しました
しかし、expression の属性を に変更しない限り、組み合わせてコンパイルできませんstd::string
。
エラーが発生します
から
次の式を試しても同じことが起こります
私は数日以来それに来ていますが、それを正しく行う方法を見つけることができません. 助けていただければ幸いです... :^)
boost-1.60{-62} と gcc 6.1.1、6.2、およびそれよりも新しいバージョンのトランクでテストしました。
c++ - ブーストスピリット x3 を使用して再帰バリアントに解析する際の問題
x3::variant
現在、ブースト スピリット x3 を使用して に解析しようとしています。バリアントは次のようになります。
LambdaType と ClassType は次のようになります。
const boost::spirit::x3::char_class
Type、またはこれらの構造体の 1 つに解析しようとすると、コンパイラ エラーが発生しType
ますconst boost::spirit::x3::char_class
。ここにライブの例があります。これにはパーサーがあり、コンパイルしようとすると問題とエラーが表示されます。私は一日中この問題を解決しようとしていますが、なぜこれがうまくいかないのか分かりません。これについて何か助けがあれば、私は感謝しています。
c++ - ブーストスピリット x3 使用中の内部コンパイラ エラー
私は現在、ブースト スピリット X3 を使用して、DSL の式と演算子階層を実装しています。
私のパーサーは意味論的に正しいと思いますが、コンパイルしようとすると、gcc と clang は膨大なメモリ フットプリントを持ち、コンパイルに無限の時間がかかり、「g++: 内部コンパイラ エラー: 強制終了 (プログラム cc1plus) )」。
式パーサーの周りのコードを最小限に抑えようとしましたが、どういうわけかそれほど簡単ではありません
これがデモです。
ここで私が間違っていることを誰かに教えてもらえますか、それともバグですか?
編集:問題はどこかにあると思います:
に変更(idx|func|data)
すると(idx|func)
、それも永久にコンパイルされ、最大 16GB の RAM を使用しますが、gcc はそれをコンパイルでき、パーサーは本来の動作をします。
EDIT II:上記のリンクを見てください。エラーの原因となる私の例があります。