【问题标题】:Turning strings into code?把字符串变成代码?
【发布时间】:2012-05-28 22:28:34
【问题描述】:

假设我有一个包含一些 C 代码的字符串,可以预见地从一个文件中读取,该文件中除了普通的 C 代码之外还有其他内容。我如何将此字符串转换为程序可用的代码?我是否必须编写一个完整的解释器,或者是否有一个库已经为我完成了这项工作?有问题的代码可能会调用我在实际 C 文件中声明的子例程,因此仅考虑常用 C 命令的子例程可能不起作用。

【问题讨论】:

  • 这是一个非常重要的练习,并提出了一个明显的问题:这里的总体目标是什么?可能有更好的整体解决方案。
  • 你尝试过 C 解释器吗?见stackoverflow.com/questions/69539/…

标签: c string io interpreter


【解决方案1】:

哇。对于 C,这实际上是相当困难的。

你基本上有几个选择:

解读代码

为此,您必须编写一个解释器,而解释 C 是一个相当困难的问题。过去有可用的 C 解释器,但我最近没有读到过。无论如何,除非您真的需要这个,否则编写自己的解释器是一个项目。

Googling 确实展示了几个开源(部分)C 解释器,例如 picoc

编译并动态加载

如果您可以捕获代码并将其包装成句法完整的 C 源文件,那么您可以将其编译为 C 动态可加载库:Windows 中的 DLL,或更多 UNIX 变体中的 .so。然后你可以在运行时加载结果。

现在,通常会导致某人这样做是需要能够表达一些复杂的脚本功能。您是否考虑过使用不同语言的可能性? Python、Scheme (guile) 和 Lua 很容易作为脚本语言添加到 C 应用程序中。

【讨论】:

  • K,那没关系!我当然可以将输入减少到一堆字符串关键字,但随后的代码将比它本来的样子丑得多,但我明白为什么这这么难了。我想对一门语言做这件事的难度与它的高级程度成反比!谢谢。
【解决方案2】:

C 没有这种性质。这是因为 C 是编译的,并且编译器需要在代码开始运行之前对代码进行大量构建(因此接收一个字符串作为输入),它不能真正轻松地即时更改。编译语言对它们具有刚性,而解释语言具有灵活性。

您正在考虑 Perl、Python PHP 等以及所谓的“第四代语言”。我敢肯定 c.s. 中有一个技术术语。对于这种灵活性,但 C 没有它。如果您的任务需要大量使用这种字符串,则需要切换到其中一种语言(并放弃性能)。例如,使用正则表达式查看 Perl 的 /e 标志。

在 C 中,您需要设计您的应用程序,因此您不需要这样做。这通常是相当可行的,因为它的非面向对象性和其他缺陷,许多大型、复杂的应用程序都可以在编写良好的 C 上运行。

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多