
I've recently switched from YACC to Spirit and I've been trying to rewrite some examples from YACC manual, starting with a RPN calculator. Based on http://www.boost.org/libs/spirit/doc/grammar.html I made something like this: /* #includes and usings */ struct rpn_calc : public grammar<rpn_calc> { template <typename ScannerT> struct definition { definition (rpn_calc const& self) { expr_add = expr >> ch_p(' ') >> expr >> ch_p(' ') >> ch_p('+'); expr_sub = expr >> ch_p(' ') >> expr >> ch_p(' ') >> ch_p('-'); expr_mul = expr >> ch_p(' ') >> expr >> ch_p(' ') >> ch_p('*'); expr_div = expr >> ch_p(' ') >> expr >> ch_p(' ') >> ch_p('/'); expr_pow = expr >> ch_p(' ') >> expr >> ch_p(' ') >> ch_p('^'); expr = expr_add | expr_sub | expr_mul | expr_div | expr_pow | real_p; } rule<ScannerT> expr, expr_add, expr_sub, expr_mul, expr_div, expr_pow; rule<ScannerT> const& start () const { return expr; } }; }; int main (void) { rpn_calc calc; std::string str("1 2 + 3 4 + *"); if (parse(str.begin(), str.end(), calc, space_p).full) cout << "Parsing succeeded.\n"; else cout << "Parsing failed!\n"; return 0; } Now this compiles OK, but when executed it doesn't output anything, which means that parse(...) quits without any warnings - what's the problem? Am I doing something wrong? Thanks, Misza