boost-spirit

    2

    1答えて

    私は本質的に私の最初のパーサーは永遠(=私はほとんど忘れてしまったUniのコンパイラクラス以降)から書いていると考えています。 私はC++を使用しているので、私はブーストスピリットを使用することを考えていました。それから、「通常の」2.5.2があり、Spirit X3というコードの魔法のサブセットがあります。 ブーストスピリットX3はすでに2年前に発表/討論/プレリリースされたことに気付きましたが

    1

    1答えて

    私は、ブースト1.65.1のSpirit X3を使ってパーサを作成しようとしています。私はシンプルな構造で、次の小さな例に私の問題を低減しています #include <boost/config/warning_disable.hpp> #include <boost/spirit/home/x3.hpp> #include <boost/fusion/include/adapt_struct.

    1

    1答えて

    以下のルールでx3 :: epsを削除すると、最初の部分一致の文字列結果は2番目の一致文字列に残り、重複した内容の文字列になります。 私の中に別のケースを追加すると、私はまだ2つではなく1つの複製が得られます。 なぜx3 :: epsを使用する必要があるのですか。ルールと合成属性の評価で私は誤解しますか? 代わりに先読みを使用する必要がありますか? #include <boost/config/w

    2

    2答えて

    これらの移動エラーが多く発生し、文字列を解析する方法とは関係のない以外の理由がわかりません。 「ダミー」と関係のあるものをすべて削除すると、エラーが戻ってきます。 誰かがattr_gen(ドキュメントでこれを見つけることができませんでした)を使用して記述しました。このような "traits :: move_to"コンパイルエラーを回避できますが、パーサはまだ失敗します。私はそれをコンパイルするため

    -1

    1答えて

    ファイルが期待通りのルールの途中で終了すると、期待値エラーが発生しません(もちろん解析できません)。入力は、最終の期待誤差は}がトリガされていないだけ data { 予想される場合 data_var_decls_r %= (lit("data") > lit('{')) > lit('}'); :動作をトリガ 簡略化した例はこれです。 ファイルの終わりを過ぎ

    1

    1答えて

    次のプログラムは元のものから縮小されました。私はそれが実行されると、セグメンテーション違反を取得します。 ArithmeticUnaryExpressionで24行目を削除すると、プログラムはクラッシュしなくなりました。セグメンテーション違反を取り除くにはどうすればよいですか? #include <boost/config/warning_disable.hpp> #include <boost

    1

    1答えて

    ドキュメントから、expectオペレータを使用すると、オペレータが一致しなかった場合にexpectation_failureを取得する必要があると言われています。私は誤った入力がどこにあるのかをユーザに指示するために例外をキャッチしたいと思う。しかし、私が代わりにラップされた例外のいくつかの種類を取得するようだ: terminate called after throwing an instanc

    1

    1答えて

    このコードは機能します。この質問はそれをよりよく見せることです。 私はutreeについて記事を知っているのを見たことがありますが、それが最善の方法であるかどうかはわかりません。が qi::rule<Iterator, common_node(), Skipper> newcall qi::rule<Iterator, std::wstring()> tyname; ターゲット共通ASTノード

    1

    1答えて

    ポストスキップを行うための最も慣用的な方法は何ですか?より具体的には、トップルールにマッチした後、入力に「スキップ不可能な」(ガベージ)文字がないことを確認します。 auto const blankOrComment = ascii::space | x3::lexeme ['#' >> *(x3::char_ - x3::eol) >> -x3::eol ] ;

    1

    1答えて

    私はスピリットパーサを使って、id 1234のような文字列を解析しています。それはインラインstart = qi::lit("id") >> qi::int_;と完全に動作しますが、それを別のqi :: grammar-based構造体に入れたいのではありません。失敗例について #include <boost/spirit/include/qi.hpp> #include <boost/spir