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

insus 阅读:51 2025-04-02 23:11:03 评论:0

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

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

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

然后:

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

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

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

请您参考如下方法:

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

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

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


标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号