Never too old to learn.

解释性语言的几个处理方式

Posted on By Andy Zhu

关于解释性语言的几个要点的处理:

  • 变量名的存储

在第一次解释的时候把变量名压缩,长的压缩成短的且保证不重复

例如:变量名request,query,identity,location,object,visual,explainer,unity可以直接压缩成

a,b,c,d,e,f,g,h并且替换上下文所有该变量名,也方便之后的变量检索

在运行的时候把变量名建成一颗字典树,因为变量名不会太多,所以整棵树的深度是log级别的,变量查询值的时间是O(len)级别的(压缩后的len

  • 关于不同类型的数据的存储

一种直观的想法就是把所有的数据转换成longint,但是这样做的话仍然需要记录每一个变量的类型,所以干脆直接用pointer记录数据,同时存储它的数据类型

  • 关于表达式

前期可以直接让程序员写前缀表达式(强制个一个月就会写了),然后从后往前扫,遇到数直接塞进去,遇到运算符计算,将算好的结果扔进去

  • 关于常量

把全局常量直接在第一次解释的时候直接替换掉,遇到表达式中的常量的时候把这个变量新建出来,压到栈里打个标记,等弹出的时候释放掉