Я бы также пошел за ответ на языке сценариев.
Используя чистый C ++, я бы, вероятно, использовал генератор синтаксического анализатора, который получит токен и правила грамматики и даст мне код на C, который точно может анализировать данный язык вызова функции, и предоставит мне синтаксическое дерево этого вызов. flex
может использоваться для токенизации ввода, а bison
может использоваться для анализа токенов и преобразования их в синтаксическое дерево. В качестве альтернативы этому подходу Boost Spirit также может использоваться для анализа языка вызова функций. Я никогда не использовал ни один из этих инструментов, но работал над программами, которые их используют, поэтому я немного знаю, что бы я использовал, если бы мне пришлось решать эту проблему.
Для очень простых случаев вы можете изменить свой синтаксис так:
func_name arg1, arg2
Тогда вы можете использовать:
std::istringstream str(line);
std::string fun_name; str >> fun_name;
map[fun_name](tokenize_args(str));
Карта будет
std::map<std::string, boost::function<void(std::vector<std::string>)> > map;
Которые будут заполнены функциями в начале вашей программы. tokenize_args
будет просто разделять аргументы и возвращать их вектор в виде строк. Конечно, это очень примитивно, но я думаю, что разумно, если все, что вам нужно, это какой-то способ вызова функции (конечно, если вы действительно хотите поддержку сценариев, этого подхода будет недостаточно).