标签:php c-3 memory interpreter
假设语言的解释器(可以是从PHP到Ruby的任何东西)都是用C语言编写的.
变量(或更复杂的数据结构不仅包含名称和值)如何由当前正在执行,存储和读出的脚本定义?
由于我对C的了解很少,我最终得出的结论是,这只能用数组来完成.
// Variable type definition would go here
var* variables;
var类型将包含两个字符串name和value.
好的.所以脚本定义了例如:30个变量.现在,如果必须读出其中一个变量,则函数getVar(或类似的东西)必须遍历所有30个变量并将它们的名称与所请求变量的名称进行比较.想象一下,有一个循环请求
>我完全错了吗?如果是,(现代?)脚本语言如何处理变量?它们如何存储和读出?
>在语法(PHP:$myVar)明确定义变量的语言中,解释器可以在解析过程中用数值替换所有变量. (我是对的吗?)
是这样的吗?
最佳答案:
哈希表,范围链表,引用……有很多.
你问的是半抽象的,实现是可变的.
取决于实施:
>标识符可以编译为内存地址,或相对内存地址,或字节码引用的无名称位置.
>可以在运行时在范围内动态查找标识符
在基本脚本语言中,受欢迎的变量名称将被放入范围结构中,例如包含用于在该范围中查找标识符的哈希表实现的链表.
当引用变量时,运行时代码在哈希表中查找它并获得与该值相关的某个值(例如结构的内存地址).结构可用于实现标量变量:
enum stype = { INT, STRING, FLOAT, BOOL };
struct scalar {
enum stype type;
generic_blob_t *heap_blob;
};
或者我的糟糕示例来源的一些变化.
一些好书是“Modern Compiler Implementation in C”和Dragon Book.阅读这个主题是一个好主意;我会推荐给任何程序员.
标签:php,c-3,memory,interpreter 来源: https://codeday.me/bug/20190515/1111463.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。