X3 で構文解析している現在の文法では、空白と Perl スタイルのコメントは無視されます。
X3 のスキップ パーサーは単なる通常のパーサーであり、それが消費する入力はすべて「スキップされた」と見なされるように私には思えます。私はこれを思いつきました:
namespace x3 = boost::spirit::x3;
auto const blank_comment =
x3::blank | x3::lexeme[ '#' >> *(x3::char_ - x3::eol) >> x3::eol ];
非常に基本的な入力 (2 行のコメント行と 1 つの引用符で囲まれた文字列行) の解析では、これはうまく機能しているようです。(コリルでライブ)
ただし、この問題に関するドキュメントが見つからず、現在のスキップ パーサーの詳細はテンプレートの複雑なシステムに隠されているため、何らかの情報を期待していました。
- これは「スキップパーサー」を定義する適切な方法ですか? 標準的な方法はありますか?
- このような実装にパフォーマンス上の懸念はありますか? どのように改善されますか?
以前に SO の詳細を検索したところ、Qi ( Custom Skip Parser with Boost::Spirit ) を使用して回答が見つかりました。私は気を学んだことがないので、詳細の多くを理解するのは難しい. 上で説明した方法は、より直感的に思えます。