chset


#include <boost/spirit.hpp>

using namespace boost::spirit;

struct Grammar : grammar<Grammar> {

  std::vector<std::string>& strs;

  // 略

  template<typename ST>
  struct definition {
    typedef rule<ST> rule_t;
    rule_t bad;
    rule_t good;

    definition(const Grammar& self){

      bad = chset<>("abcde")[push_back_a(self.strs)];
      good = (chset<>("abcde") >> eps_p)[push_back_a(self.strs)];

    }
    const rule_t& start() const{ return good; }
  };
};


なぜかchset<>()にactorを指定してもうまく動作してくれない.


適当にeps_pでもうしろにつけちゃれ!って思ってつけてみたらうまくいった.


それだけです.


しかもこれかなり前にわかったネタw