compiler-construction - 分别维护堆栈框架和符号表的不便之处
问题描述
简介 我正在创建一种静态类型语言,其中所有变量都被视为静态全局变量。因此,所需的内存量在编译时是已知的(类似于 Fortran 66 的工作方式)。我观察到堆栈帧的结构等同于符号表的结构。唯一的区别是,符号表包含符号的类型,而堆栈帧包含变量的值。
不便这导致了“加倍”努力以确保这两个表是等价的。我需要确保它们以相同的方式生成,即 AST 节点装饰有对表示相同范围的符号表/堆栈帧的引用。一个更值得注意的任务是内置变量/方法的实现。定义和初始化内置函数需要我首先在符号表中定义它们的类型,然后在堆栈帧中给出它的值。最重要的是,我还有由符号表和堆栈框架表示的名称空间。因此,我需要确保到这些名称空间的链接在两种表格格式中都是相同的。
总而言之,管理两种不同的表类型很不方便,而且容易犯愚蠢的错误。
解决方案?我所描述的问题是其他语言遇到的问题吗?如果是这样,他们如何解决这个问题?我正在考虑在语义分析阶段将堆栈帧和符号表合并在一起,但我担心我忽略了某些东西,或者这种方法可能会在未来引起一些问题。任何建议将不胜感激。
解决方案
推荐阅读
- python - 将 Django Admin 站点中的用户添加到网页上的 html 表中
- php - 关系在 Laravel 中不起作用
- html - 将 div 底部固定到屏幕底部
- php - 将关联数组与 mysqli_fetch_assoc() php 结合
- hbase - hbase 扫描操作是否读取启动后创建的行
- java - 读取 Big XLS 和 XLSX 文件
- javascript - 使用 textcolor 时,如何配置 MathJax 以识别方程式中的 textrm{}?
- css - 如何在 Bootstrap 中使用显示属性?
- sql - SQL Get Duplicated 基于所有列
- angularjs - AngularJS 有条件需要