private void addEntry(TrieSymbolTable table, int code) throws SymbolException {
		if (table == null) {
			throw new SymbolException("Symbol table cannot be found. ");
		}
		if (cachedValueEntry == null) {
			if (code != -1) {
				cachedValueEntry = code; //new TrieEntry(code,true);
				table.updateValueCounter(code);
			} else {
				cachedValueEntry = table.increaseValueCounter(); //new TrieEntry(table.increaseValueCounter(),false);
			}
			cachedKeyEntry = table; 
		} else if (!table.equals(cachedKeyEntry)) {
			if (entries == null) {
				entries = new HashMap<TrieSymbolTable, Integer>();
//				entries = new HashMap<TrieSymbolTable, TrieEntry>(INITIAL_CAPACITY);
			}
			if (!entries.containsKey(table)) {
				if (code != -1) {
					entries.put(table, code); //new TrieEntry(code,true));
					table.updateValueCounter(code);
				} else {
					entries.put(table, table.increaseValueCounter()); //new TrieEntry(table.increaseValueCounter(),false));
				}
			}
		}
	}