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