关于解释性语言的几个要点的处理:
- 变量名的存储
在第一次解释的时候把变量名压缩,长的压缩成短的且保证不重复
例如:变量名request
,query
,identity
,location
,object
,visual
,explainer
,unity
可以直接压缩成
a
,b
,c
,d
,e
,f
,g
,h
并且替换上下文所有该变量名,也方便之后的变量检索
在运行的时候把变量名建成一颗字典树,因为变量名不会太多,所以整棵树的深度是log
级别的,变量查询值的时间是O(len)
级别的(压缩后的len
)
- 关于不同类型的数据的存储
一种直观的想法就是把所有的数据转换成longint
,但是这样做的话仍然需要记录每一个变量的类型,所以干脆直接用pointer
记录数据,同时存储它的数据类型
- 关于表达式
前期可以直接让程序员写前缀表达式(强制个一个月就会写了),然后从后往前扫,遇到数直接塞进去,遇到运算符计算,将算好的结果扔进去
- 关于常量
把全局常量直接在第一次解释的时候直接替换掉,遇到表达式中的常量的时候把这个变量新建出来,压到栈里打个标记,等弹出的时候释放掉