通过String的intern()函数,可以做到不同Symbol中包含的字符串一定是不同的。
再将Symbol应用于Table中的关键字,由此又可以做到对同样一个Symbol,可以再Hash表中的同一格按先后顺序链上不同的Binders。
Binder内部维护了一个Symbol对象:top。用来指向在此Binder加入Hash表之前一个加入的Binder。因此top相当于虚拟的构造了一个加入先后顺序的序列,利用这一系列top可以逆向把后加入的Binder再弹出,这样就可以实现Undo效果。
以上讲的是对于变量的符号表的维护,采用的是破坏式的更新,也就是始终只有一张表,需要beginScope和endScope。对于function的符号表,采用的是非破坏式的更新,也就是,更新时始终保留旧表,创造一张新表。因此也就不需要begin和endScope