これは私のboost::spirit grammarにあります。
paren = (qi::token(LEFT_PAREN) >> character >> qi::token(RIGHT_PAREN)) [ build_paren ]
;
character = qi::token(CHARACTER) [ build_character]
;
これらは次のように定義されています。
qi::rule<Iterator> paren;
qi::rule<Iterator, char> character;
関数build_paren
には、次のプロトタイプがあります (コンパイラのキャスト エラーで見つかりました)。
void build_paren(boost::fusion::vector2<boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string<char>>>, boost::iterator_range<__gnu_cxx::__normal_iterator<char*, std::basic_string<char>>>> v)
ここで、ベクトルはそれぞれ 2 つの文字列を保持"(\0"
し")\0"
、これは予想どおりですが、どのようにしてchar
一致する文字を取得できますか?
本当に、私のbuild_paran
関数に欲しいプロトタイプは次のとおりです。
void build_paren(std::string left_paren, char character, std::string right_paren)
または、同じですchar
が、リストの最後の引数として引数を使用します。