假设语言的解释器(可以是从PHP到Ruby的任何内容)都是用C编写的,那么变量(或者更复杂的数据结构不仅包含名称和值)是如何由当前正在执行、存储和读出的脚本定义的?
由于我对C知识非常贫乏,我最终会得出这样的结论:这只能用数组来完成。
// Variable type definition would go here
var* variables;var类型将包含两个字符串name和value。
好吧。因此,脚本定义了例如:30个变量。现在,如果必须读取其中一个变量,则函数getVar (或类似的内容)必须遍历所有30个变量,并将它们的name与请求变量的名称进行比较。想象一下,使用一个循环请求
$myVar)明确定义变量的语言中,解释器可以在解析过程中用数值替换所有变量。(我说得对吗?)是这种情况吗?发布于 2010-02-01 23:58:35
哈希表,范围链接列表,引用.这件事有很多。
您所要求的是半抽象的,并且实现是可变的。
视执行情况而定:
在一种基本的脚本语言中,变量名在封装时将被放入一个作用域结构中,例如一个包含哈希表实现的链接列表,用于查找该作用域中的标识符。
当引用一个变量时,运行时代码在哈希表中查找它,并获得一些与该值相关的值(例如,一个结构的内存地址)。结构可用于实现标量变量:
enum stype = { INT, STRING, FLOAT, BOOL };
struct scalar {
enum stype type;
generic_blob_t *heap_blob;
};或者是我可怜的例子来源的一些变化。
一些好书是"现代编译器在C中的实现“和”龙书“。阅读这个主题是个好主意,我会推荐给任何程序员。
发布于 2010-02-01 23:53:59
他们几乎可以肯定地使用一种更复杂的数据结构。
struct Var
{
char *name;
int type;
union value; ....
};然后将它们存储在树中(散列或二进制),这样就可以按名称检索它们。
https://stackoverflow.com/questions/2180934
复制相似问题