首页 > 解决方案 > 分别维护堆栈框架和符号表的不便之处

问题描述

简介 我正在创建一种静态类型语言,其中所有变量都被视为静态全局变量。因此,所需的内存量在编译时是已知的(类似于 Fortran 66 的工作方式)。我观察到堆栈帧的结构等同于符号表的结构。唯一的区别是,符号表包含符号的类型,而堆栈帧包含变量的值。

在此处输入图像描述

不便这导致了“加倍”努力以确保这两个表是等价的。我需要确保它们以相同的方式生成,即 AST 节点装饰有对表示相同范围的符号表/堆栈帧的引用。一个更值得注意的任务是内置变量/方法的实现。定义和初始化内置函数需要我首先在符号表中定义它们的类型,然后在堆栈帧中给出它的值。最重要的是,我还有由符号表和堆栈框架表示的名称空间。因此,我需要确保到这些名称空间的链接在两种表格格式中都是相同的。

总而言之,管理两种不同的表类型很不方便,而且容易犯愚蠢的错误。

解决方案?我所描述的问题是其他语言遇到的问题吗?如果是这样,他们如何解决这个问题?我正在考虑在语义分析阶段将堆栈帧和符号表合并在一起,但我担心我忽略了某些东西,或者这种方法可能会在未来引起一些问题。任何建议将不胜感激。

标签: compiler-constructioninterpreterstack-framesymbol-table

解决方案


推荐阅读