将字符串转换为代码?

时间:2012-05-28 22:28:35

标签: c string io interpreter

因此,假设我有一个字符串,其中包含C中的一些代码,除了普通的C代码之外,还可以从一个包含其他内容的文件中读取。如何将此字符串转换为程序可用的代码?我是否必须写一个完整的口译员,或者是否有一个库已经为我做了这个?有问题的代码可能会调用我在实际C文件中声明的子例程,因此仅考虑库存C命令的子例程可能无效。

2 个答案:

答案 0 :(得分:2)

喔。有了C,这实际上很难。

你基本上有几个选择:

解释代码

要做到这一点,你要写一个翻译,解释C是一个相当难的问题。过去有过C语言翻译,但最近我还没有读过。在任何情况下,除非你 reallY真的需要这个,否则编写自己的解释器就是 big 项目。

Googling确实展示了一些开源(部分)C语言解释器,例如picoc

编译并动态加载

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

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

答案 1 :(得分:1)

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

您正在考虑使用Perl,Python PHP等所谓的“第四代语言”。我确信在c.s.中有一个技术术语。为了这种灵活性,但C没有它。如果您的任务需要使用此类字符串,则需要切换到其中一种语言(并放弃性能)。例如,使用正则表达式检查Perl的/e标志。

在C中,您需要设计应用程序,这样您就不需要这样做了。这通常是非常可行的,因为它的非OO-ness和其他缺陷,许多庞大,复杂的应用程序运行在写得很好的C上就好了。