Boost logo

Boost :

From: Michael Burbidge (mburbidg_at_[hidden])
Date: 2003-09-05 18:21:33


I have the following very simple grammar:

struct expr_grammar : public grammar<expr_grammar>
{
        template <typename ScannerT>
        struct definition
        {
                definition(expr_grammar const& self)
                {
                        variable_ref
                                = lexeme_d[ch_p('$') >> symbol]
                                ;
                        
                        symbol
                                = range_p('a', 'A')
                                ;
                }
                
                rule<ScannerT> variable_ref, symbol;
                
                rule<ScannerT> const& start() const { return variable_ref; }
        };
};

and the following very simple function that uses this grammar:

bool parse_expr(char* theExpr)
{
        expr_grammar g;
        bool result = parse(theExpr, g, space_p).full;
}

This results in a compiler error because no function or template can be
found for parse. If I remove the lexeme_d directive from the
variable_ref rule then it compiles just fine. How did lexeme_d change
the type of the parameters to parse? How can I fix this so that I can
use lexeme_d to prevent accepting spaces between any of the characters
in variable_ref?

Thanks,
Michael-


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk