|
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