⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfamatrix.cpp

📁 正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字
💻 CPP
字号:
#include "DfaMatrix.h"

DfaMatrix::DfaMatrix()
{
	StatusSize=0;
	CharLinkSize=0;
	Final=0;
}

DfaMatrix::DfaMatrix(const int TempStatusSize,const int TempCharLinkSize)
{
	New(TempStatusSize, TempCharLinkSize);
}

void DfaMatrix::New()
{
	Data.New(StatusSize+1, CharLinkSize+1);
	Data.Initialize(Epsilon);

	Final=new bool[StatusSize+1];
	for (int i=0; i<=StatusSize; ++i)
		Final[i]=0;
}

void DfaMatrix::New(const int TempStatusSize,const int TempCharLinkSize)
{
	StatusSize=TempStatusSize;
	CharLinkSize=TempCharLinkSize;
	New();
}

void DfaMatrix::GetDfaMatrix()
{
	Node<DfaEdgeBase*>* Temp_AllEdge=DfaEdgeBase::AllEdge.GetHead();
	while (Temp_AllEdge)
	{
		//SetFinal
		if (Temp_AllEdge->Data->From->FinalStatus)
			Final[Temp_AllEdge->Data->From->Data.Number]=1;
		else if (Temp_AllEdge->Data->To->FinalStatus)
			Final[Temp_AllEdge->Data->To->Data.Number]=1;

		//SetData
		int FromStatusNumber=Temp_AllEdge->Data->From->Data.Number;
		int ToStatusNumber=Temp_AllEdge->Data->To->Data.Number;
		Node<int>* TempNode_MatchContent=Temp_AllEdge->Data->Data.Data.GetHead();
		while (TempNode_MatchContent)
		{
			Data(FromStatusNumber, TempNode_MatchContent->Data)=ToStatusNumber;
			TempNode_MatchContent=TempNode_MatchContent->Next;
		}
		Temp_AllEdge=Temp_AllEdge->Next;
	}
}

void DfaMatrix::Print()
{
	cout<<"DfaMatrix:"<<endl;
	for (int i=0; i<=StatusSize; ++i)
	{
		cout<<"DfaStatus "<<i;
		if (Final[i])
			cout<<" (final)";
		cout<<" : ";
		for (int j=0; j<=CharLinkSize; ++j)
			if (Data(i,j)!=0)
				cout<<j<<" -> "<<Data(i,j)<<" | ";
		cout<<endl;
	}
}

DfaMatrix::~DfaMatrix()
{
	Data.Release();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -