gpt4 book ai didi

c - C 中 JavaScript 非递归解析器的设计(高度内存受限)

转载 作者:行者123 更新时间:2023-12-01 12:50:17 29 4
gpt4 key购买 nike

我们需要在 C 中实现 JavaScript 解析器,并且我们的目标是内存非常受限的平台;最受限制的部分是堆栈。

目前,我们有下降递归解析器,C 堆栈很容易被相当复杂的表达式溢出。因此,我们的目标是使 C 堆栈消耗不会随着表达式嵌套的增长而增长。

我能想到的唯一方法是维护我们自己的堆栈,而我们的解析器将只是一个带有大量标签和 goto 的巨大函数。它相当凌乱且不易维护;我们可以通过宏隐藏一些乱七八糟的东西,但无论如何,它会比通常的函数调用更乱。

然后:

  • 我们可以以更有效的方式实现堆栈(嵌入式编译器通常...不是很好)
  • 我们甚至可以使用分段堆栈(因为这里巨大的连续内存块非常昂贵)

没有其他方法可以实现它,我说得对吗?我的意思是,除了带有大量标签和 goto 的单一函数,以及我们自己手工制作的堆栈。

如果我错了,我很乐意听取您的建议。

最佳答案

当你写一个递归函数的时候,你必须要有栈。如果你机器的物理栈不够深,你需要换一种方式实现栈。

正如您所说:“维护我们自己的堆栈,我们的解析器将只是一个带有大量标签和 goto 的巨大函数。它相当困惑且不太易于维护”。

好吧,如果您遵守规则,它可维护的。每个“函数”调用都是通过将下一个程序位置推送到您已实现的伪堆栈来实现的。如果您将所有推送逻辑隐藏在子例程或宏中,它的可读性将与真正的函数调用一样。

关于c - C 中 JavaScript 非递归解析器的设计(高度内存受限),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427151/

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