我正在尝试为 C 中的自定义语言编写一个简单的语言解释器。由于 C 的简单性,我想使用 C 而不是 C++。我不确定如何在 C 中做的事情是存储变量和变量查找。我打算将变量存储在一个数组中,但我想我需要一个可变大小的数组。除了循环遍历数组之外,我也不知道从数组中查找变量的有效方法。所以我想知道,创建可变大小数组的有效方法是什么?Python 或 Ruby 或 Go 如何有效地存储和检索变量?
2 回答
慕慕森
TA贡献1856条经验 获得超17个赞
Python 或 Ruby 或 Go 如何有效地存储和检索变量?
Python 和 Ruby 使用哈希表:变量的名称被转换为一个整数,并且该整数被用作数组的索引。总是可能发生多个名称冲突(转换为相同的整数),因此需要通过允许在同一插槽中从名称到值的多个绑定来考虑这一点,但每个名称只会检查几个。
Go 被编译,因此变量在编译时被转换为地址(静态或相对于堆栈或帧指针的偏移量)。
创建可变大小数组的有效方法是什么?
如果您决定这样做,您将使用malloc
和realloc
。
在调整哈希表的桶数组大小的情况下,realloc
不幸的是没有用,因为旧桶数组中的所有键都需要一一重新散列以找到它们在新数组中的位置。如果您知道解释器将解释的程序的最大大小,则可以直接以适用于最大程序的大小分配哈希表,并避免编写哈希表大小调整函数。
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消