|
Boost : |
From: Chris Cooney (ccooney_at_[hidden])
Date: 2003-08-28 21:33:45
Sorry everyone.
----- Original Message -----
From: "Joel de Guzman" <djowel_at_[hidden]>
To: "Boost mailing list" <boost_at_[hidden]>
Cc: "Spirit" <spirit-general_at_[hidden]>
Sent: Thursday, August 28, 2003 6:03 PM
Subject: Re: [boost] RE: Spirit question...CORRECTION to my grammer!
> 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
>
> _______________________________________________
> 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