【发布时间】:2014-04-28 08:53:21
【问题描述】:
我研究了问题15588452 知道如何构建符号表。
我的问题是如何使符号表支持更多数据类型的实现细节,
我不想只支持整数,例如:
memory = new HashMap<String, Integer>();
据我所知(对不起,我还没有完成关于编译器的整本龙书),是以下两种方式。
第一种方式:构建一个包含 Symbol 对象的地图:
Map<String, Symbol> symbolMap = new LinkedHashMap<String, Symbol>();
符号对象具有如下名称、类型、数据块信息:
public class Symbol {
protected Scope scope; // scope info
protected String name;
protected ValueType type;//contains type info ,like int float
protected Object value;//contains the real value
}
当解析它的值时,我们可以进行类型转换,转换成它需要的类型,比如:
float a = (float)symbol.value;//convert object field to float
这将导致大量 if..else 类型检查。
或者我们计算内存大小并解析内存块。
第二种方式:使用更多包含不同类型数据的地图,当进行赋值时:
Map<String, Integer> intMap = new LinkedHashMap<String, Integer>();
Map<String, Double> doubleMap = new LinkedHashMap<String, Double>();
int a = 5;//put in intMap
double b = 1.34;//put in doubleMap
我们把它放在不同的地图上并解决它,这看起来有点愚蠢。
如何以温和的方式支持更多类型?
哪位有经验的,请给点见解,谢谢。
【问题讨论】: