Hi, I have this parser that parses string that represents a function, (a c++ function prototype to say) CONSIDER: bool parse_info<> x_parser4(char const* str, FunctionSpec& spec) { // some rules... rettype = lexeme_d[ (alpha_p) >> *(alnum_p | space_p | ch_p('*')) ][list_actor(spec)]; // assign function name when match... function = lexeme_d[ (alpha_p | ch_p('_')) >> *(alnum_p | ch_p('_')) ][assign_a(spec.m_Name)]; // other rules.... .... return parse(str,top); } // Here's what my struct looks like: struct FunctionSpec { std::string m_Name; enum eVarType { VAR_VOID, VAR_BOOL, VAR_INT... } eVarType m_RetType; }; In the function rule what i did was just to assign the name to the m_Name of spec In the rettype tule what i did there was to pass the match string along with the struct (spec) to a class (list_actor) using the operator()... Problem is that i can't jsut assign m_RetType to the 'matched string' delivered to list_actor's operator() since this one is an enumerated type; In the code i attached, there is a function that 'maps' a string to eVarType, but i can't call this function within the list_actor's operator() body? i.e. template <typename ActionIterT> operator(...,...) { // can't do here? // tried to bind the function but it didn't work as well... } In summary what i need to do is to assign value for m_RetType and other members of FunctionSpec using the strings i get from parsing, e.g. when i get the string "void" for a match in the rettype rule, m_RetType will be assigned to VAR_VOID. etc. ----- krby
participants (1)
-
K M