Identifier::~Identifier() { //What code do I need here to free memory LineNumberList *root = getLineNumberList(); LineNumberList *tmp = root; while (root != NULL) { tmp = tmp->getNextLineNumber(); delete root; root = tmp; } }
Identifier::~Identifier() { LineNumberList *root = getLineNumberList(); LineNumberList *tmp = root; while (root != NULL) { tmp = tmp->getNextLineNumber(); delete root; root = tmp; } }
void Identifier::addToLineNumberList(LineNumberList *listItem) { LineNumberList *tmp = getLineNumberList(); if (tmp == NULL) { list = listItem; } else { while (tmp->getNextLineNumber() != NULL) { tmp = tmp->getNextLineNumber(); } tmp->setNextLineNumber(listItem); } }
Token::~Token() { //What code do I need here to free memory LineNumberList *root = getLineNumberList(); LineNumberList *tmp = root; while (root != NULL) { tmp = tmp->getNextLineNumber(); delete root; root = tmp; } if (this->getType() == STRING_LIT) { free(this->literal.stringLiteral); } }
void Print::printTreeRecursive(Identifier *identifier) { char line[MAX_SOURCE_LINE_LENGTH + 32]; if (identifier->getLeftChild() != NULL) { printTreeRecursive(identifier->getLeftChild()); } sprintf(line, " %-16s %-s", identifier->getTokenString().c_str(), " "); printLine(line); LineNumberList *list = identifier->getLineNumberList(); while (list != NULL) { cout << list->getLineNumber() << "\t"; list = list->getNextLineNumber(); } cout << "\n"; if (identifier->getRightChild() != NULL) { printTreeRecursive(identifier->getRightChild()); } }
void FileList::Init(const wxString& files) { m_files = files; wxStringTokenizer tkzfiledescs(files, wxT("|")); while (tkzfiledescs.HasMoreTokens()) { wxStringTokenizer tkz(tkzfiledescs.GetNextToken(), wxT("<")); wxString file = tkz.GetNextToken(); LineNumberList bmklns; while (tkz.HasMoreTokens()) { unsigned long ln = 0; if (tkz.GetNextToken().ToULong(&ln)) bmklns.push_back((size_t)ln); } m_filevec.push_back(FileDesc(file, bmklns)); } }
bool IdentifierBinaryTree::addIdentifier(Identifier *id, int lineNum) { bool success = false; LineNumberList *listItem = new LineNumberList(); listItem->setLineNumber(lineNum); if (getTreeRoot() == NULL) { setTreeRoot(tok); tok->addToLineNumberList(listItem); success = true; } else { string tokenName = tok->getTokenString(); Token *parentNode = getTreeRoot(); string treeNodeName; int stringComparison; while (parentNode != NULL) { treeNodeName = parentNode->getTokenString(); stringComparison = tokenName.compare(treeNodeName); if (stringComparison == 0) { //They are the same identifier token we just need to add a new line number to the list. parentNode->addToLineNumberList(listItem); parentNode = NULL; //Exit the loop delete tok; //We won't need tok and it won't be deleted in main. success = true; } else if (stringComparison < 0) { //Go to the left. if (parentNode->getLeftChild() == NULL) { //Add tok to the left tok->addToLineNumberList(listItem); parentNode->setLeftChild(tok); parentNode = NULL; success = true; } else { parentNode = parentNode->getLeftChild(); } } else { //Go to the right. if (parentNode->getRightChild() == NULL) { //Add tok to the right tok->addToLineNumberList(listItem); parentNode->setRightChild(tok); parentNode = NULL; success = true; } else { parentNode = parentNode->getRightChild(); } } } } return success; }