gpt4 book ai didi

c - 为交互式 C 代码编写 C 解释器

转载 作者:行者123 更新时间:2023-11-30 15:46:46 25 4
gpt4 key购买 nike

我想练习 C,所以我决定本着 python 解释器的精神编写一个 C 解释器。我有一些 C 知识,但我一直是一个边做边学类型的程序员。

到目前为止,我所拥有的非常简单。只需一次一行地解析用户的输入,并区分以下声明:

int x = 10;
char c = 'a';

其中我创建了一个结构体,表示变量的类型、名称和 int 值的 ivalue 和 char 值的 cvalue。还有很多事情要做,但一次只能一步一步。

我还可以解析函数调用,如下所示:

printf("value of x = %d\n, x);

我在其中提取函数的名称,并将参数存储在 char** args 中。

这听起来很愚蠢,但我想避免为每个标准 c 库函数编写映射器,以便执行对 printf 或 strstr 或 strcpy 之类的调用。有没有办法在没有这种方法的情况下动态调用标准 c 函数?

此外,非常欢迎对这个东西的设计提出建议。

最佳答案

你不能(据我所知)编写 C 解释器。
我认为编写 C 解释器将会非常困难。您可能需要编写一个编译器。
当然,您可以即时“剖析”语言,随着进度解析代码。
真正的问题(据我所知)是处理外部引用。

在 Python 中,您可以使用 import 处理外部引用。关键字。
如您所知,某些库可能具有冲突的方法(例如 lxmllibxml2 )。
此冲突由 import 解决正在使用正确的库。
您当然可以考虑某种有效“链接”或导入所有需要的外部引用的机制。
这可能会有某些非常具体的假设。
这样,当遇到 #include <stdlib.h>时你其实 import它。
就此而言,导入它可能意味着加载 stdlib 的 dll使用类似 LoadLibrary()的东西或 LoadLibraryEx在windows下。
加载完所有 #include's后你遇到的情况是,如果你没有找到引用的定义,那么你可能会遍历本地目录以获取其他 C 文件,直到遇到所寻找的引用,此时我不确定应该做什么。
这是关于链接问题(老实说,如果没有正确的编译,我不知道如何克服这个问题)。

另一部分实际上也非常困难。您需要编写一个词法分析器。
这就是解析所有这些 C 代码行的小恶魔。
我假设您已经摆弄过计划/列表解释器的编写,甚至可能是一些更复杂的解析器。
谨防! C 不是Scheme!
这是一种解析起来非常复杂的语言。它的描述文档长达数百页。
编写 C 词法分析器并不是编写解释器的练习。
C 有一些令人讨厌的上下文相关解析 - 这基本上意味着它不是 CFL(上下文无关语言) - 这意味着你无法编写一个漂亮的有限自动机来解析它。

我将以 an example 结束摘自 Eli Bendersky的精彩博客。

typedef int AA;
void foo()
{
AA aa; /* OK - define variable aa of type AA */
float AA; /* OK - define variable AA of type float */
}

这只是表明上下文相关语法有多么棘手。

关于c - 为交互式 C 代码编写 C 解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18048098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com