Пример #1
0
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;
    }
}
Пример #2
0
Identifier::~Identifier()
{

    LineNumberList *root = getLineNumberList();
    LineNumberList *tmp = root;
    
    while (root != NULL)
    {
        tmp = tmp->getNextLineNumber();
        delete root;
        root = tmp;
    }
}
Пример #3
0
void Identifier::addToLineNumberList(LineNumberList *listItem)
{
	    LineNumberList *tmp = getLineNumberList();
    
    if (tmp == NULL)
    {
        list = listItem;
    }
    else
    {
        while (tmp->getNextLineNumber() != NULL)
        {
            tmp = tmp->getNextLineNumber();
        }
        tmp->setNextLineNumber(listItem);
	}
}
Пример #4
0
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);
    }
}
Пример #5
0
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());
	}
}
Пример #6
0
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));
	}
}
Пример #7
0
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;
}