View on GitHub

boost_spirit_guide

パーサ・ディレクティブ

ルールに渡される入力、ルールにより生じる結果。
以上を意図的にコントロールするのがディレクティブです。(namespace qi = boost::spirit::qi)

ディレクティブ 説明
lexime[] 直前までSkipルールを適応しスキップさせた上で、Skipルールを適用しないようにします。
no_skip[] Skipルールを適用しないようにします。
no_case[] アルファベットの大文字小文字の区別を無くします。
omit[] ルールから値を取り出さないようにします。
raw[] 入力シーケンスをそのまま値出力に直結させます。
repeat[] 0回以上繰り返す。* オペレータと同じです。
repeat(n)[] n回繰り返す。
repeat(min,max)[] min回以上、max回以下まで繰り返す。
matches[] マッチしたかどうかをbool値として取り出します。
skip[] leximeまたはno_skipディレクティブ内でSkipルールを再適用します。
skip(p)[] skip ディレクティブに p を Skipルールとして置き換えます。
hold[] ルールの値をキープします。
as<T>()[] Tはコンテナ型で、ルール内の値をT型に展開します。直接使用する事はないでしょう。
as_string[] std::string 型へ展開します。直接使用する事はないでしょう。
as_wstring[] std::wstring 型へ展開します。直接使用する事はないでしょう。
expect[] ルールにマッチしない場合はエラーとします。

Skipper に関するもの no_skip, skip は、後に別途解説します。

raw, repeat サンプル

C++: raw, repeat 例
#include <boost/spirit/include/qi.hpp>
#include <iostream>

namespace qi = boost::spirit::qi;

int main() {
  std::string input = "04142019";
  int year, month, day;
  qi::parse( input.begin(), input.end(), 
       qi::raw[qi::repeat(2)[qi::standard::digit]] 
       >> qi::raw[qi::repeat(2)[qi::standard::digit]] 
       >> qi::raw[qi::repeat(4)[qi::standard::digit]] 
    , month, day, year ); 
  std::cout << year << "/" << month << "/" << day << std::endl;
  return 0;
}