Ejemplo n.º 1
0
// Key genierieren
Key Symboltable::insert(Lexem lexem, TokenType type) {

	List* currentList = this->table;
	TableEntry* entry;
	currentList += hash(lexem);
	Information* info;

	for (int i = 0; i < currentList->getSize(); i++) {

		entry = currentList->getLexem(i);

		if (strcmp(entry->getLexem(), lexem) == 0) {

			Information* entryInfo = entry->getInfo();

			//Neu Info anlegen, wenn sich Token Type geändert hat
			//FIX: Mööööööööööööp! Nenene, der Typ des eingetragenen Tokens muss immer
			//beibehalten werden! Sonst klappt das mit den reservierten Wörtern wie "print"
			//nichtmehr!
			/*
			if (entryInfo->getType() != type) {
				delete  entryInfo;
				info = new Information();
				info->setLexem(lexem);
				info->setType(type);
				entry->setInfo(info);

			}
			*/
			//Gebe key zurück, wenn Eintrage gefunden
			return (Key) info;

		}

	}

	//Wenn kein eintrag gefunden wurde, füge neuen Eintrag an Liste an.
	info = new Information();
	info->setLexem(lexem);
	info->setType(type);

	//entry->setLexem(lexem);
	//entry->setInfo(info);

	currentList->add(lexem, info);

	return (Key) info;
}