首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本语言如何设置/修改/读出变量?

问脚本语言如何设置/修改/读出变量?
EN

Stack Overflow用户
提问于 2010-02-01 23:49:49
回答 2查看 142关注 0票数 5

假设语言的解释器(可以是从PHP到Ruby的任何内容)都是用C编写的,那么变量(或者更复杂的数据结构不仅包含名称和值)是如何由当前正在执行、存储和读出的脚本定义的?

由于我对C知识非常贫乏,我最终会得出这样的结论:这只能用数组来完成。

代码语言:javascript
复制
// Variable type definition would go here
var* variables;

var类型将包含两个字符串name和value。

好吧。因此,脚本定义了例如:30个变量。现在,如果必须读取其中一个变量,则函数getVar (或类似的内容)必须遍历所有30个变量,并将它们的name与请求变量的名称进行比较。想象一下,使用一个循环请求

  • 我完全搞错了吗?如果是,如何(现代?)脚本语言处理变量?它们是如何存储和读出的?
  • 在由语法(PHP:$myVar)明确定义变量的语言中,解释器可以在解析过程中用数值替换所有变量。(我说得对吗?)是这种情况吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-01 23:58:35

哈希表,范围链接列表,引用.这件事有很多。

您所要求的是半抽象的,并且实现是可变的。

视执行情况而定:

  1. 标识符可以编译成内存地址、相对内存地址或字节码引用的无名位置。
  2. 可以在运行时在作用域中动态查找标识符。

在一种基本的脚本语言中,变量名在封装时将被放入一个作用域结构中,例如一个包含哈希表实现的链接列表,用于查找该作用域中的标识符。

当引用一个变量时,运行时代码在哈希表中查找它,并获得一些与该值相关的值(例如,一个结构的内存地址)。结构可用于实现标量变量:

代码语言:javascript
复制
enum stype = { INT, STRING, FLOAT, BOOL };
struct scalar {
    enum stype type;
    generic_blob_t *heap_blob;
};

或者是我可怜的例子来源的一些变化。

一些好书是"现代编译器在C中的实现“和”龙书“。阅读这个主题是个好主意,我会推荐给任何程序员。

票数 3
EN

Stack Overflow用户

发布于 2010-02-01 23:53:59

他们几乎可以肯定地使用一种更复杂的数据结构。

代码语言:javascript
复制
 struct Var
 {
     char *name;
     int type;
     union value; ....
  };

然后将它们存储在树中(散列或二进制),这样就可以按名称检索它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2180934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档