int main()
{
	std::string strAlphabet;
	std::string strRegex;
	std::string strPostfixRegex;
	std::vector<std::string> vecAlphabet;

	regexTree = NULL;

	// read the alphabet
	getline(inFile, strAlphabet);
	TokenizeAlphabetString(strAlphabet, vecAlphabet);

	// read the Regex
	getline(inFile, strRegex);
	TransformToPostfixForm(strRegex, strPostfixRegex);

	vecAlphabet.push_back("#");

	CreateRegexTree(strPostfixRegex);

	nrGlobal = 0;
	setLeafNodesOrderNumber(regexTree);

	SDR(regexTree);

	PrintFollowPosMatrix();

	CreateDFA(vecAlphabet);

	PrintDFA();

	system("pause");
}
BOOL CDFA::ConstructDFA()
{
    BOOL bRet = FALSE;
    CHECK_BOOL ( CreateSyntaxTree() );
    CHECK_BOOL ( m_pSyntaxNode->CalculateAllFunction() );
    m_pSyntaxNode->ShowAllFunction(m_pSyntaxNode);
    CHECK_BOOL ( CreateDFA(m_pSyntaxNode) );
    CHECK_BOOL ( MinimizeDFA(m_lstSet.size(), m_lstNodeRelation, 
                             m_setAcceptingIdx, m_lstFinalSet) );

    assert(m_lstFinalSet.size() <= m_lstSet.size());

    bRet = TRUE;
Exit0:
    return bRet;
}