从字符串解析动态函数

时间:2009-04-23 15:54:25

标签: c++ parsing

我正在尝试从字符串中解析动态函数,例如:

char* func = "app.exe /path:\"@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1))\";

我想解析

@FileExists('filepath', @FileDelete('filepath'), @MsgBox('file not found','error',1))

我该怎么做?

3 个答案:

答案 0 :(得分:4)

C ++没有动态函数的概念。如果你正在寻找一种带字符串并将其作为C ++代码执行的函数,那你就不走运了。

答案 1 :(得分:4)

正如乔希已经说过,使用一些动态脚本语言可能是最好的主意。 您应该查看Lua,它很容易嵌入,很小并且可以在MIT许可下使用。

答案 2 :(得分:3)

我假设您正在寻找字符串中的代码。在C ++中,一旦编译了程序,就没有函数或变量名称的记录。这只是地址。

可以为函数设置自己的字符串映射。然后,您必须构建一个函数/名称和参数树,并手动调用这些函数。基本上,您必须为C ++的某个子集编写解释器,并使用预定义的可用函数集。这绝对不是初学者的任务,但如果你真的想要,那么看看Recursive-Descent parsing。这是迄今为止开始编写解释器的最简单方法。如果您的需求不断增长,请查看一些更强大的解析器,例如ANTLRflex/bison

可以在C ++中嵌入更多动态脚本语言。事实上,大多数脚本语言都有某种C接口,你可以用C语言做任何事情,你可以用C ++做。查看类似Boost.Pythonthis example的内容,了解VBScript。