Boost Spirit で locals を使い、読み込んだ文字を後から参照する ― 2020年12月15日 13時18分58秒
主な使い方としては数字を読み込んで、繰り返しの回数を固定したり、読み込んだ文字を繰り返したり、避けたりしたりするのに使う。Parser Rule に軽く扱われている。こちらに載っている例だと、同じ文字を繰り返すのに使っている。
Boost での紹介だとさらっと軽く触れるだけだが、かなり重宝する実装の一つ。
qi::rule< char const*, locals <char > > rl;
rl = ascii::alpha[ qi::labels::_a = qi::labels::_1] >> char_( qi::labels::_a ); // get two identical characters
test_parser( "aa", rl ); // pass
test_parser( "ax", rl ); // fail
locals に渡した型の数だけ _a から始まる変数が作られる。作成していない変数を使おうとするとコンパイルエラーになるのだが、エラーの出力が難解で、locals が定義されていない為に起きているのを見破るのはかなり難しい。
上の例では、三つの変数を定義している。chat 型、真偽型、整数型で、それぞれ、_a、 _b、 _c で利用できる。
locals< < char const*, locals<char, bool, int > >
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2020/12/15/9327072/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。