【问题标题】:parse dynamic function form string解析动态函数表单字符串
【发布时间】:2009-04-23 15:54:24
【问题描述】:

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

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))

我该怎么做?

【问题讨论】:

  • “解析”是什么意思?当这一切结束时,你想以什么结束?解析树?令牌列表?你想基于这个执行一些东西吗?
  • 是的,我想从文本中提取函数并执行
  • 您需要更具体地确定您想要做什么。这些 @ 函数看起来像 Windows 脚本函数,在这种情况下,这可能是一个特定于 Windows 的问题,而不是(只是)一个 C++ 问题。
  • 请看这个链接stackoverflow.com/questions/615040/writing-a-mini-languagestackoverflow.com/questions/391432/developing-a-simple-parser如何通过链接中的想法解析我的文字表达? @FileExists('','','') @FileDelete('') @MsgBox('','',0)

标签: c++ parsing


【解决方案1】:

C++ 没有动态函数的概念。如果您正在寻找某种可以接受字符串并将其作为 C++ 代码执行的函数,那么您就很不走运了。

【讨论】:

  • 我觉得他可能想做这样的功能
  • 有一个这样的函数,叫做system("g++...")
【解决方案2】:

正如 Josh 已经说过的,使用一些动态脚本语言可能是最好的主意。 您应该查看Lua,它易于嵌入、体积小且在 MIT 许可下可用。

【讨论】:

  • 谢谢,我已经通过抽象语法树(ast)构建并解释了从字符串到函数的表达式。它曾在 Nilesoft Shell 中使用,此链接显示它的使用 nilesoft.org/docs/expressions
【解决方案3】:

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

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

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

【讨论】:

  • 感谢@Eclipse,我已经通过抽象语法树(ast)构建并解释了从字符串到函数的表达式。它曾在 Nilesoft Shell 中使用,此链接显示了它的使用 nilesoft.org/docs/expressions
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2021-02-27
  • 2016-01-19
  • 2012-06-18
相关资源
最近更新 更多