Boost logo

Boost :

From: Joel de Guzman (djowel_at_[hidden])
Date: 2003-08-28 20:03:31


Chris,

Spirit has its own mailing list:

Spirit-general_at_[hidden]
https://lists.sourceforge.net/lists/listinfo/spirit-general

Please post further questions there. Thanks.

-- 
Joel de Guzman
http://www.boost-consulting.com
http://spirit.sf.net
Chris Cooney <ccooney_at_[hidden]> wrote:
> Hello,
> 
> I've been fiddling around with boost::spirit in an
> attempt to write a small and esoteric scripting language.
> 
> Here's some code snipits of what I'm trying to do.
> example script (a one liner in this case):
> 
> DO_SOMETHING(param1,param2)
> 
> 
> the grammer:
> 
> struct my_grammer : public grammar<my_grammer>
> {
> my_grammer(vector<string>& v_): v(v_) {}
> 
>     template <typename ScannerT>
>     struct definition
>     {
>         definition(wb_grammer const& self)
>         {
> //char token defs
> COMMA = ch_p(',');
> LPAREN = ch_p('(');
> RPAREN = ch_p(')');
> USCORE = ch_p('_');
> 
> param_alnum = lexeme_d[alpha_p >> *(alnum_p)];
> 
> do_something = str_p("DO_SOMETHING") >> LPAREN >>
> /*param1*/param_alnum[append(self.v)] >> !COMMA >>
> /*param2*/param_alnum[append(self.v)] >> RPAREN;
> 
> do_something_else = str_p("DO_SOMETHING_ELSE") >> LPAREN >>
> /*param1*/param_mode[append(self.v)] >> !COMMA >>
> /*param2*/param_type[append(self.v)] >> RPAREN;
> 
> functions = do_something | do_something_else;
> }
> 
>         rule<ScannerT>
> COMMA,LPAREN,RPAREN,USCORE,param_alnum,do_something,do_something_else,functi
> ons;
> 
>         rule<ScannerT> const&
>         start() const { return functions; }
>     };
> 
>   vector<string>& v;
> };
> 
> 
> int main()
> {
> vector<string> v;
> my_grammer script_grammer(v);
> string str;
> 
> while (getline(cin, str))
>     {
>         parse_info<> info = parse(str.c_str(), script_grammer, space_p);
> 
>         if (info.full)
>         {
> //determine which rule (script function) was called
> //and do something with the parameters stored in the vector
>         }
>   else
>   {
> //error out.
>   }
> }
> }
> 
> 
> problem:
> 
> My problem is how to determine which rule was the one
> that resulted in a successful parsing of the
> line ("DO_SOMETHING(param1,param2)");
> 
> NOTE: I'm unfortunately stuck with the MSVC 7.0 compiler so
> I can't use the Tree functionalities of spirit because of their
> implementations use of partial template specialization.
> 
> any ideas?
> 
> Thank you very much,
> 
> Chris.
> 
> 
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

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