TypeTable(String tableFile) throws FileNotFoundException, IOException {
        
        BufferedReader br = new BufferedReader(new FileReader(tableFile));
        String row;
        String[] columns = null;
        String[] currentRow;
        boolean firstRow = true;
        boolean secondRow = true;
        
        while ((row = br.readLine()) != null) {
            if (firstRow) {
                columns = row.split(",");
                numTypes = columns.length;
                size = nextPrime(numTypes * 7);
                typeTable = new DictList[size];
                firstRow = false;
            } else {
                currentRow = row.split(",");
                String vsType = null;
                for (int i = 0; i < numTypes; i++) {                    
                    if (i == 0) {
                        vsType = currentRow[i];
                    } else {
                        float multiplier = Float.parseFloat(currentRow[i]);
                        int key = Math.abs(columns[i].hashCode() % size);
                        if (secondRow) {
                            if (typeTable[key] == null) {
                                typeTable[key] = new DictList(new TypeList(columns[i], vsType, multiplier));
                            } else {
                                typeTable[key].addNode(new TypeList(columns[i], vsType, multiplier));
                            }
                        } else {
                            if (typeTable[key].size == 1) {
                                typeTable[key].head.entry.addType(vsType, multiplier);
                            } else {
                                DictNode current = typeTable[key].head;
                                while (current != null) {
                                    if (current.entry.type().equals(columns[i])) {
                                        current.entry.addType(vsType, multiplier);
                                        break;
                                    }
                                    current = current.next;
                                }
                            }
                        }
                    }
                }
                secondRow = false;
            }
        }
        br.close();
    }