Boost.Spirit 使うたびにやらかす間違い.例えば以下のルールの定義では relational_operator は「絶対に "<=" や ">=" にマッチしない」.
もう何回この間違いやらかしたことか…….最初の頃はこれにハマって,かつ脱出するのにとんでもない時間を食いましたが,今は挙動がおかしいときにこの間違いを疑える(したがって間違いからの回復も一瞬で済む)ようにはなりました.ただし今でもこの間違い自体はやらかすのねん.ついこの間もこの間違いやらかして「もぉ〜,おにいちゃんこの間違い今までに3回はやらかしてるんだからいい加減学習してよねっ!!」と隣に居た妹に怒られました.おかしいよね.俺一人っ子なのに.
#include <iostream> #include <boost/spirit/core.hpp> int main() { using namespace boost::spirit; rule<> integer = +digit_p ; rule<> relational_operator = ch_p( '<' ) | ch_p( '>' ) | str_p( "<=" ) | str_p( ">=" ) ; rule<> relational_expression = integer >> relational_operator >> integer ; if( parse( "1<2", relational_expression ).full ){ std::cout << "`1<2' matches" << std::endl; } else{ std::cout << "`1<2' does not match" << std::endl; } if( parse( "1<=2", relational_expression ).full ){ std::cout << "`1<=2' matches" << std::endl; } else{ std::cout << "`1<=2' does not match" << std::endl; } return EXIT_SUCCESS; }