エスケープ文字パーサ

エスケープ文字パーサはC/C++、 LEX 、Perl の正規表現などで用いられえいるエスケープ文字シーケンスを構文解析するユーティリティパーサである。 confix_p ユーティリティパーサと組み合わせると、ダブルクォートや他のエスケープ文字を含む C/C++ 文字列を構文解析する際に便利である:

    confix_p('"', *c_escape_ch_p, '"')

二つの異なるタイプのエスケープ文字パーサがある: C/C++ のエスケープ文字シーケンスを構文解析する c_escape_ch_p と、 LEX スタイルのエスケープ文字シーケンスを構文解析する lex_escape_ch_p である。 次のテーブルはこれらのユーティリティパーサが理解する有効な文字シーケンスを示す。

有効なエスケープ文字シーケンスのまとめ
c_escape_ch_p

\b 、 \t 、 \n 、 \f 、 \r 、 \\ 、 \" 、 \' 、 \xHH 、 \OOO
ここで、 H は16進数数字( 0 〜 9 、 a 〜 f 、 A 〜 F )のいずれか、 0 は8進数数字( 0 〜 8 )のいずれかである

lex_escape_ch_p

上記全ての C/C++ エスケープ文字シーケンスに加え、バックスラッシュに続くあらゆる他の文字

エスケープ文字パーサに直接接続されたセマンティックアクションがある場合、 全ての有効なエスケープ文字はそれらに等価な文字 (例えば、'r' が後に続くバックスラッシュは '\r')に変換され、 それが接続されたアクターを消費する(fed)。 構文解析される十六進数や八進数数字の数は一つの入力文字のサイズに依存する。 オーバーフローは検出され、非マッチを生成する。 lex_escape_ch_pは、接続されたアクションにエスケープされない文字を渡す時、 有効な C/C++ エスケープシーケンスとしてリストに挙げられていない全ての文字シーケンスから 先行する(leading)バックスラッシュを剥ぎ取る(strip)。

だが(though)注意して欲しい、 最も外側のパーサに接続されたセマンティックアクションがあるなら (例えば (*c_escape_ch_p)[some_actor] におけるように。 ここでアクションは kleene star が生成したパーサに接続されている)、 その時点では変換は行われず、neverthless エスケープ文字は正しく構文解析される。 この制限はこのライブラリの将来のバージョンでは取り除かれるだろう。



このドキュメントの対象: Boost Version 1.30.0
最新版ドキュメント(英語)