I'm trying to define a very limited parser combinator library using boost::proto and was wondering if it's by any means possible to define a non-default constructed proto terminal.
I have a structure like this:
struct symbol
{
   symbol(const string &str): str_(str) {}
   bool operator()(const string &str) const {
      return (str == str_);
   }
   string str_;
};
that I'd like to use as a boost proto terminal in proto expressions. I was able to get it to work with the help of BOOST_PROTO_DEFINE_OPERATORS, but I find it somewhat inconvenient to frequently have to wrap it in a proto::lit() inside proto expressions:
match(symbol("abc") >> (proto::lit(symbol("xyz")) | symbol("klm")))
I was wondering if I could create a proto terminal like this:
proto::terminal<symbol>::type sym;
that would somehow be able to take a string argument and pass it to the constructor of symbol.
Note: I know about Spirit, but my compiler doesn't quite support it!
 
                        
You can make the name
syma function that returns a terminal:much like
litis a function template that turns its parameter into a terminal.